aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Kodi.xcodeproj/project.pbxproj16
-rw-r--r--project/VS2010Express/XBMC.vcxproj6
-rw-r--r--project/VS2010Express/XBMC.vcxproj.filters14
-rw-r--r--xbmc/FileItemListModification.cpp4
-rw-r--r--xbmc/filesystem/MusicDatabaseDirectory/DirectoryNode.cpp110
-rw-r--r--xbmc/filesystem/MusicDatabaseDirectory/DirectoryNode.h9
-rw-r--r--xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeAlbumRecentlyAdded.h6
-rw-r--r--xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeAlbumRecentlyPlayed.h6
-rw-r--r--xbmc/filesystem/VideoDatabaseDirectory/DirectoryNode.cpp91
-rw-r--r--xbmc/filesystem/VideoDatabaseDirectory/DirectoryNode.h8
-rw-r--r--xbmc/music/windows/Makefile1
-rw-r--r--xbmc/music/windows/MusicFileItemListModifier.cpp105
-rw-r--r--xbmc/music/windows/MusicFileItemListModifier.h36
-rw-r--r--xbmc/video/windows/Makefile1
-rw-r--r--xbmc/video/windows/VideoFileItemListModifier.cpp126
-rw-r--r--xbmc/video/windows/VideoFileItemListModifier.h36
16 files changed, 371 insertions, 204 deletions
diff --git a/Kodi.xcodeproj/project.pbxproj b/Kodi.xcodeproj/project.pbxproj
index e3e441885c..88a20095b3 100644
--- a/Kodi.xcodeproj/project.pbxproj
+++ b/Kodi.xcodeproj/project.pbxproj
@@ -625,6 +625,10 @@
889B4D8E0E0EF86C00FAD25E /* RSSDirectory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 889B4D8C0E0EF86C00FAD25E /* RSSDirectory.cpp */; };
9A7368511C401F5F00CA169F /* DirectoryNodeInProgressTvShows.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9A73684F1C401F5F00CA169F /* DirectoryNodeInProgressTvShows.cpp */; };
9A7368521C401F5F00CA169F /* DirectoryNodeInProgressTvShows.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9A73684F1C401F5F00CA169F /* DirectoryNodeInProgressTvShows.cpp */; };
+ 9AC167B61C5ED478004F0C29 /* MusicFileItemListModifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC167B41C5ED478004F0C29 /* MusicFileItemListModifier.cpp */; };
+ 9AC167B71C5ED478004F0C29 /* MusicFileItemListModifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC167B41C5ED478004F0C29 /* MusicFileItemListModifier.cpp */; };
+ 9AC167BA1C5ED48A004F0C29 /* VideoFileItemListModifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC167B81C5ED48A004F0C29 /* VideoFileItemListModifier.cpp */; };
+ 9AC167BB1C5ED48A004F0C29 /* VideoFileItemListModifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC167B81C5ED48A004F0C29 /* VideoFileItemListModifier.cpp */; };
AE32174218313ADF0003FAFC /* XSLTUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AE4E87A517354C4A00D15206 /* XSLTUtils.cpp */; };
AE4E87A717354C4A00D15206 /* XSLTUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AE4E87A517354C4A00D15206 /* XSLTUtils.cpp */; };
AE84CB5A15A5B8A600A3810E /* TagLibVFSStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AE84CB5915A5B8A600A3810E /* TagLibVFSStream.cpp */; };
@@ -3280,6 +3284,10 @@
8DD76F7E0486A8DE00D96B5E /* Kodi */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = Kodi; sourceTree = BUILT_PRODUCTS_DIR; };
9A73684F1C401F5F00CA169F /* DirectoryNodeInProgressTvShows.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DirectoryNodeInProgressTvShows.cpp; sourceTree = "<group>"; };
9A7368501C401F5F00CA169F /* DirectoryNodeInProgressTvShows.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DirectoryNodeInProgressTvShows.h; sourceTree = "<group>"; };
+ 9AC167B41C5ED478004F0C29 /* MusicFileItemListModifier.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MusicFileItemListModifier.cpp; sourceTree = "<group>"; };
+ 9AC167B51C5ED478004F0C29 /* MusicFileItemListModifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MusicFileItemListModifier.h; sourceTree = "<group>"; };
+ 9AC167B81C5ED48A004F0C29 /* VideoFileItemListModifier.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VideoFileItemListModifier.cpp; sourceTree = "<group>"; };
+ 9AC167B91C5ED48A004F0C29 /* VideoFileItemListModifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VideoFileItemListModifier.h; sourceTree = "<group>"; };
AE4E87A517354C4A00D15206 /* XSLTUtils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = XSLTUtils.cpp; sourceTree = "<group>"; };
AE4E87A617354C4A00D15206 /* XSLTUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XSLTUtils.h; sourceTree = "<group>"; };
AE84CB5915A5B8A600A3810E /* TagLibVFSStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TagLibVFSStream.cpp; sourceTree = "<group>"; };
@@ -5514,6 +5522,8 @@
431376DC12D6430600680C15 /* windows */ = {
isa = PBXGroup;
children = (
+ 9AC167B41C5ED478004F0C29 /* MusicFileItemListModifier.cpp */,
+ 9AC167B51C5ED478004F0C29 /* MusicFileItemListModifier.h */,
E38E180D0D25F9FA00618676 /* GUIWindowMusicBase.cpp */,
E38E180E0D25F9FA00618676 /* GUIWindowMusicBase.h */,
E38E18110D25F9FA00618676 /* GUIWindowMusicNav.cpp */,
@@ -5843,6 +5853,8 @@
43FAC88812D6364800F67914 /* windows */ = {
isa = PBXGroup;
children = (
+ 9AC167B81C5ED48A004F0C29 /* VideoFileItemListModifier.cpp */,
+ 9AC167B91C5ED48A004F0C29 /* VideoFileItemListModifier.h */,
E38E18050D25F9FA00618676 /* GUIWindowFullScreen.cpp */,
E38E18060D25F9FA00618676 /* GUIWindowFullScreen.h */,
E38E183B0D25F9FA00618676 /* GUIWindowVideoBase.cpp */,
@@ -9867,6 +9879,7 @@
C8482901156CFE4B005A996F /* Observer.cpp in Sources */,
DFC6F4C11AFF7E300039A7FA /* rfft.cpp in Sources */,
C8482904156CFED9005A996F /* DVDDemuxPVRClient.cpp in Sources */,
+ 9AC167BA1C5ED48A004F0C29 /* VideoFileItemListModifier.cpp in Sources */,
C8482909156CFF24005A996F /* PVRDirectory.cpp in Sources */,
C848290A156CFF24005A996F /* PVRFile.cpp in Sources */,
C8482910156CFFA0005A996F /* DVDInputStreamPVRManager.cpp in Sources */,
@@ -10142,6 +10155,7 @@
7CCDA7DC192756250074CF51 /* NptList.cpp in Sources */,
7CCDA7E5192756250074CF51 /* NptLogging.cpp in Sources */,
7CCDA7E8192756250074CF51 /* NptMessaging.cpp in Sources */,
+ 9AC167B61C5ED478004F0C29 /* MusicFileItemListModifier.cpp in Sources */,
7CCDA7F1192756250074CF51 /* NptNetwork.cpp in Sources */,
7CCDA7FA192756250074CF51 /* NptQueue.cpp in Sources */,
7CCDA803192756250074CF51 /* NptResults.cpp in Sources */,
@@ -11028,6 +11042,7 @@
E4991541174E642900741B6D /* SectionLoader.cpp in Sources */,
E4991542174E642900741B6D /* SystemGlobals.cpp in Sources */,
E4991544174E642900741B6D /* TextureCache.cpp in Sources */,
+ 9AC167B71C5ED478004F0C29 /* MusicFileItemListModifier.cpp in Sources */,
E4991545174E642900741B6D /* TextureCacheJob.cpp in Sources */,
E4991546174E642900741B6D /* TextureDatabase.cpp in Sources */,
E4991547174E642900741B6D /* ThumbLoader.cpp in Sources */,
@@ -11164,6 +11179,7 @@
7CCDA151192753E30074CF51 /* PltIconsData.cpp in Sources */,
7CCDA15A192753E30074CF51 /* PltMimeType.cpp in Sources */,
7CCDA163192753E30074CF51 /* PltProtocolInfo.cpp in Sources */,
+ 9AC167BB1C5ED48A004F0C29 /* VideoFileItemListModifier.cpp in Sources */,
7CCDA16C192753E30074CF51 /* PltService.cpp in Sources */,
7CCDA175192753E30074CF51 /* PltSsdp.cpp in Sources */,
7CCDA17E192753E30074CF51 /* PltStateVariable.cpp in Sources */,
diff --git a/project/VS2010Express/XBMC.vcxproj b/project/VS2010Express/XBMC.vcxproj
index 22bb772e17..79b0359350 100644
--- a/project/VS2010Express/XBMC.vcxproj
+++ b/project/VS2010Express/XBMC.vcxproj
@@ -372,6 +372,7 @@
<ClCompile Include="..\..\xbmc\filesystem\MultiPathFile.cpp" />
<ClCompile Include="..\..\xbmc\filesystem\MusicDatabaseDirectory.cpp" />
<ClCompile Include="..\..\xbmc\filesystem\MusicDatabaseDirectory\DirectoryNodeGrouped.cpp" />
+ <ClCompile Include="..\..\xbmc\music\windows\MusicFileItemListModifier.cpp" />
<ClCompile Include="..\..\xbmc\filesystem\MusicDatabaseFile.cpp" />
<ClCompile Include="..\..\xbmc\filesystem\MusicFileDirectory.cpp" />
<ClCompile Include="..\..\xbmc\filesystem\MusicSearchDirectory.cpp" />
@@ -987,6 +988,7 @@
<ClInclude Include="..\..\xbmc\filesystem\DAVFile.h" />
<ClInclude Include="..\..\xbmc\filesystem\ImageFile.h" />
<ClInclude Include="..\..\xbmc\filesystem\MusicDatabaseDirectory\DirectoryNodeGrouped.h" />
+ <ClInclude Include="..\..\xbmc\music\windows\MusicFileItemListModifier.h" />
<ClInclude Include="..\..\xbmc\filesystem\OverrideDirectory.h" />
<ClInclude Include="..\..\xbmc\filesystem\OverrideFile.h" />
<ClInclude Include="..\..\xbmc\filesystem\ResourceDirectory.h" />
@@ -1607,6 +1609,7 @@
<ClCompile Include="..\..\xbmc\video\windows\GUIWindowVideoBase.cpp" />
<ClCompile Include="..\..\xbmc\video\windows\GUIWindowVideoNav.cpp" />
<ClCompile Include="..\..\xbmc\video\windows\GUIWindowVideoPlaylist.cpp" />
+ <ClCompile Include="..\..\xbmc\video\windows\VideoFileItemListModifier.cpp" />
<ClCompile Include="..\..\xbmc\view\GUIViewControl.cpp" />
<ClCompile Include="..\..\xbmc\view\GUIViewState.cpp" />
<ClCompile Include="..\..\xbmc\view\ViewDatabase.cpp" />
@@ -2236,6 +2239,7 @@
<ClInclude Include="..\..\xbmc\video\windows\GUIWindowVideoBase.h" />
<ClInclude Include="..\..\xbmc\video\windows\GUIWindowVideoNav.h" />
<ClInclude Include="..\..\xbmc\video\windows\GUIWindowVideoPlaylist.h" />
+ <ClInclude Include="..\..\xbmc\video\windows\VideoFileItemListModifier.h" />
<ClInclude Include="..\..\xbmc\view\GUIViewControl.h" />
<ClInclude Include="..\..\xbmc\view\GUIViewState.h" />
<ClInclude Include="..\..\xbmc\view\ViewDatabase.h" />
@@ -2978,4 +2982,4 @@
</VisualStudio>
</ProjectExtensions>
<Import Project="$(SolutionDir)\$(ProjectFileName).targets.user" Condition="Exists('$(SolutionDir)\$(ProjectFileName).targets.user')" />
-</Project>
+</Project> \ No newline at end of file
diff --git a/project/VS2010Express/XBMC.vcxproj.filters b/project/VS2010Express/XBMC.vcxproj.filters
index e642a0298c..cfd58a095a 100644
--- a/project/VS2010Express/XBMC.vcxproj.filters
+++ b/project/VS2010Express/XBMC.vcxproj.filters
@@ -3223,6 +3223,12 @@
<Filter>filesystem\VideoDatabaseDirectory</Filter>
</ClCompile>
<ClCompile Include="..\..\xbmc\InfoScanner.cpp" />
+ <ClCompile Include="..\..\xbmc\music\windows\MusicFileItemListModifier.cpp">
+ <Filter>music\windows</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\xbmc\video\windows\VideoFileItemListModifier.cpp">
+ <Filter>video\windows</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\xbmc\win32\pch.h">
@@ -6245,6 +6251,12 @@
<Filter>filesystem\VideoDatabaseDirectory</Filter>
</ClInclude>
<ClInclude Include="..\..\xbmc\InfoScanner.h" />
+ <ClInclude Include="..\..\xbmc\music\windows\MusicFileItemListModifier.h">
+ <Filter>music\windows</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\xbmc\video\windows\VideoFileItemListModifier.h">
+ <Filter>video\windows</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\..\xbmc\win32\XBMC_PC.rc">
@@ -6331,4 +6343,4 @@
<Filter>shaders</Filter>
</FxCompile>
</ItemGroup>
-</Project>
+</Project> \ No newline at end of file
diff --git a/xbmc/FileItemListModification.cpp b/xbmc/FileItemListModification.cpp
index 040bc24cfc..0ab0941cd6 100644
--- a/xbmc/FileItemListModification.cpp
+++ b/xbmc/FileItemListModification.cpp
@@ -21,10 +21,14 @@
#include "FileItemListModification.h"
#include "playlists/SmartPlaylistFileItemListModifier.h"
+#include "music/windows/MusicFileItemListModifier.h"
+#include "video/windows/VideoFileItemListModifier.h"
CFileItemListModification::CFileItemListModification()
{
m_modifiers.insert(new CSmartPlaylistFileItemListModifier());
+ m_modifiers.insert(new CMusicFileItemListModifier());
+ m_modifiers.insert(new CVideoFileItemListModifier());
}
CFileItemListModification::~CFileItemListModification()
diff --git a/xbmc/filesystem/MusicDatabaseDirectory/DirectoryNode.cpp b/xbmc/filesystem/MusicDatabaseDirectory/DirectoryNode.cpp
index d86bac6897..029290b066 100644
--- a/xbmc/filesystem/MusicDatabaseDirectory/DirectoryNode.cpp
+++ b/xbmc/filesystem/MusicDatabaseDirectory/DirectoryNode.cpp
@@ -41,12 +41,8 @@
#include "DirectoryNodeYearSong.h"
#include "DirectoryNodeSingles.h"
#include "URL.h"
-#include "settings/AdvancedSettings.h"
#include "FileItem.h"
#include "utils/StringUtils.h"
-#include "guilib/LocalizeStrings.h"
-#include "music/MusicDbUrl.h"
-#include "settings/Settings.h"
using namespace XFILE::MUSICDATABASEDIRECTORY;
@@ -74,15 +70,15 @@ CDirectoryNode* CDirectoryNode::ParseURL(const std::string& strPath)
std::vector<std::string> Path = StringUtils::Split(strDirectory, '/');
Path.insert(Path.begin(), "");
- CDirectoryNode* pNode=NULL;
- CDirectoryNode* pParent=NULL;
- NODE_TYPE NodeType=NODE_TYPE_ROOT;
+ CDirectoryNode* pNode = nullptr;
+ CDirectoryNode* pParent = nullptr;
+ NODE_TYPE NodeType = NODE_TYPE_ROOT;
- for (int i=0; i<(int)Path.size(); ++i)
+ for (int i=0; i < static_cast<int>(Path.size()); ++i)
{
- pNode=CDirectoryNode::CreateNode(NodeType, Path[i], pParent);
- NodeType= pNode ? pNode->GetChildType() : NODE_TYPE_NONE;
- pParent=pNode;
+ pNode = CreateNode(NodeType, Path[i], pParent);
+ NodeType = pNode ? pNode->GetChildType() : NODE_TYPE_NONE;
+ pParent = pNode;
}
// Add all the additional URL options to the last node
@@ -151,7 +147,7 @@ CDirectoryNode* CDirectoryNode::CreateNode(NODE_TYPE Type, const std::string& st
break;
}
- return NULL;
+ return nullptr;
}
// Current node name
@@ -184,7 +180,7 @@ CDirectoryNode* CDirectoryNode::GetParent() const
void CDirectoryNode::RemoveParent()
{
- m_pParent=NULL;
+ m_pParent = nullptr;
}
// should be overloaded by a derived class
@@ -204,7 +200,7 @@ std::string CDirectoryNode::BuildPath() const
array.insert(array.begin(), m_strName);
CDirectoryNode* pParent=m_pParent;
- while (pParent!=NULL)
+ while (pParent != nullptr)
{
const std::string& strNodeName=pParent->GetName();
if (!strNodeName.empty())
@@ -214,7 +210,7 @@ std::string CDirectoryNode::BuildPath() const
}
std::string strPath="musicdb://";
- for (int i=0; i<(int)array.size(); ++i)
+ for (int i = 0; i < static_cast<int>(array.size()); ++i)
strPath+=array[i]+"/";
std::string options = m_options.GetOptionsString();
@@ -240,7 +236,7 @@ void CDirectoryNode::CollectQueryParams(CQueryParams& params) const
params.SetQueryParam(m_Type, m_strName);
CDirectoryNode* pParent=m_pParent;
- while (pParent!=NULL)
+ while (pParent != nullptr)
{
params.SetQueryParam(pParent->GetType(), pParent->GetName());
pParent=pParent->GetParent();
@@ -269,7 +265,6 @@ bool CDirectoryNode::GetChilds(CFileItemList& items)
bSuccess=pNode->GetContent(items);
if (bSuccess)
{
- AddQueuingFolder(items);
if (CanCache())
items.SetCacheToDisc(CFileItemList::CACHE_ALWAYS);
}
@@ -282,87 +277,6 @@ bool CDirectoryNode::GetChilds(CFileItemList& items)
return bSuccess;
}
-// Add an "* All ..." folder to the CFileItemList
-// depending on the child node
-void CDirectoryNode::AddQueuingFolder(CFileItemList& items) const
-{
- CFileItemPtr pItem;
-
- CMusicDbUrl musicUrl;
- if (!musicUrl.FromString(BuildPath()))
- return;
-
- // always show "all" items by default
- if (!CSettings::GetInstance().GetBool(CSettings::SETTING_MUSICLIBRARY_SHOWALLITEMS))
- return;
-
- // no need for "all" item when only one item
- if (items.GetObjectCount() <= 1)
- return;
-
- switch (GetChildType())
- {
- // Have no queuing folder
- case NODE_TYPE_ROOT:
- case NODE_TYPE_OVERVIEW:
- case NODE_TYPE_TOP100:
- break;
-
- /* no need for all genres
- case NODE_TYPE_GENRE:
- pItem.reset(new CFileItem(g_localizeStrings.Get(15105))); // "All Genres"
- musicUrl.AppendPath("-1/");
- pItem->SetPath(musicUrl.ToString());
- break;
- */
-
- case NODE_TYPE_ARTIST:
- if (GetType() == NODE_TYPE_OVERVIEW) return;
- pItem.reset(new CFileItem(g_localizeStrings.Get(15103))); // "All Artists"
- musicUrl.AppendPath("-1/");
- pItem->SetPath(musicUrl.ToString());
- break;
-
- // All album related nodes
- case NODE_TYPE_ALBUM:
- if (GetType() == NODE_TYPE_OVERVIEW) return;
- case NODE_TYPE_ALBUM_RECENTLY_PLAYED:
- case NODE_TYPE_ALBUM_RECENTLY_ADDED:
- case NODE_TYPE_ALBUM_COMPILATIONS:
- case NODE_TYPE_ALBUM_TOP100:
- case NODE_TYPE_YEAR_ALBUM:
- pItem.reset(new CFileItem(g_localizeStrings.Get(15102))); // "All Albums"
- musicUrl.AppendPath("-1/");
- pItem->SetPath(musicUrl.ToString());
- break;
-
- // All song related nodes
-/* case NODE_TYPE_ALBUM_RECENTLY_PLAYED_SONGS:
- case NODE_TYPE_ALBUM_RECENTLY_ADDED_SONGS:
- case NODE_TYPE_ALBUM_COMPILATIONS_SONGS:
- case NODE_TYPE_ALBUM_TOP100_SONGS:
- case NODE_TYPE_SONG_TOP100:
- case NODE_TYPE_SONG:
- pItem = new CFileItem(g_localizeStrings.Get(15104)); // "All Songs"
- musicUrl.AppendPath("-1/");
- pItem->SetPath(musicUrl.ToString());
- break;*/
- default:
- break;
- }
-
- if (pItem)
- {
- pItem->m_bIsFolder = true;
- pItem->SetSpecialSort(g_advancedSettings.m_bMusicLibraryAllItemsOnBottom ? SortSpecialOnBottom : SortSpecialOnTop);
- pItem->SetCanQueue(false);
- pItem->SetLabelPreformated(true);
- if (g_advancedSettings.m_bMusicLibraryAllItemsOnBottom)
- items.Add(pItem);
- else
- items.AddFront(pItem, (items.Size() > 0 && items[0]->IsParentFolder()) ? 1 : 0);
- }
-}
bool CDirectoryNode::CanCache() const
{
diff --git a/xbmc/filesystem/MusicDatabaseDirectory/DirectoryNode.h b/xbmc/filesystem/MusicDatabaseDirectory/DirectoryNode.h
index 3d3b4e3c80..3d80d607c3 100644
--- a/xbmc/filesystem/MusicDatabaseDirectory/DirectoryNode.h
+++ b/xbmc/filesystem/MusicDatabaseDirectory/DirectoryNode.h
@@ -74,7 +74,9 @@ namespace XFILE
virtual std::string GetLocalizedName() const;
CDirectoryNode* GetParent() const;
- bool CanCache() const;
+ virtual bool CanCache() const;
+
+ std::string BuildPath() const;
protected:
CDirectoryNode(NODE_TYPE Type, const std::string& strName, CDirectoryNode* pParent);
@@ -89,11 +91,6 @@ namespace XFILE
virtual bool GetContent(CFileItemList& items) const;
- std::string BuildPath() const;
-
- private:
- void AddQueuingFolder(CFileItemList& items) const;
-
private:
NODE_TYPE m_Type;
std::string m_strName;
diff --git a/xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeAlbumRecentlyAdded.h b/xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeAlbumRecentlyAdded.h
index 856993e78a..70ae6750ef 100644
--- a/xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeAlbumRecentlyAdded.h
+++ b/xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeAlbumRecentlyAdded.h
@@ -30,9 +30,9 @@ namespace XFILE
public:
CDirectoryNodeAlbumRecentlyAdded(const std::string& strName, CDirectoryNode* pParent);
protected:
- virtual NODE_TYPE GetChildType() const;
- virtual bool GetContent(CFileItemList& items) const;
- virtual std::string GetLocalizedName() const;
+ NODE_TYPE GetChildType() const override;
+ bool GetContent(CFileItemList& items) const override;
+ std::string GetLocalizedName() const override;
};
}
}
diff --git a/xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeAlbumRecentlyPlayed.h b/xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeAlbumRecentlyPlayed.h
index aefc8362d4..a4fbb36d7c 100644
--- a/xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeAlbumRecentlyPlayed.h
+++ b/xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeAlbumRecentlyPlayed.h
@@ -30,9 +30,9 @@ namespace XFILE
public:
CDirectoryNodeAlbumRecentlyPlayed(const std::string& strName, CDirectoryNode* pParent);
protected:
- virtual NODE_TYPE GetChildType() const;
- virtual bool GetContent(CFileItemList& items) const;
- virtual std::string GetLocalizedName() const;
+ NODE_TYPE GetChildType() const override;
+ bool GetContent(CFileItemList& items) const override;
+ std::string GetLocalizedName() const override;
};
}
}
diff --git a/xbmc/filesystem/VideoDatabaseDirectory/DirectoryNode.cpp b/xbmc/filesystem/VideoDatabaseDirectory/DirectoryNode.cpp
index 7b9d7e37b3..cd8430cafc 100644
--- a/xbmc/filesystem/VideoDatabaseDirectory/DirectoryNode.cpp
+++ b/xbmc/filesystem/VideoDatabaseDirectory/DirectoryNode.cpp
@@ -36,15 +36,10 @@
#include "DirectoryNodeMusicVideosOverview.h"
#include "DirectoryNodeRecentlyAddedMusicVideos.h"
#include "DirectoryNodeTitleMusicVideos.h"
-#include "video/VideoInfoTag.h"
#include "URL.h"
-#include "settings/AdvancedSettings.h"
#include "FileItem.h"
#include "utils/StringUtils.h"
-#include "guilib/LocalizeStrings.h"
-#include "utils/Variant.h"
#include "video/VideoDatabase.h"
-#include "settings/Settings.h"
using namespace XFILE::VIDEODATABASEDIRECTORY;
@@ -150,7 +145,7 @@ CDirectoryNode* CDirectoryNode::CreateNode(NODE_TYPE Type, const std::string& st
break;
}
- return NULL;
+ return nullptr;
}
// Current node name
@@ -203,7 +198,7 @@ std::string CDirectoryNode::BuildPath() const
array.insert(array.begin(), m_strName);
CDirectoryNode* pParent=m_pParent;
- while (pParent != NULL)
+ while (pParent != nullptr)
{
const std::string& strNodeName=pParent->GetName();
if (!strNodeName.empty())
@@ -213,7 +208,7 @@ std::string CDirectoryNode::BuildPath() const
}
std::string strPath="videodb://";
- for (int i = 0; i < (int)array.size(); ++i)
+ for (int i = 0; i < static_cast<int>(array.size()); ++i)
strPath += array[i]+"/";
std::string options = m_options.GetOptionsString();
@@ -239,7 +234,7 @@ void CDirectoryNode::CollectQueryParams(CQueryParams& params) const
params.SetQueryParam(m_Type, m_strName);
CDirectoryNode* pParent=m_pParent;
- while (pParent != NULL)
+ while (pParent != nullptr)
{
params.SetQueryParam(pParent->GetType(), pParent->GetName());
pParent = pParent->GetParent();
@@ -268,7 +263,6 @@ bool CDirectoryNode::GetChilds(CFileItemList& items)
bSuccess = pNode->GetContent(items);
if (bSuccess)
{
- AddQueuingFolder(items);
if (CanCache())
items.SetCacheToDisc(CFileItemList::CACHE_ALWAYS);
}
@@ -281,83 +275,6 @@ bool CDirectoryNode::GetChilds(CFileItemList& items)
return bSuccess;
}
-// Add an "* All ..." folder to the CFileItemList
-// depending on the child node
-void CDirectoryNode::AddQueuingFolder(CFileItemList& items) const
-{
- CFileItemPtr pItem;
-
- // always show "all" items by default
- if (!CSettings::GetInstance().GetBool(CSettings::SETTING_VIDEOLIBRARY_SHOWALLITEMS))
- return;
-
- // no need for "all" item when only one item
- if (items.GetObjectCount() <= 1)
- return;
-
- CVideoDbUrl videoUrl;
- if (!videoUrl.FromString(BuildPath()))
- return;
-
- // hack - as the season node might return episodes
- std::unique_ptr<CDirectoryNode> pNode(ParseURL(items.GetPath()));
-
- switch (pNode->GetChildType())
- {
- case NODE_TYPE_SEASONS:
- {
- std::string strLabel = g_localizeStrings.Get(20366);
- pItem.reset(new CFileItem(strLabel)); // "All Seasons"
- videoUrl.AppendPath("-1/");
- pItem->SetPath(videoUrl.ToString());
- // set the number of watched and unwatched items accordingly
- int watched = 0;
- int unwatched = 0;
- for (int i = 0; i < items.Size(); i++)
- {
- CFileItemPtr item = items[i];
- watched += (int)item->GetProperty("watchedepisodes").asInteger();
- unwatched += (int)item->GetProperty("unwatchedepisodes").asInteger();
- }
- pItem->SetProperty("totalepisodes", watched + unwatched);
- pItem->SetProperty("numepisodes", watched + unwatched); // will be changed later to reflect watchmode setting
- pItem->SetProperty("watchedepisodes", watched);
- pItem->SetProperty("unwatchedepisodes", unwatched);
- if (items.Size() && items[0]->GetVideoInfoTag())
- {
- *pItem->GetVideoInfoTag() = *items[0]->GetVideoInfoTag();
- pItem->GetVideoInfoTag()->m_iSeason = -1;
- }
- pItem->GetVideoInfoTag()->m_strTitle = strLabel;
- pItem->GetVideoInfoTag()->m_iEpisode = watched + unwatched;
- pItem->GetVideoInfoTag()->m_playCount = (unwatched == 0) ? 1 : 0;
- CVideoDatabase db;
- if (db.Open())
- {
- pItem->GetVideoInfoTag()->m_iDbId = db.GetSeasonId(pItem->GetVideoInfoTag()->m_iIdShow, -1);
- db.Close();
- }
- pItem->GetVideoInfoTag()->m_type = MediaTypeSeason;
- }
- break;
- case NODE_TYPE_MUSICVIDEOS_ALBUM:
- pItem.reset(new CFileItem(g_localizeStrings.Get(15102))); // "All Albums"
- videoUrl.AppendPath("-1/");
- pItem->SetPath(videoUrl.ToString());
- break;
- default:
- break;
- }
-
- if (pItem)
- {
- pItem->m_bIsFolder = true;
- pItem->SetSpecialSort(g_advancedSettings.m_bVideoLibraryAllItemsOnBottom ? SortSpecialOnBottom : SortSpecialOnTop);
- pItem->SetCanQueue(false);
- items.Add(pItem);
- }
-}
-
bool CDirectoryNode::CanCache() const
{
// no caching is required - the list is cached in CGUIMediaWindow::GetDirectory
diff --git a/xbmc/filesystem/VideoDatabaseDirectory/DirectoryNode.h b/xbmc/filesystem/VideoDatabaseDirectory/DirectoryNode.h
index 4874425c9c..3601824a52 100644
--- a/xbmc/filesystem/VideoDatabaseDirectory/DirectoryNode.h
+++ b/xbmc/filesystem/VideoDatabaseDirectory/DirectoryNode.h
@@ -79,7 +79,9 @@ namespace XFILE
CDirectoryNode* GetParent() const;
- bool CanCache() const;
+ std::string BuildPath() const;
+
+ virtual bool CanCache() const;
protected:
CDirectoryNode(NODE_TYPE Type, const std::string& strName, CDirectoryNode* pParent);
static CDirectoryNode* CreateNode(NODE_TYPE Type, const std::string& strName, CDirectoryNode* pParent);
@@ -93,10 +95,6 @@ namespace XFILE
virtual bool GetContent(CFileItemList& items) const;
- std::string BuildPath() const;
-
- private:
- void AddQueuingFolder(CFileItemList& items) const;
private:
NODE_TYPE m_Type;
diff --git a/xbmc/music/windows/Makefile b/xbmc/music/windows/Makefile
index 12383f1ce4..acdeea2b9f 100644
--- a/xbmc/music/windows/Makefile
+++ b/xbmc/music/windows/Makefile
@@ -3,6 +3,7 @@ SRCS=GUIWindowMusicBase.cpp \
GUIWindowMusicPlaylist.cpp \
GUIWindowMusicPlaylistEditor.cpp \
GUIWindowVisualisation.cpp \
+ MusicFileItemListModifier.cpp \
LIB=musicwindows.a
diff --git a/xbmc/music/windows/MusicFileItemListModifier.cpp b/xbmc/music/windows/MusicFileItemListModifier.cpp
new file mode 100644
index 0000000000..ff77fbdbb8
--- /dev/null
+++ b/xbmc/music/windows/MusicFileItemListModifier.cpp
@@ -0,0 +1,105 @@
+/*
+* Copyright (C) 2016 Team Kodi
+* http://xbmc.org
+*
+* This Program is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 2, or (at your option)
+* any later version.
+*
+* This Program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with Kodi; see the file COPYING. If not, see
+* <http://www.gnu.org/licenses/>.
+*
+*/
+
+#include "MusicFileItemListModifier.h"
+#include "filesystem/MusicDatabaseDirectory/DirectoryNode.h"
+#include "FileItem.h"
+#include "music/MusicDbUrl.h"
+#include "settings/Settings.h"
+#include "guilib/LocalizeStrings.h"
+#include "settings/AdvancedSettings.h"
+
+using namespace XFILE::MUSICDATABASEDIRECTORY;
+
+bool CMusicFileItemListModifier::CanModify(const CFileItemList &items) const
+{
+ if (items.IsMusicDb())
+ return true;
+
+ return false;
+}
+
+bool CMusicFileItemListModifier::Modify(CFileItemList &items) const
+{
+ AddQueuingFolder(items);
+ return true;
+}
+
+// Add an "* All ..." folder to the CFileItemList
+// depending on the child node
+void CMusicFileItemListModifier::AddQueuingFolder(CFileItemList& items)
+{
+ if (!items.IsMusicDb())
+ return;
+
+ auto directoryNode = CDirectoryNode::ParseURL(items.GetPath());
+
+ CFileItemPtr pItem;
+
+ CMusicDbUrl musicUrl;
+ if (!musicUrl.FromString(directoryNode->BuildPath()))
+ return;
+
+ // always show "all" items by default
+ if (!CSettings::GetInstance().GetBool(CSettings::SETTING_MUSICLIBRARY_SHOWALLITEMS))
+ return;
+
+ // no need for "all" item when only one item
+ if (items.GetObjectCount() <= 1)
+ return;
+
+ switch (directoryNode->GetChildType())
+ {
+ case NODE_TYPE_ARTIST:
+ if (directoryNode->GetType() == NODE_TYPE_OVERVIEW) return;
+ pItem.reset(new CFileItem(g_localizeStrings.Get(15103))); // "All Artists"
+ musicUrl.AppendPath("-1/");
+ pItem->SetPath(musicUrl.ToString());
+ break;
+
+ // All album related nodes
+ case NODE_TYPE_ALBUM:
+ if (directoryNode->GetType() == NODE_TYPE_OVERVIEW) return;
+ case NODE_TYPE_ALBUM_RECENTLY_PLAYED:
+ case NODE_TYPE_ALBUM_RECENTLY_ADDED:
+ case NODE_TYPE_ALBUM_COMPILATIONS:
+ case NODE_TYPE_ALBUM_TOP100:
+ case NODE_TYPE_YEAR_ALBUM:
+ pItem.reset(new CFileItem(g_localizeStrings.Get(15102))); // "All Albums"
+ musicUrl.AppendPath("-1/");
+ pItem->SetPath(musicUrl.ToString());
+ break;
+
+ default:
+ break;
+ }
+
+ if (pItem)
+ {
+ pItem->m_bIsFolder = true;
+ pItem->SetSpecialSort(g_advancedSettings.m_bMusicLibraryAllItemsOnBottom ? SortSpecialOnBottom : SortSpecialOnTop);
+ pItem->SetCanQueue(false);
+ pItem->SetLabelPreformated(true);
+ if (g_advancedSettings.m_bMusicLibraryAllItemsOnBottom)
+ items.Add(pItem);
+ else
+ items.AddFront(pItem, (items.Size() > 0 && items[0]->IsParentFolder()) ? 1 : 0);
+ }
+} \ No newline at end of file
diff --git a/xbmc/music/windows/MusicFileItemListModifier.h b/xbmc/music/windows/MusicFileItemListModifier.h
new file mode 100644
index 0000000000..7f78b86586
--- /dev/null
+++ b/xbmc/music/windows/MusicFileItemListModifier.h
@@ -0,0 +1,36 @@
+#pragma once
+
+/*
+* Copyright (C) 2016 Team Kodi
+* http://xbmc.org
+*
+* This Program is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 2, or (at your option)
+* any later version.
+*
+* This Program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with Kodi; see the file COPYING. If not, see
+* <http://www.gnu.org/licenses/>.
+*
+*/
+
+#include "IFileItemListModifier.h"
+
+class CMusicFileItemListModifier : public IFileItemListModifier
+{
+public:
+ CMusicFileItemListModifier() { }
+ virtual ~CMusicFileItemListModifier() { }
+
+ bool CanModify(const CFileItemList &items) const override;
+ bool Modify(CFileItemList &items) const override;
+
+private:
+ static void AddQueuingFolder(CFileItemList & items);
+};
diff --git a/xbmc/video/windows/Makefile b/xbmc/video/windows/Makefile
index cc74d3597f..ff2afe6182 100644
--- a/xbmc/video/windows/Makefile
+++ b/xbmc/video/windows/Makefile
@@ -2,6 +2,7 @@ SRCS=GUIWindowFullScreen.cpp \
GUIWindowVideoBase.cpp \
GUIWindowVideoNav.cpp \
GUIWindowVideoPlaylist.cpp \
+ VideoFileItemListModifier.cpp \
LIB=videowindows.a
diff --git a/xbmc/video/windows/VideoFileItemListModifier.cpp b/xbmc/video/windows/VideoFileItemListModifier.cpp
new file mode 100644
index 0000000000..ccb6244c9a
--- /dev/null
+++ b/xbmc/video/windows/VideoFileItemListModifier.cpp
@@ -0,0 +1,126 @@
+/*
+* Copyright (C) 2016 Team Kodi
+* http://xbmc.org
+*
+* This Program is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 2, or (at your option)
+* any later version.
+*
+* This Program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with Kodi; see the file COPYING. If not, see
+* <http://www.gnu.org/licenses/>.
+*
+*/
+
+#include "FileItem.h"
+#include "VideoFileItemListModifier.h"
+#include "settings/AdvancedSettings.h"
+#include "video/VideoDatabase.h"
+#include "filesystem/VideoDatabaseDirectory/DirectoryNode.h"
+#include "guilib/LocalizeStrings.h"
+#include "settings/Settings.h"
+#include "video/VideoDbUrl.h"
+
+using namespace XFILE::VIDEODATABASEDIRECTORY;
+
+bool CVideoFileItemListModifier::CanModify(const CFileItemList &items) const
+{
+ if (items.IsVideoDb())
+ return true;
+
+ return false;
+}
+
+bool CVideoFileItemListModifier::Modify(CFileItemList &items) const
+{
+ AddQueuingFolder(items);
+ return true;
+}
+
+// Add an "* All ..." folder to the CFileItemList
+// depending on the child node
+void CVideoFileItemListModifier::AddQueuingFolder(CFileItemList& items)
+{
+ if (!items.IsVideoDb())
+ return;
+
+ auto directoryNode = CDirectoryNode::ParseURL(items.GetPath());
+
+ CFileItemPtr pItem;
+
+ // always show "all" items by default
+ if (!CSettings::GetInstance().GetBool(CSettings::SETTING_VIDEOLIBRARY_SHOWALLITEMS))
+ return;
+
+ // no need for "all" item when only one item
+ if (items.GetObjectCount() <= 1)
+ return;
+
+ CVideoDbUrl videoUrl;
+ if (!videoUrl.FromString(directoryNode->BuildPath()))
+ return;
+
+ // hack - as the season node might return episodes
+ std::unique_ptr<CDirectoryNode> pNode(directoryNode);
+
+ switch (pNode->GetChildType())
+ {
+ case NODE_TYPE_SEASONS:
+ {
+ std::string strLabel = g_localizeStrings.Get(20366);
+ pItem.reset(new CFileItem(strLabel)); // "All Seasons"
+ videoUrl.AppendPath("-1/");
+ pItem->SetPath(videoUrl.ToString());
+ // set the number of watched and unwatched items accordingly
+ int watched = 0;
+ int unwatched = 0;
+ for (int i = 0; i < items.Size(); i++)
+ {
+ CFileItemPtr item = items[i];
+ watched += static_cast<int>(item->GetProperty("watchedepisodes").asInteger());
+ unwatched += static_cast<int>(item->GetProperty("unwatchedepisodes").asInteger());
+ }
+ pItem->SetProperty("totalepisodes", watched + unwatched);
+ pItem->SetProperty("numepisodes", watched + unwatched); // will be changed later to reflect watchmode setting
+ pItem->SetProperty("watchedepisodes", watched);
+ pItem->SetProperty("unwatchedepisodes", unwatched);
+ if (items.Size() && items[0]->GetVideoInfoTag())
+ {
+ *pItem->GetVideoInfoTag() = *items[0]->GetVideoInfoTag();
+ pItem->GetVideoInfoTag()->m_iSeason = -1;
+ }
+ pItem->GetVideoInfoTag()->m_strTitle = strLabel;
+ pItem->GetVideoInfoTag()->m_iEpisode = watched + unwatched;
+ pItem->GetVideoInfoTag()->m_playCount = (unwatched == 0) ? 1 : 0;
+ CVideoDatabase db;
+ if (db.Open())
+ {
+ pItem->GetVideoInfoTag()->m_iDbId = db.GetSeasonId(pItem->GetVideoInfoTag()->m_iIdShow, -1);
+ db.Close();
+ }
+ pItem->GetVideoInfoTag()->m_type = MediaTypeSeason;
+ }
+ break;
+ case NODE_TYPE_MUSICVIDEOS_ALBUM:
+ pItem.reset(new CFileItem(g_localizeStrings.Get(15102))); // "All Albums"
+ videoUrl.AppendPath("-1/");
+ pItem->SetPath(videoUrl.ToString());
+ break;
+ default:
+ break;
+ }
+
+ if (pItem)
+ {
+ pItem->m_bIsFolder = true;
+ pItem->SetSpecialSort(g_advancedSettings.m_bVideoLibraryAllItemsOnBottom ? SortSpecialOnBottom : SortSpecialOnTop);
+ pItem->SetCanQueue(false);
+ items.Add(pItem);
+ }
+}
diff --git a/xbmc/video/windows/VideoFileItemListModifier.h b/xbmc/video/windows/VideoFileItemListModifier.h
new file mode 100644
index 0000000000..a0b3358433
--- /dev/null
+++ b/xbmc/video/windows/VideoFileItemListModifier.h
@@ -0,0 +1,36 @@
+#pragma once
+
+/*
+* Copyright (C) 2016 Team Kodi
+* http://xbmc.org
+*
+* This Program is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 2, or (at your option)
+* any later version.
+*
+* This Program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with Kodi; see the file COPYING. If not, see
+* <http://www.gnu.org/licenses/>.
+*
+*/
+
+#include "IFileItemListModifier.h"
+
+class CVideoFileItemListModifier : public IFileItemListModifier
+{
+public:
+ CVideoFileItemListModifier() { }
+ virtual ~CVideoFileItemListModifier() { }
+
+ bool CanModify(const CFileItemList &items) const override;
+ bool Modify(CFileItemList &items) const override;
+
+private:
+ static void AddQueuingFolder(CFileItemList & items);
+};