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; } }
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; }
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); }
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); }
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); }
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()); }
void CGUIWindowMusicBase::OnInfoAll(int iItem, bool bCurrent, bool refresh) { CMusicDatabaseDirectory dir; CStdString strPath = m_vecItems->GetPath(); if (bCurrent) strPath = m_vecItems->Get(iItem)->GetPath(); if (dir.HasAlbumInfo(strPath) || CMusicDatabaseDirectory::GetDirectoryChildType(strPath) == MUSICDATABASEDIRECTORY::NODE_TYPE_ALBUM) g_application.StartMusicAlbumScan(strPath,refresh); else g_application.StartMusicArtistScan(strPath,refresh); }
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); }
bool CGUIWindowMusicNav::OnAction(const CAction& action) { int actionID = action.GetID(); bool result = false; if (actionID == ACTION_SCAN_ITEM) { int item = m_viewControl.GetSelectedItem(); CMusicDatabaseDirectory dir; CFileItemPtr pItem = m_vecItems->Get(item); if (item > -1 && pItem->m_bIsFolder && (dir.HasAlbumInfo(pItem->GetPath())|| dir.IsArtistDir(pItem->GetPath()))) OnContextButton(pItem,CONTEXT_BUTTON_INFO); return true; } if (actionID == ACTION_MOVE_DOWN || actionID == ACTION_MOVE_UP) { const CGUIControl* pControl = GetControl(CONTROL_LIST_SONGS); if (pControl && !pControl->HasFocus()) SET_CONTROL_FOCUS(CONTROL_LIST_SONGS,0); } if (actionID == ACTION_MOVE_RIGHT || actionID == ACTION_MOVE_LEFT) { if (GetFocusedControlID() == CONTROL_LIST_SONGS) SET_CONTROL_FOCUS(m_viewControl.GetCurrentControl(),0); result = CGUIWindowMusicBase::OnAction(action); UpdateSongsControl(); } if (actionID == ACTION_SELECT_ITEM) { const CGUIControl* pControl = GetControl(CONTROL_LIST_SONGS); if (pControl && pControl->IsVisible() && !pControl->HasFocus()) SET_CONTROL_FOCUS(CONTROL_LIST_SONGS,0); } if (!result) result = CGUIWindowMusicBase::OnAction(action); return result; }
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; }
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); }
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; } }
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); SetViewAsControl(CViewStateSettings::Get().Get("musicnavalbums")->m_viewMode); SetSortOrder(SortOrderNone); } break; case NODE_TYPE_ALBUM_RECENTLY_ADDED_SONGS: { AddSortMethod(SortByNone, 552, LABEL_MASKS(strTrackLeft, strTrackRight)); // Userdefined, Userdefined | empty, empty SetSortMethod(SortByNone); SetViewAsControl(CViewStateSettings::Get().Get("musicnavsongs")->m_viewMode); SetSortOrder(SortOrderNone); } break; case NODE_TYPE_ALBUM_RECENTLY_PLAYED: { AddSortMethod(SortByNone, 551, LABEL_MASKS("%F", "", strAlbumLeft, strAlbumRight)); // Filename, empty | Userdefined, Userdefined SetSortMethod(SortByNone); SetViewAsControl(CViewStateSettings::Get().Get("musicnavalbums")->m_viewMode); SetSortOrder(SortOrderNone); } break; case NODE_TYPE_ALBUM_RECENTLY_PLAYED_SONGS: { AddSortMethod(SortByNone, 551, LABEL_MASKS(strTrackLeft, strTrackRight)); // Userdefined, Userdefined | empty, empty SetSortMethod(SortByNone); SetViewAsControl(CViewStateSettings::Get().Get("musicnavalbums")->m_viewMode); SetSortOrder(SortOrderNone); } break; case NODE_TYPE_ALBUM_TOP100: { AddSortMethod(SortByNone, 551, LABEL_MASKS("%F", "", strAlbumLeft, strAlbumRight)); // Filename, empty | Userdefined, Userdefined SetSortMethod(SortByNone); SetViewAsControl(DEFAULT_VIEW_LIST); SetSortOrder(SortOrderNone); } break; case NODE_TYPE_SINGLES: { AddSortMethod(SortByArtist, sortAttribute, 557, LABEL_MASKS("%A - %T", "%D")); // Artist, Title, Duration| empty, empty AddSortMethod(SortByTitle, sortAttribute, 556, LABEL_MASKS("%T - %A", "%D")); // Title, Artist, Duration| empty, empty AddSortMethod(SortByLabel, sortAttribute, 551, LABEL_MASKS(strTrackLeft, strTrackRight)); AddSortMethod(SortByTime, 180, LABEL_MASKS("%T - %A", "%D")); // Titel, Artist, Duration| empty, empty AddSortMethod(SortByRating, 563, LABEL_MASKS("%T - %A", "%R")); // Title - Artist, Rating const CViewState *viewState = CViewStateSettings::Get().Get("musicnavsongs"); SetSortMethod(viewState->m_sortDescription); SetViewAsControl(viewState->m_viewMode); SetSortOrder(viewState->m_sortDescription.sortOrder); } break; case NODE_TYPE_ALBUM_COMPILATIONS_SONGS: case NODE_TYPE_ALBUM_TOP100_SONGS: case NODE_TYPE_YEAR_SONG: case NODE_TYPE_SONG: { AddSortMethod(SortByTrackNumber, 554, LABEL_MASKS(strTrackLeft, strTrackRight)); // Userdefined, Userdefined| empty, empty AddSortMethod(SortByTitle, sortAttribute, 556, LABEL_MASKS("%T - %A", "%D")); // Title, Artist, Duration| empty, empty AddSortMethod(SortByAlbum, sortAttribute, 558, LABEL_MASKS("%B - %T - %A", "%D")); // Album, Title, Artist, Duration| empty, empty AddSortMethod(SortByArtist, sortAttribute, 557, LABEL_MASKS("%A - %T", "%D")); // Artist, Title, Duration| empty, empty AddSortMethod(SortByLabel, sortAttribute, 551, LABEL_MASKS(strTrackLeft, strTrackRight)); AddSortMethod(SortByTime, 180, LABEL_MASKS("%T - %A", "%D")); // Titel, Artist, Duration| empty, empty AddSortMethod(SortByRating, 563, LABEL_MASKS("%T - %A", "%R")); // Title - Artist, Rating AddSortMethod(SortByYear, 562, LABEL_MASKS("%T - %A", "%Y")); // Title, Artist, Year const CViewState *viewState = CViewStateSettings::Get().Get("musicnavsongs"); // the "All Albums" entries always default to SortByAlbum as this is most logical - user can always // change it and the change will be saved for this particular path if (dir.IsAllItem(items.GetPath())) SetSortMethod(SortByAlbum, sortAttribute); else SetSortMethod(viewState->m_sortDescription); AddSortMethod(SortByPlaycount, 567, LABEL_MASKS("%T - %A", "%V")); // Titel - Artist, PlayCount SetViewAsControl(viewState->m_viewMode); SetSortOrder(viewState->m_sortDescription.sortOrder); } break; case NODE_TYPE_SONG_TOP100: { AddSortMethod(SortByNone, 576, LABEL_MASKS("%T - %A", "%V")); SetSortMethod(SortByPlaycount); SetViewAsControl(CViewStateSettings::Get().Get("musicnavsongs")->m_viewMode); SetSortOrder(SortOrderNone); } break; default: break; } LoadViewState(items.GetPath(), WINDOW_MUSIC_NAV); }
/// \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)); } } } }
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; database.Open(); if (database.GetMatchingMusicVideo(StringUtils::Join(item->GetMusicInfoTag()->GetArtist(), g_advancedSettings.m_musicItemSeparator),item->GetMusicInfoTag()->GetAlbum(),item->GetMusicInfoTag()->GetTitle()) > -1) buttons.Add(CONTEXT_BUTTON_PLAY_OTHER, 20401); } if (item->HasVideoInfoTag() && !item->m_bIsFolder) { if (item->GetVideoInfoTag()->m_playCount > 0) buttons.Add(CONTEXT_BUTTON_MARK_UNWATCHED, 16104); //Mark as UnWatched else buttons.Add(CONTEXT_BUTTON_MARK_WATCHED, 16103); //Mark as Watched if ((CProfilesManager::Get().GetCurrentProfile().canWriteDatabases() || g_passwordManager.bMasterUser) && !item->IsPlugin()) { buttons.Add(CONTEXT_BUTTON_RENAME, 16105); buttons.Add(CONTEXT_BUTTON_DELETE, 646); } } if (inPlaylists && URIUtils::GetFileName(item->GetPath()) != "PartyMode.xsp" && (item->IsPlayList() || item->IsSmartPlayList())) buttons.Add(CONTEXT_BUTTON_DELETE, 117); if (item->IsPlugin() || item->IsScript() || m_vecItems->IsPlugin()) buttons.Add(CONTEXT_BUTTON_PLUGIN_SETTINGS, 1045); } // noncontextual buttons CGUIWindowMusicBase::GetNonContextButtons(buttons); CContextMenuManager::Get().AddVisibleItems(item, buttons); }
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); } break; case NODE_TYPE_ALBUM_RECENTLY_ADDED_SONGS: { AddSortMethod(SortByNone, 552, LABEL_MASKS(strTrack, "%a")); // Userdefined, dateAdded | empty, empty SetSortMethod(SortByNone); SetViewAsControl(CViewStateSettings::GetInstance().Get("musicnavsongs")->m_viewMode); SetSortOrder(SortOrderNone); } break; case NODE_TYPE_ALBUM_RECENTLY_PLAYED: { AddSortMethod(SortByLastPlayed, 568, LABEL_MASKS("%F", "", strAlbum, "%p")); // Filename, empty | Userdefined, last played SetViewAsControl(CViewStateSettings::GetInstance().Get("musicnavalbums")->m_viewMode); } break; case NODE_TYPE_ALBUM_RECENTLY_PLAYED_SONGS: { AddSortMethod(SortByLastPlayed, 568, LABEL_MASKS(strTrack, "%p")); // Userdefined, last played | empty, empty SetViewAsControl(CViewStateSettings::GetInstance().Get("musicnavalbums")->m_viewMode); } break; case NODE_TYPE_ALBUM_TOP100: { AddSortMethod(SortByNone, 551, LABEL_MASKS("%F", "", strAlbum, "%V")); // Filename, empty | Userdefined, Play count SetSortMethod(SortByNone); SetViewAsControl(DEFAULT_VIEW_LIST); SetSortOrder(SortOrderNone); } break; case NODE_TYPE_SINGLES: { AddSortMethod(SortByArtist, sortAttribute, 557, LABEL_MASKS("%A - %T", "%D")); // Artist, Title, Duration| empty, empty AddSortMethod(SortByArtistThenYear, sortAttribute, 578, LABEL_MASKS("%A - %T", "%D")); // Artist, Title, Duration| empty, empty AddSortMethod(SortByTitle, sortAttribute, 556, LABEL_MASKS("%T - %A", "%D")); // Title, Artist, Duration| empty, empty AddSortMethod(SortByLabel, sortAttribute, 551, LABEL_MASKS(strTrack, "%D")); AddSortMethod(SortByTime, 180, LABEL_MASKS("%T - %A", "%D")); // Titel, Artist, Duration| empty, empty AddSortMethod(SortByRating, 563, LABEL_MASKS("%T - %A", "%R")); // Title - Artist, Rating AddSortMethod(SortByDateAdded, 570, LABEL_MASKS("%T - %A", "%a")); // Title - Artist, DateAdded | empty, empty const CViewState *viewState = CViewStateSettings::GetInstance().Get("musicnavsongs"); SetSortMethod(viewState->m_sortDescription); SetViewAsControl(viewState->m_viewMode); SetSortOrder(viewState->m_sortDescription.sortOrder); } break; case NODE_TYPE_ALBUM_COMPILATIONS_SONGS: case NODE_TYPE_ALBUM_TOP100_SONGS: case NODE_TYPE_YEAR_SONG: case NODE_TYPE_SONG: { AddSortMethod(SortByTrackNumber, 554, LABEL_MASKS(strTrack, "%N")); // Userdefined, Track Number| empty, empty AddSortMethod(SortByTitle, sortAttribute, 556, LABEL_MASKS("%T - %A", "%D")); // Title, Artist, Duration| empty, empty AddSortMethod(SortByAlbum, sortAttribute, 558, LABEL_MASKS("%B - %T - %A", "%D")); // Album, Title, Artist, Duration| empty, empty AddSortMethod(SortByArtist, sortAttribute, 557, LABEL_MASKS("%A - %T", "%D")); // Artist, Title, Duration| empty, empty AddSortMethod(SortByArtistThenYear, sortAttribute, 578, LABEL_MASKS("%A - %T", "%D")); // Artist, Title, Duration| empty, empty AddSortMethod(SortByLabel, sortAttribute, 551, LABEL_MASKS(strTrack, "%D")); AddSortMethod(SortByTime, 180, LABEL_MASKS("%T - %A", "%D")); // Titel, Artist, Duration| empty, empty AddSortMethod(SortByRating, 563, LABEL_MASKS("%T - %A", "%R")); // Title - Artist, Rating AddSortMethod(SortByYear, 562, LABEL_MASKS("%T - %A", "%Y")); // Title, Artist, Year AddSortMethod(SortByDateAdded, 570, LABEL_MASKS("%T - %A", "%a")); // Title - Artist, DateAdded | empty, empty AddSortMethod(SortByPlaycount, 567, LABEL_MASKS("%T - %A", "%V")); // Titel - Artist, PlayCount const CViewState *viewState = CViewStateSettings::GetInstance().Get("musicnavsongs"); // the "All Albums" entries always default to SortByAlbum as this is most logical - user can always // change it and the change will be saved for this particular path if (dir.IsAllItem(items.GetPath())) SetSortMethod(SortByAlbum); else SetSortMethod(viewState->m_sortDescription); SetViewAsControl(viewState->m_viewMode); SetSortOrder(viewState->m_sortDescription.sortOrder); } break; case NODE_TYPE_SONG_TOP100: { AddSortMethod(SortByNone, 576, LABEL_MASKS("%T - %A", "%V")); SetSortMethod(SortByPlaycount); SetViewAsControl(CViewStateSettings::GetInstance().Get("musicnavsongs")->m_viewMode); SetSortOrder(SortOrderNone); } break; default: break; } LoadViewState(items.GetPath(), WINDOW_MUSIC_NAV); }
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) 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; database.Open(); if (database.GetMusicVideoByArtistAndAlbumAndTitle(item->GetMusicInfoTag()->GetArtist(),item->GetMusicInfoTag()->GetAlbum(),item->GetMusicInfoTag()->GetTitle()) > -1) buttons.Add(CONTEXT_BUTTON_PLAY_OTHER, 20401); } if (item->HasVideoInfoTag() && !item->m_bIsFolder) { if (item->GetVideoInfoTag()->m_bWatched) buttons.Add(CONTEXT_BUTTON_MARK_UNWATCHED, 16104); //Mark as UnWatched else buttons.Add(CONTEXT_BUTTON_MARK_WATCHED, 16103); //Mark as Watched if (g_settings.m_vecProfiles[g_settings.m_iLastLoadedProfileIndex].canWriteDatabases() || g_passwordManager.bMasterUser) { buttons.Add(CONTEXT_BUTTON_RENAME, 16105); buttons.Add(CONTEXT_BUTTON_DELETE, 646); } } } // noncontextual buttons if (musicScan && musicScan->IsScanning()) buttons.Add(CONTEXT_BUTTON_STOP_SCANNING, 13353); // Stop Scanning else if (musicScan) buttons.Add(CONTEXT_BUTTON_UPDATE_LIBRARY, 653); CGUIWindowMusicBase::GetNonContextButtons(buttons); }
CGUIViewStateMusicDatabase::CGUIViewStateMusicDatabase(const CFileItemList& items) : CGUIViewStateWindowMusic(items) { CMusicDatabaseDirectory dir; NODE_TYPE NodeType=dir.GetDirectoryChildType(items.GetPath()); CStdString strTrackLeft=g_guiSettings.GetString("musicfiles.librarytrackformat"); if (strTrackLeft.IsEmpty()) strTrackLeft = g_guiSettings.GetString("musicfiles.trackformat"); CStdString strTrackRight=g_guiSettings.GetString("musicfiles.librarytrackformatright"); if (strTrackRight.IsEmpty()) strTrackRight = g_guiSettings.GetString("musicfiles.trackformatright"); CStdString strAlbumLeft = g_advancedSettings.m_strMusicLibraryAlbumFormat; if (strAlbumLeft.IsEmpty()) strAlbumLeft = "%B"; // album CStdString strAlbumRight = g_advancedSettings.m_strMusicLibraryAlbumFormatRight; if (strAlbumRight.IsEmpty()) strAlbumRight = "%A"; // artist CLog::Log(LOGDEBUG,"Album format left = [%s]", strAlbumLeft.c_str()); CLog::Log(LOGDEBUG,"Album format right = [%s]", strAlbumRight.c_str()); switch (NodeType) { case NODE_TYPE_OVERVIEW: { AddSortMethod(SORT_METHOD_NONE, 551, LABEL_MASKS("%F", "", "%L", "")); // Filename, empty | Foldername, empty SetSortMethod(SORT_METHOD_NONE); SetViewAsControl(DEFAULT_VIEW_LIST); SetSortOrder(SortOrderNone); } break; case NODE_TYPE_TOP100: { AddSortMethod(SORT_METHOD_NONE, 551, LABEL_MASKS("%F", "", "%L", "")); // Filename, empty | Foldername, empty SetSortMethod(SORT_METHOD_NONE); SetViewAsControl(DEFAULT_VIEW_LIST); SetSortOrder(SortOrderNone); } break; case NODE_TYPE_GENRE: { AddSortMethod(SORT_METHOD_GENRE, 551, LABEL_MASKS("%F", "", "%G", "")); // Filename, empty | Genre, empty SetSortMethod(SORT_METHOD_GENRE); SetViewAsControl(DEFAULT_VIEW_LIST); SetSortOrder(SortOrderAscending); } break; case NODE_TYPE_YEAR: { AddSortMethod(SORT_METHOD_LABEL, 551, LABEL_MASKS("%F", "", "%Y", "")); // Filename, empty | Year, empty SetSortMethod(SORT_METHOD_LABEL); SetViewAsControl(DEFAULT_VIEW_LIST); SetSortOrder(SortOrderAscending); } break; case NODE_TYPE_ARTIST: { if (g_guiSettings.GetBool("filelists.ignorethewhensorting")) { AddSortMethod(SORT_METHOD_ARTIST_IGNORE_THE, 551, LABEL_MASKS("%F", "", "%A", "")); // Filename, empty | Artist, empty SetSortMethod(SORT_METHOD_ARTIST_IGNORE_THE); } else { AddSortMethod(SORT_METHOD_ARTIST, 551, LABEL_MASKS("%F", "", "%A", "")); // Filename, empty | Artist, empty SetSortMethod(SORT_METHOD_ARTIST); } SetViewAsControl(g_settings.m_viewStateMusicNavArtists.m_viewMode); SetSortOrder(g_settings.m_viewStateMusicNavArtists.m_sortOrder); } break; case NODE_TYPE_ALBUM_COMPILATIONS: case NODE_TYPE_ALBUM: case NODE_TYPE_YEAR_ALBUM: { // album if (g_guiSettings.GetBool("filelists.ignorethewhensorting")) AddSortMethod(SORT_METHOD_ALBUM_IGNORE_THE, 558, LABEL_MASKS("%F", "", strAlbumLeft, strAlbumRight)); // Filename, empty | Userdefined, Userdefined else AddSortMethod(SORT_METHOD_ALBUM, 558, LABEL_MASKS("%F", "", strAlbumLeft, strAlbumRight)); // Filename, empty | Userdefined, Userdefined // artist if (g_guiSettings.GetBool("filelists.ignorethewhensorting")) AddSortMethod(SORT_METHOD_ARTIST_IGNORE_THE, 557, LABEL_MASKS("%F", "", strAlbumLeft, strAlbumRight)); // Filename, empty | Userdefined, Userdefined else AddSortMethod(SORT_METHOD_ARTIST, 557, LABEL_MASKS("%F", "", strAlbumLeft, strAlbumRight)); // Filename, empty | Userdefined, Userdefined // year AddSortMethod(SORT_METHOD_YEAR, 562, LABEL_MASKS("%F", "", strAlbumLeft, strAlbumRight)); SetSortMethod(g_settings.m_viewStateMusicNavAlbums.m_sortMethod); SetViewAsControl(g_settings.m_viewStateMusicNavAlbums.m_viewMode); SetSortOrder(g_settings.m_viewStateMusicNavAlbums.m_sortOrder); } break; case NODE_TYPE_ALBUM_RECENTLY_ADDED: { AddSortMethod(SORT_METHOD_NONE, 552, LABEL_MASKS("%F", "", strAlbumLeft, strAlbumRight)); // Filename, empty | Userdefined, Userdefined SetSortMethod(SORT_METHOD_NONE); SetViewAsControl(g_settings.m_viewStateMusicNavAlbums.m_viewMode); SetSortOrder(SortOrderNone); } break; case NODE_TYPE_ALBUM_RECENTLY_ADDED_SONGS: { AddSortMethod(SORT_METHOD_NONE, 552, LABEL_MASKS(strTrackLeft, strTrackRight)); // Userdefined, Userdefined | empty, empty SetSortMethod(SORT_METHOD_NONE); SetViewAsControl(g_settings.m_viewStateMusicNavSongs.m_viewMode); SetSortOrder(SortOrderNone); } break; case NODE_TYPE_ALBUM_RECENTLY_PLAYED: { AddSortMethod(SORT_METHOD_NONE, 551, LABEL_MASKS("%F", "", strAlbumLeft, strAlbumRight)); // Filename, empty | Userdefined, Userdefined SetSortMethod(SORT_METHOD_NONE); SetViewAsControl(g_settings.m_viewStateMusicNavAlbums.m_viewMode); SetSortOrder(SortOrderNone); } break; case NODE_TYPE_ALBUM_RECENTLY_PLAYED_SONGS: { AddSortMethod(SORT_METHOD_NONE, 551, LABEL_MASKS(strTrackLeft, strTrackRight)); // Userdefined, Userdefined | empty, empty SetSortMethod(SORT_METHOD_NONE); SetViewAsControl(g_settings.m_viewStateMusicNavAlbums.m_viewMode); SetSortOrder(SortOrderNone); } break; case NODE_TYPE_ALBUM_TOP100: { AddSortMethod(SORT_METHOD_NONE, 551, LABEL_MASKS("%F", "", strAlbumLeft, strAlbumRight)); // Filename, empty | Userdefined, Userdefined SetSortMethod(SORT_METHOD_NONE); SetViewAsControl(DEFAULT_VIEW_LIST); SetSortOrder(SortOrderNone); } break; case NODE_TYPE_SINGLES: { if (g_guiSettings.GetBool("filelists.ignorethewhensorting")) { AddSortMethod(SORT_METHOD_ARTIST_IGNORE_THE, 557, LABEL_MASKS("%A - %T", "%D")); // Artist, Title, Duration| empty, empty AddSortMethod(SORT_METHOD_TITLE_IGNORE_THE, 556, LABEL_MASKS("%T - %A", "%D")); // Title, Artist, Duration| empty, empty AddSortMethod(SORT_METHOD_LABEL_IGNORE_THE, 551, LABEL_MASKS(strTrackLeft, strTrackRight)); } else { AddSortMethod(SORT_METHOD_ARTIST, 557, LABEL_MASKS("%A - %T", "%D")); // Artist, Title, Duration| empty, empty AddSortMethod(SORT_METHOD_TITLE, 556, LABEL_MASKS("%T - %A", "%D")); // Title, Artist, Duration| empty, empty AddSortMethod(SORT_METHOD_LABEL, 551, LABEL_MASKS(strTrackLeft, strTrackRight)); } AddSortMethod(SORT_METHOD_DURATION, 555, LABEL_MASKS("%T - %A", "%D")); // Titel, Artist, Duration| empty, empty AddSortMethod(SORT_METHOD_SONG_RATING, 563, LABEL_MASKS("%T - %A", "%R")); // Title - Artist, Rating SetSortMethod(g_settings.m_viewStateMusicNavSongs.m_sortMethod); SetViewAsControl(g_settings.m_viewStateMusicNavSongs.m_viewMode); SetSortOrder(g_settings.m_viewStateMusicNavSongs.m_sortOrder); } break; case NODE_TYPE_ALBUM_COMPILATIONS_SONGS: case NODE_TYPE_ALBUM_TOP100_SONGS: case NODE_TYPE_YEAR_SONG: case NODE_TYPE_SONG: { AddSortMethod(SORT_METHOD_TRACKNUM, 554, LABEL_MASKS(strTrackLeft, strTrackRight)); // Userdefined, Userdefined| empty, empty if (g_guiSettings.GetBool("filelists.ignorethewhensorting")) { AddSortMethod(SORT_METHOD_TITLE_IGNORE_THE, 556, LABEL_MASKS("%T - %A", "%D")); // Title, Artist, Duration| empty, empty AddSortMethod(SORT_METHOD_ALBUM_IGNORE_THE, 558, LABEL_MASKS("%B - %T - %A", "%D")); // Album, Title, Artist, Duration| empty, empty AddSortMethod(SORT_METHOD_ARTIST_IGNORE_THE, 557, LABEL_MASKS("%A - %T", "%D")); // Artist, Title, Duration| empty, empty AddSortMethod(SORT_METHOD_LABEL_IGNORE_THE, 551, LABEL_MASKS(strTrackLeft, strTrackRight)); } else { AddSortMethod(SORT_METHOD_TITLE, 556, LABEL_MASKS("%T - %A", "%D")); // Title, Artist, Duration| empty, empty AddSortMethod(SORT_METHOD_ALBUM, 558, LABEL_MASKS("%B - %T - %A", "%D")); // Album, Title, Artist, Duration| empty, empty AddSortMethod(SORT_METHOD_ARTIST, 557, LABEL_MASKS("%A - %T", "%D")); // Artist, Title, Duration| empty, empty AddSortMethod(SORT_METHOD_LABEL, 551, LABEL_MASKS(strTrackLeft, strTrackRight)); } AddSortMethod(SORT_METHOD_DURATION, 555, LABEL_MASKS("%T - %A", "%D")); // Titel, Artist, Duration| empty, empty AddSortMethod(SORT_METHOD_SONG_RATING, 563, LABEL_MASKS("%T - %A", "%R")); // Title - Artist, Rating AddSortMethod(SORT_METHOD_YEAR, 562, LABEL_MASKS("%T - %A", "%Y")); // Title, Artist, Year // the "All Albums" entries always default to SORT_METHOD_ALBUM as this is most logical - user can always // change it and the change will be saved for this particular path if (dir.IsAllItem(items.GetPath())) SetSortMethod(g_guiSettings.GetBool("filelists.ignorethewhensorting") ? SORT_METHOD_ALBUM_IGNORE_THE : SORT_METHOD_ALBUM); else SetSortMethod(g_settings.m_viewStateMusicNavSongs.m_sortMethod); AddSortMethod(SORT_METHOD_PLAYCOUNT, 576, LABEL_MASKS("%T - %A", "%V")); // Titel - Artist, PlayCount SetViewAsControl(g_settings.m_viewStateMusicNavSongs.m_viewMode); SetSortOrder(g_settings.m_viewStateMusicNavSongs.m_sortOrder); } break; case NODE_TYPE_SONG_TOP100: { AddSortMethod(SORT_METHOD_NONE, 576, LABEL_MASKS("%T - %A", "%V")); SetSortMethod(SORT_METHOD_PLAYCOUNT); SetViewAsControl(g_settings.m_viewStateMusicNavSongs.m_viewMode); SetSortOrder(SortOrderNone); } break; default: break; } LoadViewState(items.GetPath(), WINDOW_MUSIC_NAV); }
bool CGUIWindowMusicNav::GetDirectory(const CStdString &strDirectory, CFileItemList &items) { if (m_bDisplayEmptyDatabaseMessage) return true; if (strDirectory.IsEmpty()) AddSearchFolder(); if (m_thumbLoader.IsLoading()) m_thumbLoader.StopThread(); printf("CGUIWindowMusicNav::GetDirectory\n"); fflush(stdout); 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 (strDirectory.Left(10).Equals("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"); // clear the filter m_filter.Empty(); return bResult; }
void CGUIWindowMusicNav::SetThumb(int iItem, CONTEXT_BUTTON button) { CFileItem* pItem = m_vecItems->Get(iItem); CFileItemList items; CStdString picturePath; CStdString strPath=pItem->m_strPath; CStdString strThumb; CStdString cachedThumb; if (button == CONTEXT_BUTTON_SET_ARTIST_THUMB) { long idArtist = -1; if (pItem->IsMusicDb()) { CUtil::RemoveSlashAtEnd(strPath); int nPos=strPath.ReverseFind("/"); if (nPos>-1) { // try to guess where the user should start // browsing for the artist thumb idArtist=atol(strPath.Mid(nPos+1)); } } else if (pItem->IsVideoDb()) idArtist = m_musicdatabase.GetArtistByName(pItem->GetLabel()); m_musicdatabase.GetArtistPath(idArtist, picturePath); cachedThumb = pItem->GetCachedArtistThumb(); CArtist artist; m_musicdatabase.GetArtistInfo(idArtist,artist); int i=1; for (std::vector<CScraperUrl::SUrlEntry>::iterator iter=artist.thumbURL.m_url.begin();iter != artist.thumbURL.m_url.end();++iter) { CStdString thumbFromWeb; CStdString strLabel; strLabel.Format("allmusicthumb%i.jpg",i); CUtil::AddFileToFolder("z:\\", strLabel, thumbFromWeb); if (CScraperUrl::DownloadThumbnail(thumbFromWeb,*iter)) { CStdString strItemPath; strItemPath.Format("thumb://Remote%i",i++); CFileItem *item = new CFileItem(strItemPath, false); item->SetThumbnailImage(thumbFromWeb); CStdString strLabel; item->SetLabel(g_localizeStrings.Get(20015)); items.Add(item); } } } else { strPath = m_vecItems->Get(iItem)->m_strPath; strPath.Replace("plugin://music/","Q:\\plugins\\music\\"); strPath.Replace("/","\\"); picturePath = strPath; CFileItem item(strPath,true); cachedThumb = item.GetCachedProgramThumb(); } if (XFILE::CFile::Exists(cachedThumb)) { CFileItem *item = new CFileItem("thumb://Current", false); item->SetThumbnailImage(cachedThumb); item->SetLabel(g_localizeStrings.Get(20016)); items.Add(item); } if (button == CONTEXT_BUTTON_SET_PLUGIN_THUMB) { if (items.Size() == 0) { CFileItem item2(strPath,false); CUtil::AddFileToFolder(strPath,"default.py",item2.m_strPath); if (XFILE::CFile::Exists(item2.GetCachedProgramThumb())) { CFileItem *item = new CFileItem("thumb://Current", false); item->SetThumbnailImage(item2.GetCachedProgramThumb()); item->SetLabel(g_localizeStrings.Get(20016)); items.Add(item); } } CUtil::AddFileToFolder(strPath,"default.tbn",strThumb); if (XFILE::CFile::Exists(strThumb)) { CFileItem* item = new CFileItem(strThumb,false); item->SetThumbnailImage(strThumb); item->SetLabel(g_localizeStrings.Get(20017)); items.Add(item); } } CUtil::AddFileToFolder(picturePath,"folder.jpg",strThumb); if (XFILE::CFile::Exists(strThumb)) { CFileItem* pItem = new CFileItem(strThumb,false); pItem->SetLabel(g_localizeStrings.Get(20017)); pItem->SetThumbnailImage(strThumb); items.Add(pItem); } CFileItem* nItem = new CFileItem("thumb://None",false); nItem->SetLabel(g_localizeStrings.Get(20018)); if (button == CONTEXT_BUTTON_SET_ARTIST_THUMB) nItem->SetThumbnailImage("DefaultArtistBig.png"); else nItem->SetThumbnailImage("DefaultFolderBig.png"); items.Add(nItem); if (CGUIDialogFileBrowser::ShowAndGetImage(items, g_settings.m_musicSources, g_localizeStrings.Get(20019), picturePath)) { CPicture picture; if (picturePath.Equals("thumb://Current")) return; if (picturePath.Equals("thumb://None")) { XFILE::CFile::Delete(cachedThumb); if (button == CONTEXT_BUTTON_SET_PLUGIN_THUMB) { CPicture picture; picture.CacheSkinImage("DefaultFolderBig.png",cachedThumb); CFileItem item2(strPath,false); CUtil::AddFileToFolder(strPath,"default.py",item2.m_strPath); XFILE::CFile::Delete(item2.GetCachedProgramThumb()); } } else if (button == CONTEXT_BUTTON_SET_PLUGIN_THUMB) XFILE::CFile::Cache(picturePath,cachedThumb); if (picturePath.Equals("thumb://None") || picture.DoCreateThumbnail(items.Get(picturePath)->GetThumbnailImage(), cachedThumb)) { CMusicDatabaseDirectory dir; dir.ClearDirectoryCache(m_vecItems->m_strPath); CGUIMessage msg(GUI_MSG_NOTIFY_ALL, 0, 0, GUI_MSG_REFRESH_THUMBS); g_graphicsContext.SendMessage(msg); Update(m_vecItems->m_strPath); } else CLog::Log(LOGERROR, " %s Could not cache artist/plugin thumb: %s", __FUNCTION__, picturePath.c_str()); } }
void CGUIWindowMusicNav::GetContextButtons(int itemNumber, CContextButtons &buttons) { CGUIWindowMusicBase::GetContextButtons(itemNumber, buttons); CGUIDialogMusicScan *musicScan = (CGUIDialogMusicScan *)g_windowManager.GetWindow(WINDOW_DIALOG_MUSIC_SCAN); CFileItemPtr item; if (itemNumber >= 0 && itemNumber < m_vecItems->Size()) item = m_vecItems->Get(itemNumber); if (item && (item->GetExtraInfo().Find("lastfm") < 0)) { // are we in the playlists location? bool inPlaylists = m_vecItems->GetPath().Equals(CUtil::MusicPlaylistsLocation()) || m_vecItems->GetPath().Equals("special://musicplaylists/"); CMusicDatabaseDirectory dir; // enable music info button on an album or on a song. if (item->IsAudio() && !item->IsPlayList() && !item->IsSmartPlayList() && !item->IsLastFM() && !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 (item->GetPath().Left(14).Equals("videodb://3/4/") && item->GetPath().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->GetPath())|| dir.IsArtistDir(item->GetPath()) ) && !dir.IsAllItem(item->GetPath()) && !item->IsParentFolder() && !item->IsLastFM() && !item->IsPlugin() && !item->IsScript() && !item->GetPath().Left(14).Equals("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->IsLastFM() && !item->IsPlugin() && !item->GetPath().Left(14).Equals("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->GetPath().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->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(item->GetMusicInfoTag()->GetArtist()) > -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; database.Open(); if (database.GetMatchingMusicVideo(item->GetMusicInfoTag()->GetArtist(),item->GetMusicInfoTag()->GetAlbum(),item->GetMusicInfoTag()->GetTitle()) > -1) buttons.Add(CONTEXT_BUTTON_PLAY_OTHER, 20401); } if (item->HasVideoInfoTag() && !item->m_bIsFolder) { if (item->GetVideoInfoTag()->m_playCount > 0) buttons.Add(CONTEXT_BUTTON_MARK_UNWATCHED, 16104); //Mark as UnWatched else buttons.Add(CONTEXT_BUTTON_MARK_WATCHED, 16103); //Mark as Watched if ((g_settings.GetCurrentProfile().canWriteDatabases() || g_passwordManager.bMasterUser) && !item->IsPlugin()) { buttons.Add(CONTEXT_BUTTON_RENAME, 16105); buttons.Add(CONTEXT_BUTTON_DELETE, 646); } } if (inPlaylists && !URIUtils::GetFileName(item->GetPath()).Equals("PartyMode.xsp") && (item->IsPlayList() || item->IsSmartPlayList())) buttons.Add(CONTEXT_BUTTON_DELETE, 117); if (item->IsPlugin() || item->IsScript() || m_vecItems->IsPlugin()) buttons.Add(CONTEXT_BUTTON_PLUGIN_SETTINGS, 1045); } // noncontextual buttons if (musicScan && musicScan->IsScanning()) buttons.Add(CONTEXT_BUTTON_STOP_SCANNING, 13353); // Stop Scanning else if (musicScan) buttons.Add(CONTEXT_BUTTON_UPDATE_LIBRARY, 653); CGUIWindowMusicBase::GetNonContextButtons(buttons); }
bool CGUIWindowMusicNav::GetDirectory(const std::string &strDirectory, CFileItemList &items) { 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://") || items.IsVideoDb()) { CVideoDatabaseDirectory dir; VIDEODATABASEDIRECTORY::NODE_TYPE node = dir.GetDirectoryChildType(items.GetPath()); if (node == VIDEODATABASEDIRECTORY::NODE_TYPE_TITLE_MUSICVIDEOS || node == VIDEODATABASEDIRECTORY::NODE_TYPE_RECENTLY_ADDED_MUSICVIDEOS) items.SetContent("musicvideos"); else if (node == VIDEODATABASEDIRECTORY::NODE_TYPE_GENRE) items.SetContent("genres"); else if (node == VIDEODATABASEDIRECTORY::NODE_TYPE_COUNTRY) items.SetContent("countries"); else if (node == VIDEODATABASEDIRECTORY::NODE_TYPE_ACTOR) items.SetContent("artists"); else if (node == VIDEODATABASEDIRECTORY::NODE_TYPE_DIRECTOR) items.SetContent("directors"); else if (node == VIDEODATABASEDIRECTORY::NODE_TYPE_STUDIO) items.SetContent("studios"); else if (node == VIDEODATABASEDIRECTORY::NODE_TYPE_YEAR) items.SetContent("years"); else if (node == VIDEODATABASEDIRECTORY::NODE_TYPE_MUSICVIDEOS_ALBUM) items.SetContent("albums"); else if (node == VIDEODATABASEDIRECTORY::NODE_TYPE_TAGS) items.SetContent("tags"); else items.SetContent(""); } else if (StringUtils::StartsWithNoCase(strDirectory, "musicdb://") || items.IsMusicDb()) { CMusicDatabaseDirectory dir; NODE_TYPE node = dir.GetDirectoryChildType(items.GetPath()); 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 || node == NODE_TYPE_ALBUM_RECENTLY_ADDED_SONGS || node == NODE_TYPE_ALBUM_RECENTLY_PLAYED_SONGS || node == NODE_TYPE_ALBUM_COMPILATIONS_SONGS || node == NODE_TYPE_ALBUM_TOP100_SONGS || node == NODE_TYPE_YEAR_SONG) items.SetContent("songs"); else if (node == NODE_TYPE_GENRE) items.SetContent("genres"); else if (node == NODE_TYPE_YEAR) items.SetContent("years"); else items.SetContent(""); } else if (items.IsPlayList()) items.SetContent("songs"); else if (URIUtils::PathEquals(strDirectory, "special://musicplaylists/") || URIUtils::PathEquals(strDirectory, "library://music/playlists.xml/")) items.SetContent("playlists"); else if (URIUtils::PathEquals(strDirectory, "plugin://music/")) items.SetContent("plugins"); else if (items.IsAddonsPath()) items.SetContent("addons"); else if (!items.IsSourcesPath() && !items.IsVirtualDirectoryRoot() && !items.IsLibraryFolder() && !items.IsPlugin() && !items.IsSmartPlayList()) items.SetContent("files"); return bResult; }
/// \brief Add unique file and folders and its subfolders to playlist /// \param pItem The file item to add void CGUIWindowMusicBase::AddItemToPlayList(const CFileItemPtr &pItem, CFileItemList &queuedItems) { if (!pItem->CanQueue() || pItem->IsRAR() || pItem->IsZIP() || pItem->IsParentFolder()) // no zip/rar enques thank you! return; // fast lookup is needed here queuedItems.SetFastLookup(true); 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->GetPath())) { // 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) CMusicDbUrl musicUrl; musicUrl.FromString(pItem->GetPath()); musicUrl.AppendPath("-1/"); CFileItemPtr item(new CFileItem(musicUrl.ToString(), true)); item->SetCanQueue(true); // workaround for CanQueue() check above AddItemToPlayList(item, queuedItems); return; } } if (pItem->m_bIsFolder || (g_windowManager.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->GetPath(), 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->GetPath())) { 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(pItem); } else if (pItem->IsPlugin() && pItem->GetProperty("isplayable") == "true") { // python files can be played queuedItems.Add(pItem); } else if (!pItem->IsNFO() && pItem->IsAudio()) { CFileItemPtr itemCheck = queuedItems.Get(pItem->GetPath()); if (!itemCheck || itemCheck->m_lStartOffset != pItem->m_lStartOffset) { // add item CFileItemPtr item(new CFileItem(*pItem)); m_musicdatabase.SetPropertiesForFileItem(*item); queuedItems.Add(item); } } } }
void CGUIWindowMusicNav::GetContextButtons(int itemNumber, CContextButtons &buttons) { CFileItemPtr item; if (itemNumber >= 0 && itemNumber < m_vecItems->Size()) item = m_vecItems->Get(itemNumber); if (item) { // are we in the playlists location? bool inPlaylists = m_vecItems->IsPath(CUtil::MusicPlaylistsLocation()) || m_vecItems->IsPath("special://musicplaylists/"); if (m_vecItems->IsPath("sources://music/")) { // get the usual music shares, and anything for all media windows CGUIDialogContextMenu::GetContextButtons("music", item, buttons); #ifdef HAS_DVD_DRIVE // enable Rip CD an audio disc if (g_mediaManager.IsDiscInDrive() && item->IsCDDA()) { // those cds can also include Audio Tracks: CDExtra and MixedMode! MEDIA_DETECT::CCdInfo *pCdInfo = g_mediaManager.GetCdInfo(); if (pCdInfo->IsAudio(1) || pCdInfo->IsCDExtra(1) || pCdInfo->IsMixedMode(1)) { if (CJobManager::GetInstance().IsProcessing("cdrip")) buttons.Add(CONTEXT_BUTTON_CANCEL_RIP_CD, 14100); else buttons.Add(CONTEXT_BUTTON_RIP_CD, 600); } } #endif // Add the scan button(s) if (g_application.IsMusicScanning()) buttons.Add(CONTEXT_BUTTON_STOP_SCANNING, 13353); // Stop Scanning else if (!inPlaylists && !m_vecItems->IsInternetStream() && !item->IsPath("add") && !item->IsParentFolder() && !item->IsPlugin() && !StringUtils::StartsWithNoCase(item->GetPath(), "addons://") && (CProfilesManager::GetInstance().GetCurrentProfile().canWriteDatabases() || g_passwordManager.bMasterUser)) { buttons.Add(CONTEXT_BUTTON_SCAN, 13352); } CGUIMediaWindow::GetContextButtons(itemNumber, buttons); } else { CGUIWindowMusicBase::GetContextButtons(itemNumber, buttons); CMusicDatabaseDirectory dir; // enable query all albums button only in album view if (item->IsAlbum() && !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 artist view if (dir.IsArtistDir(item->GetPath()) && !dir.IsAllItem(item->GetPath()) && item->m_bIsFolder && !item->IsVideoDb()) { ADDON::ScraperPtr info; if(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::GetInstance().GetString(CSettings::SETTING_MYMUSIC_DEFAULTLIBVIEW))) buttons.Add(CONTEXT_BUTTON_SET_DEFAULT, 13335); // set default if (!CSettings::GetInstance().GetString(CSettings::SETTING_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()->GetArtistString().empty()) { CVideoDatabase database; database.Open(); if (database.GetMatchingMusicVideo(item->GetMusicInfoTag()->GetArtistString()) > -1) buttons.Add(CONTEXT_BUTTON_GO_TO_ARTIST, 20400); } if (item->HasMusicInfoTag() && !item->GetMusicInfoTag()->GetArtistString().empty() && !item->GetMusicInfoTag()->GetAlbum().empty() && !item->GetMusicInfoTag()->GetTitle().empty()) { CVideoDatabase database; database.Open(); if (database.GetMatchingMusicVideo(item->GetMusicInfoTag()->GetArtistString(), item->GetMusicInfoTag()->GetAlbum(), item->GetMusicInfoTag()->GetTitle()) > -1) buttons.Add(CONTEXT_BUTTON_PLAY_OTHER, 20401); } if (item->HasVideoInfoTag() && !item->m_bIsFolder) { if ((CProfilesManager::GetInstance().GetCurrentProfile().canWriteDatabases() || g_passwordManager.bMasterUser) && !item->IsPlugin()) { buttons.Add(CONTEXT_BUTTON_RENAME, 16105); buttons.Add(CONTEXT_BUTTON_DELETE, 646); } } if (inPlaylists && URIUtils::GetFileName(item->GetPath()) != "PartyMode.xsp" && (item->IsPlayList() || item->IsSmartPlayList())) buttons.Add(CONTEXT_BUTTON_DELETE, 117); if (!item->IsReadOnly() && CSettings::GetInstance().GetBool("filelists.allowfiledeletion")) { buttons.Add(CONTEXT_BUTTON_DELETE, 117); buttons.Add(CONTEXT_BUTTON_RENAME, 118); } } } // noncontextual buttons CGUIWindowMusicBase::GetNonContextButtons(buttons); }