diff --git a/packages/mediacenter/kodi-binary-addons/pvr.dvblink/patches/pvr.dvblink-0001-PR54.patch b/packages/mediacenter/kodi-binary-addons/pvr.dvblink/patches/pvr.dvblink-0001-PR54.patch new file mode 100644 index 0000000000..ac91c1d99d --- /dev/null +++ b/packages/mediacenter/kodi-binary-addons/pvr.dvblink/patches/pvr.dvblink-0001-PR54.patch @@ -0,0 +1,376 @@ +From 40a0711876959f87311fd8a7916537e8fc5f5217 Mon Sep 17 00:00:00 2001 +From: dvblogic +Date: Tue, 13 Sep 2016 18:16:34 +0200 +Subject: [PATCH 1/3] Version 3.3.5 Fixed: Crash on startup with search timers + Fixed: Incorrect disk space display if disk size is more than 2TB + +--- + lib/libdvblinkremote/recording_settings.cpp | 4 ++-- + lib/libdvblinkremote/response.h | 4 ++-- + lib/libdvblinkremote/util.cpp | 24 ++++++++++++++++++++++++ + lib/libdvblinkremote/util.h | 2 ++ + pvr.dvblink/addon.xml.in | 2 +- + pvr.dvblink/changelog.txt | 4 ++++ + src/DVBLinkClient.cpp | 8 ++++---- + 7 files changed, 39 insertions(+), 9 deletions(-) + +diff --git a/lib/libdvblinkremote/recording_settings.cpp b/lib/libdvblinkremote/recording_settings.cpp +index ae3e3b6..729c836 100644 +--- a/lib/libdvblinkremote/recording_settings.cpp ++++ b/lib/libdvblinkremote/recording_settings.cpp +@@ -86,8 +86,8 @@ bool RecordingSettingsSerializer::ReadObject(RecordingSettings& object, const st + object.TimeMarginBeforeScheduledRecordings = Util::GetXmlFirstChildElementTextAsInt(elRoot, "before_margin"); + object.TimeMarginAfterScheduledRecordings = Util::GetXmlFirstChildElementTextAsInt(elRoot, "after_margin"); + object.RecordingPath = Util::GetXmlFirstChildElementText(elRoot, "recording_path"); +- object.TotalSpace = Util::GetXmlFirstChildElementTextAsLong(elRoot, "total_space"); +- object.AvailableSpace = Util::GetXmlFirstChildElementTextAsLong(elRoot, "avail_space"); ++ object.TotalSpace = Util::GetXmlFirstChildElementTextAsLongLong(elRoot, "total_space"); ++ object.AvailableSpace = Util::GetXmlFirstChildElementTextAsLongLong(elRoot, "avail_space"); + return true; + } + +diff --git a/lib/libdvblinkremote/response.h b/lib/libdvblinkremote/response.h +index 51b7ef8..5be5aec 100644 +--- a/lib/libdvblinkremote/response.h ++++ b/lib/libdvblinkremote/response.h +@@ -1350,12 +1350,12 @@ namespace dvblinkremote { + /** + * The total space in KB. + */ +- long TotalSpace; ++ long long TotalSpace; + + /** + * The available space in KB. + */ +- long AvailableSpace; ++ long long AvailableSpace; + }; + + class ChannelFavorite +diff --git a/lib/libdvblinkremote/util.cpp b/lib/libdvblinkremote/util.cpp +index 65ac456..6e0be90 100644 +--- a/lib/libdvblinkremote/util.cpp ++++ b/lib/libdvblinkremote/util.cpp +@@ -34,6 +34,7 @@ bool Util::from_string(T& t, const std::string& s, std::ios_base& (*f)(std::ios_ + + template bool Util::from_string(int& t, const std::string& s, std::ios_base& (*f)(std::ios_base&)); + template bool Util::from_string(long& t, const std::string& s, std::ios_base& (*f)(std::ios_base&)); ++template bool Util::from_string(long long& t, const std::string& s, std::ios_base& (*f)(std::ios_base&)); + + template + bool Util::to_string(const T& t, std::string& s) +@@ -59,6 +60,11 @@ bool Util::ConvertToLong(const std::string& s, long& value) + return from_string(value, s, std::dec); + } + ++bool Util::ConvertToLongLong(const std::string& s, long long& value) ++{ ++ return from_string(value, s, std::dec); ++} ++ + bool Util::ConvertToString(const int& value, std::string& s) + { + return to_string(value, s); +@@ -192,6 +198,24 @@ long Util::GetXmlFirstChildElementTextAsLong(const tinyxml2::XMLElement* parentE + return value; + } + ++long long Util::GetXmlFirstChildElementTextAsLongLong(const tinyxml2::XMLElement* parentElement, const char* name) ++{ ++ const tinyxml2::XMLElement* el = parentElement->FirstChildElement(name); ++ const char* s = "-1"; ++ long long value; ++ ++ if (el != NULL && el->GetText()) { ++ s = el->GetText(); ++ } ++ ++ if (s && !Util::ConvertToLongLong(s, value)) ++ { ++ value = -1; ++ } ++ ++ return value; ++} ++ + bool Util::GetXmlFirstChildElementTextAsBoolean(const tinyxml2::XMLElement* parentElement, const char* name) + { + const tinyxml2::XMLElement* el = parentElement->FirstChildElement(name); +diff --git a/lib/libdvblinkremote/util.h b/lib/libdvblinkremote/util.h +index 3af4914..63c9ecb 100644 +--- a/lib/libdvblinkremote/util.h ++++ b/lib/libdvblinkremote/util.h +@@ -34,6 +34,7 @@ namespace dvblinkremote { + public: + static bool ConvertToInt(const std::string& s, int& value); + static bool ConvertToLong(const std::string& s, long& value); ++ static bool ConvertToLongLong(const std::string& s, long long& value); + static bool ConvertToString(const int& value, std::string&); + static bool ConvertToString(const unsigned int& value, std::string&); + static bool ConvertToString(const long& value, std::string&); +@@ -48,6 +49,7 @@ namespace dvblinkremote { + static int GetXmlFirstChildElementTextAsInt(const tinyxml2::XMLElement* parentElement, const char* name); + static long GetXmlFirstChildElementTextAsLong(const tinyxml2::XMLElement* parentElement, const char* name); + static bool GetXmlFirstChildElementTextAsBoolean(const tinyxml2::XMLElement* parentElement, const char* name); ++ static long long GetXmlFirstChildElementTextAsLongLong(const tinyxml2::XMLElement* parentElement, const char* name); + + private: + template static bool from_string(T& t, const std::string& s, std::ios_base& (*f)(std::ios_base&)); +diff --git a/pvr.dvblink/addon.xml.in b/pvr.dvblink/addon.xml.in +index 5e81fae..e9464b9 100644 +--- a/pvr.dvblink/addon.xml.in ++++ b/pvr.dvblink/addon.xml.in +@@ -1,7 +1,7 @@ + + + +diff --git a/pvr.dvblink/changelog.txt b/pvr.dvblink/changelog.txt +index 25e1f0a..4f1a8e2 100644 +--- a/pvr.dvblink/changelog.txt ++++ b/pvr.dvblink/changelog.txt +@@ -1,3 +1,7 @@ ++[B]Version 3.3.5[/B] ++Fixed: Crash on startup with search timers ++Fixed: Incorrect disk space display if disk size is more than 2TB ++ + [B]Version 3.3.4[/B] + Updated: language files from Transifex + +diff --git a/src/DVBLinkClient.cpp b/src/DVBLinkClient.cpp +index fbb07f7..de9b480 100644 +--- a/src/DVBLinkClient.cpp ++++ b/src/DVBLinkClient.cpp +@@ -736,11 +736,11 @@ int DVBLinkClient::GetSchedules(ADDON_HANDLE handle, const RecordingList& record + timer.iMarginEnd = bp_schedules[i]->MarginAfter / 60; + strncpy(timer.strEpgSearchString, bp_schedules[i]->GetKeyphrase().c_str(), sizeof(timer.strEpgSearchString) - 1); + +- if (schedule_to_timer_map.find(epg_schedules[i]->GetID()) != schedule_to_timer_map.end() && +- schedule_to_timer_map[epg_schedules[i]->GetID()].size() > 0) ++ if (schedule_to_timer_map.find(bp_schedules[i]->GetID()) != schedule_to_timer_map.end() && ++ schedule_to_timer_map[bp_schedules[i]->GetID()].size() > 0) + { +- timer.startTime = schedule_to_timer_map[epg_schedules[i]->GetID()].at(0)->GetProgram().GetStartTime(); +- timer.endTime = timer.startTime + schedule_to_timer_map[epg_schedules[i]->GetID()].at(0)->GetProgram().GetDuration(); ++ timer.startTime = schedule_to_timer_map[bp_schedules[i]->GetID()].at(0)->GetProgram().GetStartTime(); ++ timer.endTime = timer.startTime + schedule_to_timer_map[bp_schedules[i]->GetID()].at(0)->GetProgram().GetDuration(); + } + + strncpy(timer.strTitle, bp_schedules[i]->GetKeyphrase().c_str(), sizeof(timer.strTitle) - 1); + +From ed9d369c1b683079dc7770af8313dfa46b35cddb Mon Sep 17 00:00:00 2001 +From: dvblogic +Date: Wed, 14 Sep 2016 09:21:33 +0200 +Subject: [PATCH 2/3] Fixed: Doesn't build with tinyxml2 4.x #52 + +--- + lib/libdvblinkremote/channel.cpp | 2 +- + lib/libdvblinkremote/epg.cpp | 2 +- + lib/libdvblinkremote/favorites.cpp | 2 +- + lib/libdvblinkremote/generic_response.cpp | 2 +- + lib/libdvblinkremote/parental_lock.cpp | 2 +- + lib/libdvblinkremote/playback_object.cpp | 2 +- + lib/libdvblinkremote/recording.cpp | 2 +- + lib/libdvblinkremote/recording_settings.cpp | 2 +- + lib/libdvblinkremote/scheduling.cpp | 2 +- + lib/libdvblinkremote/server_info.cpp | 2 +- + lib/libdvblinkremote/stream.cpp | 2 +- + lib/libdvblinkremote/streaming_capabilities.cpp | 2 +- + pvr.dvblink/changelog.txt | 1 + + 13 files changed, 13 insertions(+), 12 deletions(-) + +diff --git a/lib/libdvblinkremote/channel.cpp b/lib/libdvblinkremote/channel.cpp +index 2861feb..b9f8ac5 100644 +--- a/lib/libdvblinkremote/channel.cpp ++++ b/lib/libdvblinkremote/channel.cpp +@@ -122,7 +122,7 @@ bool GetChannelsResponseSerializer::ReadObject(ChannelList& object, const std::s + { + tinyxml2::XMLDocument& doc = GetXmlDocument(); + +- if (doc.Parse(xml.c_str()) == tinyxml2::XML_NO_ERROR) { ++ if (doc.Parse(xml.c_str()) == tinyxml2::XML_SUCCESS) { + tinyxml2::XMLElement* elRoot = doc.FirstChildElement("channels"); + GetChannelsResponseXmlDataDeserializer* xmlDataDeserializer = new GetChannelsResponseXmlDataDeserializer(*this, object); + elRoot->Accept(xmlDataDeserializer); +diff --git a/lib/libdvblinkremote/epg.cpp b/lib/libdvblinkremote/epg.cpp +index b382e4d..3fcc65e 100644 +--- a/lib/libdvblinkremote/epg.cpp ++++ b/lib/libdvblinkremote/epg.cpp +@@ -189,7 +189,7 @@ bool EpgSearchResponseSerializer::ReadObject(EpgSearchResult& object, const std: + { + tinyxml2::XMLDocument& doc = GetXmlDocument(); + +- if (doc.Parse(xml.c_str()) == tinyxml2::XML_NO_ERROR) { ++ if (doc.Parse(xml.c_str()) == tinyxml2::XML_SUCCESS) { + tinyxml2::XMLElement* elRoot = doc.FirstChildElement("epg_searcher"); + ChannelEpgXmlDataDeserializer* xmlDataDeserializer = new ChannelEpgXmlDataDeserializer(*this, object); + elRoot->Accept(xmlDataDeserializer); +diff --git a/lib/libdvblinkremote/favorites.cpp b/lib/libdvblinkremote/favorites.cpp +index 4e7f96a..a29fd82 100644 +--- a/lib/libdvblinkremote/favorites.cpp ++++ b/lib/libdvblinkremote/favorites.cpp +@@ -118,7 +118,7 @@ bool ChannelFavoritesSerializer::ReadObject(ChannelFavorites& object, const std: + { + tinyxml2::XMLDocument& doc = GetXmlDocument(); + +- if (doc.Parse(xml.c_str()) == tinyxml2::XML_NO_ERROR) { ++ if (doc.Parse(xml.c_str()) == tinyxml2::XML_SUCCESS) { + tinyxml2::XMLElement* elRoot = doc.FirstChildElement("favorites"); + GetFavoritesResponseXmlDataDeserializer* xmlDataDeserializer = new GetFavoritesResponseXmlDataDeserializer(*this, object); + elRoot->Accept(xmlDataDeserializer); +diff --git a/lib/libdvblinkremote/generic_response.cpp b/lib/libdvblinkremote/generic_response.cpp +index 6d85841..7931957 100644 +--- a/lib/libdvblinkremote/generic_response.cpp ++++ b/lib/libdvblinkremote/generic_response.cpp +@@ -74,7 +74,7 @@ bool GenericResponseSerializer::ReadObject(GenericResponse& object, const std::s + { + tinyxml2::XMLDocument& doc = GetXmlDocument(); + +- if (doc.Parse(xml.c_str()) == tinyxml2::XML_NO_ERROR) { ++ if (doc.Parse(xml.c_str()) == tinyxml2::XML_SUCCESS) { + tinyxml2::XMLElement* elRoot = doc.FirstChildElement("response"); + int statusCode = Util::GetXmlFirstChildElementTextAsInt(elRoot, "status_code"); + +diff --git a/lib/libdvblinkremote/parental_lock.cpp b/lib/libdvblinkremote/parental_lock.cpp +index 1db186e..be8b156 100644 +--- a/lib/libdvblinkremote/parental_lock.cpp ++++ b/lib/libdvblinkremote/parental_lock.cpp +@@ -95,7 +95,7 @@ bool ParentalStatusSerializer::ReadObject(ParentalStatus& object, const std::str + { + tinyxml2::XMLDocument& doc = GetXmlDocument(); + +- if (doc.Parse(xml.c_str()) == tinyxml2::XML_NO_ERROR) { ++ if (doc.Parse(xml.c_str()) == tinyxml2::XML_SUCCESS) { + tinyxml2::XMLElement* elRoot = doc.FirstChildElement("parental_status"); + object.IsEnabled = Util::GetXmlFirstChildElementTextAsBoolean(elRoot, "is_enabled"); + return true; +diff --git a/lib/libdvblinkremote/playback_object.cpp b/lib/libdvblinkremote/playback_object.cpp +index 99c8f15..ce3bff7 100644 +--- a/lib/libdvblinkremote/playback_object.cpp ++++ b/lib/libdvblinkremote/playback_object.cpp +@@ -136,7 +136,7 @@ bool GetPlaybackObjectResponseSerializer::ReadObject(GetPlaybackObjectResponse& + { + tinyxml2::XMLDocument& doc = GetXmlDocument(); + +- if (doc.Parse(xml.c_str()) == tinyxml2::XML_NO_ERROR) { ++ if (doc.Parse(xml.c_str()) == tinyxml2::XML_SUCCESS) { + tinyxml2::XMLElement* elRoot = doc.FirstChildElement("object"); + + if (HasChildElement(*elRoot, "containers")) +diff --git a/lib/libdvblinkremote/recording.cpp b/lib/libdvblinkremote/recording.cpp +index 0bd21cd..d4dc828 100644 +--- a/lib/libdvblinkremote/recording.cpp ++++ b/lib/libdvblinkremote/recording.cpp +@@ -106,7 +106,7 @@ bool GetRecordingsResponseSerializer::ReadObject(RecordingList& object, const st + { + tinyxml2::XMLDocument& doc = GetXmlDocument(); + +- if (doc.Parse(xml.c_str()) == tinyxml2::XML_NO_ERROR) { ++ if (doc.Parse(xml.c_str()) == tinyxml2::XML_SUCCESS) { + tinyxml2::XMLElement* elRoot = doc.FirstChildElement("recordings"); + GetRecordingsResponseXmlDataDeserializer* xmlDataDeserializer = new GetRecordingsResponseXmlDataDeserializer(*this, object); + elRoot->Accept(xmlDataDeserializer); +diff --git a/lib/libdvblinkremote/recording_settings.cpp b/lib/libdvblinkremote/recording_settings.cpp +index 729c836..2940c63 100644 +--- a/lib/libdvblinkremote/recording_settings.cpp ++++ b/lib/libdvblinkremote/recording_settings.cpp +@@ -81,7 +81,7 @@ bool RecordingSettingsSerializer::ReadObject(RecordingSettings& object, const st + { + tinyxml2::XMLDocument& doc = GetXmlDocument(); + +- if (doc.Parse(xml.c_str()) == tinyxml2::XML_NO_ERROR) { ++ if (doc.Parse(xml.c_str()) == tinyxml2::XML_SUCCESS) { + tinyxml2::XMLElement* elRoot = doc.FirstChildElement("recording_settings"); + object.TimeMarginBeforeScheduledRecordings = Util::GetXmlFirstChildElementTextAsInt(elRoot, "before_margin"); + object.TimeMarginAfterScheduledRecordings = Util::GetXmlFirstChildElementTextAsInt(elRoot, "after_margin"); +diff --git a/lib/libdvblinkremote/scheduling.cpp b/lib/libdvblinkremote/scheduling.cpp +index 11a3792..aee900e 100644 +--- a/lib/libdvblinkremote/scheduling.cpp ++++ b/lib/libdvblinkremote/scheduling.cpp +@@ -415,7 +415,7 @@ bool GetSchedulesResponseSerializer::ReadObject(StoredSchedules& object, const s + { + tinyxml2::XMLDocument& doc = GetXmlDocument(); + +- if (doc.Parse(xml.c_str()) == tinyxml2::XML_NO_ERROR) { ++ if (doc.Parse(xml.c_str()) == tinyxml2::XML_SUCCESS) { + tinyxml2::XMLElement* elRoot = doc.FirstChildElement("schedules"); + GetSchedulesResponseXmlDataDeserializer* xmlDataDeserializer = new GetSchedulesResponseXmlDataDeserializer(*this, object); + elRoot->Accept(xmlDataDeserializer); +diff --git a/lib/libdvblinkremote/server_info.cpp b/lib/libdvblinkremote/server_info.cpp +index a308048..adbfcee 100644 +--- a/lib/libdvblinkremote/server_info.cpp ++++ b/lib/libdvblinkremote/server_info.cpp +@@ -63,7 +63,7 @@ bool ServerInfoSerializer::ReadObject(ServerInfo& object, const std::string& xml + { + tinyxml2::XMLDocument& doc = GetXmlDocument(); + +- if (doc.Parse(xml.c_str()) == tinyxml2::XML_NO_ERROR) { ++ if (doc.Parse(xml.c_str()) == tinyxml2::XML_SUCCESS) { + tinyxml2::XMLElement* elRoot = doc.FirstChildElement("server_info"); + object.install_id_ = Util::GetXmlFirstChildElementText(elRoot, "install_id"); + object.server_id_ = Util::GetXmlFirstChildElementText(elRoot, "server_id"); +diff --git a/lib/libdvblinkremote/stream.cpp b/lib/libdvblinkremote/stream.cpp +index 767c7e1..e2c8259 100644 +--- a/lib/libdvblinkremote/stream.cpp ++++ b/lib/libdvblinkremote/stream.cpp +@@ -74,7 +74,7 @@ bool StreamResponseSerializer::ReadObject(Stream& object, const std::string& xml + { + tinyxml2::XMLDocument& doc = GetXmlDocument(); + +- if (doc.Parse(xml.c_str()) == tinyxml2::XML_NO_ERROR) { ++ if (doc.Parse(xml.c_str()) == tinyxml2::XML_SUCCESS) { + tinyxml2::XMLElement* elRoot = doc.FirstChildElement("stream"); + long channelHandle = Util::GetXmlFirstChildElementTextAsLong(elRoot, "channel_handle"); + std::string url = Util::GetXmlFirstChildElementText(elRoot, "url"); +diff --git a/lib/libdvblinkremote/streaming_capabilities.cpp b/lib/libdvblinkremote/streaming_capabilities.cpp +index 2544199..d2da28a 100644 +--- a/lib/libdvblinkremote/streaming_capabilities.cpp ++++ b/lib/libdvblinkremote/streaming_capabilities.cpp +@@ -83,7 +83,7 @@ bool StreamingCapabilitiesSerializer::ReadObject(StreamingCapabilities& object, + { + tinyxml2::XMLDocument& doc = GetXmlDocument(); + +- if (doc.Parse(xml.c_str()) == tinyxml2::XML_NO_ERROR) { ++ if (doc.Parse(xml.c_str()) == tinyxml2::XML_SUCCESS) { + tinyxml2::XMLElement* elRoot = doc.FirstChildElement("streaming_caps"); + object.SupportedProtocols = Util::GetXmlFirstChildElementTextAsInt(elRoot, "protocols"); + object.SupportedTranscoders = Util::GetXmlFirstChildElementTextAsInt(elRoot, "transcoders"); +diff --git a/pvr.dvblink/changelog.txt b/pvr.dvblink/changelog.txt +index 4f1a8e2..bf2f4d4 100644 +--- a/pvr.dvblink/changelog.txt ++++ b/pvr.dvblink/changelog.txt +@@ -1,6 +1,7 @@ + [B]Version 3.3.5[/B] + Fixed: Crash on startup with search timers + Fixed: Incorrect disk space display if disk size is more than 2TB ++Fixed: tinyxml2 v4 compatibility (XML_NO_ERROR -> XML_SUCCESS) + + [B]Version 3.3.4[/B] + Updated: language files from Transifex + +From c5e4a81e007ce2547900a713436cefe66d917fa7 Mon Sep 17 00:00:00 2001 +From: dvblogic +Date: Wed, 14 Sep 2016 15:27:42 +0200 +Subject: [PATCH 3/3] added #include to prevent compiler errors + +--- + lib/libdvblinkremote/dvblinkremotecommunication.cpp | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/lib/libdvblinkremote/dvblinkremotecommunication.cpp b/lib/libdvblinkremote/dvblinkremotecommunication.cpp +index 6037c3b..a254ded 100644 +--- a/lib/libdvblinkremote/dvblinkremotecommunication.cpp ++++ b/lib/libdvblinkremote/dvblinkremotecommunication.cpp +@@ -21,6 +21,7 @@ + * + ***************************************************************************/ + ++#include + #include "dvblinkremoteconnection.h" + #include "xml_object_serializer.h" + #include "generic_response.h"