本文整理汇总了C++中CMusicDatabaseDirectory类的典型用法代码示例。如果您正苦于以下问题:C++ CMusicDatabaseDirectory类的具体用法?C++ CMusicDatabaseDirectory怎么用?C++ CMusicDatabaseDirectory使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了CMusicDatabaseDirectory类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: SaveViewState
void CGUIViewStateMusicDatabase::SaveViewState()
{
CMusicDatabaseDirectory dir;
NODE_TYPE NodeType=dir.GetDirectoryChildType(m_items.GetPath());
switch (NodeType)
{
case NODE_TYPE_ARTIST:
SaveViewToDb(m_items.GetPath(), WINDOW_MUSIC_NAV, CViewStateSettings::GetInstance().Get("musicnavartists"));
break;
case NODE_TYPE_ALBUM_COMPILATIONS:
case NODE_TYPE_ALBUM:
case NODE_TYPE_YEAR_ALBUM:
SaveViewToDb(m_items.GetPath(), WINDOW_MUSIC_NAV, CViewStateSettings::GetInstance().Get("musicnavalbums"));
break;
case NODE_TYPE_SINGLES:
case NODE_TYPE_ALBUM_COMPILATIONS_SONGS:
case NODE_TYPE_SONG:
case NODE_TYPE_YEAR_SONG:
SaveViewToDb(m_items.GetPath(), WINDOW_MUSIC_NAV, CViewStateSettings::GetInstance().Get("musicnavsongs"));
break;
default:
SaveViewToDb(m_items.GetPath(), WINDOW_MUSIC_NAV);
break;
}
}
示例2: AddSearchFolder
bool CGUIWindowMusicNav::GetDirectory(const CStdString &strDirectory, CFileItemList &items)
{
if (m_bDisplayEmptyDatabaseMessage)
return true;
if (strDirectory.empty())
AddSearchFolder();
bool bResult = CGUIWindowMusicBase::GetDirectory(strDirectory, items);
if (bResult)
{
if (items.IsPlayList())
OnRetrieveMusicInfo(items);
}
// update our content in the info manager
if (StringUtils::StartsWithNoCase(strDirectory, "videodb://"))
{
CVideoDatabaseDirectory dir;
VIDEODATABASEDIRECTORY::NODE_TYPE node = dir.GetDirectoryChildType(strDirectory);
if (node == VIDEODATABASEDIRECTORY::NODE_TYPE_TITLE_MUSICVIDEOS)
items.SetContent("musicvideos");
}
else if (StringUtils::StartsWithNoCase(strDirectory, "musicdb://"))
{
CMusicDatabaseDirectory dir;
NODE_TYPE node = dir.GetDirectoryChildType(strDirectory);
if (node == NODE_TYPE_ALBUM ||
node == NODE_TYPE_ALBUM_RECENTLY_ADDED ||
node == NODE_TYPE_ALBUM_RECENTLY_PLAYED ||
node == NODE_TYPE_ALBUM_TOP100 ||
node == NODE_TYPE_ALBUM_COMPILATIONS ||
node == NODE_TYPE_YEAR_ALBUM)
items.SetContent("albums");
else if (node == NODE_TYPE_ARTIST)
items.SetContent("artists");
else if (node == NODE_TYPE_SONG ||
node == NODE_TYPE_SONG_TOP100 ||
node == NODE_TYPE_SINGLES)
items.SetContent("songs");
else if (node == NODE_TYPE_GENRE)
items.SetContent("genres");
else if (node == NODE_TYPE_YEAR)
items.SetContent("years");
}
else if (strDirectory.Equals("special://musicplaylists/"))
items.SetContent("playlists");
else if (strDirectory.Equals("plugin://music/"))
items.SetContent("plugins");
else if (items.IsPlayList())
items.SetContent("songs");
return bResult;
}
示例3: OnInfoAll
void CGUIWindowMusicBase::OnInfoAll(int iItem, bool bCurrent)
{
CMusicDatabaseDirectory dir;
CStdString strPath = m_vecItems->GetPath();
if (bCurrent)
strPath = m_vecItems->Get(iItem)->GetPath();
if (dir.HasAlbumInfo(m_vecItems->Get(iItem)->GetPath()))
g_application.StartMusicAlbumScan(strPath);
else
g_application.StartMusicArtistScan(strPath);
}
示例4: SET_CONTROL_LABEL
void CGUIWindowMusicNav::UpdateButtons()
{
CGUIWindowMusicBase::UpdateButtons();
// Update object count
int iItems = m_vecItems->Size();
if (iItems)
{
// check for parent dir and "all" items
// should always be the first two items
for (int i = 0; i <= (iItems>=2 ? 1 : 0); i++)
{
CFileItemPtr pItem = m_vecItems->Get(i);
if (pItem->IsParentFolder()) iItems--;
if (pItem->m_strPath.Left(4).Equals("/-1/")) iItems--;
}
// or the last item
if (m_vecItems->Size() > 2 &&
m_vecItems->Get(m_vecItems->Size()-1)->m_strPath.Left(4).Equals("/-1/"))
iItems--;
}
CStdString items;
items.Format("%i %s", iItems, g_localizeStrings.Get(127).c_str());
SET_CONTROL_LABEL(CONTROL_LABELFILES, items);
// set the filter label
CStdString strLabel;
// "Playlists"
if (m_vecItems->m_strPath.Equals("special://musicplaylists/"))
strLabel = g_localizeStrings.Get(136);
// "{Playlist Name}"
else if (m_vecItems->IsPlayList())
{
// get playlist name from path
CStdString strDummy;
CUtil::Split(m_vecItems->m_strPath, strDummy, strLabel);
}
// everything else is from a musicdb:// path
else
{
CMusicDatabaseDirectory dir;
dir.GetLabel(m_vecItems->m_strPath, strLabel);
}
SET_CONTROL_LABEL(CONTROL_FILTER, strLabel);
#ifndef _BOXEE_
SET_CONTROL_SELECTED(GetID(),CONTROL_BTNPARTYMODE, g_partyModeManager.IsEnabled());
#endif
SET_CONTROL_SELECTED(GetID(),CONTROL_BTN_FILTER, !m_filter.IsEmpty());
SET_CONTROL_LABEL2(CONTROL_BTN_FILTER, m_filter);
}
示例5: OnInfoAll
void CGUIWindowMusicBase::OnInfoAll(int iItem, bool bCurrent)
{
CGUIDialogMusicScan* musicScan = (CGUIDialogMusicScan *)g_windowManager.GetWindow(WINDOW_DIALOG_MUSIC_SCAN);
CMusicDatabaseDirectory dir;
CStdString strPath = m_vecItems->GetPath();
if (bCurrent)
strPath = m_vecItems->Get(iItem)->GetPath();
if (dir.HasAlbumInfo(m_vecItems->Get(iItem)->GetPath()))
musicScan->StartAlbumScan(strPath);
else
musicScan->StartArtistScan(strPath);
}
示例6: SET_CONTROL_LABEL
void CGUIWindowMusicNav::UpdateButtons()
{
CGUIWindowMusicBase::UpdateButtons();
// Update object count
int iItems = m_vecItems->Size();
if (iItems)
{
// check for parent dir and "all" items
// should always be the first two items
for (int i = 0; i <= (iItems>=2 ? 1 : 0); i++)
{
CFileItemPtr pItem = m_vecItems->Get(i);
if (pItem->IsParentFolder()) iItems--;
if (StringUtils::StartsWith(pItem->GetPath(), "/-1/")) iItems--;
}
// or the last item
if (m_vecItems->Size() > 2 &&
StringUtils::StartsWith(m_vecItems->Get(m_vecItems->Size()-1)->GetPath(), "/-1/"))
iItems--;
}
CStdString items;
items.Format("%i %s", iItems, g_localizeStrings.Get(127).c_str());
SET_CONTROL_LABEL(CONTROL_LABELFILES, items);
// set the filter label
CStdString strLabel;
// "Playlists"
if (m_vecItems->GetPath().Equals("special://musicplaylists/"))
strLabel = g_localizeStrings.Get(136);
// "{Playlist Name}"
else if (m_vecItems->IsPlayList())
{
// get playlist name from path
CStdString strDummy;
URIUtils::Split(m_vecItems->GetPath(), strDummy, strLabel);
}
// everything else is from a musicdb:// path
else
{
CMusicDatabaseDirectory dir;
dir.GetLabel(m_vecItems->GetPath(), strLabel);
}
SET_CONTROL_LABEL(CONTROL_FILTER, strLabel);
SET_CONTROL_SELECTED(GetID(),CONTROL_BTNPARTYMODE, g_partyModeManager.IsEnabled());
CONTROL_ENABLE_ON_CONDITION(CONTROL_UPDATE_LIBRARY, !m_vecItems->IsAddonsPath() && !m_vecItems->IsPlugin() && !m_vecItems->IsScript());
}
示例7: OnAction
bool CGUIWindowMusicNav::OnAction(const CAction& action)
{
if (action.GetID() == ACTION_SCAN_ITEM)
{
int item = m_viewControl.GetSelectedItem();
CMusicDatabaseDirectory dir;
if (item > -1 && m_vecItems->Get(item)->m_bIsFolder
&& (dir.HasAlbumInfo(m_vecItems->Get(item)->GetPath())||
dir.IsArtistDir(m_vecItems->Get(item)->GetPath())))
OnContextButton(item,CONTEXT_BUTTON_INFO);
return true;
}
return CGUIWindowMusicBase::OnAction(action);
}
示例8: OnRetrieveMusicInfo
bool CGUIWindowMusicNav::GetDirectory(const CStdString &strDirectory, CFileItemList &items)
{
if (m_bDisplayEmptyDatabaseMessage)
return true;
if (m_thumbLoader.IsLoading())
m_thumbLoader.StopThread();
bool bResult = CGUIWindowMusicBase::GetDirectory(strDirectory, items);
if (bResult)
{
if (items.IsPlayList())
OnRetrieveMusicInfo(items);
if (!items.IsMusicDb())
{
items.SetCachedMusicThumbs();
m_thumbLoader.Load(*m_vecItems);
}
}
// update our content in the info manager
if (strDirectory.Left(10).Equals("videodb://"))
{
CVideoDatabaseDirectory dir;
VIDEODATABASEDIRECTORY::NODE_TYPE node = dir.GetDirectoryChildType(strDirectory);
if (node == VIDEODATABASEDIRECTORY::NODE_TYPE_TITLE_MUSICVIDEOS)
items.SetContent("musicvideos");
}
else if (items.GetContent().IsEmpty())
{
CMusicDatabaseDirectory dir;
NODE_TYPE node = dir.GetDirectoryChildType(strDirectory);
if (node == NODE_TYPE_ALBUM)
items.SetContent("albums");
else if (node == NODE_TYPE_ARTIST)
items.SetContent("artists");
else if (node == NODE_TYPE_SONG)
items.SetContent("songs");
}
// clear the filter
m_filter.Empty();
return bResult;
}
示例9: OnAction
bool CGUIWindowMusicNav::OnAction(const CAction& action)
{
if (action.id == ACTION_PARENT_DIR)
{
if (g_advancedSettings.m_bUseEvilB && m_vecItems->m_strPath == m_startDirectory)
{
g_windowManager.PreviousWindow();
return true;
}
}
if (action.id == ACTION_SCAN_ITEM)
{
int item = m_viewControl.GetSelectedItem();
CMusicDatabaseDirectory dir;
if (item > -1 && m_vecItems->Get(item)->m_bIsFolder
&& (dir.HasAlbumInfo(m_vecItems->Get(item)->m_strPath)||
dir.IsArtistDir(m_vecItems->Get(item)->m_strPath)))
OnContextButton(item,CONTEXT_BUTTON_INFO);
return true;
}
return CGUIWindowMusicBase::OnAction(action);
}
示例10: SaveViewState
void CGUIViewStateMusicDatabase::SaveViewState()
{
CMusicDatabaseDirectory dir;
NODE_TYPE NodeType=dir.GetDirectoryChildType(m_items.GetPath());
switch (NodeType)
{
case NODE_TYPE_ARTIST:
SaveViewToDb(m_items.GetPath(), WINDOW_MUSIC_NAV, &g_settings.m_viewStateMusicNavArtists);
break;
case NODE_TYPE_ALBUM_COMPILATIONS:
case NODE_TYPE_ALBUM:
case NODE_TYPE_YEAR_ALBUM:
SaveViewToDb(m_items.GetPath(), WINDOW_MUSIC_NAV, &g_settings.m_viewStateMusicNavAlbums);
break;
case NODE_TYPE_ALBUM_RECENTLY_ADDED:
case NODE_TYPE_ALBUM_TOP100:
case NODE_TYPE_ALBUM_RECENTLY_PLAYED:
SaveViewToDb(m_items.GetPath(), WINDOW_MUSIC_NAV);
break;
case NODE_TYPE_SINGLES:
case NODE_TYPE_ALBUM_COMPILATIONS_SONGS:
case NODE_TYPE_SONG:
case NODE_TYPE_YEAR_SONG:
SaveViewToDb(m_items.GetPath(), WINDOW_MUSIC_NAV, &g_settings.m_viewStateMusicNavSongs);
break;
case NODE_TYPE_ALBUM_RECENTLY_PLAYED_SONGS:
case NODE_TYPE_ALBUM_RECENTLY_ADDED_SONGS:
case NODE_TYPE_SONG_TOP100:
SaveViewToDb(m_items.GetPath(), WINDOW_MUSIC_NAV);
break;
default:
SaveViewToDb(m_items.GetPath(), WINDOW_MUSIC_NAV);
break;
}
}
示例11: CGUIViewStateWindowMusic
CGUIViewStateMusicDatabase::CGUIViewStateMusicDatabase(const CFileItemList& items) : CGUIViewStateWindowMusic(items)
{
CMusicDatabaseDirectory dir;
NODE_TYPE NodeType=dir.GetDirectoryChildType(items.GetPath());
CStdString strTrackLeft=CSettings::Get().GetString("musicfiles.librarytrackformat");
if (strTrackLeft.empty())
strTrackLeft = CSettings::Get().GetString("musicfiles.trackformat");
CStdString strTrackRight=CSettings::Get().GetString("musicfiles.librarytrackformatright");
if (strTrackRight.empty())
strTrackRight = CSettings::Get().GetString("musicfiles.trackformatright");
CStdString strAlbumLeft = g_advancedSettings.m_strMusicLibraryAlbumFormat;
if (strAlbumLeft.empty())
strAlbumLeft = "%B"; // album
CStdString strAlbumRight = g_advancedSettings.m_strMusicLibraryAlbumFormatRight;
if (strAlbumRight.empty())
strAlbumRight = "%A"; // artist
CLog::Log(LOGDEBUG,"Album format left = [%s]", strAlbumLeft.c_str());
CLog::Log(LOGDEBUG,"Album format right = [%s]", strAlbumRight.c_str());
SortAttribute sortAttribute = SortAttributeNone;
if (CSettings::Get().GetBool("filelists.ignorethewhensorting"))
sortAttribute = SortAttributeIgnoreArticle;
switch (NodeType)
{
case NODE_TYPE_OVERVIEW:
{
AddSortMethod(SortByNone, 551, LABEL_MASKS("%F", "", "%L", "")); // Filename, empty | Foldername, empty
SetSortMethod(SortByNone);
SetViewAsControl(DEFAULT_VIEW_LIST);
SetSortOrder(SortOrderNone);
}
break;
case NODE_TYPE_TOP100:
{
AddSortMethod(SortByNone, 551, LABEL_MASKS("%F", "", "%L", "")); // Filename, empty | Foldername, empty
SetSortMethod(SortByNone);
SetViewAsControl(DEFAULT_VIEW_LIST);
SetSortOrder(SortOrderNone);
}
break;
case NODE_TYPE_GENRE:
{
AddSortMethod(SortByGenre, 515, LABEL_MASKS("%F", "", "%G", "")); // Filename, empty | Genre, empty
SetSortMethod(SortByGenre);
SetViewAsControl(DEFAULT_VIEW_LIST);
SetSortOrder(SortOrderAscending);
}
break;
case NODE_TYPE_YEAR:
{
AddSortMethod(SortByLabel, 551, LABEL_MASKS("%F", "", "%Y", "")); // Filename, empty | Year, empty
SetSortMethod(SortByLabel);
SetViewAsControl(DEFAULT_VIEW_LIST);
SetSortOrder(SortOrderAscending);
}
break;
case NODE_TYPE_ARTIST:
{
AddSortMethod(SortByArtist, sortAttribute, 557, LABEL_MASKS("%F", "", "%A", "")); // Filename, empty | Artist, empty
SetSortMethod(SortByArtist, sortAttribute);
const CViewState *viewState = CViewStateSettings::Get().Get("musicnavartists");
SetViewAsControl(viewState->m_viewMode);
SetSortOrder(viewState->m_sortDescription.sortOrder);
}
break;
case NODE_TYPE_ALBUM_COMPILATIONS:
case NODE_TYPE_ALBUM:
case NODE_TYPE_YEAR_ALBUM:
{
// album
AddSortMethod(SortByAlbum, sortAttribute, 558, LABEL_MASKS("%F", "", strAlbumLeft, strAlbumRight)); // Filename, empty | Userdefined, Userdefined
// artist
AddSortMethod(SortByArtist, sortAttribute, 557, LABEL_MASKS("%F", "", strAlbumLeft, strAlbumRight)); // Filename, empty | Userdefined, Userdefined
// year
AddSortMethod(SortByYear, 562, LABEL_MASKS("%F", "", strAlbumLeft, strAlbumRight));
const CViewState *viewState = CViewStateSettings::Get().Get("musicnavalbums");
SetSortMethod(viewState->m_sortDescription);
SetViewAsControl(viewState->m_viewMode);
SetSortOrder(viewState->m_sortDescription.sortOrder);
}
break;
case NODE_TYPE_ALBUM_RECENTLY_ADDED:
{
AddSortMethod(SortByNone, 552, LABEL_MASKS("%F", "", strAlbumLeft, strAlbumRight)); // Filename, empty | Userdefined, Userdefined
SetSortMethod(SortByNone);
//.........这里部分代码省略.........
示例12: AddItemToPlayList
/// \brief Add unique file and folders and its subfolders to playlist
/// \param pItem The file item to add
void CGUIWindowMusicBase::AddItemToPlayList(const CFileItem* pItem, CFileItemList &queuedItems)
{
if (!pItem->CanQueue() || pItem->IsRAR() || pItem->IsZIP() || pItem->IsParentFolder()) // no zip/rar enques thank you!
return;
if (pItem->IsMusicDb() && pItem->m_bIsFolder && !pItem->IsParentFolder())
{ // we have a music database folder, just grab the "all" item underneath it
CMusicDatabaseDirectory dir;
if (!dir.ContainsSongs(pItem->m_strPath))
{ // grab the ALL item in this category
// Genres will still require 2 lookups, and queuing the entire Genre folder
// will require 3 lookups (genre, artist, album)
CFileItem item(pItem->m_strPath + "-1/", true);
item.SetCanQueue(true); // workaround for CanQueue() check above
AddItemToPlayList(&item, queuedItems);
return;
}
}
if (pItem->m_bIsFolder || (m_gWindowManager.GetActiveWindow() == WINDOW_MUSIC_NAV && pItem->IsPlayList()))
{
// Check if we add a locked share
if ( pItem->m_bIsShareOrDrive )
{
CFileItem item = *pItem;
if ( !g_passwordManager.IsItemUnlocked( &item, "music" ) )
return ;
}
// recursive
CFileItemList items;
GetDirectory(pItem->m_strPath, items);
//OnRetrieveMusicInfo(items);
FormatAndSort(items);
for (int i = 0; i < items.Size(); ++i)
AddItemToPlayList(items[i], queuedItems);
}
else
{
if (pItem->IsPlayList())
{
auto_ptr<CPlayList> pPlayList (CPlayListFactory::Create(*pItem));
if (pPlayList.get())
{
// load it
if (!pPlayList->Load(pItem->m_strPath))
{
CGUIDialogOK::ShowAndGetInput(6, 0, 477, 0);
return; //hmmm unable to load playlist?
}
CPlayList playlist = *pPlayList;
for (int i = 0; i < (int)playlist.size(); ++i)
AddItemToPlayList(&playlist[i], queuedItems);
return;
}
}
else if(pItem->IsInternetStream())
{ // just queue the internet stream, it will be expanded on play
queuedItems.Add(new CFileItem(*pItem));
}
else if (!pItem->IsNFO() && pItem->IsAudio())
{
CFileItem *itemCheck = queuedItems.Get(pItem->m_strPath);
if (!itemCheck || itemCheck->m_lStartOffset != pItem->m_lStartOffset)
{ // add item
CLog::Log(LOGDEBUG, "Adding item (%s) to playlist", pItem->m_strPath.c_str());
queuedItems.Add(new CFileItem(*pItem));
}
}
}
}
示例13: GetContextButtons
void CGUIWindowMusicNav::GetContextButtons(int itemNumber, CContextButtons &buttons)
{
CGUIWindowMusicBase::GetContextButtons(itemNumber, buttons);
CFileItemPtr item;
if (itemNumber >= 0 && itemNumber < m_vecItems->Size())
item = m_vecItems->Get(itemNumber);
if (item && !StringUtils::StartsWithNoCase(item->GetPath(), "addons://more/"))
{
// are we in the playlists location?
bool inPlaylists = m_vecItems->IsPath(CUtil::MusicPlaylistsLocation()) ||
m_vecItems->IsPath("special://musicplaylists/");
CMusicDatabaseDirectory dir;
// enable music info button on an album or on a song.
if (item->IsAudio() && !item->IsPlayList() && !item->IsSmartPlayList() &&
!item->m_bIsFolder)
{
buttons.Add(CONTEXT_BUTTON_SONG_INFO, 658);
}
else if (item->IsVideoDb())
{
if (!item->m_bIsFolder) // music video
buttons.Add(CONTEXT_BUTTON_INFO, 20393);
if (StringUtils::StartsWithNoCase(item->GetPath(), "videodb://musicvideos/artists/") && item->m_bIsFolder)
{
long idArtist = m_musicdatabase.GetArtistByName(m_vecItems->Get(itemNumber)->GetLabel());
if (idArtist > - 1)
buttons.Add(CONTEXT_BUTTON_INFO,21891);
}
}
else if (!inPlaylists && (dir.HasAlbumInfo(item->GetPath())||
dir.IsArtistDir(item->GetPath()) ) &&
!dir.IsAllItem(item->GetPath()) && !item->IsParentFolder() &&
!item->IsPlugin() && !item->IsScript() &&
!StringUtils::StartsWithNoCase(item->GetPath(), "musicsearch://"))
{
if (dir.IsArtistDir(item->GetPath()))
buttons.Add(CONTEXT_BUTTON_INFO, 21891);
else
buttons.Add(CONTEXT_BUTTON_INFO, 13351);
}
// enable query all albums button only in album view
if (dir.HasAlbumInfo(item->GetPath()) && !dir.IsAllItem(item->GetPath()) &&
item->m_bIsFolder && !item->IsVideoDb() && !item->IsParentFolder() &&
!item->IsPlugin() && !StringUtils::StartsWithNoCase(item->GetPath(), "musicsearch://"))
{
buttons.Add(CONTEXT_BUTTON_INFO_ALL, 20059);
}
// enable query all artist button only in album view
if (dir.IsArtistDir(item->GetPath()) && !dir.IsAllItem(item->GetPath()) &&
item->m_bIsFolder && !item->IsVideoDb())
{
ADDON::ScraperPtr info;
m_musicdatabase.GetScraperForPath(item->GetPath(), info, ADDON::ADDON_SCRAPER_ARTISTS);
if (info && info->Supports(CONTENT_ARTISTS))
buttons.Add(CONTEXT_BUTTON_INFO_ALL, 21884);
}
//Set default or clear default
NODE_TYPE nodetype = dir.GetDirectoryType(item->GetPath());
if (!item->IsParentFolder() && !inPlaylists &&
(nodetype == NODE_TYPE_ROOT ||
nodetype == NODE_TYPE_OVERVIEW ||
nodetype == NODE_TYPE_TOP100))
{
if (!item->IsPath(CSettings::Get().GetString("mymusic.defaultlibview")))
buttons.Add(CONTEXT_BUTTON_SET_DEFAULT, 13335); // set default
if (!CSettings::Get().GetString("mymusic.defaultlibview").empty())
buttons.Add(CONTEXT_BUTTON_CLEAR_DEFAULT, 13403); // clear default
}
NODE_TYPE childtype = dir.GetDirectoryChildType(item->GetPath());
if (childtype == NODE_TYPE_ALBUM ||
childtype == NODE_TYPE_ARTIST ||
nodetype == NODE_TYPE_GENRE ||
nodetype == NODE_TYPE_ALBUM ||
nodetype == NODE_TYPE_ALBUM_RECENTLY_ADDED ||
nodetype == NODE_TYPE_ALBUM_COMPILATIONS)
{
// we allow the user to set content for
// 1. general artist and album nodes
// 2. specific per genre
// 3. specific per artist
// 4. specific per album
buttons.Add(CONTEXT_BUTTON_SET_CONTENT,20195);
}
if (item->HasMusicInfoTag() && item->GetMusicInfoTag()->GetArtist().size() > 0)
{
CVideoDatabase database;
database.Open();
if (database.GetMatchingMusicVideo(StringUtils::Join(item->GetMusicInfoTag()->GetArtist(), g_advancedSettings.m_musicItemSeparator)) > -1)
buttons.Add(CONTEXT_BUTTON_GO_TO_ARTIST, 20400);
}
if (item->HasMusicInfoTag() && item->GetMusicInfoTag()->GetArtist().size() > 0 &&
item->GetMusicInfoTag()->GetAlbum().size() > 0 &&
item->GetMusicInfoTag()->GetTitle().size() > 0)
{
CVideoDatabase database;
//.........这里部分代码省略.........
示例14: CGUIViewStateWindowMusic
CGUIViewStateMusicDatabase::CGUIViewStateMusicDatabase(const CFileItemList& items) : CGUIViewStateWindowMusic(items)
{
CMusicDatabaseDirectory dir;
NODE_TYPE NodeType=dir.GetDirectoryChildType(items.GetPath());
std::string strTrack=CSettings::GetInstance().GetString(CSettings::SETTING_MUSICFILES_LIBRARYTRACKFORMAT);
if (strTrack.empty())
strTrack = CSettings::GetInstance().GetString(CSettings::SETTING_MUSICFILES_TRACKFORMAT);
std::string strAlbum = g_advancedSettings.m_strMusicLibraryAlbumFormat;
if (strAlbum.empty())
strAlbum = "%B"; // album
CLog::Log(LOGDEBUG,"Custom album format = [%s]", strAlbum.c_str());
SortAttribute sortAttribute = SortAttributeNone;
if (CSettings::GetInstance().GetBool(CSettings::SETTING_FILELISTS_IGNORETHEWHENSORTING))
sortAttribute = SortAttributeIgnoreArticle;
switch (NodeType)
{
case NODE_TYPE_OVERVIEW:
{
AddSortMethod(SortByNone, 551, LABEL_MASKS("%F", "", "%L", "")); // Filename, empty | Foldername, empty
SetSortMethod(SortByNone);
SetViewAsControl(DEFAULT_VIEW_LIST);
SetSortOrder(SortOrderNone);
}
break;
case NODE_TYPE_TOP100:
{
AddSortMethod(SortByNone, 551, LABEL_MASKS("%F", "", "%L", "")); // Filename, empty | Foldername, empty
SetSortMethod(SortByNone);
SetViewAsControl(DEFAULT_VIEW_LIST);
SetSortOrder(SortOrderNone);
}
break;
case NODE_TYPE_GENRE:
{
AddSortMethod(SortByGenre, 515, LABEL_MASKS("%F", "", "%G", "")); // Filename, empty | Genre, empty
SetSortMethod(SortByGenre);
SetViewAsControl(DEFAULT_VIEW_LIST);
SetSortOrder(SortOrderAscending);
}
break;
case NODE_TYPE_YEAR:
{
AddSortMethod(SortByLabel, 562, LABEL_MASKS("%F", "", "%Y", "")); // Filename, empty | Year, empty
SetSortMethod(SortByLabel);
SetViewAsControl(DEFAULT_VIEW_LIST);
SetSortOrder(SortOrderAscending);
}
break;
case NODE_TYPE_ARTIST:
{
AddSortMethod(SortByArtist, sortAttribute, 557, LABEL_MASKS("%F", "", "%A", "")); // Filename, empty | Artist, empty
AddSortMethod(SortByDateAdded, sortAttribute, 570, LABEL_MASKS("%F", "", "%A", "%a")); // Filename, empty | Artist, dateAdded
SetSortMethod(SortByArtist);
const CViewState *viewState = CViewStateSettings::GetInstance().Get("musicnavartists");
SetViewAsControl(viewState->m_viewMode);
SetSortOrder(viewState->m_sortDescription.sortOrder);
}
break;
case NODE_TYPE_ALBUM_COMPILATIONS:
case NODE_TYPE_ALBUM:
case NODE_TYPE_YEAR_ALBUM:
{
// album
AddSortMethod(SortByAlbum, sortAttribute, 558, LABEL_MASKS("%F", "", strAlbum, "%B")); // Filename, empty | Userdefined, Album
// artist
AddSortMethod(SortByArtist, sortAttribute, 557, LABEL_MASKS("%F", "", strAlbum, "%A")); // Filename, empty | Userdefined, Artist
// artist / year
AddSortMethod(SortByArtistThenYear, sortAttribute, 578, LABEL_MASKS("%F", "", strAlbum, "%A / %Y")); // Filename, empty | Userdefined, Artist / Year
// year
AddSortMethod(SortByYear, 562, LABEL_MASKS("%F", "", strAlbum, "%Y")); // Filename, empty | Userdefined, Year
// album date added
AddSortMethod(SortByDateAdded, sortAttribute, 570, LABEL_MASKS("%F", "", strAlbum, "%a")); // Filename, empty | Userdefined, dateAdded
// play count
AddSortMethod(SortByPlaycount, 567, LABEL_MASKS("%F", "", strAlbum, "%V")); // Filename, empty | Userdefined, Play count
const CViewState *viewState = CViewStateSettings::GetInstance().Get("musicnavalbums");
SetSortMethod(viewState->m_sortDescription);
SetViewAsControl(viewState->m_viewMode);
SetSortOrder(viewState->m_sortDescription.sortOrder);
}
break;
case NODE_TYPE_ALBUM_RECENTLY_ADDED:
{
AddSortMethod(SortByNone, 552, LABEL_MASKS("%F", "", strAlbum, "%a")); // Filename, empty | Userdefined, dateAdded
SetSortMethod(SortByNone);
SetViewAsControl(CViewStateSettings::GetInstance().Get("musicnavalbums")->m_viewMode);
SetSortOrder(SortOrderNone);
//.........这里部分代码省略.........
示例15: GetContextButtons
void CGUIWindowMusicNav::GetContextButtons(int itemNumber, CContextButtons &buttons)
{
CGUIWindowMusicBase::GetContextButtons(itemNumber, buttons);
CGUIDialogMusicScan *musicScan = (CGUIDialogMusicScan *)m_gWindowManager.GetWindow(WINDOW_DIALOG_MUSIC_SCAN);
CFileItem *item = (itemNumber >= 0 && itemNumber < m_vecItems->Size()) ? m_vecItems->Get(itemNumber) : NULL;
if (item && (item->GetExtraInfo().Find("lastfm") < 0))
{
// are we in the playlists location?
bool inPlaylists = m_vecItems->m_strPath.Equals(CUtil::MusicPlaylistsLocation()) ||
m_vecItems->m_strPath.Equals("special://musicplaylists/");
CMusicDatabaseDirectory dir;
SScraperInfo info;
m_musicdatabase.GetScraperForPath(item->m_strPath,info);
// enable music info button on an album or on a song.
if (item->IsAudio() && !item->IsPlayList() && !item->IsSmartPlayList() &&
!item->IsLastFM() && !item->IsShoutCast())
{
buttons.Add(CONTEXT_BUTTON_SONG_INFO, 658);
}
else if (item->IsVideoDb())
{
if (!item->m_bIsFolder) // music video
buttons.Add(CONTEXT_BUTTON_INFO, 20393);
if (item->m_strPath.Left(14).Equals("videodb://3/4/") &&
item->m_strPath.size() > 14 && item->m_bIsFolder)
{
long idArtist = m_musicdatabase.GetArtistByName(m_vecItems->Get(itemNumber)->GetLabel());
if (idArtist > - 1)
buttons.Add(CONTEXT_BUTTON_INFO,21891);
}
}
else if (!inPlaylists && (dir.HasAlbumInfo(item->m_strPath)||
dir.IsArtistDir(item->m_strPath) ) &&
!dir.IsAllItem(item->m_strPath) && !item->IsParentFolder() &&
!item->IsLastFM() && !item->IsShoutCast() &&
!item->m_strPath.Left(14).Equals("musicsearch://"))
{
if (dir.IsArtistDir(item->m_strPath))
buttons.Add(CONTEXT_BUTTON_INFO, 21891);
else
buttons.Add(CONTEXT_BUTTON_INFO, 13351);
}
// enable query all albums button only in album view
if (dir.HasAlbumInfo(item->m_strPath) && !dir.IsAllItem(item->m_strPath) &&
item->m_bIsFolder && !item->IsVideoDb() && !item->IsParentFolder() &&
!item->IsLastFM() && !item->IsShoutCast() &&
!item->m_strPath.Left(14).Equals("musicsearch://"))
{
buttons.Add(CONTEXT_BUTTON_INFO_ALL, 20059);
}
// enable query all artist button only in album view
if (dir.IsArtistDir(item->m_strPath) && !dir.IsAllItem(item->m_strPath) &&
item->m_bIsFolder && !item->IsVideoDb() && !info.strContent.IsEmpty())
{
buttons.Add(CONTEXT_BUTTON_INFO_ALL, 21884);
}
// turn off set artist image if not at artist listing.
if (dir.IsArtistDir(item->m_strPath) && !dir.IsAllItem(item->m_strPath) ||
(item->m_strPath.Left(14).Equals("videodb://3/4/") &&
item->m_strPath.size() > 14 && item->m_bIsFolder))
{
buttons.Add(CONTEXT_BUTTON_SET_ARTIST_THUMB, 13359);
}
if (m_vecItems->m_strPath.Equals("plugin://music/"))
buttons.Add(CONTEXT_BUTTON_SET_PLUGIN_THUMB, 1044);
//Set default or clear default
NODE_TYPE nodetype = dir.GetDirectoryType(item->m_strPath);
if (!item->IsParentFolder() && !inPlaylists &&
(nodetype == NODE_TYPE_ROOT ||
nodetype == NODE_TYPE_OVERVIEW ||
nodetype == NODE_TYPE_TOP100))
{
if (!item->m_strPath.Equals(g_settings.m_defaultMusicLibSource))
buttons.Add(CONTEXT_BUTTON_SET_DEFAULT, 13335); // set default
if (strcmp(g_settings.m_defaultMusicLibSource, ""))
buttons.Add(CONTEXT_BUTTON_CLEAR_DEFAULT, 13403); // clear default
}
NODE_TYPE childtype = dir.GetDirectoryChildType(item->m_strPath);
if (childtype == NODE_TYPE_ALBUM || childtype == NODE_TYPE_ARTIST ||
nodetype == NODE_TYPE_GENRE || nodetype == NODE_TYPE_ALBUM)
{
// we allow the user to set content for
// 1. general artist and album nodes
// 2. specific per genre
// 3. specific per artist
// 4. specific per album
buttons.Add(CONTEXT_BUTTON_SET_CONTENT,20195);
}
if (item->HasMusicInfoTag() && item->GetMusicInfoTag()->GetArtist().size() > 0)
{
CVideoDatabase database;
database.Open();
if (database.GetMusicVideoArtistByName(item->GetMusicInfoTag()->GetArtist()) > -1)
//.........这里部分代码省略.........