本文整理汇总了C++中CFileItemPtr::HasArt方法的典型用法代码示例。如果您正苦于以下问题:C++ CFileItemPtr::HasArt方法的具体用法?C++ CFileItemPtr::HasArt怎么用?C++ CFileItemPtr::HasArt使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CFileItemPtr
的用法示例。
在下文中一共展示了CFileItemPtr::HasArt方法的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Save
bool CFavouritesDirectory::Save(const CFileItemList &items)
{
std::string favourites;
CXBMCTinyXML doc;
TiXmlElement xmlRootElement("favourites");
TiXmlNode *rootNode = doc.InsertEndChild(xmlRootElement);
if (!rootNode) return false;
for (int i = 0; i < items.Size(); i++)
{
const CFileItemPtr item = items[i];
TiXmlElement favNode("favourite");
favNode.SetAttribute("name", item->GetLabel().c_str());
if (item->HasArt("thumb"))
favNode.SetAttribute("thumb", item->GetArt("thumb").c_str());
TiXmlText execute(item->GetPath());
favNode.InsertEndChild(execute);
rootNode->InsertEndChild(favNode);
}
favourites = URIUtils::AddFileToFolder(CProfilesManager::GetInstance().GetProfileUserDataFolder(), "favourites.xml");
return doc.SaveFile(favourites);
}
示例2: GetDirectory
bool CVideoDatabaseDirectory::GetDirectory(const CStdString& strPath, CFileItemList &items)
{
CStdString path = CLegacyPathTranslation::TranslateVideoDbPath(strPath);
auto_ptr<CDirectoryNode> pNode(CDirectoryNode::ParseURL(path));
if (!pNode.get())
return false;
bool bResult = pNode->GetChilds(items);
for (int i=0;i<items.Size();++i)
{
CFileItemPtr item = items[i];
if (item->m_bIsFolder && !item->HasIcon() && !item->HasArt("thumb"))
{
CStdString strImage = GetIcon(item->GetPath());
if (!strImage.IsEmpty() && g_TextureManager.HasTexture(strImage))
item->SetIconImage(strImage);
}
}
items.SetLabel(pNode->GetLocalizedName());
return bResult;
}
示例3: ByFolderThumbPercentage
// returns true if:
// 1. Have more than 75% folders and
// 2. Have more than percent folders with thumbs
bool CAutoSwitch::ByFolderThumbPercentage(bool hideParentDirItems, int percent, const CFileItemList &vecItems)
{
int numItems = vecItems.Size();
if (!hideParentDirItems)
numItems--;
if (numItems <= 0) return false;
int fileCount = vecItems.GetFileCount();
if (fileCount > 0.25f * numItems) return false;
int numThumbs = 0;
for (int i = 0; i < vecItems.Size(); i++)
{
const CFileItemPtr item = vecItems[i];
if (item->m_bIsFolder && item->HasArt("thumb"))
{
numThumbs++;
if (numThumbs >= 0.01f * percent * (numItems - fileCount))
return true;
}
}
return false;
}
示例4: LoadItemLookup
bool CMusicInfoLoader::LoadItemLookup(CFileItem* pItem)
{
if (m_pProgressCallback && !pItem->m_bIsFolder)
m_pProgressCallback->SetProgressAdvance();
if (pItem->m_bIsFolder || pItem->IsPlayList() || pItem->IsNFO() || pItem->IsInternetStream())
return false;
if (!pItem->HasMusicInfoTag() || !pItem->GetMusicInfoTag()->Loaded())
{
// first check the cached item
CFileItemPtr mapItem = (*m_mapFileItems)[pItem->GetPath()];
if (mapItem && mapItem->m_dateTime==pItem->m_dateTime && mapItem->HasMusicInfoTag() && mapItem->GetMusicInfoTag()->Loaded())
{ // Query map if we previously cached the file on HD
*pItem->GetMusicInfoTag() = *mapItem->GetMusicInfoTag();
if (mapItem->HasArt("thumb"))
pItem->SetArt("thumb", mapItem->GetArt("thumb"));
}
else
{
std::string strPath = URIUtils::GetDirectory(pItem->GetPath());
URIUtils::AddSlashAtEnd(strPath);
if (strPath!=m_strPrevPath)
{
// The item is from another directory as the last one,
// query the database for the new directory...
m_musicDatabase.GetSongsByPath(strPath, m_songsMap);
m_databaseHits++;
}
MAPSONGS::iterator it = m_songsMap.find(pItem->GetPath());
if (it != m_songsMap.end())
{ // Have we loaded this item from database before
pItem->GetMusicInfoTag()->SetSong(it->second);
pItem->GetMusicInfoTag()->SetCueSheet(m_musicDatabase.LoadCuesheet(it->second.strFileName));
if (!it->second.strThumb.empty())
pItem->SetArt("thumb", it->second.strThumb);
}
else if (pItem->IsMusicDb())
{ // a music db item that doesn't have tag loaded - grab details from the database
XFILE::MUSICDATABASEDIRECTORY::CQueryParams param;
XFILE::MUSICDATABASEDIRECTORY::CDirectoryNode::GetDatabaseInfo(pItem->GetPath(),param);
CSong song;
if (m_musicDatabase.GetSong(param.GetSongId(), song))
{
pItem->GetMusicInfoTag()->SetSong(song);
if (!song.strThumb.empty())
pItem->SetArt("thumb", song.strThumb);
}
}
else if (CServiceBroker::GetSettings().GetBool(CSettings::SETTING_MUSICFILES_USETAGS) || pItem->IsCDDA())
{ // Nothing found, load tag from file,
// always try to load cddb info
// get correct tag parser
std::unique_ptr<IMusicInfoTagLoader> pLoader (CMusicInfoTagLoaderFactory::CreateLoader(*pItem));
if (NULL != pLoader.get())
// get tag
pLoader->Load(pItem->GetPath(), *pItem->GetMusicInfoTag());
m_tagReads++;
}
m_strPrevPath = strPath;
}
}
return true;
}
示例5: UpdateVideo
bool CRecentlyAddedJob::UpdateVideo()
{
CGUIWindow* home = g_windowManager.GetWindow(WINDOW_HOME);
if ( home == NULL )
return false;
CLog::Log(LOGDEBUG, "CRecentlyAddedJob::UpdateVideos() - Running RecentlyAdded home screen update");
int i = 0;
CFileItemList items;
CVideoDatabase videodatabase;
CVideoThumbLoader loader;
loader.Initialize();
videodatabase.Open();
if (videodatabase.GetRecentlyAddedMoviesNav("videodb://4/", items, NUM_ITEMS))
{
for (; i < items.Size(); ++i)
{
CFileItemPtr item = items.Get(i);
CStdString value;
CStdString strRating;
value.Format("%i", i + 1);
strRating.Format("%.1f", item->GetVideoInfoTag()->m_fRating);
home->SetProperty("LatestMovie." + value + ".Title" , item->GetLabel());
home->SetProperty("LatestMovie." + value + ".Rating" , strRating);
home->SetProperty("LatestMovie." + value + ".Year" , item->GetVideoInfoTag()->m_iYear);
home->SetProperty("LatestMovie." + value + ".Plot" , item->GetVideoInfoTag()->m_strPlot);
home->SetProperty("LatestMovie." + value + ".RunningTime" , item->GetVideoInfoTag()->GetDuration() / 60);
home->SetProperty("LatestMovie." + value + ".Path" , item->GetVideoInfoTag()->m_strFileNameAndPath);
home->SetProperty("LatestMovie." + value + ".Trailer" , item->GetVideoInfoTag()->m_strTrailer);
if (!item->HasArt("thumb"))
loader.LoadItem(item.get());
home->SetProperty("LatestMovie." + value + ".Thumb" , item->GetArt("thumb"));
home->SetProperty("LatestMovie." + value + ".Fanart" , item->GetArt("fanart"));
}
}
for (; i < NUM_ITEMS; ++i)
{
CStdString value;
value.Format("%i", i + 1);
home->SetProperty("LatestMovie." + value + ".Title" , "");
home->SetProperty("LatestMovie." + value + ".Thumb" , "");
home->SetProperty("LatestMovie." + value + ".Rating" , "");
home->SetProperty("LatestMovie." + value + ".Year" , "");
home->SetProperty("LatestMovie." + value + ".Plot" , "");
home->SetProperty("LatestMovie." + value + ".RunningTime" , "");
home->SetProperty("LatestMovie." + value + ".Path" , "");
home->SetProperty("LatestMovie." + value + ".Trailer" , "");
home->SetProperty("LatestMovie." + value + ".Fanart" , "");
}
i = 0;
CFileItemList TVShowItems;
if (videodatabase.GetRecentlyAddedEpisodesNav("videodb://5/", TVShowItems, NUM_ITEMS))
{
for (; i < TVShowItems.Size(); ++i)
{
CFileItemPtr item = TVShowItems.Get(i);
int EpisodeSeason = item->GetVideoInfoTag()->m_iSeason;
int EpisodeNumber = item->GetVideoInfoTag()->m_iEpisode;
CStdString EpisodeNo;
CStdString value;
CStdString strRating;
EpisodeNo.Format("s%02de%02d", EpisodeSeason, EpisodeNumber);
value.Format("%i", i + 1);
strRating.Format("%.1f", item->GetVideoInfoTag()->m_fRating);
CFileItem show(item->GetVideoInfoTag()->m_strShowPath, true);
home->SetProperty("LatestEpisode." + value + ".ShowTitle" , item->GetVideoInfoTag()->m_strShowTitle);
home->SetProperty("LatestEpisode." + value + ".EpisodeTitle" , item->GetVideoInfoTag()->m_strTitle);
home->SetProperty("LatestEpisode." + value + ".Rating" , strRating);
home->SetProperty("LatestEpisode." + value + ".Plot" , item->GetVideoInfoTag()->m_strPlot);
home->SetProperty("LatestEpisode." + value + ".EpisodeNo" , EpisodeNo);
home->SetProperty("LatestEpisode." + value + ".EpisodeSeason" , EpisodeSeason);
home->SetProperty("LatestEpisode." + value + ".EpisodeNumber" , EpisodeNumber);
home->SetProperty("LatestEpisode." + value + ".Path" , item->GetVideoInfoTag()->m_strFileNameAndPath);
if (!item->HasArt("thumb"))
loader.LoadItem(item.get());
std::string seasonThumb;
if (item->GetVideoInfoTag()->m_iIdSeason > 0)
seasonThumb = videodatabase.GetArtForItem(item->GetVideoInfoTag()->m_iIdSeason, "season", "thumb");
home->SetProperty("LatestEpisode." + value + ".Thumb" , item->GetArt("thumb"));
home->SetProperty("LatestEpisode." + value + ".ShowThumb" , item->GetArt("tvshow.thumb"));
home->SetProperty("LatestEpisode." + value + ".SeasonThumb" , seasonThumb);
home->SetProperty("LatestEpisode." + value + ".Fanart" , item->GetArt("fanart"));
}
}
for (; i < NUM_ITEMS; ++i)
{
//.........这里部分代码省略.........
示例6: GetField
bool CFileItemHandler::GetField(const std::string &field, const CVariant &info, const CFileItemPtr &item, CVariant &result, bool &fetchedArt, CThumbLoader *thumbLoader /* = NULL */)
{
if (result.isMember(field) && !result[field].empty())
return true;
// overwrite serialized values
if (item)
{
if (field == "mimetype" && item->GetMimeType().empty())
{
item->FillInMimeType(false);
result[field] = item->GetMimeType();
return true;
}
}
// check for serialized values
if (info.isMember(field) && !info[field].isNull())
{
result[field] = info[field];
return true;
}
// check if the field requires special handling
if (item)
{
if (item->IsAlbum())
{
if (field == "albumlabel")
{
result[field] = item->GetProperty("album_label");
return true;
}
if (item->HasProperty("album_" + field + "_array"))
{
result[field] = item->GetProperty("album_" + field + "_array");
return true;
}
if (item->HasProperty("album_" + field))
{
result[field] = item->GetProperty("album_" + field);
return true;
}
}
if (item->HasProperty("artist_" + field + "_array"))
{
result[field] = item->GetProperty("artist_" + field + "_array");
return true;
}
if (item->HasProperty("artist_" + field))
{
result[field] = item->GetProperty("artist_" + field);
return true;
}
if (field == "art")
{
if (thumbLoader != NULL && item->GetArt().size() <= 0 && !fetchedArt &&
((item->HasVideoInfoTag() && item->GetVideoInfoTag()->m_iDbId > -1) || (item->HasMusicInfoTag() && item->GetMusicInfoTag()->GetDatabaseId() > -1)))
{
thumbLoader->FillLibraryArt(*item);
fetchedArt = true;
}
CGUIListItem::ArtMap artMap = item->GetArt();
CVariant artObj(CVariant::VariantTypeObject);
for (CGUIListItem::ArtMap::const_iterator artIt = artMap.begin(); artIt != artMap.end(); ++artIt)
{
if (!artIt->second.empty())
artObj[artIt->first] = CTextureCache::GetWrappedImageURL(artIt->second);
}
result["art"] = artObj;
return true;
}
if (field == "thumbnail")
{
if (thumbLoader != NULL && !item->HasArt("thumb") && !fetchedArt &&
((item->HasVideoInfoTag() && item->GetVideoInfoTag()->m_iDbId > -1) || (item->HasMusicInfoTag() && item->GetMusicInfoTag()->GetDatabaseId() > -1)))
{
thumbLoader->FillLibraryArt(*item);
fetchedArt = true;
}
else if (item->HasPictureInfoTag() && !item->HasArt("thumb"))
item->SetArt("thumb", CTextureCache::GetWrappedThumbURL(item->GetPath()));
if (item->HasArt("thumb"))
result["thumbnail"] = CTextureCache::GetWrappedImageURL(item->GetArt("thumb"));
else
result["thumbnail"] = "";
return true;
}
if (field == "fanart")
{
if (thumbLoader != NULL && !item->HasArt("fanart") && !fetchedArt &&
((item->HasVideoInfoTag() && item->GetVideoInfoTag()->m_iDbId > -1) || (item->HasMusicInfoTag() && item->GetMusicInfoTag()->GetDatabaseId() > -1)))
//.........这里部分代码省略.........
示例7: OnContextButton
bool CGUIDialogContextMenu::OnContextButton(const std::string &type, const CFileItemPtr& item, CONTEXT_BUTTON button)
{
// buttons that are available on both sources and autosourced items
if (!item) return false;
// the rest of the operations require a valid share
CMediaSource *share = GetShare(type, item.get());
if (!share) return false;
switch (button)
{
case CONTEXT_BUTTON_EDIT_SOURCE:
if (CProfilesManager::GetInstance().IsMasterProfile())
{
if (!g_passwordManager.IsMasterLockUnlocked(true))
return false;
}
else if (!g_passwordManager.IsProfileLockUnlocked())
return false;
return CGUIDialogMediaSource::ShowAndEditMediaSource(type, *share);
case CONTEXT_BUTTON_REMOVE_SOURCE:
{
if (CProfilesManager::GetInstance().IsMasterProfile())
{
if (!g_passwordManager.IsMasterLockUnlocked(true))
return false;
}
else
{
if (!CProfilesManager::GetInstance().GetCurrentProfile().canWriteSources() && !g_passwordManager.IsMasterLockUnlocked(false))
return false;
if (CProfilesManager::GetInstance().GetCurrentProfile().canWriteSources() && !g_passwordManager.IsProfileLockUnlocked())
return false;
}
// prompt user if they want to really delete the source
if (!CGUIDialogYesNo::ShowAndGetInput(CVariant{751}, CVariant{750}))
return false;
// check default before we delete, as deletion will kill the share object
std::string defaultSource(GetDefaultShareNameByType(type));
if (!defaultSource.empty())
{
if (share->strName == defaultSource)
ClearDefault(type);
}
CMediaSourceSettings::GetInstance().DeleteSource(type, share->strName, share->strPath);
return true;
}
case CONTEXT_BUTTON_SET_DEFAULT:
if (CProfilesManager::GetInstance().GetCurrentProfile().canWriteSources() && !g_passwordManager.IsProfileLockUnlocked())
return false;
else if (!g_passwordManager.IsMasterLockUnlocked(true))
return false;
// make share default
SetDefault(type, share->strName);
return true;
case CONTEXT_BUTTON_CLEAR_DEFAULT:
if (CProfilesManager::GetInstance().GetCurrentProfile().canWriteSources() && !g_passwordManager.IsProfileLockUnlocked())
return false;
else if (!g_passwordManager.IsMasterLockUnlocked(true))
return false;
// remove share default
ClearDefault(type);
return true;
case CONTEXT_BUTTON_SET_THUMB:
{
if (CProfilesManager::GetInstance().GetCurrentProfile().canWriteSources() && !g_passwordManager.IsProfileLockUnlocked())
return false;
else if (!g_passwordManager.IsMasterLockUnlocked(true))
return false;
// setup our thumb list
CFileItemList items;
// add the current thumb, if available
if (!share->m_strThumbnailImage.empty())
{
CFileItemPtr current(new CFileItem("thumb://Current", false));
current->SetArt("thumb", share->m_strThumbnailImage);
current->SetLabel(g_localizeStrings.Get(20016));
items.Add(current);
}
else if (item->HasArt("thumb"))
{ // already have a thumb that the share doesn't know about - must be a local one, so we mayaswell reuse it.
CFileItemPtr current(new CFileItem("thumb://Current", false));
current->SetArt("thumb", item->GetArt("thumb"));
current->SetLabel(g_localizeStrings.Get(20016));
items.Add(current);
}
// see if there's a local thumb for this item
std::string folderThumb = item->GetFolderThumb();
if (XFILE::CFile::Exists(folderThumb))
{
CFileItemPtr local(new CFileItem("thumb://Local", false));
local->SetArt("thumb", folderThumb);
local->SetLabel(g_localizeStrings.Get(20017));
//.........这里部分代码省略.........
示例8: UpdateVideo
bool CHomeShelfJob::UpdateVideo()
{
CGUIWindow* home = g_windowManager.GetWindow(WINDOW_HOME);
if ( home == NULL )
return false;
CLog::Log(LOGDEBUG, "CHomeShelfJob::UpdateVideos() - Running HomeShelf screen update");
CVideoDatabase videodatabase;
videodatabase.Open();
CFileItemList homeShelfTV;
CFileItemList homeShelfMovies;
if (CSettings::GetInstance().GetBool(CSettings::SETTING_VIDEOLIBRARY_SHOWINPROGRESS))
{
if (videodatabase.HasContent())
{
CVideoThumbLoader loader;
XFILE::CDirectory::GetDirectory("library://video/inprogressmovies.xml/", homeShelfMovies);
XFILE::CDirectory::GetDirectory("library://video/inprogressepisodes.xml/", homeShelfTV);
homeShelfMovies.Sort(SortByLastPlayed, SortOrderDescending);
homeShelfTV.Sort(SortByLastPlayed, SortOrderDescending);
for (int i = 0; i < homeShelfMovies.Size() && i < NUM_ITEMS; i++)
{
CFileItemPtr item = homeShelfMovies.Get(i);
item->SetProperty("ItemType", g_localizeStrings.Get(20386));
if (!item->HasArt("thumb"))
{
loader.LoadItem(item.get());
}
m_HomeShelfMovies->Add(item);
}
for (int i = 0; i < homeShelfTV.Size() && i < NUM_ITEMS; i++)
{
CFileItemPtr item = homeShelfTV.Get(i);
std::string seasonEpisode = StringUtils::Format("S%02iE%02i", item->GetVideoInfoTag()->m_iSeason, item->GetVideoInfoTag()->m_iEpisode);
item->SetProperty("SeasonEpisode", seasonEpisode);
item->SetProperty("ItemType", g_localizeStrings.Get(20387));
if (!item->HasArt("thumb"))
{
loader.LoadItem(item.get());
}
if (!item->HasArt("tvshow.thumb"))
{
item->SetArt("tvshow.thumb", item->GetArt("season.poster"));
}
m_HomeShelfTV->Add(item);
}
}
// get InProgress TVSHOWS and MOVIES from any enabled service
CServicesManager::GetInstance().GetAllInProgressShows(*m_HomeShelfTV, NUM_ITEMS);
CServicesManager::GetInstance().GetAllInProgressMovies(*m_HomeShelfMovies, NUM_ITEMS);
}
else
{
if (videodatabase.HasContent())
{
std::string path;
CVideoThumbLoader loader;
loader.OnLoaderStart();
path = g_advancedSettings.m_recentlyAddedMoviePath;
if (g_advancedSettings.m_iVideoLibraryRecentlyAddedUnseen)
{
CVideoDbUrl url;
url.FromString(path);
url.AddOption("filter", "{\"type\":\"movies\", \"rules\":[{\"field\":\"playcount\", \"operator\":\"is\", \"value\":\"0\"}]}");
path = url.ToString();
}
videodatabase.GetRecentlyAddedMoviesNav(path, homeShelfMovies, NUM_ITEMS);
for (int i = 0; i < homeShelfMovies.Size(); i++)
{
CFileItemPtr item = homeShelfMovies.Get(i);
item->SetProperty("ItemType", g_localizeStrings.Get(20386));
if (!item->HasArt("thumb"))
{
loader.LoadItem(item.get());
}
m_HomeShelfMovies->Add(item);
}
path = g_advancedSettings.m_recentlyAddedEpisodePath;
if (g_advancedSettings.m_iVideoLibraryRecentlyAddedUnseen)
{
CVideoDbUrl url;
url.FromString(path);
url.AddOption("filter", "{\"type\":\"episodes\", \"rules\":[{\"field\":\"playcount\", \"operator\":\"is\", \"value\":\"0\"}]}");
path = url.ToString();
}
videodatabase.GetRecentlyAddedEpisodesNav(path, homeShelfTV, NUM_ITEMS);
std::string seasonThumb;
for (int i = 0; i < homeShelfTV.Size(); i++)
{
CFileItemPtr item = homeShelfTV.Get(i);
std::string seasonEpisode = StringUtils::Format("S%02iE%02i", item->GetVideoInfoTag()->m_iSeason, item->GetVideoInfoTag()->m_iEpisode);
item->SetProperty("SeasonEpisode", seasonEpisode);
//.........这里部分代码省略.........
示例9: LoadItemLookup
bool CMusicInfoLoader::LoadItemLookup(CFileItem* pItem)
{
if (m_pProgressCallback && !pItem->m_bIsFolder)
m_pProgressCallback->SetProgressAdvance();
if ((pItem->m_bIsFolder && !pItem->IsAudio()) || pItem->IsPlayList() ||
pItem->IsNFO() || pItem->IsInternetStream())
return false;
if (!pItem->HasMusicInfoTag() || !pItem->GetMusicInfoTag()->Loaded())
{
// first check the cached item
CFileItemPtr mapItem = (*m_mapFileItems)[pItem->GetPath()];
if (mapItem && mapItem->m_dateTime==pItem->m_dateTime && mapItem->HasMusicInfoTag() && mapItem->GetMusicInfoTag()->Loaded())
{ // Query map if we previously cached the file on HD
*pItem->GetMusicInfoTag() = *mapItem->GetMusicInfoTag();
if (mapItem->HasArt("thumb"))
pItem->SetArt("thumb", mapItem->GetArt("thumb"));
}
else
{
std::string strPath = URIUtils::GetDirectory(pItem->GetPath());
URIUtils::AddSlashAtEnd(strPath);
if (strPath!=m_strPrevPath)
{
// The item is from another directory as the last one,
// query the database for the new directory...
m_musicDatabase.GetSongsByPath(strPath, m_songsMap);
m_databaseHits++;
}
/* Note for songs from embedded or separate cuesheets strFileName is not unique, so only the first song from such a file
gets added to the song map. Any such songs from a cuesheet can be identified by having a non-zero offset value.
When the item we are looking up has a cue document or is a music file with a cuesheet embedded in the tags, it needs
to have the cuesheet fully processed replacing that item with items for every track etc. This is done elsewhere, as
changes to the list of items is not possible from here. This method only loads the item with the song from the database
when it maps to a single song.
*/
MAPSONGS::iterator it = m_songsMap.find(pItem->GetPath());
if (it != m_songsMap.end() && !pItem->HasCueDocument() && it->second.iStartOffset == 0 && it->second.iEndOffset == 0)
{ // Have we loaded this item from database before (and it is not a cuesheet nor has an embedded cue sheet)
pItem->GetMusicInfoTag()->SetSong(it->second);
if (!it->second.strThumb.empty())
pItem->SetArt("thumb", it->second.strThumb);
}
else if (pItem->IsMusicDb())
{ // a music db item that doesn't have tag loaded - grab details from the database
XFILE::MUSICDATABASEDIRECTORY::CQueryParams param;
XFILE::MUSICDATABASEDIRECTORY::CDirectoryNode::GetDatabaseInfo(pItem->GetPath(),param);
CSong song;
if (m_musicDatabase.GetSong(param.GetSongId(), song))
{
pItem->GetMusicInfoTag()->SetSong(song);
if (!song.strThumb.empty())
pItem->SetArt("thumb", song.strThumb);
}
}
else if (CServiceBroker::GetSettingsComponent()->GetSettings()->GetBool(CSettings::SETTING_MUSICFILES_USETAGS) || pItem->IsCDDA())
{ // Nothing found, load tag from file,
// always try to load cddb info
// get correct tag parser
std::unique_ptr<IMusicInfoTagLoader> pLoader (CMusicInfoTagLoaderFactory::CreateLoader(*pItem));
if (NULL != pLoader.get())
// get tag
pLoader->Load(pItem->GetPath(), *pItem->GetMusicInfoTag());
m_tagReads++;
}
m_strPrevPath = strPath;
}
}
return true;
}