diff options
-rw-r--r-- | xbmc/filesystem/DirectoryFactory.cpp | 9 | ||||
-rw-r--r-- | xbmc/filesystem/PlaylistFileDirectory.cpp | 10 | ||||
-rw-r--r-- | xbmc/playlists/PlayListFactory.cpp | 14 | ||||
-rw-r--r-- | xbmc/playlists/PlayListFactory.h | 1 |
4 files changed, 27 insertions, 7 deletions
diff --git a/xbmc/filesystem/DirectoryFactory.cpp b/xbmc/filesystem/DirectoryFactory.cpp index 465816c4b9..e9c76cba97 100644 --- a/xbmc/filesystem/DirectoryFactory.cpp +++ b/xbmc/filesystem/DirectoryFactory.cpp @@ -97,7 +97,14 @@ using namespace XFILE; */ IDirectory* CDirectoryFactory::Create(const CFileItem& item) { - return Create(CURL{item.GetDynPath()}); + CURL curl{item.GetDynPath()}; + + // Store the mimetype, allowing the PlayListFactory to set it on the created FileItem + const std::string& mimeType = item.GetMimeType(); + if (!mimeType.empty()) + curl.SetOption("mimetype", mimeType); + + return Create(curl); } /*! diff --git a/xbmc/filesystem/PlaylistFileDirectory.cpp b/xbmc/filesystem/PlaylistFileDirectory.cpp index d95989067f..18e5d7affa 100644 --- a/xbmc/filesystem/PlaylistFileDirectory.cpp +++ b/xbmc/filesystem/PlaylistFileDirectory.cpp @@ -25,12 +25,11 @@ namespace XFILE bool CPlaylistFileDirectory::GetDirectory(const CURL& url, CFileItemList& items) { - const std::string pathToUrl = url.Get(); - std::unique_ptr<PLAYLIST::CPlayList> pPlayList(PLAYLIST::CPlayListFactory::Create(pathToUrl)); + std::unique_ptr<PLAYLIST::CPlayList> pPlayList(PLAYLIST::CPlayListFactory::Create(url)); if (nullptr != pPlayList) { // load it - if (!pPlayList->Load(pathToUrl)) + if (!pPlayList->Load(url.Get())) return false; //hmmm unable to load playlist? PLAYLIST::CPlayList playlist = *pPlayList; @@ -47,12 +46,11 @@ namespace XFILE bool CPlaylistFileDirectory::ContainsFiles(const CURL& url) { - const std::string pathToUrl = url.Get(); - std::unique_ptr<PLAYLIST::CPlayList> pPlayList(PLAYLIST::CPlayListFactory::Create(pathToUrl)); + std::unique_ptr<PLAYLIST::CPlayList> pPlayList(PLAYLIST::CPlayListFactory::Create(url)); if (nullptr != pPlayList) { // load it - if (!pPlayList->Load(pathToUrl)) + if (!pPlayList->Load(url.Get())) return false; //hmmm unable to load playlist? return (pPlayList->size() > 1); diff --git a/xbmc/playlists/PlayListFactory.cpp b/xbmc/playlists/PlayListFactory.cpp index 7fe5ff6fcb..63b9bd401d 100644 --- a/xbmc/playlists/PlayListFactory.cpp +++ b/xbmc/playlists/PlayListFactory.cpp @@ -9,6 +9,7 @@ #include "PlayListFactory.h" #include "FileItem.h" +#include "URL.h" #include "network/NetworkFileItemClassify.h" #include "playlists/PlayListASX.h" #include "playlists/PlayListB4S.h" @@ -25,6 +26,19 @@ namespace KODI::PLAYLIST { +CPlayList* CPlayListFactory::Create(const CURL& url) +{ + CFileItem item{url.Get(), false}; + + if (url.HasOption("mimetype")) + { + item.SetContentLookup(false); + item.SetMimeType(url.GetOption("mimetype")); + } + + return Create(item); +} + CPlayList* CPlayListFactory::Create(const std::string& filename) { CFileItem item(filename,false); diff --git a/xbmc/playlists/PlayListFactory.h b/xbmc/playlists/PlayListFactory.h index 5161150ea5..410c1e392d 100644 --- a/xbmc/playlists/PlayListFactory.h +++ b/xbmc/playlists/PlayListFactory.h @@ -20,6 +20,7 @@ namespace KODI::PLAYLIST class CPlayListFactory { public: + static CPlayList* Create(const CURL& url); static CPlayList* Create(const std::string& filename); static CPlayList* Create(const CFileItem& item); static bool IsPlaylist(const CURL& url); |