1
0
mirror of https://github.com/dguglielmi/sunny-overlay.git synced 2025-12-06 18:12:39 +01:00
Files
sunny-overlay/media-tv/kodi/files/kodi-20.2-Fix-playback-of-optical-dvds-without-mount-support.patch

59 lines
2.3 KiB
Diff

From 8a29849250a13d93e27f1b39c64593c26503173b Mon Sep 17 00:00:00 2001
From: enen92 <92enen@gmail.com>
Date: Mon, 17 Jul 2023 00:08:42 +0100
Subject: [PATCH] [discs] Fix playback of optical dvds without mount support
Co-authored-by: Don Mahurin <@>
---
xbmc/Autorun.cpp | 11 ++++++++++-
xbmc/cores/VideoPlayer/VideoPlayer.cpp | 11 ++++++++---
2 files changed, 18 insertions(+), 4 deletions(-)
diff --git a/xbmc/Autorun.cpp b/xbmc/Autorun.cpp
index 87a77857e8563..b7aac6855ed92 100644
--- a/xbmc/Autorun.cpp
+++ b/xbmc/Autorun.cpp
@@ -148,7 +148,16 @@ bool CAutorun::RunDisc(IDirectory* pDir, const std::string& strDrive, int& nAdde
bool bPlaying(false);
CFileItemList vecItems;
- const CURL pathToUrl(strDrive);
+ CURL pathToUrl{strDrive};
+ // if the url being requested is a generic "iso9660://" we need to expand it with the current drive device.
+ // use the hostname section to prepend the drive path
+ if (pathToUrl.GetRedacted() == "iso9660://")
+ {
+ pathToUrl.Reset();
+ pathToUrl.SetProtocol("iso9660");
+ pathToUrl.SetHostName(CServiceBroker::GetMediaManager().TranslateDevicePath(""));
+ }
+
if ( !pDir->GetDirectory( pathToUrl, vecItems ) )
{
return false;
diff --git a/xbmc/cores/VideoPlayer/VideoPlayer.cpp b/xbmc/cores/VideoPlayer/VideoPlayer.cpp
index 3b3f876eebe75..7de70724e11b8 100644
--- a/xbmc/cores/VideoPlayer/VideoPlayer.cpp
+++ b/xbmc/cores/VideoPlayer/VideoPlayer.cpp
@@ -767,12 +767,17 @@ bool CVideoPlayer::OpenInputStream()
CLog::Log(LOGINFO, "Creating InputStream");
// correct the filename if needed
- std::string filename(m_item.GetPath());
- if (URIUtils::IsProtocol(filename, "dvd") ||
- StringUtils::EqualsNoCase(filename, "iso9660://video_ts/video_ts.ifo"))
+ const CURL url{m_item.GetPath()};
+ if (url.GetProtocol() == "dvd")
{
+ // FIXME: we should deprecate this when more than one device drive is supported
m_item.SetPath(CServiceBroker::GetMediaManager().TranslateDevicePath(""));
}
+ else if (url.GetProtocol() == "iso9660" && !url.GetHostName().empty() &&
+ url.GetFileName() == "VIDEO_TS/video_ts.ifo")
+ {
+ m_item.SetPath(url.GetHostName());
+ }
m_pInputStream = CDVDFactoryInputStream::CreateInputStream(this, m_item, true);
if (m_pInputStream == nullptr)