50 #include <nsServiceManagerUtils.h>
61 static PRLogModuleInfo* gLog = PR_NewLogModule(
"sbTagLibChannelFileIOManager");
62 #define TRACE(args) PR_LOG(gLog, PR_LOG_DEBUG, args)
63 #define LOG(args) PR_LOG(gLog, PR_LOG_WARN, args)
95 const nsACString &aChannelID,
98 nsAutoPtr<sbTagLibChannelFileIOManager::Channel> pChannel;
102 NS_ENSURE_FALSE(aChannelID.IsEmpty(), NS_ERROR_INVALID_ARG);
103 NS_ENSURE_ARG_POINTER(aChannel);
106 pChannel =
new sbTagLibChannelFileIOManager::Channel(aChannel);
107 NS_ENSURE_TRUE(pChannel, NS_ERROR_OUT_OF_MEMORY);
110 success = mChannelMap.Put(aChannelID, pChannel);
111 NS_ENSURE_TRUE(success, NS_ERROR_FAILURE);
124 NS_IMETHODIMP sbTagLibChannelFileIOManager::RemoveChannel(
125 const nsACString &aChannelID)
128 NS_ENSURE_FALSE(aChannelID.IsEmpty(), NS_ERROR_INVALID_ARG);
131 mChannelMap.Remove(aChannelID);
144 NS_IMETHODIMP sbTagLibChannelFileIOManager::GetChannel(
145 const nsACString &aChannelID,
148 sbTagLibChannelFileIOManager::Channel *pChannel;
152 NS_ENSURE_FALSE(aChannelID.IsEmpty(), NS_ERROR_INVALID_ARG);
153 NS_ENSURE_ARG_POINTER(_retval);
156 rv = GetChannel(aChannelID, &pChannel);
161 NS_ADDREF(*_retval = pChannel->pSeekableChannel);
178 NS_IMETHODIMP sbTagLibChannelFileIOManager::GetChannelSize(
179 const nsACString &aChannelID,
182 sbTagLibChannelFileIOManager::Channel *pChannel;
187 NS_ENSURE_FALSE(aChannelID.IsEmpty(), NS_ERROR_INVALID_ARG);
188 NS_ENSURE_ARG_POINTER(_retval);
191 rv = GetChannel(aChannelID, &pChannel);
192 NS_ENSURE_SUCCESS(rv, rv);
193 rv = pChannel->pSeekableChannel->GetSize(&size);
194 NS_ENSURE_SUCCESS(rv, rv);
210 NS_IMETHODIMP sbTagLibChannelFileIOManager::GetChannelRestart(
211 const nsACString &aChannelID,
214 sbTagLibChannelFileIOManager::Channel *pChannel;
219 NS_ENSURE_FALSE(aChannelID.IsEmpty(), NS_ERROR_INVALID_ARG);
220 NS_ENSURE_ARG_POINTER(_retval);
223 rv = GetChannel(aChannelID, &pChannel);
224 NS_ENSURE_SUCCESS(rv, rv);
225 restart = pChannel->restart;
241 NS_IMETHODIMP sbTagLibChannelFileIOManager::SetChannelRestart(
242 const nsACString &aChannelID,
245 sbTagLibChannelFileIOManager::Channel *pChannel;
249 NS_ENSURE_FALSE(aChannelID.IsEmpty(), NS_ERROR_INVALID_ARG);
252 rv = GetChannel(aChannelID, &pChannel);
253 NS_ENSURE_SUCCESS(rv, rv);
254 pChannel->restart = aRestart;
301 success = mChannelMap.Init();
302 NS_ENSURE_TRUE(success, NS_ERROR_FAILURE);
321 sbTagLibChannelFileIOManager::Channel::Channel(
322 nsCOMPtr<sbISeekableChannel> apSeekableChannel)
324 pSeekableChannel(apSeekableChannel),
327 MOZ_COUNT_CTOR(sbTagLibChannelFileIOManager::Channel);
328 TRACE((
"sbTagLibChannelFileIOManager::Channel[0x%.8x] - ctor",
this));
339 sbTagLibChannelFileIOManager::Channel::~Channel()
341 MOZ_COUNT_DTOR(sbTagLibChannelFileIOManager::Channel);
342 TRACE((
"sbTagLibChannelFileIOManager::Channel[0x%.8x] - dtor",
this));
360 nsresult sbTagLibChannelFileIOManager::GetChannel(
361 const nsACString &aChannelID,
362 sbTagLibChannelFileIOManager::Channel
365 sbTagLibChannelFileIOManager::Channel *pChannel;
369 NS_ASSERTION(!aChannelID.IsEmpty(),
"aChannelID is empty");
370 NS_ASSERTION(appChannel,
"appChannel is null");
373 success = mChannelMap.Get(aChannelID, &pChannel);
375 return (NS_ERROR_NOT_AVAILABLE);
378 *appChannel = pChannel;
A service for providing sbISeekableChannel file IO support in TagLib.
virtual ~sbTagLibChannelFileIOManager()
A seekable wrapper for an nsIChannel.
NS_IMPL_THREADSAFE_ISUPPORTS1(sbTagLibChannelFileIOManager, sbITagLibChannelFileIOManager) NS_IMETHODIMP sbTagLibChannelFileIOManager
Add an sbISeekableChannel to be used for TagLib file IO.
NS_DECL_ISUPPORTS NS_DECL_SBITAGLIBCHANNELFILEIOMANAGER sbTagLibChannelFileIOManager()