aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--xbmc/filesystem/DirectoryFactory.cpp9
-rw-r--r--xbmc/filesystem/PlaylistFileDirectory.cpp10
-rw-r--r--xbmc/playlists/PlayListFactory.cpp14
-rw-r--r--xbmc/playlists/PlayListFactory.h1
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);