bool CGUIDialogSongInfo::DownloadThumbnail(const CStdString &thumbFile) { // TODO: Obtain the source... CStdString source; CFileCurl http; http.Download(source, thumbFile); return true; }
void CLastFmManager::CacheTrackThumb(const int nrInitialTracksToAdd) { unsigned int start = CTimeUtils::GetTimeMS(); CSingleLock lock(m_lockCache); int iNrCachedTracks = m_RadioTrackQueue->size(); CFileCurl http; for (int i = 0; i < nrInitialTracksToAdd && i < iNrCachedTracks; i++) { CFileItemPtr item = (*m_RadioTrackQueue)[i]; if (!item->GetMusicInfoTag()->Loaded()) { //cache albumthumb, GetThumbnailImage contains the url to cache if (item->HasThumbnail()) { CStdString coverUrl = item->GetThumbnailImage(); CStdString crcFile; CStdString cachedFile; CStdString thumbFile; Crc32 crc; crc.ComputeFromLowerCase(coverUrl); crcFile.Format("%08x.tbn", (__int32)crc); URIUtils::AddFileToFolder(g_advancedSettings.m_cachePath, crcFile, cachedFile); URIUtils::AddFileToFolder(g_settings.GetLastFMThumbFolder(), crcFile, thumbFile); item->SetThumbnailImage(""); try { //download to temp, then make a thumb if (CFile::Exists(thumbFile) || (http.Download(coverUrl, cachedFile) && CPicture::CreateThumbnail(cachedFile, thumbFile))) { if (CFile::Exists(cachedFile)) CFile::Delete(cachedFile); item->SetThumbnailImage(thumbFile); } } catch(...) { CLog::Log(LOGERROR, "LastFmManager: exception while caching %s to %s.", coverUrl.c_str(), thumbFile.c_str()); } } if (!item->HasThumbnail()) { item->SetThumbnailImage("DefaultAlbumCover.png"); } item->GetMusicInfoTag()->SetLoaded(); } } CLog::Log(LOGDEBUG, "%s: Done (time: %i ms)", __FUNCTION__, (int)(CTimeUtils::GetTimeMS() - start)); }
void CDownloadQueue::Process() { CLog::Log(LOGNOTICE, "DownloadQueue ready."); CFileCurl http; bool bSuccess; while ( !m_bStop ) { while ( CDownloadQueue::Size() > 0 ) { CSingleLock lock(m_critical); // get the first item, but don't pop it from our queue // so that the download can be interrupted Command request = m_queue.front(); lock.Leave(); bool bFileRequest = request.content.length() > 0; DWORD dwSize = 0; if (bFileRequest) { CFile::Delete(request.content); bSuccess = http.Download(request.location, request.content, &dwSize); } else { bSuccess = http.Get(request.location, request.content); } // now re-grab the item as we may have cancelled our download // while we were working { CSingleLock lock2(m_critical); // open lock2 scope request = m_queue.front(); m_queue.pop(); // if the request has been cancelled our observer will be NULL if (NULL != request.observer) { try { if (bFileRequest) { request.observer->OnFileComplete(request.ticket, request.content, dwSize, bSuccess ? IDownloadQueueObserver::Succeeded : IDownloadQueueObserver::Failed ); } else { request.observer->OnContentComplete(request.ticket, request.content, bSuccess ? IDownloadQueueObserver::Succeeded : IDownloadQueueObserver::Failed ); } } catch (...) { CLog::Log(LOGERROR, "exception while updating download observer."); if (bFileRequest) { CFile::Delete(request.content); } } } } // close lock2 scope } Sleep(500); } CLog::Log(LOGNOTICE, "DownloadQueue terminated."); }