From bb2c38a1ec8da89f6e05457b8f70a911fa450daf Mon Sep 17 00:00:00 2001 From: DaveTBlake Date: Sun, 18 Aug 2019 09:01:55 +0100 Subject: [PATCH] Fix PlayMedia when item is a .strm or other playlist files. Ensure that they are played within a playlist by the correct player. Also that "arists" smart playlists are treated correctly as music and not as video --- xbmc/Application.cpp | 6 +++++- xbmc/interfaces/builtins/PlayerBuiltins.cpp | 9 ++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/xbmc/Application.cpp b/xbmc/Application.cpp index 75552a12ca6c7..dcb2e3cb95eab 100644 --- a/xbmc/Application.cpp +++ b/xbmc/Application.cpp @@ -2671,7 +2671,11 @@ bool CApplication::PlayMedia(CFileItem& item, const std::string &player, int iPl smartpl.OpenAndReadName(item.GetURL()); CPlayList playlist; playlist.Add(items); - return ProcessAndStartPlaylist(smartpl.GetName(), playlist, (smartpl.GetType() == "songs" || smartpl.GetType() == "albums") ? PLAYLIST_MUSIC:PLAYLIST_VIDEO); + int iPlaylist = PLAYLIST_VIDEO; + if (smartpl.GetType() == "songs" || smartpl.GetType() == "albums" || + smartpl.GetType() == "artists") + iPlaylist = PLAYLIST_MUSIC; + return ProcessAndStartPlaylist(smartpl.GetName(), playlist, iPlaylist); } } else if (item.IsPlayList() || item.IsInternetStream()) diff --git a/xbmc/interfaces/builtins/PlayerBuiltins.cpp b/xbmc/interfaces/builtins/PlayerBuiltins.cpp index 4008e1f5c1156..d3da01852da84 100644 --- a/xbmc/interfaces/builtins/PlayerBuiltins.cpp +++ b/xbmc/interfaces/builtins/PlayerBuiltins.cpp @@ -429,11 +429,14 @@ static int PlayMedia(const std::vector& params) if ( CGUIWindowVideoBase::ShowResumeMenu(item) == false ) return false; } - if (item.m_bIsFolder) + if (item.m_bIsFolder || item.IsPlayList()) { CFileItemList items; std::string extensions = CServiceBroker::GetFileExtensionProvider().GetVideoExtensions() + "|" + CServiceBroker::GetFileExtensionProvider().GetMusicExtensions(); - XFILE::CDirectory::GetDirectory(item.GetPath(), items, extensions, XFILE::DIR_FLAG_DEFAULTS); + if (item.IsPlayList()) + CUtil::GetRecursiveListing(item.GetPath(), items, extensions, XFILE::DIR_FLAG_DEFAULTS); + else + XFILE::CDirectory::GetDirectory(item.GetPath(), items, extensions, XFILE::DIR_FLAG_DEFAULTS); if (!items.IsEmpty()) // fall through on non expandable playlist { @@ -471,7 +474,7 @@ static int PlayMedia(const std::vector& params) return 0; } } - if ((item.IsAudio() || item.IsVideo()) && !item.IsPlayList() && !item.IsSmartPlayList()) + if ((item.IsAudio() || item.IsVideo()) && !item.IsSmartPlayList()) CServiceBroker::GetPlaylistPlayer().Play(std::make_shared(item), ""); else g_application.PlayMedia(item, "", PLAYLIST_NONE);