diff options
Diffstat (limited to 'xbmc/video/GUIViewStateVideo.cpp')
-rw-r--r-- | xbmc/video/GUIViewStateVideo.cpp | 636 |
1 files changed, 636 insertions, 0 deletions
diff --git a/xbmc/video/GUIViewStateVideo.cpp b/xbmc/video/GUIViewStateVideo.cpp new file mode 100644 index 0000000..3065272 --- /dev/null +++ b/xbmc/video/GUIViewStateVideo.cpp @@ -0,0 +1,636 @@ +/* + * Copyright (C) 2016-2018 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +#include "GUIViewStateVideo.h" + +#include "FileItem.h" +#include "ServiceBroker.h" +#include "VideoDatabase.h" +#include "filesystem/Directory.h" +#include "filesystem/VideoDatabaseDirectory.h" +#include "guilib/WindowIDs.h" +#include "playlists/PlayListTypes.h" +#include "settings/MediaSettings.h" +#include "settings/MediaSourceSettings.h" +#include "settings/Settings.h" +#include "settings/SettingsComponent.h" +#include "utils/FileExtensionProvider.h" +#include "utils/SortUtils.h" +#include "view/ViewStateSettings.h" + +using namespace XFILE; +using namespace VIDEODATABASEDIRECTORY; + +std::string CGUIViewStateWindowVideo::GetLockType() +{ + return "video"; +} + +std::string CGUIViewStateWindowVideo::GetExtensions() +{ + return CServiceBroker::GetFileExtensionProvider().GetVideoExtensions(); +} + +PLAYLIST::Id CGUIViewStateWindowVideo::GetPlaylist() const +{ + return PLAYLIST::TYPE_VIDEO; +} + +VECSOURCES& CGUIViewStateWindowVideo::GetSources() +{ + AddLiveTVSources(); + return CGUIViewState::GetSources(); +} + +bool CGUIViewStateWindowVideo::AutoPlayNextItem() +{ + return AutoPlayNextVideoItem(); +} + +/***************************/ + +CGUIViewStateWindowVideoNav::CGUIViewStateWindowVideoNav(const CFileItemList& items) : CGUIViewStateWindowVideo(items) +{ + SortAttribute sortAttributes = SortAttributeNone; + if (CServiceBroker::GetSettingsComponent()->GetSettings()->GetBool(CSettings::SETTING_FILELISTS_IGNORETHEWHENSORTING)) + sortAttributes = SortAttributeIgnoreArticle; + + if (items.IsVirtualDirectoryRoot()) + { + AddSortMethod(SortByNone, 551, LABEL_MASKS("%F", "%I", "%L", "")); // Filename, Size | Label, empty + SetSortMethod(SortByNone); + + SetViewAsControl(DEFAULT_VIEW_LIST); + + SetSortOrder(SortOrderNone); + } + else if (items.IsVideoDb()) + { + NODE_TYPE NodeType=CVideoDatabaseDirectory::GetDirectoryChildType(items.GetPath()); + CQueryParams params; + CVideoDatabaseDirectory::GetQueryParams(items.GetPath(),params); + + switch (NodeType) + { + case NODE_TYPE_MOVIES_OVERVIEW: + case NODE_TYPE_TVSHOWS_OVERVIEW: + case NODE_TYPE_MUSICVIDEOS_OVERVIEW: + case NODE_TYPE_OVERVIEW: + { + AddSortMethod(SortByNone, 551, LABEL_MASKS("%F", "%I", "%L", "")); // Filename, Size | Label, empty + + SetSortMethod(SortByNone); + + SetViewAsControl(DEFAULT_VIEW_LIST); + + SetSortOrder(SortOrderNone); + } + break; + case NODE_TYPE_DIRECTOR: + case NODE_TYPE_ACTOR: + { + AddSortMethod(SortByLabel, 551, LABEL_MASKS("%T", "%R", "%L", "")); // Title, Rating | Label, empty + AddSortMethod(SortByRelevance, 38026, LABEL_MASKS("%T", "%c", "%L", "%c")); // Title, Actor's appearances (Relevance) | Label, Actor's appearances (Relevance) + SetSortMethod(SortByLabel); + + const CViewState *viewState = CViewStateSettings::GetInstance().Get("videonavactors"); + SetViewAsControl(viewState->m_viewMode); + SetSortOrder(viewState->m_sortDescription.sortOrder); + } + break; + case NODE_TYPE_YEAR: + { + AddSortMethod(SortByLabel, 562, LABEL_MASKS("%T", "%R", "%L", "")); // Title, Rating | Label, empty + SetSortMethod(SortByLabel); + + const CViewState *viewState = CViewStateSettings::GetInstance().Get("videonavyears"); + SetViewAsControl(viewState->m_viewMode); + SetSortOrder(viewState->m_sortDescription.sortOrder); + } + break; + case NODE_TYPE_SEASONS: + { + AddSortMethod(SortBySortTitle, 556, LABEL_MASKS("%L", "","%L","")); // Label, empty | Label, empty + SetSortMethod(SortBySortTitle); + + const CViewState *viewState = CViewStateSettings::GetInstance().Get("videonavseasons"); + SetViewAsControl(viewState->m_viewMode); + SetSortOrder(viewState->m_sortDescription.sortOrder); + } + break; + case NODE_TYPE_TITLE_TVSHOWS: + case NODE_TYPE_INPROGRESS_TVSHOWS: + { + AddSortMethod(SortBySortTitle, sortAttributes, 556, LABEL_MASKS("%T", "%M", "%T", "%M")); // Title, #Episodes | Title, #Episodes + AddSortMethod(SortByOriginalTitle, sortAttributes, 20376, + LABEL_MASKS("%T", "%M", "%T", "%M")); // Title, #Episodes | Title, #Episodes + + AddSortMethod(SortByNumberOfEpisodes, sortAttributes, 20360, + LABEL_MASKS("%L", "%M", "%L", "%M")); // Label, #Episodes | Label, #Episodes + AddSortMethod( + SortByLastPlayed, sortAttributes, 568, + LABEL_MASKS("%T", "%p", "%T", "%p")); // Title, #Last played | Title, #Last played + AddSortMethod(SortByDateAdded, sortAttributes, 570, + LABEL_MASKS("%T", "%a", "%T", "%a")); // Title, DateAdded | Title, DateAdded + AddSortMethod(SortByYear, sortAttributes, 562, + LABEL_MASKS("%L", "%Y", "%L", "%Y")); // Label, Year | Label, Year + AddSortMethod(SortByRating, sortAttributes, 563, + LABEL_MASKS("%T", "%R", "%T", "%R")); // Title, Rating | Title, Rating + AddSortMethod(SortByUserRating, sortAttributes, 38018, + LABEL_MASKS("%T", "%r", "%T", "%r")); // Title, Userrating | Title, Userrating + SetSortMethod(SortByLabel); + + const CViewState *viewState = CViewStateSettings::GetInstance().Get("videonavtvshows"); + SetViewAsControl(viewState->m_viewMode); + SetSortOrder(viewState->m_sortDescription.sortOrder); + } + break; + case NODE_TYPE_MUSICVIDEOS_ALBUM: + case NODE_TYPE_GENRE: + case NODE_TYPE_COUNTRY: + case NODE_TYPE_STUDIO: + { + AddSortMethod(SortByLabel, 551, LABEL_MASKS("%T", "%R", "%L", "")); // Title, Rating | Label, empty + SetSortMethod(SortByLabel); + + const CViewState *viewState = CViewStateSettings::GetInstance().Get("videonavgenres"); + SetViewAsControl(viewState->m_viewMode); + SetSortOrder(viewState->m_sortDescription.sortOrder); + } + break; + case NODE_TYPE_SETS: + { + AddSortMethod(SortByLabel, sortAttributes, 551, LABEL_MASKS("%T","%R", "%T","%R")); // Title, Rating | Title, Rating + + AddSortMethod(SortByYear, 562, LABEL_MASKS("%T", "%Y", "%T", "%Y")); // Title, Year | Title, Year + AddSortMethod(SortByRating, 563, LABEL_MASKS("%T", "%R", "%T", "%R")); // Title, Rating | Title, Rating + AddSortMethod(SortByDateAdded, 570, LABEL_MASKS("%T", "%a", "%T", "%a")); // Title, DateAdded | Title, DateAdded + AddSortMethod(SortByPlaycount, 567, + LABEL_MASKS("%T", "%V", "%T", "%V")); // Title, Playcount | Title, Playcount + + SetSortMethod(SortByLabel); + + const CViewState *viewState = CViewStateSettings::GetInstance().Get("videonavgenres"); + SetViewAsControl(viewState->m_viewMode); + SetSortOrder(viewState->m_sortDescription.sortOrder); + } + break; + case NODE_TYPE_TAGS: + { + AddSortMethod(SortByLabel, sortAttributes, 551, LABEL_MASKS("%T","", "%T","")); // Title, empty | Title, empty + SetSortMethod(SortByLabel); + + const CViewState *viewState = CViewStateSettings::GetInstance().Get("videonavgenres"); + SetViewAsControl(viewState->m_viewMode); + SetSortOrder(viewState->m_sortDescription.sortOrder); + } + break; + case NODE_TYPE_EPISODES: + { + if (params.GetSeason() > -1) + { + AddSortMethod(SortByEpisodeNumber, 20359, LABEL_MASKS("%E. %T","%R")); // Episode. Title, Rating | empty, empty + AddSortMethod(SortByRating, 563, LABEL_MASKS("%E. %T", "%R")); // Episode. Title, Rating | empty, empty + AddSortMethod(SortByUserRating, 38018, LABEL_MASKS("%E. %T", "%r")); // Episode. Title, Userrating | empty, empty + AddSortMethod(SortByMPAA, 20074, LABEL_MASKS("%E. %T", "%O")); // Episode. Title, MPAA | empty, empty + AddSortMethod(SortByProductionCode, 20368, LABEL_MASKS("%E. %T","%P", "%E. %T","%P")); // Episode. Title, ProductionCode | Episode. Title, ProductionCode + AddSortMethod(SortByDate, 552, LABEL_MASKS("%E. %T","%J","%E. %T","%J")); // Episode. Title, Date | Episode. Title, Date + AddSortMethod(SortByPlaycount, 567, + LABEL_MASKS("%E. %T", "%V")); // Episode. Title, Playcount | empty, empty + } + else + { + AddSortMethod(SortByEpisodeNumber, 20359, LABEL_MASKS("%H. %T","%R")); // Order. Title, Rating | empty, empty + AddSortMethod(SortByRating, 563, LABEL_MASKS("%H. %T", "%R")); // Order. Title, Rating | empty, empty + AddSortMethod(SortByUserRating, 38018, LABEL_MASKS("%H. %T", "%r")); // Order. Title, Userrating | empty, empty + AddSortMethod(SortByMPAA, 20074, LABEL_MASKS("%H. %T", "%O")); // Order. Title, MPAA | empty, empty + AddSortMethod(SortByProductionCode, 20368, LABEL_MASKS("%H. %T","%P", "%H. %T","%P")); // Order. Title, ProductionCode | Episode. Title, ProductionCode + AddSortMethod(SortByDate, 552, LABEL_MASKS("%H. %T","%J","%H. %T","%J")); // Order. Title, Date | Episode. Title, Date + AddSortMethod(SortByPlaycount, 567, + LABEL_MASKS("%H. %T", "%V")); // Order. Title, Playcount | empty, empty + } + AddSortMethod(SortByLabel, sortAttributes, 551, LABEL_MASKS("%T","%R")); // Title, Rating | empty, empty + + const CViewState *viewState = CViewStateSettings::GetInstance().Get("videonavepisodes"); + SetSortMethod(viewState->m_sortDescription); + SetViewAsControl(viewState->m_viewMode); + SetSortOrder(viewState->m_sortDescription.sortOrder); + break; + } + case NODE_TYPE_RECENTLY_ADDED_EPISODES: + { + AddSortMethod(SortByNone, 552, LABEL_MASKS("%Z - %H. %T", "%R")); // TvShow - Order. Title, Rating | empty, empty + SetSortMethod(SortByNone); + + SetViewAsControl(CViewStateSettings::GetInstance().Get("videonavepisodes")->m_viewMode); + SetSortOrder(SortOrderNone); + + break; + } + case NODE_TYPE_TITLE_MOVIES: + { + if (params.GetSetId() > -1) // Is this a listing within a set? + { + AddSortMethod(SortByYear, 562, LABEL_MASKS("%T", "%Y")); // Title, Year | empty, empty + AddSortMethod(SortBySortTitle, sortAttributes, 556, LABEL_MASKS("%T", "%R")); // Title, Rating | empty, empty + AddSortMethod(SortByOriginalTitle, sortAttributes, 20376, + LABEL_MASKS("%T", "%R")); // Title, Rating | empty, empty + } + else + { + AddSortMethod(SortBySortTitle, sortAttributes, 556, LABEL_MASKS("%T", "%R", "%T", "%R")); // Title, Rating | Title, Rating + AddSortMethod(SortByOriginalTitle, sortAttributes, 20376, + LABEL_MASKS("%T", "%R", "%T", "%R")); // Title, Rating | Title, Rating + AddSortMethod(SortByYear, 562, LABEL_MASKS("%T", "%Y", "%T", "%Y")); // Title, Year | Title, Year + } + AddSortMethod(SortByRating, 563, LABEL_MASKS("%T", "%R", "%T", "%R")); // Title, Rating | Title, Rating + AddSortMethod(SortByUserRating, 38018, LABEL_MASKS("%T", "%r", "%T", "%r")); // Title, Userrating | Title, Userrating + AddSortMethod(SortByMPAA, 20074, LABEL_MASKS("%T", "%O")); // Title, MPAA | empty, empty + AddSortMethod(SortByTime, 180, LABEL_MASKS("%T", "%D")); // Title, Duration | empty, empty + AddSortMethod(SortByDateAdded, 570, LABEL_MASKS("%T", "%a", "%T", "%a")); // Title, DateAdded | Title, DateAdded + AddSortMethod(SortByLastPlayed, 568, LABEL_MASKS("%T", "%p", "%T", "%p")); // Title, #Last played | Title, #Last played + AddSortMethod(SortByPlaycount, 567, + LABEL_MASKS("%T", "%V", "%T", "%V")); // Title, Playcount | Title, Playcount + + const CViewState *viewState = CViewStateSettings::GetInstance().Get("videonavtitles"); + if (params.GetSetId() > -1) + { + SetSortMethod(SortByYear); + SetSortOrder(SortOrderAscending); + } + else + { + SetSortMethod(viewState->m_sortDescription); + SetSortOrder(viewState->m_sortDescription.sortOrder); + } + + SetViewAsControl(viewState->m_viewMode); + } + break; + case NODE_TYPE_TITLE_MUSICVIDEOS: + { + AddSortMethod(SortByLabel, sortAttributes, 551, LABEL_MASKS("%T - %A", "%Y")); // Title, Artist, Year | empty, empty + AddSortMethod(SortByAlbum, sortAttributes, 558, LABEL_MASKS("%B - %T - %A", "%Y")); // Album, Title, Artist, Year | empty, empty + AddSortMethod(SortByArtist, sortAttributes, 557, LABEL_MASKS("%A - %T", "%Y")); // Artist - Title, Year | empty, empty + AddSortMethod(SortByArtistThenYear, sortAttributes, 578, LABEL_MASKS("%A - %T", "%Y")); // Artist, Title, Year| empty, empty + AddSortMethod(SortByYear, 562, LABEL_MASKS("%T - %A", "%Y")); // Title, Artist, Year| empty, empty + AddSortMethod(SortByTime, 180, LABEL_MASKS("%T - %A", "%D")); // Title, Artist, Duration| empty, empty + AddSortMethod(SortByDateAdded, 570, LABEL_MASKS("%T - %A", "%a")); // Title - Artist, DateAdded | empty, empty + AddSortMethod(SortByPlaycount, 567, LABEL_MASKS("%T - %A", "%V")); // Title - Artist, PlayCount + AddSortMethod(SortByMPAA, 20074, LABEL_MASKS("%T - %A", "%O")); // Title - Artist, MPAARating + AddSortMethod(SortByUserRating, 38018, LABEL_MASKS("%T - %A", "%r")); // Title - Artist, UserRating + + std::string strTrack=CServiceBroker::GetSettingsComponent()->GetSettings()->GetString(CSettings::SETTING_MUSICFILES_TRACKFORMAT); + AddSortMethod(SortByTrackNumber, 554, LABEL_MASKS(strTrack, "%N")); // Userdefined, Track Number | empty, empty + + const CViewState *viewState = CViewStateSettings::GetInstance().Get("videonavmusicvideos"); + SetSortMethod(viewState->m_sortDescription); + SetViewAsControl(viewState->m_viewMode); + SetSortOrder(viewState->m_sortDescription.sortOrder); + } + break; + case NODE_TYPE_RECENTLY_ADDED_MOVIES: + { + AddSortMethod(SortByNone, 552, LABEL_MASKS("%T", "%R")); // Title, Rating | empty, empty + SetSortMethod(SortByNone); + + SetViewAsControl(CViewStateSettings::GetInstance().Get("videonavtitles")->m_viewMode); + + SetSortOrder(SortOrderNone); + } + break; + case NODE_TYPE_RECENTLY_ADDED_MUSICVIDEOS: + { + AddSortMethod(SortByNone, 552, LABEL_MASKS("%A - %T", "%Y")); // Artist - Title, Year | empty, empty + SetSortMethod(SortByNone); + + SetViewAsControl(CViewStateSettings::GetInstance().Get("videonavmusicvideos")->m_viewMode); + + SetSortOrder(SortOrderNone); + } + break; + default: + break; + } + } + else + { + AddSortMethod(SortByLabel, sortAttributes, 551, LABEL_MASKS("%L", "%I", "%L", "")); // Label, Size | Label, empty + AddSortMethod(SortBySize, 553, LABEL_MASKS("%L", "%I", "%L", "%I")); // Label, Size | Label, Size + AddSortMethod(SortByDate, 552, LABEL_MASKS("%L", "%J", "%L", "%J")); // Label, Date | Label, Date + AddSortMethod(SortByFile, 561, LABEL_MASKS("%L", "%I", "%L", "")); // Label, Size | Label, empty + + const CViewState *viewState = CViewStateSettings::GetInstance().Get("videofiles"); + SetSortMethod(viewState->m_sortDescription); + SetViewAsControl(viewState->m_viewMode); + SetSortOrder(viewState->m_sortDescription.sortOrder); + } + LoadViewState(items.GetPath(), WINDOW_VIDEO_NAV); +} + +void CGUIViewStateWindowVideoNav::SaveViewState() +{ + if (m_items.IsVideoDb()) + { + NODE_TYPE NodeType = CVideoDatabaseDirectory::GetDirectoryChildType(m_items.GetPath()); + CQueryParams params; + CVideoDatabaseDirectory::GetQueryParams(m_items.GetPath(),params); + switch (NodeType) + { + case NODE_TYPE_ACTOR: + SaveViewToDb(m_items.GetPath(), WINDOW_VIDEO_NAV, CViewStateSettings::GetInstance().Get("videonavactors")); + break; + case NODE_TYPE_YEAR: + SaveViewToDb(m_items.GetPath(), WINDOW_VIDEO_NAV, CViewStateSettings::GetInstance().Get("videonavyears")); + break; + case NODE_TYPE_GENRE: + SaveViewToDb(m_items.GetPath(), WINDOW_VIDEO_NAV, CViewStateSettings::GetInstance().Get("videonavgenres")); + break; + case NODE_TYPE_TITLE_MOVIES: + SaveViewToDb(m_items.GetPath(), WINDOW_VIDEO_NAV, params.GetSetId() > -1 ? NULL : CViewStateSettings::GetInstance().Get("videonavtitles")); + break; + case NODE_TYPE_EPISODES: + SaveViewToDb(m_items.GetPath(), WINDOW_VIDEO_NAV, CViewStateSettings::GetInstance().Get("videonavepisodes")); + break; + case NODE_TYPE_TITLE_TVSHOWS: + SaveViewToDb(m_items.GetPath(), WINDOW_VIDEO_NAV, CViewStateSettings::GetInstance().Get("videonavtvshows")); + break; + case NODE_TYPE_SEASONS: + SaveViewToDb(m_items.GetPath(), WINDOW_VIDEO_NAV, CViewStateSettings::GetInstance().Get("videonavseasons")); + break; + case NODE_TYPE_TITLE_MUSICVIDEOS: + SaveViewToDb(m_items.GetPath(), WINDOW_VIDEO_NAV, CViewStateSettings::GetInstance().Get("videonavmusicvideos")); + break; + default: + SaveViewToDb(m_items.GetPath(), WINDOW_VIDEO_NAV); + break; + } + } + else + { + SaveViewToDb(m_items.GetPath(), WINDOW_VIDEO_NAV, CViewStateSettings::GetInstance().Get("videofiles")); + } +} + +VECSOURCES& CGUIViewStateWindowVideoNav::GetSources() +{ + // Setup shares we want to have + m_sources.clear(); + CFileItemList items; + if (CServiceBroker::GetSettingsComponent()->GetSettings()->GetBool(CSettings::SETTING_MYVIDEOS_FLATTEN)) + CDirectory::GetDirectory("library://video_flat/", items, "", DIR_FLAG_DEFAULTS); + else + CDirectory::GetDirectory("library://video/", items, "", DIR_FLAG_DEFAULTS); + for (int i=0; i<items.Size(); ++i) + { + CFileItemPtr item=items[i]; + CMediaSource share; + share.strName=item->GetLabel(); + share.strPath = item->GetPath(); + share.m_strThumbnailImage = item->GetArt("icon"); + share.m_iDriveType = CMediaSource::SOURCE_TYPE_LOCAL; + m_sources.push_back(share); + } + return CGUIViewStateWindowVideo::GetSources(); +} + +bool CGUIViewStateWindowVideoNav::AutoPlayNextItem() +{ + CQueryParams params; + CVideoDatabaseDirectory::GetQueryParams(m_items.GetPath(),params); + if (static_cast<VideoDbContentType>(params.GetContentType()) == VideoDbContentType::MUSICVIDEOS) + return CServiceBroker::GetSettingsComponent()->GetSettings()->GetBool(CSettings::SETTING_MUSICPLAYER_AUTOPLAYNEXTITEM); + + return CGUIViewStateWindowVideo::AutoPlayNextItem(); +} + +CGUIViewStateWindowVideoPlaylist::CGUIViewStateWindowVideoPlaylist(const CFileItemList& items) : CGUIViewStateWindowVideo(items) +{ + AddSortMethod(SortByNone, 551, LABEL_MASKS("%L", "", "%L", "")); // Label, empty | Label, empty + SetSortMethod(SortByNone); + + SetViewAsControl(DEFAULT_VIEW_LIST); + + SetSortOrder(SortOrderNone); + + LoadViewState(items.GetPath(), WINDOW_VIDEO_PLAYLIST); +} + +void CGUIViewStateWindowVideoPlaylist::SaveViewState() +{ + SaveViewToDb(m_items.GetPath(), WINDOW_VIDEO_PLAYLIST); +} + +bool CGUIViewStateWindowVideoPlaylist::HideExtensions() +{ + return true; +} + +bool CGUIViewStateWindowVideoPlaylist::HideParentDirItems() +{ + return true; +} + +VECSOURCES& CGUIViewStateWindowVideoPlaylist::GetSources() +{ + m_sources.clear(); + // Playlist share + CMediaSource share; + share.strPath= "playlistvideo://"; + share.m_iDriveType = CMediaSource::SOURCE_TYPE_LOCAL; + m_sources.push_back(share); + + // no plugins in playlist window + return m_sources; +} + +CGUIViewStateVideoMovies::CGUIViewStateVideoMovies(const CFileItemList& items) : CGUIViewStateWindowVideo(items) +{ + SortAttribute sortAttributes = SortAttributeNone; + if (CServiceBroker::GetSettingsComponent()->GetSettings()->GetBool( + CSettings::SETTING_FILELISTS_IGNORETHEWHENSORTING)) + sortAttributes = SortAttributeIgnoreArticle; + + AddSortMethod(SortBySortTitle, sortAttributes, 556, + LABEL_MASKS("%T", "%R", "%T", "%R")); // Title, Rating | Title, Rating + AddSortMethod(SortByOriginalTitle, sortAttributes, 20376, + LABEL_MASKS("%T", "%R", "%T", "%R")); // Title, Rating | Title, Rating + AddSortMethod(SortByYear, 562, LABEL_MASKS("%T", "%Y", "%T", "%Y")); // Title, Year | Title, Year + AddSortMethod(SortByRating, 563, LABEL_MASKS("%T", "%R", "%T", "%R")); // Title, Rating | Title, Rating + AddSortMethod(SortByUserRating, 38018, LABEL_MASKS("%T", "%r", "%T", "%r")); // Title, Userrating | Title, Userrating + AddSortMethod(SortByMPAA, 20074, LABEL_MASKS("%T", "%O")); // Title, MPAA | empty, empty + AddSortMethod(SortByTime, 180, LABEL_MASKS("%T", "%D")); // Title, Duration | empty, empty + AddSortMethod(SortByDateAdded, 570, LABEL_MASKS("%T", "%a", "%T", "%a")); // Title, DateAdded | Title, DateAdded + AddSortMethod(SortByPlaycount, 567, + LABEL_MASKS("%T", "%V", "%T", "%V")); // Title, Playcount | Title, Playcount + + const CViewState *viewState = CViewStateSettings::GetInstance().Get("videonavtitles"); + if (items.IsSmartPlayList() || items.IsLibraryFolder()) + AddPlaylistOrder(items, LABEL_MASKS("%T", "%R", "%T", "%R")); // Title, Rating | Title, Rating + else + { + SetSortMethod(viewState->m_sortDescription); + SetSortOrder(viewState->m_sortDescription.sortOrder); + } + + SetViewAsControl(viewState->m_viewMode); + + LoadViewState(items.GetPath(), WINDOW_VIDEO_NAV); +} + +void CGUIViewStateVideoMovies::SaveViewState() +{ + SaveViewToDb(m_items.GetPath(), WINDOW_VIDEO_NAV, CViewStateSettings::GetInstance().Get("videonavtitles")); +} + +CGUIViewStateVideoMusicVideos::CGUIViewStateVideoMusicVideos(const CFileItemList& items) : CGUIViewStateWindowVideo(items) +{ + SortAttribute sortAttributes = SortAttributeNone; + const std::shared_ptr<CSettings> settings = CServiceBroker::GetSettingsComponent()->GetSettings(); + if (settings->GetBool(CSettings::SETTING_FILELISTS_IGNORETHEWHENSORTING)) + sortAttributes = SortAttributeIgnoreArticle; + + AddSortMethod(SortByLabel, sortAttributes, 551, LABEL_MASKS("%T - %A", "%Y")); // Title, Artist, Year | empty, empty + AddSortMethod(SortByAlbum, sortAttributes, 558, LABEL_MASKS("%B - %T - %A", "%Y")); // Album, Title, Artist, Year | empty, empty + AddSortMethod(SortByArtist, sortAttributes, 557, LABEL_MASKS("%A - %T", "%Y")); // Artist - Title, Year | empty, empty + AddSortMethod(SortByArtistThenYear, sortAttributes, 578, LABEL_MASKS("%A - %T", "%Y")); // Artist, Title, Year| empty, empty + AddSortMethod(SortByYear, 562, LABEL_MASKS("%T - %A", "%Y")); // Title, Artist, Year| empty, empty + AddSortMethod(SortByTime, 180, LABEL_MASKS("%T - %A", "%D")); // Title, Artist, Duration| empty, empty + AddSortMethod(SortByDateAdded, 570, LABEL_MASKS("%T - %A", "%a")); // Title - Artist, DateAdded | empty, empty + AddSortMethod(SortByPlaycount, 567, LABEL_MASKS("%T - %A", "%V")); // Title - Artist, PlayCount + AddSortMethod(SortByMPAA, 20074, LABEL_MASKS("%T - %A", "%O")); // Title - Artist, MPAARating + AddSortMethod(SortByUserRating, 38018, LABEL_MASKS("%T - %A", "%r")); // Title - Artist, UserRating + + std::string strTrack = settings->GetString(CSettings::SETTING_MUSICFILES_TRACKFORMAT); + AddSortMethod(SortByTrackNumber, 554, LABEL_MASKS(strTrack, "%N")); // Userdefined, Track Number | empty, empty + + const CViewState *viewState = CViewStateSettings::GetInstance().Get("videonavmusicvideos"); + if (items.IsSmartPlayList() || items.IsLibraryFolder()) + AddPlaylistOrder(items, LABEL_MASKS("%A - %T", "%Y")); // Artist - Title, Year | empty, empty + else + { + SetSortMethod(viewState->m_sortDescription); + SetSortOrder(viewState->m_sortDescription.sortOrder); + } + + SetViewAsControl(viewState->m_viewMode); + + LoadViewState(items.GetPath(), WINDOW_VIDEO_NAV); +} + +void CGUIViewStateVideoMusicVideos::SaveViewState() +{ + SaveViewToDb(m_items.GetPath(), WINDOW_VIDEO_NAV, CViewStateSettings::GetInstance().Get("videonavmusicvideos")); +} + +CGUIViewStateVideoTVShows::CGUIViewStateVideoTVShows(const CFileItemList& items) : CGUIViewStateWindowVideo(items) +{ + SortAttribute sortAttributes = SortAttributeNone; + const std::shared_ptr<CSettings> settings = CServiceBroker::GetSettingsComponent()->GetSettings(); + if (settings->GetBool(CSettings::SETTING_FILELISTS_IGNORETHEWHENSORTING)) + sortAttributes = SortAttributeIgnoreArticle; + + AddSortMethod(SortBySortTitle, sortAttributes, 556, + LABEL_MASKS("%T", "%M", "%T", "%M")); // Title, #Episodes | Title, #Episodes + AddSortMethod(SortByNumberOfEpisodes, sortAttributes, 20360, + LABEL_MASKS("%L", "%M", "%L", "%M")); // Label, #Episodes | Label, #Episodes + AddSortMethod(SortByLastPlayed, sortAttributes, 568, + LABEL_MASKS("%T", "%p", "%T", "%p")); // Title, #Last played | Title, #Last played + AddSortMethod(SortByDateAdded, sortAttributes, 570, + LABEL_MASKS("%T", "%a", "%T", "%a")); // Title, DateAdded | Title, DateAdded + AddSortMethod(SortByYear, sortAttributes, 562, + LABEL_MASKS("%T", "%Y", "%T", "%Y")); // Title, Year | Title, Year + AddSortMethod(SortByUserRating, sortAttributes, 38018, + LABEL_MASKS("%T", "%r", "%T", "%r")); // Title, Userrating | Title, Userrating + + const CViewState *viewState = CViewStateSettings::GetInstance().Get("videonavtvshows"); + if (items.IsSmartPlayList() || items.IsLibraryFolder()) + AddPlaylistOrder(items, LABEL_MASKS("%T", "%M", "%T", "%M")); // Title, #Episodes | Title, #Episodes + else + { + SetSortMethod(viewState->m_sortDescription); + SetSortOrder(viewState->m_sortDescription.sortOrder); + } + + SetViewAsControl(viewState->m_viewMode); + + LoadViewState(items.GetPath(), WINDOW_VIDEO_NAV); +} + +void CGUIViewStateVideoTVShows::SaveViewState() +{ + SaveViewToDb(m_items.GetPath(), WINDOW_VIDEO_NAV, CViewStateSettings::GetInstance().Get("videonavtvshows")); +} + +CGUIViewStateVideoEpisodes::CGUIViewStateVideoEpisodes(const CFileItemList& items) : CGUIViewStateWindowVideo(items) +{ + // TvShow - Order. Title, Rating | empty, empty + AddSortMethod(SortByEpisodeNumber, 20359, LABEL_MASKS("%Z - %H. %T","%R")); + // TvShow - Order. Title, Rating | empty, empty + AddSortMethod(SortByRating, 563, LABEL_MASKS("%Z - %H. %T", "%R")); + // TvShow - Order. Title, Userrating | empty, empty + AddSortMethod(SortByUserRating, 38018, LABEL_MASKS("%Z - %H. %T", "%r")); + // TvShow - Order. Title, MPAA | empty, empty + AddSortMethod(SortByMPAA, 20074, LABEL_MASKS("%Z - %H. %T", "%O")); + // TvShow - Order. Title, Production Code | empty, empty + AddSortMethod(SortByProductionCode, 20368, LABEL_MASKS("%Z - %H. %T","%P")); + // TvShow - Order. Title, Date | empty, empty + AddSortMethod(SortByDate, 552, LABEL_MASKS("%Z - %H. %T","%J")); + // TvShow - Order. Title, Playcount | empty, empty + AddSortMethod(SortByPlaycount, 567, LABEL_MASKS("%H. %T", "%V")); + + AddSortMethod(SortByLabel, 551, LABEL_MASKS("%Z - %H. %T","%R"), // TvShow - Order. Title, Rating | empty, empty + CServiceBroker::GetSettingsComponent()->GetSettings()->GetBool(CSettings::SETTING_FILELISTS_IGNORETHEWHENSORTING) ? SortAttributeIgnoreArticle : SortAttributeNone); + + const CViewState *viewState = CViewStateSettings::GetInstance().Get("videonavepisodes"); + if (items.IsSmartPlayList() || items.IsLibraryFolder()) + AddPlaylistOrder(items, LABEL_MASKS("%Z - %H. %T", "%R")); // TvShow - Order. Title, Rating | empty, empty + else + { + SetSortMethod(viewState->m_sortDescription); + SetSortOrder(viewState->m_sortDescription.sortOrder); + } + + SetViewAsControl(viewState->m_viewMode); + + LoadViewState(items.GetPath(), WINDOW_VIDEO_NAV); +} + +void CGUIViewStateVideoEpisodes::SaveViewState() +{ + SaveViewToDb(m_items.GetPath(), WINDOW_VIDEO_NAV, CViewStateSettings::GetInstance().Get("videonavepisodes")); +} + +CGUIViewStateVideoPlaylist::CGUIViewStateVideoPlaylist(const CFileItemList& items) + : CGUIViewStateWindowVideo(items) +{ + SortAttribute sortAttributes = SortAttributeNone; + if (CServiceBroker::GetSettingsComponent()->GetSettings()->GetBool( + CSettings::SETTING_FILELISTS_IGNORETHEWHENSORTING)) + sortAttributes = SortAttributeIgnoreArticle; + + AddSortMethod(SortByPlaylistOrder, 559, LABEL_MASKS("%L", "")); // Label, empty + AddSortMethod(SortByLabel, sortAttributes, 551, + LABEL_MASKS("%L", "%I", "%L", "")); // Label, Size | Label, empty + AddSortMethod(SortBySize, 553, LABEL_MASKS("%L", "%I", "%L", "%I")); // Label, Size | Label, Size + AddSortMethod(SortByDate, 552, LABEL_MASKS("%L", "%J", "%L", "%J")); // Label, Date | Label, Date + AddSortMethod(SortByFile, 561, LABEL_MASKS("%L", "%I", "%L", "")); // Label, Size | Label, empty + + SetSortMethod(SortByPlaylistOrder); + + const CViewState* viewState = CViewStateSettings::GetInstance().Get("videofiles"); + SetViewAsControl(viewState->m_viewMode); + SetSortOrder(viewState->m_sortDescription.sortOrder); + + LoadViewState(items.GetPath(), WINDOW_VIDEO_NAV); +} + +void CGUIViewStateVideoPlaylist::SaveViewState() +{ + SaveViewToDb(m_items.GetPath(), WINDOW_VIDEO_NAV); +} |