diff -Nru kodi-pvr-mediaportal-tvserver-8.1.2/debian/changelog kodi-pvr-mediaportal-tvserver-8.2.0/debian/changelog --- kodi-pvr-mediaportal-tvserver-8.1.2/debian/changelog 2013-05-31 22:59:22.000000000 +0000 +++ kodi-pvr-mediaportal-tvserver-8.2.0/debian/changelog 2013-05-31 22:59:22.000000000 +0000 @@ -1,4 +1,4 @@ -kodi-pvr-mediaportal-tvserver (8.1.2-1~bionic) bionic; urgency=low +kodi-pvr-mediaportal-tvserver (8.2.0-1~bionic) bionic; urgency=low [ kodi ] * autogenerated dummy changelog diff -Nru kodi-pvr-mediaportal-tvserver-8.1.2/pvr.mediaportal.tvserver/addon.xml.in kodi-pvr-mediaportal-tvserver-8.2.0/pvr.mediaportal.tvserver/addon.xml.in --- kodi-pvr-mediaportal-tvserver-8.1.2/pvr.mediaportal.tvserver/addon.xml.in 2021-05-13 20:53:05.000000000 +0000 +++ kodi-pvr-mediaportal-tvserver-8.2.0/pvr.mediaportal.tvserver/addon.xml.in 2021-05-16 19:06:22.000000000 +0000 @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ diff -Nru kodi-pvr-mediaportal-tvserver-8.1.2/pvr.mediaportal.tvserver/changelog.txt kodi-pvr-mediaportal-tvserver-8.2.0/pvr.mediaportal.tvserver/changelog.txt --- kodi-pvr-mediaportal-tvserver-8.1.2/pvr.mediaportal.tvserver/changelog.txt 2021-05-13 20:53:05.000000000 +0000 +++ kodi-pvr-mediaportal-tvserver-8.2.0/pvr.mediaportal.tvserver/changelog.txt 2021-05-16 19:06:22.000000000 +0000 @@ -1,3 +1,6 @@ +v8.2.0 +- Support edl files over remote smb shares for commercial skipping + v8.1.2 - Fix MultiByteToWideChar parameter diff -Nru kodi-pvr-mediaportal-tvserver-8.1.2/src/lib/tsreader/TSReader.h kodi-pvr-mediaportal-tvserver-8.2.0/src/lib/tsreader/TSReader.h --- kodi-pvr-mediaportal-tvserver-8.1.2/src/lib/tsreader/TSReader.h 2021-05-13 20:53:05.000000000 +0000 +++ kodi-pvr-mediaportal-tvserver-8.2.0/src/lib/tsreader/TSReader.h 2021-05-16 19:06:22.000000000 +0000 @@ -80,14 +80,13 @@ long Pause(bool bPaused); TsReaderState State() { return m_State; }; - - private: - /** * \brief Translate the given path using the m_basePath setting * \param The original (local) timeshift buffer file path on the TV server side */ - std::string TranslatePath(const char* pszFileName); + std::string TranslatePath(const char* pszFileName); + + private: bool m_bTimeShifting; bool m_bRecording; diff -Nru kodi-pvr-mediaportal-tvserver-8.1.2/src/pvrclient-mediaportal.cpp kodi-pvr-mediaportal-tvserver-8.2.0/src/pvrclient-mediaportal.cpp --- kodi-pvr-mediaportal-tvserver-8.1.2/src/pvrclient-mediaportal.cpp 2021-05-13 20:53:05.000000000 +0000 +++ kodi-pvr-mediaportal-tvserver-8.2.0/src/pvrclient-mediaportal.cpp 2021-05-16 19:06:22.000000000 +0000 @@ -419,7 +419,7 @@ capabilities.SetHandlesDemuxing(false); capabilities.SetSupportsRecordingPlayCount((g_iTVServerKodiBuild < 117) ? false : true); capabilities.SetSupportsLastPlayedPosition((g_iTVServerKodiBuild < 121) ? false : true); - capabilities.SetSupportsRecordingEdl(false); + capabilities.SetSupportsRecordingEdl(true); capabilities.SetSupportsRecordingsRename(true); capabilities.SetSupportsRecordingsLifetimeChange(false); capabilities.SetSupportsDescrambleInfo(false); @@ -2481,3 +2481,70 @@ chunksize = 32 * 1024; return PVR_ERROR_NO_ERROR; } + +namespace +{ + int GetFileContents(const std::string& url, std::string& content) + { + content.clear(); + kodi::vfs::CFile file; + if (file.OpenFile(url)) + { + char buffer[1024]; + while (int bytesRead = file.Read(buffer, 1024)) + content.append(buffer, bytesRead); + } + + return content.length(); + } +} + +PVR_ERROR cPVRClientMediaPortal::GetRecordingEdl(const kodi::addon::PVRRecording& recording, std::vector& edl) // bilkusg +{ + cRecording* myrecording = GetRecordingInfo(recording); + if (!myrecording) + return PVR_ERROR_SERVER_ERROR; + + const std::string pvrSmbPath = m_tsreader->TranslatePath(myrecording->FilePath()); + const std::string edlFilePath = pvrSmbPath.substr(0, pvrSmbPath.find_last_of('.')) + ".edl"; + kodi::Log(ADDON_LOG_DEBUG, "GetRecordingEdl for %s from %s", myrecording->FilePath(), edlFilePath.c_str()); + + if (!kodi::vfs::FileExists(edlFilePath)) + return PVR_ERROR_NO_ERROR; + std::string edlFileContents; + int edlLength = GetFileContents(edlFilePath, edlFileContents); + if (edlLength == 0) + return PVR_ERROR_NO_ERROR; + + std::istringstream stream(edlFileContents); + std::string line; + int lineNumber = 0; + while (std::getline(stream, line)) + { + float start = 0.0f, stop = 0.0f; + unsigned int type = PVR_EDL_TYPE_CUT; + lineNumber++; + if (std::sscanf(line.c_str(), "%f %f %u", &start, &stop, &type) < 2 || type > PVR_EDL_TYPE_COMBREAK) + { + kodi::Log(ADDON_LOG_INFO, "%s Unable to parse EDL entry for recording '%s' at line %d. Skipping.", __func__, + edlFilePath.c_str(), lineNumber); + continue; + } + + start = std::max(start, 0.0f); + stop = std::max(stop, 0.0f); + start = std::min(start, stop); + stop = std::max(start, stop); + + kodi::Log(ADDON_LOG_DEBUG, "%s EDL for '%s', line %d - start: %f stop: %f type: %d", __func__, edlFilePath.c_str(), lineNumber, start, stop, type); + + kodi::addon::PVREDLEntry edlEntry; + edlEntry.SetStart(static_cast(start * 1000.0f)); + edlEntry.SetEnd(static_cast(stop * 1000.0f)); + edlEntry.SetType(static_cast(type)); + + edl.emplace_back(edlEntry); + } + kodi::Log(ADDON_LOG_INFO, "%s - recording '%s' has '%d' EDL entries available", __func__, recording.GetTitle().c_str(), edl.size()); + return PVR_ERROR_NO_ERROR; +} diff -Nru kodi-pvr-mediaportal-tvserver-8.1.2/src/pvrclient-mediaportal.h kodi-pvr-mediaportal-tvserver-8.2.0/src/pvrclient-mediaportal.h --- kodi-pvr-mediaportal-tvserver-8.1.2/src/pvrclient-mediaportal.h 2021-05-13 20:53:05.000000000 +0000 +++ kodi-pvr-mediaportal-tvserver-8.2.0/src/pvrclient-mediaportal.h 2021-05-16 19:06:22.000000000 +0000 @@ -70,6 +70,7 @@ PVR_ERROR SetRecordingPlayCount(const kodi::addon::PVRRecording& recording, int count) override; PVR_ERROR SetRecordingLastPlayedPosition(const kodi::addon::PVRRecording& recording, int lastplayedposition) override; PVR_ERROR GetRecordingLastPlayedPosition(const kodi::addon::PVRRecording& recording, int& position) override; + PVR_ERROR GetRecordingEdl(const kodi::addon::PVRRecording& recording, std::vector& edl) override; /* Timer handling */ PVR_ERROR GetTimersAmount(int& amount) override; diff -Nru kodi-pvr-mediaportal-tvserver-8.1.2/src/windows/FileUtils.cpp kodi-pvr-mediaportal-tvserver-8.2.0/src/windows/FileUtils.cpp --- kodi-pvr-mediaportal-tvserver-8.1.2/src/windows/FileUtils.cpp 2021-05-13 20:53:05.000000000 +0000 +++ kodi-pvr-mediaportal-tvserver-8.2.0/src/windows/FileUtils.cpp 2021-05-16 19:06:22.000000000 +0000 @@ -6,6 +6,7 @@ */ #include "../FileUtils.h" +#include #include #include "../utils.h" #ifdef TARGET_WINDOWS_DESKTOP