bool CPictureThumbLoader::LoadItem(CFileItem* pItem) { if (pItem->m_bIsShareOrDrive) return true; if (pItem->IsParentFolder()) return true; if (pItem->HasThumbnail() && m_regenerateThumbs) { CTextureCache::Get().ClearCachedImage(pItem->GetThumbnailImage()); CTextureDatabase db; if (db.Open()) db.ClearTextureForPath(pItem->GetPath(), "thumb"); pItem->SetThumbnailImage(""); } CStdString thumb; if (pItem->IsPicture() && !pItem->IsZIP() && !pItem->IsRAR() && !pItem->IsCBZ() && !pItem->IsCBR() && !pItem->IsPlayList()) { // load the thumb from the image file thumb = pItem->HasThumbnail() ? pItem->GetThumbnailImage() : CTextureCache::GetWrappedThumbURL(pItem->GetPath()); } else if (pItem->IsVideo() && !pItem->IsZIP() && !pItem->IsRAR() && !pItem->IsCBZ() && !pItem->IsCBR() && !pItem->IsPlayList()) { // video thumb = pItem->GetCachedVideoThumb(); if (!CFile::Exists(thumb)) { CStdString strPath, strFileName; URIUtils::Split(thumb, strPath, strFileName); CStdString autoThumb = strPath + "auto-" + strFileName; // this is abit of a hack to avoid loading zero sized images // which we know will fail. They will just display empty image // we should really have some way for the texture loader to // do fallbacks to default images for a failed image instead if (CFile::Exists(autoThumb)) { thumb = autoThumb; } else if (g_guiSettings.GetBool("myvideos.extractthumb") && g_guiSettings.GetBool("myvideos.extractflags")) { CFileItem item(*pItem); CThumbExtractor* extract = new CThumbExtractor(item, pItem->GetPath(), true, autoThumb); AddJob(extract); thumb.clear(); } } } else if (!pItem->HasThumbnail()) { // folder, zip, cbz, rar, cbr, playlist may have a previously cached image thumb = GetCachedImage(*pItem, "thumb"); } if (!thumb.IsEmpty()) { CTextureCache::Get().BackgroundCacheImage(thumb); pItem->SetThumbnailImage(thumb); } pItem->FillInDefaultIcon(); return true; }
bool CPictureThumbLoader::LoadItem(CFileItem* pItem) { if (pItem->m_bIsShareOrDrive) return true; if (pItem->IsParentFolder()) return true; if (pItem->HasThumbnail() && m_regenerateThumbs) { CTextureCache::Get().ClearCachedImage(pItem->GetThumbnailImage()); CTextureDatabase db; if (db.Open()) db.ClearTextureForPath(pItem->GetPath(), "thumb"); pItem->SetThumbnailImage(""); } CStdString thumb; if (pItem->IsPicture() && !pItem->IsZIP() && !pItem->IsRAR() && !pItem->IsCBZ() && !pItem->IsCBR() && !pItem->IsPlayList()) { // load the thumb from the image file thumb = pItem->HasThumbnail() ? pItem->GetThumbnailImage() : CTextureCache::GetWrappedThumbURL(pItem->GetPath()); } else if (pItem->IsVideo() && !pItem->IsZIP() && !pItem->IsRAR() && !pItem->IsCBZ() && !pItem->IsCBR() && !pItem->IsPlayList()) { // video if (!CVideoThumbLoader::FillThumb(*pItem)) { CStdString thumbURL = CVideoThumbLoader::GetEmbeddedThumbURL(*pItem); CStdString cachedThumb = CTextureCache::Get().GetCachedImage(thumbURL); if (!cachedThumb.IsEmpty()) { thumb = thumbURL; } else if (g_guiSettings.GetBool("myvideos.extractthumb") && g_guiSettings.GetBool("myvideos.extractflags")) { CFileItem item(*pItem); CThumbExtractor* extract = new CThumbExtractor(item, pItem->GetPath(), true, thumbURL); AddJob(extract); thumb.clear(); } } } else if (!pItem->HasThumbnail()) { // folder, zip, cbz, rar, cbr, playlist may have a previously cached image thumb = GetCachedImage(*pItem, "thumb"); } if (!thumb.IsEmpty()) { CTextureCache::Get().BackgroundCacheImage(thumb); pItem->SetThumbnailImage(thumb); } pItem->FillInDefaultIcon(); return true; }