diff -Nru kodi-pvr-pctv-1.4.7/CMakeLists.txt kodi-pvr-pctv-2.4.3/CMakeLists.txt --- kodi-pvr-pctv-1.4.7/CMakeLists.txt 2017-03-24 20:31:17.000000000 +0000 +++ kodi-pvr-pctv-2.4.3/CMakeLists.txt 2018-08-25 06:06:08.000000000 +0000 @@ -24,6 +24,11 @@ src/PctvData.cpp src/rest.cpp) +set(PCTV_HEADERS src/client.h + src/md5.h + src/PctvData.h + src/rest.h) + build_addon(pvr.pctv PCTV DEPLIBS) include(CPack) diff -Nru kodi-pvr-pctv-1.4.7/debian/changelog kodi-pvr-pctv-2.4.3/debian/changelog --- kodi-pvr-pctv-1.4.7/debian/changelog 2018-04-30 15:18:50.000000000 +0000 +++ kodi-pvr-pctv-2.4.3/debian/changelog 2018-10-10 07:58:19.000000000 +0000 @@ -1,10 +1,22 @@ -kodi-pvr-pctv (1.4.7-1~bionic) bionic; urgency=low +kodi-pvr-pctv (2.4.3-2~bionic) bionic; urgency=low [ kodi ] * autogenerated dummy changelog [ wsnipex ] - * 1.4.2 - Updated Language files from Transifex 1.4.1 - Updated + * 2.4.1 - Updated to PVR addon API v5.10.1 2.4.0 - Updated to PVR + addon API v5.10.0 2.3.2 - Updated to PVR addon API v5.9.0 2.3.1 - + Replace deprecated jsoncpp methods 2.3.0 - Updated to PVR addon API + v5.8.0 2.2.3 - Bump jsoncpp to version 1.8.3 2.2.2 - Remove + StdString usage 2.2.0 - Updated to PVR addon API v5.7.0 - bumped + jsoncpp to 0.10.6 - changed jsoncpp deprecated method to new method + getFormattedErrorMessages 2.1.0 - Updated to PVR addon API v5.3.0 + 2.0.4 - Remove of never used addon interface function 2.0.3 - Update + Debian package control - PVR addon callback way changes 2.0.2 - + Removed old no more needed version functions 2.0.1 - set dependency + versions automatic during build - removed never used kodi to addon + functions - build system fixes 2.0.0 - Initial Kodi v18 version + 1.4.2 - Updated Language files from Transifex 1.4.1 - Updated Language files from Transifex 1.4.0 - Cmake: rename find_package kodi to Kodi 1.3.1 - Fix includes 1.3.0 - Updated to PVR addon API v5.2.0 1.2.0 - Updated to PVR addon API v5.1.0 1.1.0 - Updated to @@ -24,4 +36,4 @@ space - minor changes 0.1.2 - sort all channels by name (almost like Broadway) 0.1.1 - fix: add timer 0.1.0 - initial version - -- wsnipex Mon, 30 Apr 2018 17:18:50 +0200 + -- wsnipex Wed, 10 Oct 2018 09:58:19 +0200 diff -Nru kodi-pvr-pctv-1.4.7/debian/changelog.tmp kodi-pvr-pctv-2.4.3/debian/changelog.tmp --- kodi-pvr-pctv-1.4.7/debian/changelog.tmp 2018-04-30 15:18:45.000000000 +0000 +++ kodi-pvr-pctv-2.4.3/debian/changelog.tmp 2018-10-10 07:58:09.000000000 +0000 @@ -1,4 +1,4 @@ -kodi-pvr-pctv (1.4.7-1~#DIST#) #DIST#; urgency=low +kodi-pvr-pctv (2.4.3-2~#DIST#) #DIST#; urgency=low [ kodi ] * autogenerated dummy changelog diff -Nru kodi-pvr-pctv-1.4.7/debian/control kodi-pvr-pctv-2.4.3/debian/control --- kodi-pvr-pctv-1.4.7/debian/control 2017-03-24 20:31:17.000000000 +0000 +++ kodi-pvr-pctv-2.4.3/debian/control 2018-08-25 06:06:08.000000000 +0000 @@ -1,8 +1,8 @@ Source: kodi-pvr-pctv Priority: extra Maintainer: hg1 -Build-Depends: debhelper (>= 9.0.0), cmake, kodi-pvr-dev, - libkodiplatform-dev (>= 16.0.0), kodi-addon-dev, libjsoncpp-dev +Build-Depends: debhelper (>= 9.0.0), cmake, libkodiplatform-dev (>= 16.0.0), + kodi-addon-dev, libjsoncpp-dev Standards-Version: 3.9.4 Section: libs diff -Nru kodi-pvr-pctv-1.4.7/depends/common/jsoncpp/CMakeLists.txt kodi-pvr-pctv-2.4.3/depends/common/jsoncpp/CMakeLists.txt --- kodi-pvr-pctv-1.4.7/depends/common/jsoncpp/CMakeLists.txt 2017-03-24 20:31:17.000000000 +0000 +++ kodi-pvr-pctv-2.4.3/depends/common/jsoncpp/CMakeLists.txt 2018-08-25 06:06:08.000000000 +0000 @@ -1,7 +1,10 @@ project(jsoncpp) -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 3.1) enable_language(CXX) +SET(CMAKE_CXX_STANDARD 11) +SET(CMAKE_CXX_STANDARD_REQUIRED ON) +SET(CMAKE_CXX_EXTENSIONS OFF) set(SOURCES src/lib_json/json_reader.cpp src/lib_json/json_value.cpp diff -Nru kodi-pvr-pctv-1.4.7/depends/common/jsoncpp/jsoncpp.txt kodi-pvr-pctv-2.4.3/depends/common/jsoncpp/jsoncpp.txt --- kodi-pvr-pctv-1.4.7/depends/common/jsoncpp/jsoncpp.txt 2017-03-24 20:31:17.000000000 +0000 +++ kodi-pvr-pctv-2.4.3/depends/common/jsoncpp/jsoncpp.txt 2018-08-25 06:06:08.000000000 +0000 @@ -1 +1 @@ -jsoncpp http://mirrors.kodi.tv/build-deps/sources/jsoncpp-src-0.5.0.tar.gz +jsoncpp http://mirrors.kodi.tv/build-deps/sources/jsoncpp-1.8.3.tar.gz diff -Nru kodi-pvr-pctv-1.4.7/pvr.pctv/addon.xml.in kodi-pvr-pctv-2.4.3/pvr.pctv/addon.xml.in --- kodi-pvr-pctv-1.4.7/pvr.pctv/addon.xml.in 2017-03-24 20:31:17.000000000 +0000 +++ kodi-pvr-pctv-2.4.3/pvr.pctv/addon.xml.in 2018-08-25 06:06:08.000000000 +0000 @@ -1,21 +1,19 @@ - - - - + @ADDON_DEPENDS@ PVR kliënt om PCTV Systems Broadway aan Kodi te konnekteer - ПВР клиент за свързване на Kodi с PCTV Systems Broadway + Клиент за ПВР за свързване на Kodi с „PCTV Systems Broadway“ Client PVR per connectar el sistema PCTV a Kodi Klient PVR pro připojení PCTV Systems Broadway ke Kodi + Cleiant PRV i gysylltu Broadway Systemau PCTV i Kodi PVR klient som forbinder Kodi til PCTV Systems Broadway PVR Client um Kodi mit PCTV Systems Broadway zu verbinden PVR Client to connect PCTV Systems Broadway to Kodi @@ -24,6 +22,7 @@ Cliente PVR para conectar a Kodi PCTV Systems Broadway Cliente PVR para conectar el sistema PCTV a Kodi Cliente PVR para conectar PCTV Systems Broadway a Kodi + PVR'i klient ühendamaks PCTV Systems Broadway Kodiga Kodin PCTV Systems Broadway -asiakasohjelma Client de numériscope pour connecter Broadway de PCTV Systems à Kodi Client enregistreur vidéo pour connecter le Broadway de PCTV Systems à Kodi @@ -55,8 +54,10 @@ Kodi 连接 PCTV 系统的 PVR 客户端 連接至PCTV Systems Broadway的Kodi PVR用戶端 PCTV Systems voorprogram. Ondersteun stroom van Lewendige TV & Opnames, EPG vertoon, Tydhouers. + Клиент за „PCTV Systems“. Поддържа телевизия на живо и записване, електронен програмен справочник и броячи. Frontal dels sistemes PCTV. És compatible amb les transmissions de TV en directe i enregistraments, guia electrònica de programació (EPG), temporitzadors. Rozhraní PCTV Systems. Podporuje streamování živého vysílání a nahrávek, zobrazení televizního programu, časovače. + Systemau PCTV rheng flaen. Cynnal ffrydio Recordiadau a Theledu Byw, Golwg EPG, Amseryddion. PCTV Systems. Understøtter streaming af Live TV & optagelse, EPG visning og Timere. PCTV Systemfrondend. Unterstütz das Streamen von Live TV & Aufnahmen, EPG Ansicht und Timern. PCTV Systems frontend. Supporting streaming of Live TV & Recordings, EPG View, Timers. @@ -66,21 +67,21 @@ Frontend PCTV Systems. Soporta TV en vivo, grabaciones, guía de programación EPG y temporizadores. PCTV Systems frontend. Soporta transmisión de TV en directo y grabaciones, ver EPG, Temporizadores. PCTV Systems-asiakasohjelma. Tukee suorien tv-lähetysten ja tallennusten katsomista, ohjelmaopasta ja ohjelmien ajastamista. - Frontal PCTV Systems. Prenant en charge la diffusion en continu de la télé en direct et des enregistrements, la visualisation du GÉP et des minuteries. + Frontal PCTV Systems. Prenant en charge la diffusion en continu de la télé en direct et des enregistrements, la visualisation du GÉP et les minuteries Interface logicielle de PCTV Systems. Prend en charge la diffusion de la TV en direct et des enregistrements, la vue du guide électronique des programmes TV et les programmations. Interface PCTV; soporta TV en directo, gravacións, Guía de programación e temporizadores. לקוח טלוויזיה חיה של PCTV Systems. תומך בהזרמת שידורים חיים והקלטות, הצגת לוח שידורים ותזמון הקלטות. Pozadinski softver za PCTV sustave podržava gledanje i snimanje TV programa, elektronski programski vodič (EPG) i zakazano snimanje. PCTV Systems előtét. Támogatja az elő TV adásokat és a felvételeket, EPG nézetet, időzítőket. Paling depan Sistem PCTV. Mendukung streaming TV Live & Rekaman, EPG View, Timers. - PCTV Systems framendi. Styður straum frá beinum útsendingum og upptökum, rafræna dagskrárvísa og tímastillingar. + PCTV Systems framendi. Styður streymi frá beinum útsendingum og upptökum, rafræna dagskrárvísa og tímastillingar. Frontend PCTV Systems. Supporta lo streaming Live TV, le registrazioni, la visualizzazione dell'EPG e i Timers. PCTV 시스템 프론트엔드. 라이브 TV 스트리밍 & 녹화, EPG, 타이머 지원. PCTV Systems naudotojo sąsaja. Palaiko TV transliacijas ir įrašymą, EPG rodymą, laikmačius. PCTV sistēmu galasistēma. Atbalsta tiešraides TV straumēšanu & ierakstus, EPG skatu, taimerus. Bahagian hadapan PCTV Systems. Menyokong penstriman TV Langsung & Rakaman, Paparan EPG, Pemasa. PCTV-grenseflate. Støtte for direkte-TV & Opptak, EPG, tidsur. - PCTV Systeem frontend. Ondersteunt het streamen van Live TV & opnames, EPG overzicht, Timers. + PCTV Systeem frontend. Ondersteunt het streamen van Live-TV & opnames, EPG-overzicht, Timers. Klient telewizji dla systemu PCTV obsługuje transmisję kanałów telewizyjnych, nagrywanie i harmonogram nagrań oraz funkcje przewodnika telewizyjnego. Frontend para PCTV Systems. Suporta streaming de Tv ao Vivo & Gravações, Visualização de EPG, Agendamentos. Interface para sistemas PCTV. Suporta transmissão e gravação de TV em direto, EPG e temporizadores. @@ -96,10 +97,10 @@ PCTV 系统的前端。支持直播电视播放及录像、电子节目单浏览、定时器。 PCTV Systems前端介面。支援即時電視串流及錄影,電子節目表,定時器。 Hierdie is onstabiele sagteware! Die outeurs is op geen manier verantwoordelik vir gefaalde spele, inkorrekte EPG tye, vermorsde ure, of enige ander ongewensde effekte. - Тази програма е нестабилна! Авторите не носят отговорност за неуспешно възпроизвеждане, некоректнени часове електронния програмен справочник, пропиляното време и други нежелани ефекти. + Тази програма е нестабилна! Авторите не носят отговорност за неуспешно възпроизвеждане, неправилни времена в справочника, пропиляното време и други нежелани ефекти. Aquest programari és inestable! Els autors no es fan responsables de reproduccions fallides, horaris incorrectes a la guia electrònica de programació (EPG), hores perdudes o qualsevol altre efecte no desitjat. - Tento software není stabilní! Autoři nejsou žádným způsobem zodpovědní za neúspěšná nahrávání, nesprávné časy televizního programu, ztracený čas nebo jakékoliv jiné nežádoucí výsledky... - Mae hwn yn feddalwedd ansad! Nid yw'r awduron yn gyfrifol mewn unrhyw ffordd am fethu recordio, amseru gwallus, oriau wedi eu gwastraffu nac effeithiau anymunol eraill. + Tento software není stabilní! Autoři nejsou žádným způsobem zodpovědní za neúspěšná nahrávání, nesprávné časy televizního programu, ztracený čas nebo jakékoliv jiné nežádoucí výsledky… + Mae'r feddalwedd hon yn fregus! Nid yw'r awduron yn gyfrifol mewn unrhyw ffordd am fethu recordio, amseru gwallus, oriau wedi eu gwastraffu nac effeithiau annymunol eraill. Dette er ustabil software! Ophavsmændene er på ingen måde ansvarlig for mislykkede afspilninger, forkerte EPG tider, spildte timer, eller andre bivirkninger. Dies ist instabile Software! Die Autoren sind in keiner Weise verantwortlich für fehlgeschlagene Wiedergaben, falsche EPG Zeiten, verschwendete Zeit oder unerwünschte Effekte jeglicher Art. Ασταθές πρόγραμμα! Οι δημιουργοί δεν είναι σε καμία περίπτωση υπεύθυνοι για αποτυχημένες εγγραφές, λανθασμένους χρονοδιακόπτες, χαμένες ώρες, ή κάθε είδους ανεπιθύμητα αποτελέσματα. @@ -110,8 +111,9 @@ Este es un software inestable. El autor no se hace responsable por reproducciones fallidas, datos de GEP incorrectos, horas perdidas o cualquier otro efecto indeseable. Este es un software inestable. El autor no se hace responsable por reproducciones fallidas, datos de EPG incorrectos, horas perdidas o cualquier otro efecto indeseable. ¡Este es un software inestable! Los autores no son responsables en absoluto de reproducciones fallidas, tiempos EPG incorrectos, desperdicio de horas, o cualquier otro efecto indeseable. + Software hau ezegonkorra da! Egileak ez dira inolaz ere erantzule editen erreprodukzio akatsez, EPG denbora okerrez, ordu galduez edo beste edozein ondorio ezerosotaz. Tämä on epävakaa ohjelma! Sen tekijät eivät ole millään muotoa vastuussa epäonnistuneista tallennuksista, virheellisistä ajastuksista, haaskatusta ajasta, verenpaineen noususta tai mistään muusta epäsuotuisasta vaikutuksesta. - Ce logiciel est instable! Les auteurs ne sont aucunement responsables des lectures défaillantes, d'horaires erronés du GÉP, des heures perdues ou tout autre effet indésirable. + Ce logiciel est instable ! Les auteurs ne sont aucunement responsables des lectures défaillantes, d’horaires erronés du GÉP, des heures perdues ou tout autre effet indésirable. Logiciel en cours d'élaboration ! Les auteurs ne sont en aucun cas responsables de l'échec des enregistrements, programmations défectueuses, temps perdu ou autres effets indésirables. Este software non é estábel! Os autores non se fan responsábeis dos erros na reproducción, horarios incorrectos na Guía, horas vencidas, e otros efectos non desexados. זוהי איננה הרחבה יציבה! המפתחים אינם אחראים על כשלון בניגון, זמנים שגויים במדריך השידורים, שעות מבוזבזות או כל תופעה לא רצויה אחרת. @@ -127,7 +129,7 @@ Ова е нестабилен софтвер! Авторите во никој случај не се одговорни за неуспешно гледање, неточни времиња во EPG, вашето потрошено време или било кои непосакувани ефекти. Perisian ini tidak stabi! Pengarang tidak bertanggungjawab atas kegagalan memainkan, pemasa EPG yang tidak betul, pembaziran masa atau sebarang kesan tidak diingini. Dan il-programm mhuwiex stabbli! L-awturi m'huma bl-ebda mod responsabbli għal daqq li ma jirnexxiex, ħinijiet tal-EPG żbaljati, siegħat moħlija jew kwalunkwe effet ieħor mhux mixtieq. - Dette er et ustabilt program! Skaperne er på ingen måte ansvarlig for feil ved avspilling, feil programguide tide, bortkastede timer eller andre uønskede ting. + Dette er et ustabilt program! Skaperne er på ingen måte ansvarlig for feil ved avspilling, feil programguidetider, bortkastede timer eller andre uønskede ting. Dit is instabiele software! De makers zijn op geen enkele wijze verantwoordelijk voor foutieve opnames, incorrecte EPG-tijden, verloren uren of welke andere ongewenste bijverschijnselen dan ook. Oprogramowanie nadal jest w fazie rozwoju i jest niestabilne! Autorzy w żaden sposób nie są odpowiedzialni za nieudane nagrania, błędy w harmonogramie nagrań, zmarnowany czas ani jakiekolwiek inne niepożądane efekty. Este é um software instável! Os autores não são responsáveis por falhas nas reproduções, horários incorretos no EPG, horas perdidas ou quaisquer outros efeitos indesejáveis. diff -Nru kodi-pvr-pctv-1.4.7/pvr.pctv/changelog.txt kodi-pvr-pctv-2.4.3/pvr.pctv/changelog.txt --- kodi-pvr-pctv-1.4.7/pvr.pctv/changelog.txt 2017-03-24 20:31:17.000000000 +0000 +++ kodi-pvr-pctv-2.4.3/pvr.pctv/changelog.txt 2018-08-25 06:06:08.000000000 +0000 @@ -1,3 +1,50 @@ +2.4.1 +- Updated to PVR addon API v5.10.1 + +2.4.0 +- Updated to PVR addon API v5.10.0 + +2.3.2 +- Updated to PVR addon API v5.9.0 + +2.3.1 +- Replace deprecated jsoncpp methods + +2.3.0 +- Updated to PVR addon API v5.8.0 + +2.2.3 +- Bump jsoncpp to version 1.8.3 + +2.2.2 +- Remove StdString usage + +2.2.0 +- Updated to PVR addon API v5.7.0 +- bumped jsoncpp to 0.10.6 +- changed jsoncpp deprecated method to new method getFormattedErrorMessages + +2.1.0 +- Updated to PVR addon API v5.3.0 + +2.0.4 +- Remove of never used addon interface function + +2.0.3 +- Update Debian package control +- PVR addon callback way changes + +2.0.2 +- Removed old no more needed version functions + +2.0.1 +- set dependency versions automatic during build +- removed never used kodi to addon functions +- build system fixes + +2.0.0 +- Initial Kodi v18 version + 1.4.2 - Updated Language files from Transifex diff -Nru kodi-pvr-pctv-1.4.7/pvr.pctv/resources/language/resource.language.am_et/strings.po kodi-pvr-pctv-2.4.3/pvr.pctv/resources/language/resource.language.am_et/strings.po --- kodi-pvr-pctv-1.4.7/pvr.pctv/resources/language/resource.language.am_et/strings.po 2017-03-24 20:31:17.000000000 +0000 +++ kodi-pvr-pctv-2.4.3/pvr.pctv/resources/language/resource.language.am_et/strings.po 2018-08-25 06:06:08.000000000 +0000 @@ -20,6 +20,10 @@ msgid "Port" msgstr "Port" +msgctxt "#30002" +msgid "PIN" +msgstr "PIN" + msgctxt "#30020" msgid "Transcode" msgstr "Transcode" diff -Nru kodi-pvr-pctv-1.4.7/pvr.pctv/resources/language/resource.language.bg_bg/strings.po kodi-pvr-pctv-2.4.3/pvr.pctv/resources/language/resource.language.bg_bg/strings.po --- kodi-pvr-pctv-1.4.7/pvr.pctv/resources/language/resource.language.bg_bg/strings.po 2017-03-24 20:31:17.000000000 +0000 +++ kodi-pvr-pctv-2.4.3/pvr.pctv/resources/language/resource.language.bg_bg/strings.po 2018-08-25 06:06:08.000000000 +0000 @@ -28,9 +28,17 @@ msgid "PIN" msgstr "Код" +msgctxt "#30010" +msgid "Automatic Host Detection" +msgstr "Автоматично разпознаване на хоста" + +msgctxt "#30020" +msgid "Transcode" +msgstr "Преобразуване" + msgctxt "#30021" msgid "PIN required" -msgstr "Необходим е код" +msgstr "Изисква се код" msgctxt "#30030" msgid "Video Bitrate (Kbps)" diff -Nru kodi-pvr-pctv-1.4.7/pvr.pctv/resources/language/resource.language.cs_cz/strings.po kodi-pvr-pctv-2.4.3/pvr.pctv/resources/language/resource.language.cs_cz/strings.po --- kodi-pvr-pctv-1.4.7/pvr.pctv/resources/language/resource.language.cs_cz/strings.po 2017-03-24 20:31:17.000000000 +0000 +++ kodi-pvr-pctv-2.4.3/pvr.pctv/resources/language/resource.language.cs_cz/strings.po 2018-08-25 06:06:08.000000000 +0000 @@ -30,7 +30,7 @@ msgctxt "#30010" msgid "Automatic Host Detection" -msgstr "Automatická detekce hostitele" +msgstr "Automatické zjištění hostitele" msgctxt "#30020" msgid "Transcode" @@ -42,7 +42,7 @@ msgctxt "#30030" msgid "Video Bitrate (Kbps)" -msgstr "Přenosová rychlost videa (Kbps)" +msgstr "Přenosová rychlost videa (Kb/s)" msgctxt "#30100" msgid "General" diff -Nru kodi-pvr-pctv-1.4.7/pvr.pctv/resources/language/resource.language.cy_gb/strings.po kodi-pvr-pctv-2.4.3/pvr.pctv/resources/language/resource.language.cy_gb/strings.po --- kodi-pvr-pctv-1.4.7/pvr.pctv/resources/language/resource.language.cy_gb/strings.po 2017-03-24 20:31:17.000000000 +0000 +++ kodi-pvr-pctv-2.4.3/pvr.pctv/resources/language/resource.language.cy_gb/strings.po 2018-08-25 06:06:08.000000000 +0000 @@ -16,10 +16,34 @@ "Language: cy_GB\n" "Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;\n" +msgctxt "#30000" +msgid "Hostname or IP address" +msgstr "Cyfeiriad IP neu Enw Cynhaliwr" + msgctxt "#30001" msgid "Port" msgstr "Porth" +msgctxt "#30002" +msgid "PIN" +msgstr "PIN" + +msgctxt "#30010" +msgid "Automatic Host Detection" +msgstr "Canfod Cynhaliwr yn Awtomatig" + +msgctxt "#30020" +msgid "Transcode" +msgstr "Trawsgod" + +msgctxt "#30021" +msgid "PIN required" +msgstr "Angen y PIN" + +msgctxt "#30030" +msgid "Video Bitrate (Kbps)" +msgstr "Graddfa Didau Fideo (kbps)" + msgctxt "#30100" msgid "General" msgstr "Cyffredinol" diff -Nru kodi-pvr-pctv-1.4.7/pvr.pctv/resources/language/resource.language.eu_es/strings.po kodi-pvr-pctv-2.4.3/pvr.pctv/resources/language/resource.language.eu_es/strings.po --- kodi-pvr-pctv-1.4.7/pvr.pctv/resources/language/resource.language.eu_es/strings.po 2017-03-24 20:31:17.000000000 +0000 +++ kodi-pvr-pctv-2.4.3/pvr.pctv/resources/language/resource.language.eu_es/strings.po 2018-08-25 06:06:08.000000000 +0000 @@ -16,10 +16,26 @@ "Language: eu_ES\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +msgctxt "#30000" +msgid "Hostname or IP address" +msgstr "Ostalari izena edo IP helbidea" + msgctxt "#30001" msgid "Port" msgstr "Portua" +msgctxt "#30010" +msgid "Automatic Host Detection" +msgstr "Hostalari antzemate automatikoa" + +msgctxt "#30021" +msgid "PIN required" +msgstr "PINa beharrezkoa da" + +msgctxt "#30030" +msgid "Video Bitrate (Kbps)" +msgstr "Bideoaren Bit-tasa (Kbps)" + msgctxt "#30100" msgid "General" msgstr "Orokorra" diff -Nru kodi-pvr-pctv-1.4.7/pvr.pctv/resources/language/resource.language.fr_ca/strings.po kodi-pvr-pctv-2.4.3/pvr.pctv/resources/language/resource.language.fr_ca/strings.po --- kodi-pvr-pctv-1.4.7/pvr.pctv/resources/language/resource.language.fr_ca/strings.po 2017-03-24 20:31:17.000000000 +0000 +++ kodi-pvr-pctv-2.4.3/pvr.pctv/resources/language/resource.language.fr_ca/strings.po 2018-08-25 06:06:08.000000000 +0000 @@ -18,7 +18,7 @@ msgctxt "#30000" msgid "Hostname or IP address" -msgstr "Nom d'hôte ou adresse IP" +msgstr "Nom d’hôte ou adresse IP" msgctxt "#30001" msgid "Port" @@ -30,7 +30,7 @@ msgctxt "#30010" msgid "Automatic Host Detection" -msgstr "Détection automatique de l'hôte" +msgstr "Détection automatique de l’hôte" msgctxt "#30020" msgid "Transcode" diff -Nru kodi-pvr-pctv-1.4.7/pvr.pctv/resources/language/resource.language.nb_no/strings.po kodi-pvr-pctv-2.4.3/pvr.pctv/resources/language/resource.language.nb_no/strings.po --- kodi-pvr-pctv-1.4.7/pvr.pctv/resources/language/resource.language.nb_no/strings.po 2017-03-24 20:31:17.000000000 +0000 +++ kodi-pvr-pctv-2.4.3/pvr.pctv/resources/language/resource.language.nb_no/strings.po 2018-08-25 06:06:08.000000000 +0000 @@ -42,7 +42,7 @@ msgctxt "#30030" msgid "Video Bitrate (Kbps)" -msgstr "Video Bitrate (kbps)" +msgstr "Videobitrate (kbps)" msgctxt "#30100" msgid "General" diff -Nru kodi-pvr-pctv-1.4.7/pvr.pctv/resources/language/resource.language.zh_tw/strings.po kodi-pvr-pctv-2.4.3/pvr.pctv/resources/language/resource.language.zh_tw/strings.po --- kodi-pvr-pctv-1.4.7/pvr.pctv/resources/language/resource.language.zh_tw/strings.po 2017-03-24 20:31:17.000000000 +0000 +++ kodi-pvr-pctv-2.4.3/pvr.pctv/resources/language/resource.language.zh_tw/strings.po 2018-08-25 06:06:08.000000000 +0000 @@ -42,7 +42,7 @@ msgctxt "#30030" msgid "Video Bitrate (Kbps)" -msgstr "影像码率(kbps)" +msgstr "影像碼率 (kbps)" msgctxt "#30100" msgid "General" diff -Nru kodi-pvr-pctv-1.4.7/README.md kodi-pvr-pctv-2.4.3/README.md --- kodi-pvr-pctv-1.4.7/README.md 2017-03-24 20:31:17.000000000 +0000 +++ kodi-pvr-pctv-2.4.3/README.md 2018-08-25 06:06:08.000000000 +0000 @@ -11,7 +11,7 @@ 1. `git clone https://github.com/xbmc/xbmc.git` 2. `git clone https://github.com/kodi-pvr/pvr.pctv.git` 3. `cd pvr.pctv && mkdir build && cd build` -4. `cmake -DADDONS_TO_BUILD=pvr.pctv -DADDON_SRC_PREFIX=../.. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=../../xbmc/addons -DPACKAGE_ZIP=1 ../../xbmc/project/cmake/addons` +4. `cmake -DADDONS_TO_BUILD=pvr.pctv -DADDON_SRC_PREFIX=../.. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=../../xbmc/addons -DPACKAGE_ZIP=1 ../../xbmc/cmake/addons` 5. `make` ##### Useful links diff -Nru kodi-pvr-pctv-1.4.7/src/client.cpp kodi-pvr-pctv-2.4.3/src/client.cpp --- kodi-pvr-pctv-1.4.7/src/client.cpp 2017-03-24 20:31:17.000000000 +0000 +++ kodi-pvr-pctv-2.4.3/src/client.cpp 2018-08-25 06:06:08.000000000 +0000 @@ -25,6 +25,11 @@ #include #include "PctvData.h" #include "p8-platform/util/util.h" +#include + +#if defined(TARGET_WINDOWS) && defined(CreateDirectory) +#undef CreateDirectory +#endif using namespace std; using namespace ADDON; @@ -171,11 +176,7 @@ if (!XBMC->DirectoryExists(g_strUserPath.c_str())) { -#ifdef TARGET_WINDOWS - CreateDirectory(g_strUserPath.c_str(), NULL); -#else XBMC->CreateDirectory(g_strUserPath.c_str()); -#endif } ADDON_ReadSettings(); @@ -219,16 +220,6 @@ m_CurStatus = ADDON_STATUS_UNKNOWN; } -bool ADDON_HasSettings() -{ - return true; -} - -unsigned int ADDON_GetSettings(ADDON_StructSetting ***sSet) -{ - return 0; -} - ADDON_STATUS ADDON_SetSetting(const char *settingName, const void *settingValue) { string str = settingName; @@ -297,14 +288,6 @@ return ADDON_STATUS_OK; } -void ADDON_Stop() -{ -} - -void ADDON_FreeSettings() -{ -} - /*********************************************************** * PVR Client AddOn specific public library functions ***********************************************************/ @@ -325,28 +308,6 @@ { } -const char* GetPVRAPIVersion(void) -{ - static const char *strApiVersion = XBMC_PVR_API_VERSION; - return strApiVersion; -} - -const char* GetMininumPVRAPIVersion(void) -{ - static const char *strMinApiVersion = XBMC_PVR_MIN_API_VERSION; - return strMinApiVersion; -} - -const char* GetGUIAPIVersion(void) -{ - return ""; // GUI API not used -} - -const char* GetMininumGUIAPIVersion(void) -{ - return ""; // GUI API not used -} - PVR_ERROR GetAddonCapabilities(PVR_ADDON_CAPABILITIES* pCapabilities) { pCapabilities->bSupportsEPG = true; @@ -360,6 +321,9 @@ pCapabilities->bHandlesInputStream = false; pCapabilities->bHandlesDemuxing = false; pCapabilities->bSupportsLastPlayedPosition = false; + pCapabilities->bSupportsRecordingsRename = false; + pCapabilities->bSupportsRecordingsLifetimeChange = false; + pCapabilities->bSupportsDescrambleInfo = false; return PVR_ERROR_NO_ERROR; } @@ -383,12 +347,12 @@ const char *GetConnectionString(void) { - //static CStdString strConnectionString = "connected"; - static CStdString strConnectionString; + //static std::string strConnectionString = "connected"; + static std::string strConnectionString; if (PctvData) - strConnectionString.Format("%s%s", g_strHostname.c_str(), PctvData->IsConnected() ? "" : " (Not connected!)"); + strConnectionString= StringUtils::Format("%s%s", g_strHostname.c_str(), PctvData->IsConnected() ? "" : " (Not connected!)"); else - strConnectionString.Format("%s (addon error!)", g_strHostname.c_str()); + strConnectionString= StringUtils::Format("%s (addon error!)", g_strHostname.c_str()); return strConnectionString.c_str(); } @@ -441,13 +405,6 @@ } } -bool SwitchChannel(const PVR_CHANNEL &channel) -{ - CloseLiveStream(); - - return OpenLiveStream(channel); -} - PVR_ERROR GetEPGForChannel(ADDON_HANDLE handle, const PVR_CHANNEL &channel, time_t iStart, time_t iEnd) { if (!PctvData || !PctvData->IsConnected()) @@ -531,9 +488,21 @@ return PctvData->GetChannelGroupMembers(handle, group); } +PVR_ERROR GetChannelStreamProperties(const PVR_CHANNEL* channel, PVR_NAMED_VALUE* properties, unsigned int* iPropertiesCount) { + if (!PctvData || !PctvData->IsConnected()) + return PVR_ERROR_SERVER_ERROR; + + return PctvData->GetChannelStreamProperties(channel, properties, iPropertiesCount); +} + +PVR_ERROR GetRecordingStreamProperties(const PVR_RECORDING* recording, PVR_NAMED_VALUE* properties, unsigned int* iPropertiesCount) { + if (!PctvData || !PctvData->IsConnected()) + return PVR_ERROR_SERVER_ERROR; + + return PctvData->GetRecordingStreamProperties(recording, properties, iPropertiesCount); +} /** UNUSED API FUNCTIONS */ -const char * GetLiveStreamURL(const PVR_CHANNEL &channel) { return ""; } PVR_ERROR SignalStatus(PVR_SIGNAL_STATUS &signalStatus) { return PVR_ERROR_NO_ERROR; } PVR_ERROR GetStreamProperties(PVR_STREAM_PROPERTIES* pProperties) { return PVR_ERROR_NOT_IMPLEMENTED; } void DemuxAbort(void) { return; } @@ -541,7 +510,6 @@ PVR_ERROR CallMenuHook(const PVR_MENUHOOK &menuhook, const PVR_MENUHOOK_DATA &item) { return PVR_ERROR_NOT_IMPLEMENTED; } PVR_ERROR DeleteChannel(const PVR_CHANNEL &channel) { return PVR_ERROR_NOT_IMPLEMENTED; } PVR_ERROR RenameChannel(const PVR_CHANNEL &channel) { return PVR_ERROR_NOT_IMPLEMENTED; } -PVR_ERROR MoveChannel(const PVR_CHANNEL &channel) { return PVR_ERROR_NOT_IMPLEMENTED; } PVR_ERROR UpdateTimer(const PVR_TIMER &timer) { return PVR_ERROR_NOT_IMPLEMENTED; } PVR_ERROR SetRecordingLastPlayedPosition(const PVR_RECORDING &recording, int lastplayedposition) { return PVR_ERROR_NOT_IMPLEMENTED; } PVR_ERROR RenameRecording(const PVR_RECORDING &recording) { return PVR_ERROR_NOT_IMPLEMENTED; } @@ -552,26 +520,20 @@ void CloseRecordedStream(void) {} int ReadRecordedStream(unsigned char *pBuffer, unsigned int iBufferSize) { return 0; } long long SeekRecordedStream(long long iPosition, int iWhence /* = SEEK_SET */) { return 0; } -long long PositionRecordedStream(void) { return -1; } long long LengthRecordedStream(void) { return 0; } void DemuxReset(void) {} void DemuxFlush(void) {} int ReadLiveStream(unsigned char *pBuffer, unsigned int iBufferSize) { return 0; } long long SeekLiveStream(long long iPosition, int iWhence /* = SEEK_SET */) { return -1; } -long long PositionLiveStream(void) { return -1; } long long LengthLiveStream(void) { return -1; } PVR_ERROR SetRecordingPlayCount(const PVR_RECORDING &recording, int count) { return PVR_ERROR_NOT_IMPLEMENTED; } PVR_ERROR GetRecordingEdl(const PVR_RECORDING&, PVR_EDL_ENTRY[], int*) { return PVR_ERROR_NOT_IMPLEMENTED; }; -unsigned int GetChannelSwitchDelay(void) { return 0; } void PauseStream(bool bPaused) {} bool CanPauseStream(void) { return false; } bool CanSeekStream(void) { return false; } bool SeekTime(double, bool, double*) { return false; } void SetSpeed(int) {}; bool IsTimeshifting(void) { return false; } -time_t GetPlayingTime() { return 0; } -time_t GetBufferTimeStart() { return 0; } -time_t GetBufferTimeEnd() { return 0; } bool IsRealTimeStream() { return true; } PVR_ERROR UndeleteRecording(const PVR_RECORDING& recording) { return PVR_ERROR_NOT_IMPLEMENTED; } PVR_ERROR DeleteAllRecordingsFromTrash() { return PVR_ERROR_NOT_IMPLEMENTED; } @@ -579,4 +541,13 @@ PVR_ERROR OpenDialogChannelSettings(const PVR_CHANNEL &channel) { return PVR_ERROR_NOT_IMPLEMENTED; } PVR_ERROR OpenDialogChannelAdd(const PVR_CHANNEL &channel) { return PVR_ERROR_NOT_IMPLEMENTED; } PVR_ERROR SetEPGTimeFrame(int) { return PVR_ERROR_NOT_IMPLEMENTED; } +PVR_ERROR SetRecordingLifetime(const PVR_RECORDING*) { return PVR_ERROR_NOT_IMPLEMENTED; } +PVR_ERROR GetDescrambleInfo(PVR_DESCRAMBLE_INFO*) { return PVR_ERROR_NOT_IMPLEMENTED; } +PVR_ERROR GetStreamTimes(PVR_STREAM_TIMES*) { return PVR_ERROR_NOT_IMPLEMENTED; } +PVR_ERROR IsEPGTagPlayable(const EPG_TAG*, bool*) { return PVR_ERROR_NOT_IMPLEMENTED; } +PVR_ERROR IsEPGTagRecordable(const EPG_TAG*, bool*) { return PVR_ERROR_NOT_IMPLEMENTED; } +PVR_ERROR GetEPGTagStreamProperties(const EPG_TAG*, PVR_NAMED_VALUE*, unsigned int*) { return PVR_ERROR_NOT_IMPLEMENTED; } +PVR_ERROR GetEPGTagEdl(const EPG_TAG* epgTag, PVR_EDL_ENTRY edl[], int *size) { return PVR_ERROR_NOT_IMPLEMENTED; } +PVR_ERROR GetStreamReadChunkSize(int* chunksize) { return PVR_ERROR_NOT_IMPLEMENTED; } + } diff -Nru kodi-pvr-pctv-1.4.7/src/md5.cpp kodi-pvr-pctv-2.4.3/src/md5.cpp --- kodi-pvr-pctv-1.4.7/src/md5.cpp 2017-03-24 20:31:17.000000000 +0000 +++ kodi-pvr-pctv-2.4.3/src/md5.cpp 2018-08-25 06:06:08.000000000 +0000 @@ -20,6 +20,8 @@ #include "md5.h" +#include + typedef unsigned char md5byte; static void MD5Init(struct MD5Context *context); @@ -28,34 +30,33 @@ static void MD5Transform(uint32_t buf[4], uint32_t const in[16]); -XBMCPVR::XBMC_MD5::XBMC_MD5(void) +XBMC_MD5::XBMC_MD5(void) { MD5Init(&m_ctx); } -XBMCPVR::XBMC_MD5::~XBMC_MD5(void) -{} +XBMC_MD5::~XBMC_MD5(void) = default; -void XBMCPVR::XBMC_MD5::append(const void *inBuf, size_t inLen) +void XBMC_MD5::append(const void *inBuf, size_t inLen) { MD5Update(&m_ctx, (md5byte*)inBuf, inLen); } -void XBMCPVR::XBMC_MD5::append(const std::string& str) +void XBMC_MD5::append(const std::string& str) { append((unsigned char*) str.c_str(), (unsigned int) str.length()); } -void XBMCPVR::XBMC_MD5::getDigest(unsigned char digest[16]) +void XBMC_MD5::getDigest(unsigned char digest[16]) { MD5Final(digest, &m_ctx); } -void XBMCPVR::XBMC_MD5::getDigest(CStdString& digest) +std::string XBMC_MD5::getDigest() { unsigned char szBuf[16] = {'\0'}; getDigest(szBuf); - digest.Format("%02X%02X%02X%02X%02X%02X%02X%02X"\ + return StringUtils::Format("%02X%02X%02X%02X%02X%02X%02X%02X"\ "%02X%02X%02X%02X%02X%02X%02X%02X", szBuf[0], szBuf[1], szBuf[2], szBuf[3], szBuf[4], szBuf[5], szBuf[6], szBuf[7], szBuf[8], @@ -63,15 +64,13 @@ szBuf[15]); } -CStdString XBMCPVR::XBMC_MD5::GetMD5(const CStdString &text) +std::string XBMC_MD5::GetMD5(const std::string &text) { if (text.empty()) return ""; XBMC_MD5 state; - CStdString digest; state.append(text); - state.getDigest(digest); - return digest; + return state.getDigest(); } /* @@ -96,13 +95,8 @@ * Still in the public domain. */ -#include "md5.h" - #include /* for stupid systems */ #include /* for memcpy() */ -#if defined(HAVE_CONFIG_H) && !defined(TARGET_WINDOWS) -#include "../config.h" -#endif #ifdef WORDS_BIGENDIAN void @@ -234,7 +228,7 @@ static void MD5Transform(uint32_t buf[4], uint32_t const in[16]) { - register uint32_t a, b, c, d; + uint32_t a, b, c, d; a = buf[0]; b = buf[1]; @@ -315,4 +309,4 @@ buf[3] += d; } -#endif +#endif \ No newline at end of file diff -Nru kodi-pvr-pctv-1.4.7/src/md5.h kodi-pvr-pctv-2.4.3/src/md5.h --- kodi-pvr-pctv-1.4.7/src/md5.h 2017-03-24 20:31:17.000000000 +0000 +++ kodi-pvr-pctv-2.4.3/src/md5.h 2018-08-25 06:06:08.000000000 +0000 @@ -1,6 +1,8 @@ +#pragma once + /* - * Copyright (C) 2009-2013 Team XBMC - * http://xbmc.org + * Copyright (C) 2009-2015 Team Kodi + * http://kodi.tv * * This Program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -13,45 +15,35 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with XBMC; see the file COPYING. If not, see + * along with Kodi; see the file COPYING. If not, see * . * */ -#ifndef _MD5_H_ -#define _MD5_H_ - #include #include -#include "p8-platform/util/StdString.h" - struct MD5Context { uint32_t buf[4]; uint32_t bytes[2]; uint32_t in[16]; }; -namespace XBMCPVR +class XBMC_MD5 { - class XBMC_MD5 - { - public: - XBMC_MD5(void); - ~XBMC_MD5(void); - void append(const void *inBuf, size_t inLen); - void append(const std::string& str); - void getDigest(unsigned char digest[16]); - void getDigest(CStdString& digest); - - /*! \brief Get the MD5 digest of the given text - \param text text to compute the MD5 for - \return MD5 digest - */ - static CStdString GetMD5(const CStdString& text); +public: + XBMC_MD5(void); + ~XBMC_MD5(void); + void append(const void *inBuf, size_t inLen); + void append(const std::string& str); + void getDigest(unsigned char digest[16]); + std::string getDigest(); + + /*! \brief Get the MD5 digest of the given text + \param text text to compute the MD5 for + \return MD5 digest + */ + static std::string GetMD5(const std::string &text); private: - MD5Context m_ctx; - }; -} - -#endif + MD5Context m_ctx; +}; diff -Nru kodi-pvr-pctv-1.4.7/src/PctvData.cpp kodi-pvr-pctv-2.4.3/src/PctvData.cpp --- kodi-pvr-pctv-1.4.7/src/PctvData.cpp 2017-03-24 20:31:17.000000000 +0000 +++ kodi-pvr-pctv-2.4.3/src/PctvData.cpp 2018-08-25 06:06:08.000000000 +0000 @@ -1,5 +1,10 @@ #include "PctvData.h" + #include "client.h" + +#include + +#include #include #include #include @@ -46,7 +51,7 @@ m_bTranscode = g_bTranscode; m_bUsePIN = g_bUsePIN; m_iPortWeb = g_iPortWeb; - m_strBackendUrlNoAuth.Format("http://%s:%u", g_strHostname.c_str(), m_iPortWeb); + m_strBackendUrlNoAuth= StringUtils::Format("http://%s:%u", g_strHostname.c_str(), m_iPortWeb); } void *Pctv::Process() @@ -93,14 +98,14 @@ } // add user:pin in front of the URL if PIN is set - CStdString strURL = ""; + std::string strURL = ""; std::string strAuth = ""; if (m_bUsePIN) { - CStdString pinMD5 = XBMCPVR::XBMC_MD5::GetMD5(g_strPin); - pinMD5.ToLower(); + std::string pinMD5 = XBMC_MD5::GetMD5(g_strPin); + StringUtils::ToLower(pinMD5); - strURL.Format("User:%s@", pinMD5.c_str()); + strURL= StringUtils::Format("User:%s@", pinMD5.c_str()); if (IsSupported("broadway")) { @@ -108,7 +113,7 @@ } } - strURL.Format("http://%s%s:%u%s", strURL.c_str(), g_strHostname.c_str(), m_iPortWeb, strAuth); + strURL= StringUtils::Format("http://%s%s:%u%s", strURL.c_str(), g_strHostname.c_str(), m_iPortWeb, strAuth.c_str()); m_strBaseUrl = strURL; // request index.html to force wake-up from standby @@ -181,7 +186,7 @@ channel.iSubChannelNumber = 0; } channel.iEncryptionSystem = 0; - CStdString params; + std::string params; params = GetPreviewParams(handle, entry); channel.strStreamURL = GetPreviewUrl(params); channel.strLogoPath = GetChannelLogo(entry); @@ -207,7 +212,7 @@ { for (unsigned int i = 0; i < m_channels.size(); i++) { - CStdString strTmp; + std::string strTmp; PctvChannel &channel = m_channels.at(i); PVR_CHANNEL tag; memset(&tag, 0, sizeof(PVR_CHANNEL)); @@ -217,7 +222,6 @@ tag.iEncryptionSystem = channel.iEncryptionSystem; strncpy(tag.strChannelName, channel.strChannelName.c_str(), sizeof(tag.strChannelName)); strncpy(tag.strInputFormat, m_strPreviewMode.c_str(), sizeof(tag.strInputFormat)); - strncpy(tag.strStreamURL, channel.strStreamURL.c_str(), sizeof(tag.strStreamURL)); strncpy(tag.strIconPath, channel.strLogoPath.c_str(), sizeof(tag.strIconPath)); PVR->TransferChannelEntry(handle, &tag); } @@ -231,6 +235,33 @@ return true; } +PVR_ERROR Pctv::GetChannelStreamProperties(const PVR_CHANNEL* channel, PVR_NAMED_VALUE* properties, unsigned int* iPropertiesCount) +{ + if (*iPropertiesCount < 2) + return PVR_ERROR_INVALID_PARAMETERS; + + std:string strUrl; + for (const auto& pctvChannel : m_channels) + { + if (pctvChannel.iUniqueId == channel->iUniqueId) + { + strUrl = pctvChannel.strStreamURL; + } + } + + if (strUrl.empty()) { + return PVR_ERROR_FAILED; + } + strncpy(properties[0].strName, PVR_STREAM_PROPERTY_STREAMURL, sizeof(properties[0].strName) - 1); + strncpy(properties[0].strValue, strUrl.c_str(), sizeof(properties[0].strValue) - 1); + strncpy(properties[1].strName, PVR_STREAM_PROPERTY_ISREALTIMESTREAM, sizeof(properties[1].strName) - 1); + strncpy(properties[1].strValue, "true", sizeof(properties[1].strValue) - 1); + + *iPropertiesCount = 2; + + return PVR_ERROR_NO_ERROR; +} + /************************************************************/ /** Groups */ @@ -297,7 +328,7 @@ { for (unsigned int i = 0; i(entry["Duration"].asDouble() / 1000); // in seconds recording.iLastPlayedPosition = static_cast(entry["Resume"].asDouble() / 1000); // in seconds - CStdString params = GetPreviewParams(handle, entry); + std::string params = GetPreviewParams(handle, entry); recording.strStreamURL = GetPreviewUrl(params); m_iNumRecordings++; m_recordings.push_back(recording); @@ -412,7 +443,6 @@ memset(&tag, 0, sizeof(PVR_RECORDING)); strncpy(tag.strRecordingId, recording.strRecordingId.c_str(), sizeof(tag.strRecordingId) -1); strncpy(tag.strTitle, recording.strTitle.c_str(), sizeof(tag.strTitle) -1); - strncpy(tag.strStreamURL, recording.strStreamURL.c_str(), sizeof(tag.strStreamURL) -1); strncpy(tag.strPlotOutline, recording.strPlotOutline.c_str(), sizeof(tag.strPlotOutline) -1); strncpy(tag.strPlot, recording.strPlot.c_str(), sizeof(tag.strPlot) -1); strncpy(tag.strChannelName, recording.strChannelName.c_str(), sizeof(tag.strChannelName) -1); @@ -461,6 +491,26 @@ return m_iNumRecordings; } +PVR_ERROR Pctv::GetRecordingStreamProperties(const PVR_RECORDING* recording, PVR_NAMED_VALUE* properties, unsigned int* iPropertiesCount) +{ + std:string strRecordingFile; + for (const auto& PctvRec : m_recordings) + { + if (strcmp(PctvRec.strRecordingId.c_str(), recording->strRecordingId)== 0) + { + strRecordingFile = PctvRec.strStreamURL; + } + } + + if (strRecordingFile.empty()) + return PVR_ERROR_SERVER_ERROR; + + strncpy(properties[0].strName, PVR_STREAM_PROPERTY_STREAMURL, sizeof(properties[0].strName) - 1); + strncpy(properties[0].strValue, strRecordingFile.c_str(), sizeof(properties[0].strValue) - 1); + *iPropertiesCount = 1; + return PVR_ERROR_NO_ERROR; +} + /************************************************************/ /** Timer */ @@ -494,7 +544,7 @@ timer.iStartOffset = entry["StartOffset"].asInt(); timer.iEndOffset = entry["EndOffset"].asInt(); - CStdString strState = entry["State"].asString(); + std::string strState = entry["State"].asString(); if (strState == "Idle" || strState == "Prepared") { timer.state = PVR_TIMER_STATE_SCHEDULED; @@ -528,7 +578,7 @@ { for (unsigned int i = 0; i(timer.startTime) * 1000, static_cast(timer.endTime) * 1000, static_cast(timer.iMarginStart) * 1000, static_cast(timer.iMarginEnd) * 1000, timer.strTitle, 0, 0, DEFAULT_REC_PROFILE); cRest rest; @@ -661,7 +711,7 @@ epg.iUniqueBroadcastId = IsSupported("broadway") ? entry["Id"].asUInt() : GetEventId((long long)entry["Id"].asDouble()); epg.strTitle = entry["Title"].asCString(); - epg.iChannelNumber = iChannelId; + epg.iUniqueChannelId = iChannelId; epg.startTime = static_cast(entry["StartTime"].asDouble() / 1000); epg.endTime = static_cast(entry["EndTime"].asDouble() / 1000); epg.strPlotOutline = entry["LongDescription"].asCString(); @@ -717,9 +767,9 @@ int Pctv::RESTGetEpg(int id, time_t iStart, time_t iEnd, Json::Value& response) { - CStdString strParams; - //strParams.Format("?ids=%d&extended=1&start=%d&end=%d", id, iStart * 1000, iEnd * 1000); - strParams.Format("?ids=%d&extended=1&start=%llu&end=%llu", id, static_cast(iStart) * 1000, static_cast(iEnd) * 1000); + std::string strParams; + //strParams= StringUtils::Format("?ids=%d&extended=1&start=%d&end=%d", id, iStart * 1000, iEnd * 1000); + strParams= StringUtils::Format("?ids=%d&extended=1&start=%llu&end=%llu", id, static_cast(iStart) * 1000, static_cast(iEnd) * 1000); cRest rest; std::string strUrl = m_strBaseUrl + URI_REST_EPG; @@ -745,69 +795,69 @@ } -CStdString Pctv::GetPreviewParams(ADDON_HANDLE handle, Json::Value entry) +std::string Pctv::GetPreviewParams(ADDON_HANDLE handle, Json::Value entry) { - CStdString strStid = GetStid(handle->dataIdentifier); - CStdString strTmp; + std::string strStid = GetStid(handle->dataIdentifier); + std::string strTmp; if (entry["File"].isString()) { // Gallery entry - strTmp.Format("stid=%s&galleryid=%.0f&file=%s&profile=%s", strStid, entry["Id"].asDouble(), URLEncodeInline(entry["File"].asString()), GetTranscodeProfileValue()); + strTmp= StringUtils::Format("stid=%s&galleryid=%.0f&file=%s&profile=%s", strStid.c_str(), entry["Id"].asDouble(), URLEncodeInline(entry["File"].asString()).c_str(), GetTranscodeProfileValue().c_str()); return strTmp; } // channel entry - strTmp.Format("channel=%i&mode=%s&profile=%s&stid=%s", entry["Id"].asInt(), m_strPreviewMode, GetTranscodeProfileValue(), strStid); + strTmp= StringUtils::Format("channel=%i&mode=%s&profile=%s&stid=%s", entry["Id"].asInt(), m_strPreviewMode.c_str(), GetTranscodeProfileValue().c_str(), strStid.c_str()); return strTmp; } -CStdString Pctv::GetTranscodeProfileValue() +std::string Pctv::GetTranscodeProfileValue() { - CStdString strProfile; + std::string strProfile; if (!m_bTranscode) { - strProfile.Format("%s.Native.NR", m_strPreviewMode); + strProfile= StringUtils::Format("%s.Native.NR", m_strPreviewMode.c_str()); } else { - strProfile.Format("%s.%ik.HR", m_strPreviewMode, m_iBitrate); + strProfile= StringUtils::Format("%s.%ik.HR", m_strPreviewMode.c_str(), m_iBitrate); } return strProfile; } -CStdString Pctv::GetPreviewUrl(CStdString params) +std::string Pctv::GetPreviewUrl(std::string params) { - CStdString strTmp; - strTmp.Format("%s/TVC/Preview?%s", m_strBaseUrl.c_str(), params); + std::string strTmp; + strTmp= StringUtils::Format("%s/TVC/Preview?%s", m_strBaseUrl.c_str(), params.c_str()); return strTmp; } -CStdString Pctv::GetStid(int defaultStid) +std::string Pctv::GetStid(int defaultStid) { if (m_strStid == "") { - m_strStid.Format("_xbmc%i", defaultStid); + m_strStid= StringUtils::Format("_xbmc%i", defaultStid); } return m_strStid; } -CStdString Pctv::GetChannelLogo(Json::Value entry) +std::string Pctv::GetChannelLogo(Json::Value entry) { - CStdString strNameParam; - strNameParam.Format("%s/TVC/Resource?type=1&default=emptyChannelLogo&name=%s", m_strBaseUrl.c_str(), URLEncodeInline(GetShortName(entry))); + std::string strNameParam; + strNameParam= StringUtils::Format("%s/TVC/Resource?type=1&default=emptyChannelLogo&name=%s", m_strBaseUrl.c_str(), URLEncodeInline(GetShortName(entry)).c_str()); return strNameParam; } -CStdString Pctv::GetShortName(Json::Value entry) +std::string Pctv::GetShortName(Json::Value entry) { - CStdString strShortName; + std::string strShortName; if (entry["shortName"].isNull()) { strShortName = entry["DisplayName"].asString(); if (strShortName == "") { strShortName = entry["Name"].asString(); } - strShortName.Replace(" ", "_"); + StringUtils::Replace(strShortName, " ", "_"); } return strShortName; @@ -820,7 +870,7 @@ bool Pctv::GetFreeConfig() { - CStdString strConfig = ""; + std::string strConfig = ""; cRest rest; Json::Value response; @@ -876,7 +926,7 @@ -bool Pctv::IsRecordFolderSet(CStdString& partitionId) +bool Pctv::IsRecordFolderSet(std::string& partitionId) { Json::Value data; int retval = RESTGetFolder(data); // get folder config @@ -952,7 +1002,7 @@ PVR_ERROR Pctv::GetStorageInfo(long long *total, long long *used) { m_partitions.clear(); - CStdString strPartitionId = ""; + std::string strPartitionId = ""; bool isRecordFolder = IsRecordFolderSet(strPartitionId); @@ -979,8 +1029,8 @@ Json::Value partition; partition = devicePartitions[p]; - CStdString strDevicePartitionId; - strDevicePartitionId.Format("%s.%s", deviceId, partition["Id"].asString()); + std::string strDevicePartitionId; + strDevicePartitionId= StringUtils::Format("%s.%s", deviceId.c_str(), partition["Id"].asString().c_str()); if (strDevicePartitionId == strPartitionId) { @@ -1125,7 +1175,7 @@ }; -CStdString Pctv::URLEncodeInline(const CStdString& sSrc) +std::string Pctv::URLEncodeInline(const std::string& sSrc) { const char DEC2HEX[16 + 1] = "0123456789ABCDEF"; const unsigned char * pSrc = (const unsigned char *)sSrc.c_str(); diff -Nru kodi-pvr-pctv-1.4.7/src/PctvData.h kodi-pvr-pctv-2.4.3/src/PctvData.h --- kodi-pvr-pctv-1.4.7/src/PctvData.h 2017-03-24 20:31:17.000000000 +0000 +++ kodi-pvr-pctv-2.4.3/src/PctvData.h 2018-08-25 06:06:08.000000000 +0000 @@ -1,7 +1,6 @@ #pragma once //#include -#include "p8-platform/util/StdString.h" #include "client.h" #include "rest.h" #include "p8-platform/threads/threads.h" @@ -126,7 +125,7 @@ bool hasCapability(const std::string& cap) { - CStdString caps = ";" + Caps + ";"; + std::string caps = ";" + Caps + ";"; if (caps.find(";" + cap + ";") != std::string::npos) { return true; } @@ -153,7 +152,8 @@ /* Channels */ unsigned int GetChannelsAmount(void); bool GetChannel(const PVR_CHANNEL &channel, PctvChannel &myChannel); - PVR_ERROR GetChannels(ADDON_HANDLE handle, bool bRadio); + PVR_ERROR GetChannels(ADDON_HANDLE handle, bool bRadio); + PVR_ERROR GetChannelStreamProperties(const PVR_CHANNEL* channel, PVR_NAMED_VALUE* properties, unsigned int* iPropertiesCount); /* Groups */ unsigned int GetChannelGroupsAmount(void); @@ -162,9 +162,10 @@ /* Recordings */ PVR_ERROR GetRecordings(ADDON_HANDLE handle); - bool GetRecordingFromLocation(CStdString strRecordingFolder); + bool GetRecordingFromLocation(std::string strRecordingFolder); unsigned int GetRecordingsAmount(void); - + PVR_ERROR GetRecordingStreamProperties(const PVR_RECORDING* recording, PVR_NAMED_VALUE* properties, unsigned int* iPropertiesCount); + /* Timer */ unsigned int GetTimersAmount(void); PVR_ERROR GetTimers(ADDON_HANDLE handle); @@ -205,19 +206,19 @@ int RESTAddTimer(const PVR_TIMER &timer, Json::Value& response); // helper functions - CStdString URLEncodeInline(const CStdString& sSrc); + std::string URLEncodeInline(const std::string& sSrc); void TransferChannels(ADDON_HANDLE handle); void TransferRecordings(ADDON_HANDLE handle); void TransferTimer(ADDON_HANDLE handle); void TransferGroups(ADDON_HANDLE handle); bool replace(std::string& str, const std::string& from, const std::string& to); - bool IsRecordFolderSet(CStdString& partitionId); - CStdString GetPreviewParams(ADDON_HANDLE handle, Json::Value entry); - CStdString GetPreviewUrl(CStdString params); - CStdString GetTranscodeProfileValue(); - CStdString GetStid(int id); - CStdString GetChannelLogo(Json::Value entry); - CStdString GetShortName(Json::Value entry); + bool IsRecordFolderSet(std::string& partitionId); + std::string GetPreviewParams(ADDON_HANDLE handle, Json::Value entry); + std::string GetPreviewUrl(std::string params); + std::string GetTranscodeProfileValue(); + std::string GetStid(int id); + std::string GetChannelLogo(Json::Value entry); + std::string GetShortName(Json::Value entry); void *Process(void); @@ -239,9 +240,9 @@ int m_iNumRecordings; int m_iNumGroups; std::string m_strPreviewMode; - CStdString m_strStid; + std::string m_strStid; bool m_bUpdating; - CStdString m_strBackendUrlNoAuth; + std::string m_strBackendUrlNoAuth; std::vector m_epg; std::vector m_channels; diff -Nru kodi-pvr-pctv-1.4.7/src/rest.cpp kodi-pvr-pctv-2.4.3/src/rest.cpp --- kodi-pvr-pctv-1.4.7/src/rest.cpp 2017-03-24 20:31:17.000000000 +0000 +++ kodi-pvr-pctv-2.4.3/src/rest.cpp 2018-08-25 06:06:08.000000000 +0000 @@ -17,6 +17,7 @@ * */ #include "rest.h" +#include #include #include #include @@ -33,15 +34,15 @@ { if (response.length() != 0) { - Json::Reader reader; + std::string jsonReaderError; + Json::CharReaderBuilder jsonReaderBuilder; + std::unique_ptr const reader(jsonReaderBuilder.newCharReader()); - bool parsingSuccessful = reader.parse(response, json_response); - - if (!parsingSuccessful) + if (!reader->parse(response.c_str(), response.c_str() + response.size(), &json_response, &jsonReaderError)) { XBMC->Log(LOG_DEBUG, "Failed to parse %s: \n%s\n", response.c_str(), - reader.getFormatedErrorMessages().c_str()); + jsonReaderError.c_str()); return E_FAILED; } } @@ -65,15 +66,15 @@ { if (response.length() != 0) { - Json::Reader reader; - - bool parsingSuccessful = reader.parse(response, json_response); + std::string jsonReaderError; + Json::CharReaderBuilder jsonReaderBuilder; + std::unique_ptr const reader(jsonReaderBuilder.newCharReader()); - if (!parsingSuccessful) + if (!reader->parse(response.c_str(), response.c_str() + response.size(), &json_response, &jsonReaderError)) { XBMC->Log(LOG_DEBUG, "Failed to parse %s: \n%s\n", response.c_str(), - reader.getFormatedErrorMessages().c_str()); + jsonReaderError.c_str()); return E_FAILED; } } diff -Nru kodi-pvr-pctv-1.4.7/.travis.yml kodi-pvr-pctv-2.4.3/.travis.yml --- kodi-pvr-pctv-1.4.7/.travis.yml 2017-03-24 20:31:17.000000000 +0000 +++ kodi-pvr-pctv-2.4.3/.travis.yml 2018-08-25 06:06:08.000000000 +0000 @@ -30,6 +30,6 @@ - cd $TRAVIS_BUILD_DIR/.. - git clone --depth=1 https://github.com/xbmc/xbmc.git - cd pvr.pctv && mkdir build && cd build - - cmake -DADDONS_TO_BUILD=pvr.pctv -DADDON_SRC_PREFIX=$TRAVIS_BUILD_DIR/.. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=$TRAVIS_BUILD_DIR/../xbmc/addons -DPACKAGE_ZIP=1 $TRAVIS_BUILD_DIR/../xbmc/project/cmake/addons + - cmake -DADDONS_TO_BUILD=pvr.pctv -DADDON_SRC_PREFIX=$TRAVIS_BUILD_DIR/.. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=$TRAVIS_BUILD_DIR/../xbmc/addons -DPACKAGE_ZIP=1 $TRAVIS_BUILD_DIR/../xbmc/cmake/addons script: make