diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/Makefile.include.am kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/Makefile.include.am --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/Makefile.include.am 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/Makefile.include.am 2015-04-01 08:50:10.000000000 +0000 @@ -2,7 +2,7 @@ # Makefile include for XBMC PVR add-ons # -AM_CPPFLAGS = -I. -I$(abs_top_srcdir)/xbmc -I$(abs_top_srcdir)/lib @HOST_INCLUDES@ +INCLUDES = -I. -I$(abs_top_srcdir)/xbmc -I$(abs_top_srcdir)/lib @HOST_INCLUDES@ WARNINGS = -Wall -Wextra -Wno-missing-field-initializers -Woverloaded-virtual -Wno-parentheses DEFINES = @ARCH_DEFINES@ -DUSE_DEMUX -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS AM_CXXFLAGS = -g -O2 -fPIC $(WARNINGS) $(DEFINES) @HOST_CXXFLAGS@ diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.argustv/addon/addon.xml.in kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.argustv/addon/addon.xml.in --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.argustv/addon/addon.xml.in 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.argustv/addon/addon.xml.in 2015-04-01 08:50:10.000000000 +0000 @@ -1,12 +1,12 @@ - + Kodi frontend for the ARGUS TV PVR http://www.argus-tv.com/ Frontend de Kodi para ARGUS TV PVR http://www.argus-tv.com// Frontend de Kodi para ARGUS TV PVR http://www.argus-tv.com// - Frontend de Kodi para ARGUS TV PVR http://www.argus-tv.com// Kodi esi ARGUS TV PVRile http://www.argus-tv.com// Interface logicielle pour l'enregistreur vidéo ARGUS TV http://www.argus-tv.com// Frontal Kodi pour le numériscope ARGUS TV http://www.argus-tv.com/ @@ -41,7 +40,7 @@ Kodi pozadinski softver za ARGUS TV PVR http://www.argus-tv.com// Kodi ARGUS TV előtér-kiszolgáló http://www.argus-tv.com// Kodi արտաքին տեսքը ARGUS TV PVR համար http://www.argus-tv.com// - Antarmuka Kodi untuk ARGUS TV PVR http://www.argus-tv.com// + Frontend Kodi untuk ARGUS TV PVR http://www.argus-tv.com// Kodi framendi fyrir ARGUS TV upptökutæki (PVR) http://www.argus-tv.com// Frontend Kodi di ARGUS TV PVR http://www.argus-tv.com// ARGUS TV PVR 用 Kodi フロントエンド http://www.argus-tv.com// @@ -60,10 +59,10 @@ Интерфейс Kodi для ARGUS TV PVR http://www.argus-tv.com// TV PVR ආරක්ෂාව සඳහා Kodi ඉදිරි කොන http://www.argus-tv.com// Kodi rozhranie pre ARGUS TV PVR http://www.argus-tv.com// - Kodijev vmesnik za ARGUS TV PVR http://www.argus-tv.com// + Kodi-jev vmesnik za ARGUS TV PVR http://www.argus-tv.com// Kodi frontend për ARGUS TV PVR http://www.argus-tv.com & Kodi frontend för ARGUS TV PVR http://www.argus-tv.com/ - ARGUS TV PVR için Kodi ön arayüz http://www.argus-tv.com// + ARGUS TV PVR için Kodi ön ucu http://www.argus-tv.com// Накладка Kodi для ARGUS TV PVR http://www.argus-tv.com// Giao tiếp Kodi cho ARGUS TV PVR http://www.argus-tv.com/ Kodi 的 ARGUS TV PVR 前端 http://www.argus-tv.com// @@ -83,7 +82,6 @@ ARGUS TV PVR frontend. Supports streaming of Live TV & Recordings, listening to Radio channels, EPG and schedules. Frontend de ARGUS TV PVR. Soporta transmisiones de TV en Vivo y Grabaciones, escuchar canales de Radio, Guía Electrónica de Programas (EPG) y temporizadores. Frontend de ARGUS TV PVR. Soporta transmisiones de TV en Vivo y Grabaciones, escuchar canales de Radio, Guía Electrónica de Programas (GEP) y temporizadores. - Frontend de ARGUS TV PVR. Soporta transmisiones de TV en vivo y grabaciones, escuchar canales de Radio, Guía Electrónica de Programas y temporizadores. ARGUS TV PVR esi. Toetab telekanalite striimimist ja salvestamist, raadio kuulamist ja elektroonilist saatekava. Interface logicielle pour l'enregistreur vidéo ARGUS TV. Supporte la lecture en continu de télévision et son enregistrement, l'écoute de radios, les guides de programmes et les minuteries. Frontal de numériscope pour ARGUS TV, prenant en charge la lecture en transit des télés en direct & les enregistrements, l'écoute de chaînes radio, le GÉP et les horaires. @@ -92,7 +90,7 @@ ARGUS TV PVR pozadinski softver. Podržava stremanje televizije i snimanje, slušanje radio programa, EPG i zakazano snimanje. ARGUS TV PVR előtér-kiszolgáló. Élő adások, felvételek és rádió csatornák sugárzásának támogatása EPG-vel és időzítéssel. ARGUS TV PVR արտաքին տեսքը: TV հիմա, Ձայնագրություններ, Ռադիո ալիքների ունկնդրում, EPG և ժամանակացույցի հնարավորություն: - Antarmuka PVR ARGUS TV. Mendukung streaming TV dan Rekaman langsung, mendengarkan kanal radio, EPG dan jadwal. + Frontend PVR ARGUS TV. Mendukung pengaliran TV dan Rekaman langsung, mendengarkan kanal radio, EPG dan jadwal. ARGUS TV framendi; styður streymingu á beinum sjónvarpi og upptökum, hlustun á útvarpsstöðvar sjónvarpsvísum (EGP) og dagskráryfirlitum. Frontend ARGUS TV PVR. Supporta lo streaming e la registrazione di Live TV, l'ascolto dei canali radio, la guida ai programmi e gli orari. ARGUS TV PVR フロントエンドです。テレビ放送のストリーミング、録画、ラジオチャンネルの視聴、EPG、録画予約をサポートしています。 @@ -103,7 +101,7 @@ Bahagian hadapan PVR ARGUS TV; menyokong penstirman TV Langsung & Rakaman, mendengar saluran Radio, EPG dan jadual. ARGUS TV PVR frontend. Ondersteunt het bekijken van Live TV en opnames, het beluisteren van radio zenders, het tonen van de EPG en het inplannen/beheren van nieuwe opnames (Timers). ARGUS TV PVR klientdel Støtter visning av Live-TV, opptak, lytting til radiokanaler, EPG og tidsopptak. - Klient ARGUS TV PVR obsługuje strumieniowanie kanałów radiowych i telewizyjnych, nagrywanie natychmiastowe i wg harmonogramu oraz funkcje przewodnika programów. + Klient ARGUS TV PVR wspiera strumieniowanie kanałów radiowych i telewizyjnych, nagrywanie natychmiastowe i wg harmonogramu oraz funkcje przewodnika programów. Frontend ARGUS TV PVR. Suporta transmissão de TV em directo e gravações, audição de estações de rádio, EPG e agendamentos. Frontend do PVR ARGUS TV. Suporta streaming de TV Local & Gravações, sintonização de canais de Rádio, guia de programação eletrônica (GPE) e agendamento. Frontend PVR ARGUS TV. Suportă difuzare în flux pentru televiziune în direct și pentru înregistrări, ascultarea canalelor radio, EPG și planificări. diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.argustv/addon/changelog.txt kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.argustv/addon/changelog.txt --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.argustv/addon/changelog.txt 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.argustv/addon/changelog.txt 2015-04-01 08:50:10.000000000 +0000 @@ -1,17 +1,8 @@ -v1.10.1 (17-02-2015) -- Updated to PVR API v1.9.4 -v1.9.189 (21-01-2015) -- Updated language files from Transifex -- Minor changes to conform with C++11 -v1.9.188 (13-01-2015) -- Updated language files from Transifex -v1.9.187 (28-12-2014) -- added getBackendHostname function - v1.9.186 (27-12-2014) -- Fixed mime-type for MPEG-TS +v1.9.186 (15-02-2015) +- platform fixes v1.9.185 (02-12-2014) - Updated language files from Transifex -v1.9.184 (26-11-2014) +v1.9.183 (12-26-2014) - change library name to Kodi v1.9.183 (12-11-2014) - fixed deadlock when activating the addon on some darwin (osx, ios) runtimes diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.argustv/addon/resources/language/Amharic/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.argustv/addon/resources/language/Amharic/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.argustv/addon/resources/language/Amharic/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.argustv/addon/resources/language/Amharic/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -20,10 +20,6 @@ msgid "Include Radio" msgstr "ሬዲዮ ማካተቻ" -msgctxt "#30003" -msgid "Connect timeout (s)" -msgstr "ግንኙነት ጊዜው አልፏል (ሰ)" - msgctxt "#30005" msgid "Password" msgstr "የመግቢያ ቃል" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.argustv/addon/resources/language/Basque/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.argustv/addon/resources/language/Basque/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.argustv/addon/resources/language/Basque/strings.po 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.argustv/addon/resources/language/Basque/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -16,10 +16,6 @@ "Language: eu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -msgctxt "#30002" -msgid "Include Radio" -msgstr "Irratia Barne Hartu" - msgctxt "#30005" msgid "Password" msgstr "Pasahitza" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.argustv/addon/resources/language/Indonesian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.argustv/addon/resources/language/Indonesian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.argustv/addon/resources/language/Indonesian/strings.po 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.argustv/addon/resources/language/Indonesian/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -38,7 +38,7 @@ msgctxt "#30005" msgid "Password" -msgstr "Sandi" +msgstr "Password" msgctxt "#30006" msgid "Delay after tuning (ms)" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.argustv/addon/resources/language/Spanish (Mexico)/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.argustv/addon/resources/language/Spanish (Mexico)/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.argustv/addon/resources/language/Spanish (Mexico)/strings.po 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.argustv/addon/resources/language/Spanish (Mexico)/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -16,22 +16,10 @@ "Language: es_MX\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -msgctxt "#30000" -msgid "ARGUS TV Hostname" -msgstr "Nombre del servidor ARGUS TV" - -msgctxt "#30001" -msgid "ARGUS TV webserver port" -msgstr "Puerto del servidor Web de ARGUS TV" - msgctxt "#30002" msgid "Include Radio" msgstr "Incluir Radio" -msgctxt "#30003" -msgid "Connect timeout (s)" -msgstr "Tiempo para conectar agotado (s)" - msgctxt "#30004" msgid "Windows user account" msgstr "Cuenta de usuario de Windows" @@ -39,7 +27,3 @@ msgctxt "#30005" msgid "Password" msgstr "Contraseña" - -msgctxt "#30006" -msgid "Delay after tuning (ms)" -msgstr "Retraso después de sintonizar (ms)" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.argustv/addon/resources/language/Tamil (India)/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.argustv/addon/resources/language/Tamil (India)/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.argustv/addon/resources/language/Tamil (India)/strings.po 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.argustv/addon/resources/language/Tamil (India)/strings.po 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -# Kodi Media Center language file -# Addon Name: ARGUS TV client -# Addon id: pvr.argustv -# Addon Provider: Fred Hoogduin, Marcel Groothuis -msgid "" -msgstr "" -"Project-Id-Version: XBMC Main\n" -"Report-Msgid-Bugs-To: http://trac.xbmc.org/\n" -"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Kodi Translation Team\n" -"Language-Team: Tamil (India) (http://www.transifex.com/projects/p/xbmc-main/language/ta_IN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ta_IN\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgctxt "#30005" -msgid "Password" -msgstr "அடையாளச் சொல்" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.argustv/Makefile.am kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.argustv/Makefile.am --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.argustv/Makefile.am 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.argustv/Makefile.am 2015-04-01 08:50:10.000000000 +0000 @@ -14,7 +14,7 @@ include ../Makefile.include.am -AM_CPPFLAGS+=-Isrc -Isrc/lib/filesystem -I@abs_top_srcdir@/lib/jsoncpp/include +INCLUDES+=-Isrc -Isrc/lib/filesystem -I@abs_top_srcdir@/lib/jsoncpp/include libargustv_addon_la_SOURCES = src/activerecording.cpp \ src/channel.cpp \ diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.argustv/project/VS2010Express/pvr.argustv.vcxproj kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.argustv/project/VS2010Express/pvr.argustv.vcxproj --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.argustv/project/VS2010Express/pvr.argustv.vcxproj 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.argustv/project/VS2010Express/pvr.argustv.vcxproj 2015-04-01 08:50:10.000000000 +0000 @@ -136,12 +136,6 @@ {fe4573f6-a794-4ad3-b37f-49e51f1140e6} - - - - - - diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.argustv/project/VS2010Express/pvr.argustv.vcxproj.filters kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.argustv/project/VS2010Express/pvr.argustv.vcxproj.filters --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.argustv/project/VS2010Express/pvr.argustv.vcxproj.filters 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.argustv/project/VS2010Express/pvr.argustv.vcxproj.filters 2015-04-01 08:50:10.000000000 +0000 @@ -132,10 +132,4 @@ Header Files - - - - - - \ No newline at end of file diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.argustv/src/client.cpp kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.argustv/src/client.cpp --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.argustv/src/client.cpp 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.argustv/src/client.cpp 2015-04-01 08:50:10.000000000 +0000 @@ -327,7 +327,6 @@ pCapabilities->bSupportsEPG = true; pCapabilities->bSupportsRecordings = true; - pCapabilities->bSupportsRecordingsUndelete = false; pCapabilities->bSupportsTimers = true; pCapabilities->bSupportsTV = true; pCapabilities->bSupportsRadio = g_bRadioEnabled; @@ -372,14 +371,6 @@ return g_client->GetConnectionString(); } -//-- GetBackendHostname ------------------------------------------------------- -// Return a String with the backend host name -//----------------------------------------------------------------------------- -const char * GetBackendHostname(void) -{ - return g_szHostname.c_str(); -} - //-- GetDriveSpace ------------------------------------------------------------ // Return the Total and Free Drive space on the PVR Backend //----------------------------------------------------------------------------- @@ -393,7 +384,7 @@ return g_client->GetBackendTime(localTime, gmtOffset); } -PVR_ERROR OpenDialogChannelScan() +PVR_ERROR DialogChannelScan() { return PVR_ERROR_NOT_IMPLEMENTED; } @@ -440,13 +431,13 @@ return PVR_ERROR_NOT_IMPLEMENTED; } -PVR_ERROR OpenDialogChannelSettings(const PVR_CHANNEL &channelinfo) +PVR_ERROR DialogChannelSettings(const PVR_CHANNEL &channelinfo) { NOTUSED(channelinfo); return PVR_ERROR_NOT_IMPLEMENTED; } -PVR_ERROR OpenDialogChannelAdd(const PVR_CHANNEL &channelinfo) +PVR_ERROR DialogAddChannel(const PVR_CHANNEL &channelinfo) { NOTUSED(channelinfo); return PVR_ERROR_NOT_IMPLEMENTED; @@ -475,12 +466,12 @@ /*******************************************/ /** PVR Recording Functions **/ -int GetRecordingsAmount(bool deleted) +int GetRecordingsAmount(void) { return g_client->GetNumRecordings(); } -PVR_ERROR GetRecordings(ADDON_HANDLE handle, bool deleted) +PVR_ERROR GetRecordings(ADDON_HANDLE handle) { return g_client->GetRecordings(handle); } @@ -661,6 +652,4 @@ time_t GetPlayingTime() { return 0; } time_t GetBufferTimeStart() { return 0; } time_t GetBufferTimeEnd() { return 0; } -PVR_ERROR UndeleteRecording(const PVR_RECORDING& recording) { return PVR_ERROR_NOT_IMPLEMENTED; } -PVR_ERROR DeleteAllRecordingsFromTrash() { return PVR_ERROR_NOT_IMPLEMENTED; } } //end extern "C" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.argustv/src/pvrclient-argustv.cpp kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.argustv/src/pvrclient-argustv.cpp --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.argustv/src/pvrclient-argustv.cpp 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.argustv/src/pvrclient-argustv.cpp 2015-04-01 08:50:10.000000000 +0000 @@ -465,7 +465,7 @@ tag.bIsHidden = false; //Use OpenLiveStream to read from the timeshift .ts file or an rtsp stream memset(tag.strStreamURL, 0, sizeof(tag.strStreamURL)); - strncpy(tag.strInputFormat, "video/mp2t", sizeof(tag.strInputFormat)); + strncpy(tag.strInputFormat, "video/x-mpegts", sizeof(tag.strInputFormat)); tag.iChannelNumber = channel->LCN(); if (!tag.bIsRadio) diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.demo/addon/addon.xml.in kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.demo/addon/addon.xml.in --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.demo/addon/addon.xml.in 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.demo/addon/addon.xml.in 2015-04-01 08:50:10.000000000 +0000 @@ -1,17 +1,17 @@ - + 7500 - - - Demo Recording entry 11 - - /Directory1/SubDirectory1/ - Demo TV Channel 1 - Lorem ipsum dolor sit amet, consectetur adipiscing elit. - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam cursus consectetur ipsum, eu tincidunt dui aliquam ac. Sed scelerisque, augue eu lacinia ultrices, libero ante ullamcorper augue, vel malesuada justo risus ac nulla. Quisque ac libero libero. Sed tincidunt, orci eu condimentum laoreet, felis odio mattis est, et lacinia metus enim in leo. Fusce faucibus tristique risus in varius. Etiam sagittis venenatis ligula nec rutrum. Etiam gravida dictum hendrerit. Sed sodales felis in sapien rutrum non malesuada nisi lobortis. Mauris iaculis ante odio. Nunc gravida erat convallis purus dignissim et ultricies orci dapibus. Aliquam erat volutpat. Vestibulum mi felis, malesuada ac tincidunt sit amet, pulvinar nec dolor. Pellentesque vehicula est vulputate mi adipiscing euismod. Donec ac mauris nulla. Nullam suscipit felis eu quam sodales ac bibendum nisi interdum. Curabitur non lectus a ante venenatis semper eget id justo. Ut facilisis, ligula pretium dictum congue, lacus dolor commodo nibh, sit amet sodales sed. - 10 - 0 - - 7200 - - - Demo Recording entry 12 - - /Directory1/SubDirectory1/ - Demo TV Channel 2 - Lorem ipsum dolor sit amet, consectetur adipiscing elit. - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam cursus consectetur ipsum, eu tincidunt dui aliquam ac. Sed scelerisque, augue eu lacinia ultrices, libero ante ullamcorper augue, vel malesuada justo risus ac nulla. Quisque ac libero libero. Sed tincidunt, orci eu condimentum laoreet, felis odio mattis est, et lacinia metus enim in leo. Fusce faucibus tristique risus in varius. Etiam sagittis venenatis ligula nec rutrum. Etiam gravida dictum hendrerit. Sed sodales felis in sapien rutrum non malesuada nisi lobortis. Mauris iaculis ante odio. Nunc gravida erat convallis purus dignissim et ultricies orci dapibus. Aliquam erat volutpat. Vestibulum mi felis, malesuada ac tincidunt sit amet, pulvinar nec dolor. Pellentesque vehicula est vulputate mi adipiscing euismod. Donec ac mauris nulla. Nullam suscipit felis eu quam sodales ac bibendum nisi interdum. Curabitur non lectus a ante venenatis semper eget id justo. Ut facilisis, ligula pretium dictum congue, lacus dolor commodo nibh, sit amet sodales sed. - 10 - 0 - - 7500 - - - Demo Recording entry 13 - - /Directory1/SubDirectory1/ - Demo TV Channel 3 - Lorem ipsum dolor sit amet, consectetur adipiscing elit. - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam cursus consectetur ipsum, eu tincidunt dui aliquam ac. Sed scelerisque, augue eu lacinia ultrices, libero ante ullamcorper augue, vel malesuada justo risus ac nulla. Quisque ac libero libero. Sed tincidunt, orci eu condimentum laoreet, felis odio mattis est, et lacinia metus enim in leo. Fusce faucibus tristique risus in varius. Etiam sagittis venenatis ligula nec rutrum. Etiam gravida dictum hendrerit. Sed sodales felis in sapien rutrum non malesuada nisi lobortis. Mauris iaculis ante odio. Nunc gravida erat convallis purus dignissim et ultricies orci dapibus. Aliquam erat volutpat. Vestibulum mi felis, malesuada ac tincidunt sit amet, pulvinar nec dolor. Pellentesque vehicula est vulputate mi adipiscing euismod. Donec ac mauris nulla. Nullam suscipit felis eu quam sodales ac bibendum nisi interdum. Curabitur non lectus a ante venenatis semper eget id justo. Ut facilisis, ligula pretium dictum congue, lacus dolor commodo nibh, sit amet sodales sed. - 10 - 0 - - 7500 - - - Demo Recording entry 14 - - /Directory1/SubDirectory2/ - Demo TV Channel 4 - Lorem ipsum dolor sit amet, consectetur adipiscing elit. - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam cursus consectetur ipsum, eu tincidunt dui aliquam ac. Sed scelerisque, augue eu lacinia ultrices, libero ante ullamcorper augue, vel malesuada justo risus ac nulla. Quisque ac libero libero. Sed tincidunt, orci eu condimentum laoreet, felis odio mattis est, et lacinia metus enim in leo. Fusce faucibus tristique risus in varius. Etiam sagittis venenatis ligula nec rutrum. Etiam gravida dictum hendrerit. Sed sodales felis in sapien rutrum non malesuada nisi lobortis. Mauris iaculis ante odio. Nunc gravida erat convallis purus dignissim et ultricies orci dapibus. Aliquam erat volutpat. Vestibulum mi felis, malesuada ac tincidunt sit amet, pulvinar nec dolor. Pellentesque vehicula est vulputate mi adipiscing euismod. Donec ac mauris nulla. Nullam suscipit felis eu quam sodales ac bibendum nisi interdum. Curabitur non lectus a ante venenatis semper eget id justo. Ut facilisis, ligula pretium dictum congue, lacus dolor commodo nibh, sit amet sodales sed. - 10 - 0 - - 7500 - - - Demo Recording entry 15 - - /Directory1/SubDirectory2/ - Demo TV Channel 5 - Lorem ipsum dolor sit amet, consectetur adipiscing elit. - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam cursus consectetur ipsum, eu tincidunt dui aliquam ac. Sed scelerisque, augue eu lacinia ultrices, libero ante ullamcorper augue, vel malesuada justo risus ac nulla. Quisque ac libero libero. Sed tincidunt, orci eu condimentum laoreet, felis odio mattis est, et lacinia metus enim in leo. Fusce faucibus tristique risus in varius. Etiam sagittis venenatis ligula nec rutrum. Etiam gravida dictum hendrerit. Sed sodales felis in sapien rutrum non malesuada nisi lobortis. Mauris iaculis ante odio. Nunc gravida erat convallis purus dignissim et ultricies orci dapibus. Aliquam erat volutpat. Vestibulum mi felis, malesuada ac tincidunt sit amet, pulvinar nec dolor. Pellentesque vehicula est vulputate mi adipiscing euismod. Donec ac mauris nulla. Nullam suscipit felis eu quam sodales ac bibendum nisi interdum. Curabitur non lectus a ante venenatis semper eget id justo. Ut facilisis, ligula pretium dictum congue, lacus dolor commodo nibh, sit amet sodales sed. - 10 - 0 - - 7500 - - - Demo Recording entry 16 - - /Directory2/SubDirectory1/ - Demo TV Channel 6 - Lorem ipsum dolor sit amet, consectetur adipiscing elit. - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam cursus consectetur ipsum, eu tincidunt dui aliquam ac. Sed scelerisque, augue eu lacinia ultrices, libero ante ullamcorper augue, vel malesuada justo risus ac nulla. Quisque ac libero libero. Sed tincidunt, orci eu condimentum laoreet, felis odio mattis est, et lacinia metus enim in leo. Fusce faucibus tristique risus in varius. Etiam sagittis venenatis ligula nec rutrum. Etiam gravida dictum hendrerit. Sed sodales felis in sapien rutrum non malesuada nisi lobortis. Mauris iaculis ante odio. Nunc gravida erat convallis purus dignissim et ultricies orci dapibus. Aliquam erat volutpat. Vestibulum mi felis, malesuada ac tincidunt sit amet, pulvinar nec dolor. Pellentesque vehicula est vulputate mi adipiscing euismod. Donec ac mauris nulla. Nullam suscipit felis eu quam sodales ac bibendum nisi interdum. Curabitur non lectus a ante venenatis semper eget id justo. Ut facilisis, ligula pretium dictum congue, lacus dolor commodo nibh, sit amet sodales sed. - 10 - 0 - - 7500 - - - Demo Recording entry 17 - - /Directory2/SubDirectory1/ - Demo TV Channel 7 - Lorem ipsum dolor sit amet, consectetur adipiscing elit. - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam cursus consectetur ipsum, eu tincidunt dui aliquam ac. Sed scelerisque, augue eu lacinia ultrices, libero ante ullamcorper augue, vel malesuada justo risus ac nulla. Quisque ac libero libero. Sed tincidunt, orci eu condimentum laoreet, felis odio mattis est, et lacinia metus enim in leo. Fusce faucibus tristique risus in varius. Etiam sagittis venenatis ligula nec rutrum. Etiam gravida dictum hendrerit. Sed sodales felis in sapien rutrum non malesuada nisi lobortis. Mauris iaculis ante odio. Nunc gravida erat convallis purus dignissim et ultricies orci dapibus. Aliquam erat volutpat. Vestibulum mi felis, malesuada ac tincidunt sit amet, pulvinar nec dolor. Pellentesque vehicula est vulputate mi adipiscing euismod. Donec ac mauris nulla. Nullam suscipit felis eu quam sodales ac bibendum nisi interdum. Curabitur non lectus a ante venenatis semper eget id justo. Ut facilisis, ligula pretium dictum congue, lacus dolor commodo nibh, sit amet sodales sed. - 10 - 0 - - 7500 - - - Demo Recording entry 18 - - /Directory2/SubDirectory2/ - Demo TV Channel 8 - Lorem ipsum dolor sit amet, consectetur adipiscing elit. - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam cursus consectetur ipsum, eu tincidunt dui aliquam ac. Sed scelerisque, augue eu lacinia ultrices, libero ante ullamcorper augue, vel malesuada justo risus ac nulla. Quisque ac libero libero. Sed tincidunt, orci eu condimentum laoreet, felis odio mattis est, et lacinia metus enim in leo. Fusce faucibus tristique risus in varius. Etiam sagittis venenatis ligula nec rutrum. Etiam gravida dictum hendrerit. Sed sodales felis in sapien rutrum non malesuada nisi lobortis. Mauris iaculis ante odio. Nunc gravida erat convallis purus dignissim et ultricies orci dapibus. Aliquam erat volutpat. Vestibulum mi felis, malesuada ac tincidunt sit amet, pulvinar nec dolor. Pellentesque vehicula est vulputate mi adipiscing euismod. Donec ac mauris nulla. Nullam suscipit felis eu quam sodales ac bibendum nisi interdum. Curabitur non lectus a ante venenatis semper eget id justo. Ut facilisis, ligula pretium dictum congue, lacus dolor commodo nibh, sit amet sodales sed. - 10 - 0 - - 7500 - - - Demo Recording entry 19 - - /Directory2/SubDirectory2/ - Demo TV Channel 9 - Lorem ipsum dolor sit amet, consectetur adipiscing elit. - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam cursus consectetur ipsum, eu tincidunt dui aliquam ac. Sed scelerisque, augue eu lacinia ultrices, libero ante ullamcorper augue, vel malesuada justo risus ac nulla. Quisque ac libero libero. Sed tincidunt, orci eu condimentum laoreet, felis odio mattis est, et lacinia metus enim in leo. Fusce faucibus tristique risus in varius. Etiam sagittis venenatis ligula nec rutrum. Etiam gravida dictum hendrerit. Sed sodales felis in sapien rutrum non malesuada nisi lobortis. Mauris iaculis ante odio. Nunc gravida erat convallis purus dignissim et ultricies orci dapibus. Aliquam erat volutpat. Vestibulum mi felis, malesuada ac tincidunt sit amet, pulvinar nec dolor. Pellentesque vehicula est vulputate mi adipiscing euismod. Donec ac mauris nulla. Nullam suscipit felis eu quam sodales ac bibendum nisi interdum. Curabitur non lectus a ante venenatis semper eget id justo. Ut facilisis, ligula pretium dictum congue, lacus dolor commodo nibh, sit amet sodales sed. - 10 - 0 - - 7500 - - - Demo Recording entry 20 - - /Directory2/ - Demo TV Channel 20 - Lorem ipsum dolor sit amet, consectetur adipiscing elit. - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam cursus consectetur ipsum, eu tincidunt dui aliquam ac. Sed scelerisque, augue eu lacinia ultrices, libero ante ullamcorper augue, vel malesuada justo risus ac nulla. Quisque ac libero libero. Sed tincidunt, orci eu condimentum laoreet, felis odio mattis est, et lacinia metus enim in leo. Fusce faucibus tristique risus in varius. Etiam sagittis venenatis ligula nec rutrum. Etiam gravida dictum hendrerit. Sed sodales felis in sapien rutrum non malesuada nisi lobortis. Mauris iaculis ante odio. Nunc gravida erat convallis purus dignissim et ultricies orci dapibus. Aliquam erat volutpat. Vestibulum mi felis, malesuada ac tincidunt sit amet, pulvinar nec dolor. Pellentesque vehicula est vulputate mi adipiscing euismod. Donec ac mauris nulla. Nullam suscipit felis eu quam sodales ac bibendum nisi interdum. Curabitur non lectus a ante venenatis semper eget id justo. Ut facilisis, ligula pretium dictum congue, lacus dolor commodo nibh, sit amet sodales sed. - 10 - 0 - - 7500 - - Demo Timer entry #1 diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.demo/project/VS2010Express/pvrclient_demo.vcxproj kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.demo/project/VS2010Express/pvrclient_demo.vcxproj --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.demo/project/VS2010Express/pvrclient_demo.vcxproj 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.demo/project/VS2010Express/pvrclient_demo.vcxproj 2015-04-01 08:50:10.000000000 +0000 @@ -105,9 +105,6 @@ {bdc7d21d-9fd9-41aa-bec8-8b70e1448c50} - - - diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.demo/project/VS2010Express/pvrclient_demo.vcxproj.filters kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.demo/project/VS2010Express/pvrclient_demo.vcxproj.filters --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.demo/project/VS2010Express/pvrclient_demo.vcxproj.filters 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.demo/project/VS2010Express/pvrclient_demo.vcxproj.filters 2015-04-01 08:50:10.000000000 +0000 @@ -30,7 +30,4 @@ Header Files - - - \ No newline at end of file diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.demo/src/client.cpp kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.demo/src/client.cpp --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.demo/src/client.cpp 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.demo/src/client.cpp 2015-04-01 08:50:10.000000000 +0000 @@ -165,7 +165,6 @@ pCapabilities->bSupportsRadio = true; pCapabilities->bSupportsChannelGroups = true; pCapabilities->bSupportsRecordings = true; - pCapabilities->bSupportsRecordingsUndelete = true; pCapabilities->bSupportsTimers = true; return PVR_ERROR_NO_ERROR; @@ -189,11 +188,6 @@ return strConnectionString.c_str(); } -const char *GetBackendHostname(void) -{ - return ""; -} - PVR_ERROR GetDriveSpace(long long *iTotal, long long *iUsed) { *iTotal = 1024 * 1024 * 1024; @@ -295,18 +289,18 @@ return PVR_ERROR_NO_ERROR; } -int GetRecordingsAmount(bool deleted) +int GetRecordingsAmount(void) { if (m_data) - return m_data->GetRecordingsAmount(deleted); + return m_data->GetRecordingsAmount(); return -1; } -PVR_ERROR GetRecordings(ADDON_HANDLE handle, bool deleted) +PVR_ERROR GetRecordings(ADDON_HANDLE handle) { if (m_data) - return m_data->GetRecordings(handle, deleted); + return m_data->GetRecordings(handle); return PVR_ERROR_NOT_IMPLEMENTED; } @@ -328,13 +322,13 @@ } /** UNUSED API FUNCTIONS */ -PVR_ERROR OpenDialogChannelScan(void) { return PVR_ERROR_NOT_IMPLEMENTED; } +PVR_ERROR DialogChannelScan(void) { return PVR_ERROR_NOT_IMPLEMENTED; } 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 OpenDialogChannelSettings(const PVR_CHANNEL &channel) { return PVR_ERROR_NOT_IMPLEMENTED; } -PVR_ERROR OpenDialogChannelAdd(const PVR_CHANNEL &channel) { return PVR_ERROR_NOT_IMPLEMENTED; } +PVR_ERROR DialogChannelSettings(const PVR_CHANNEL &channel) { return PVR_ERROR_NOT_IMPLEMENTED; } +PVR_ERROR DialogAddChannel(const PVR_CHANNEL &channel) { return PVR_ERROR_NOT_IMPLEMENTED; } bool OpenRecordedStream(const PVR_RECORDING &recording) { return false; } void CloseRecordedStream(void) {} int ReadRecordedStream(unsigned char *pBuffer, unsigned int iBufferSize) { return 0; } @@ -368,6 +362,4 @@ time_t GetPlayingTime() { return 0; } time_t GetBufferTimeStart() { return 0; } time_t GetBufferTimeEnd() { return 0; } -PVR_ERROR UndeleteRecording(const PVR_RECORDING& recording) { return PVR_ERROR_NOT_IMPLEMENTED; } -PVR_ERROR DeleteAllRecordingsFromTrash() { return PVR_ERROR_NOT_IMPLEMENTED; } } diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.demo/src/PVRDemoData.cpp kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.demo/src/PVRDemoData.cpp --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.demo/src/PVRDemoData.cpp 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.demo/src/PVRDemoData.cpp 2015-04-01 08:50:10.000000000 +0000 @@ -283,77 +283,6 @@ } } - /* load deleted recordings */ - pElement = pRootElement->FirstChildElement("recordingsdeleted"); - if (pElement) - { - TiXmlNode *pRecordingNode = NULL; - while ((pRecordingNode = pElement->IterateChildren(pRecordingNode)) != NULL) - { - CStdString strTmp; - PVRDemoRecording recording; - - /* recording title */ - if (!XMLUtils::GetString(pRecordingNode, "title", strTmp)) - continue; - recording.strTitle = strTmp; - - /* recording url */ - if (!XMLUtils::GetString(pRecordingNode, "url", strTmp)) - recording.strStreamURL = m_strDefaultMovie; - else - recording.strStreamURL = strTmp; - - /* recording path */ - if (XMLUtils::GetString(pRecordingNode, "directory", strTmp)) - recording.strDirectory = strTmp; - - iUniqueGroupId++; - strTmp.Format("%d", iUniqueGroupId); - recording.strRecordingId = strTmp; - - /* channel name */ - if (XMLUtils::GetString(pRecordingNode, "channelname", strTmp)) - recording.strChannelName = strTmp; - - /* plot */ - if (XMLUtils::GetString(pRecordingNode, "plot", strTmp)) - recording.strPlot = strTmp; - - /* plot outline */ - if (XMLUtils::GetString(pRecordingNode, "plotoutline", strTmp)) - recording.strPlotOutline = strTmp; - - /* genre type */ - XMLUtils::GetInt(pRecordingNode, "genretype", recording.iGenreType); - - /* genre subtype */ - XMLUtils::GetInt(pRecordingNode, "genresubtype", recording.iGenreSubType); - - /* duration */ - XMLUtils::GetInt(pRecordingNode, "duration", recording.iDuration); - - /* recording time */ - if (XMLUtils::GetString(pRecordingNode, "time", strTmp)) - { - time_t timeNow = time(NULL); - struct tm* now = localtime(&timeNow); - - CStdString::size_type delim = strTmp.Find(':'); - if (delim != CStdString::npos) - { - now->tm_hour = (int)strtol(strTmp.Left(delim), NULL, 0); - now->tm_min = (int)strtol(strTmp.Mid(delim + 1), NULL, 0); - now->tm_mday--; // yesterday - - recording.recordingTime = mktime(now); - } - } - - m_recordingsDeleted.push_back(recording); - } - } - /* load timers */ pElement = pRootElement->FirstChildElement("timers"); if (pElement) @@ -577,16 +506,14 @@ return PVR_ERROR_NO_ERROR; } -int PVRDemoData::GetRecordingsAmount(bool bDeleted) +int PVRDemoData::GetRecordingsAmount(void) { - return bDeleted ? m_recordingsDeleted.size() : m_recordings.size(); + return m_recordings.size(); } -PVR_ERROR PVRDemoData::GetRecordings(ADDON_HANDLE handle, bool bDeleted) +PVR_ERROR PVRDemoData::GetRecordings(ADDON_HANDLE handle) { - std::vector *recordings = bDeleted ? &m_recordingsDeleted : &m_recordings; - - for (std::vector::iterator it = recordings->begin() ; it != recordings->end() ; it++) + for (std::vector::iterator it = m_recordings.begin() ; it != m_recordings.end() ; it++) { PVRDemoRecording &recording = *it; @@ -596,7 +523,6 @@ xbmcRecording.iGenreType = recording.iGenreType; xbmcRecording.iGenreSubType = recording.iGenreSubType; xbmcRecording.recordingTime = recording.recordingTime; - xbmcRecording.bIsDeleted = bDeleted; strncpy(xbmcRecording.strChannelName, recording.strChannelName.c_str(), sizeof(xbmcRecording.strChannelName) - 1); strncpy(xbmcRecording.strPlotOutline, recording.strPlotOutline.c_str(), sizeof(xbmcRecording.strPlotOutline) - 1); diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.demo/src/PVRDemoData.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.demo/src/PVRDemoData.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.demo/src/PVRDemoData.h 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.demo/src/PVRDemoData.h 2015-04-01 08:50:10.000000000 +0000 @@ -109,8 +109,8 @@ virtual PVR_ERROR GetEPGForChannel(ADDON_HANDLE handle, const PVR_CHANNEL &channel, time_t iStart, time_t iEnd); - virtual int GetRecordingsAmount(bool bDeleted); - virtual PVR_ERROR GetRecordings(ADDON_HANDLE handle, bool bDeleted); + virtual int GetRecordingsAmount(void); + virtual PVR_ERROR GetRecordings(ADDON_HANDLE handle); virtual int GetTimersAmount(void); virtual PVR_ERROR GetTimers(ADDON_HANDLE handle); @@ -122,7 +122,6 @@ std::vector m_groups; std::vector m_channels; std::vector m_recordings; - std::vector m_recordingsDeleted; std::vector m_timers; time_t m_iEpgStart; CStdString m_strDefaultIcon; diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/addon.xml.in kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/addon.xml.in --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/addon.xml.in 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/addon.xml.in 2015-04-01 08:50:10.000000000 +0000 @@ -1,12 +1,12 @@ - + ПВР добавка за DVBLink - Complement PVR per a DVBLink PVR plugin pro DVBLink Ategyn Recordydd ar gyfer DVBLink PVR Plugin til DVBLink @@ -30,7 +29,6 @@ PVR Plugin for DVBLink Complemento PVR para DVBLink Plugin PVR para DVBLink - Complemento PVR para DVBLink Plugin PVR pour DVBLink Plugiciel de numériscope pour DVBLink Complemento PVR do DVBLink @@ -43,7 +41,6 @@ DVBLink の PVR プラグイン DVBLink를 위한 PVR 플러그인 PVR įskiepis skirtas DVBLink - PVR Plugin за DVBLink Plugin PVR untuk DVBLink PVR Plug-in voor DVBLink PVR-innstikk til DVBLink @@ -54,12 +51,11 @@ Дополнение PVR для DVBLink DBVLink සඳහා PVR පේනුකිරීම PVR zásuvný modul pre DVBLink - Vtičnik PVR za DVBLink + PVR dodatek za DVBLink PVR tillägg för DVBLink DVDLink için PVR Eklentisi DVBLink PVR 插件 ПВР добавка за DVBLink от DvbLogic.com. Поддържа стрийминг и записване на телевизия, електронен програмен справочник и броячи. - Complement PVR per a DVBLink de DvbLogic.com; compatible amb fluxos de TV en directe i enregistraments, EPG, temporitzadors PVR plugin pro DVBLink od DvbLogic.com; podporuje živé TV vysílání a nahrávání, EPG, časovač Ategyn amserydd ar gyfer DVBLink gan DvbLogic.com; cefnogi ffrydio Teledu Byw a Recordiadau ac Amseryddion PVR Plugin til DVBLink fra DvbLogic.com; understøtter streaming af TV og optagelser, EPG, Timere. @@ -71,7 +67,6 @@ PVR Plugin for DVBLink from DvbLogic.com; supporting streaming of Live TV & Recordings, EPG, Timers Complemento PVR para DVBLink de DvbLogic.com; soporta emisiones en directo, grabaciones, EPG, programaciones Plugin PVR para DVBLink de DvbLogic.com; soporta streaming de TV en vivo, grabaciones, guía de programación (EPG) y temporizadores - Complemento PVR para DVBLink de DvbLogic.com; soporta emisiones de TV en vivo, grabaciones, EPG, programaciones. Plugin PVR pour DVBLink de DvbLogic.com. Supporte la lecture en continu de la télévision en directe et de son enregistrement, guide de programme, programmations. Plugiciel de numériscope pour DVBLink de DvbLogic.com, prenant en charge la lecture en transit de la télé en direct & les enregistrements, GÉP, des minuteries Complemento PVR do DVBLink de DvbLogic.com; soporta transmisión de TV en directo e Gravacións, Guía e temporizadores @@ -84,18 +79,17 @@ DvdLogic.com - DVBLink の PVR プラグインです。ライブTV ストリーミング、録画、EPG、タイマーをサポートしています DvbLogic.com의 DVBLink를 위한 PVR 플러그인. 라이브 TV 스트리밍, 녹화, EPG, 타이머를 지원합니다. PVR įskiepis skirtas DVBLink iš DvbLogic.com; palaiko Live TV transliaciją ir įrašymus, EPG, laikmačius - PVR Plugin за DVBLink од DvbLogic.com; поддржува емитување на Live TV & Снимки, EPG, Тајмери Plugin PVR untuk DVBLink dari DvbLogic.com; menyokong penstriman Siaran Langsung & Rakaman, EPG dan Pemasa PVR plug-in voor DVBLink van DvbLogic.com; ondersteunt het streamen van Live TV & opnames, EPG, Timers PVR-innstikk til DVBLink fra DvbLogic.com - støtter strømming av Live-TV, opptak, EPG og tidsur. - Klient DVBLink od DvbLogic.com obsługuje strumieniowanie kanałów radiowych i telewizyjnych, nagrywanie natychmiastowe i wg harmonogramu oraz funkcje przewodnika programów. + Klient DVBLink od DvbLogic.com wspiera strumieniowanie kanałów radiowych i telewizyjnych, nagrywanie natychmiastowe i wg harmonogramu oraz funkcje przewodnika programów. Plugin PVR para DVBLink de DvbLogic.com; suporta transmissão de TV em directo e gravações, EPG, temporizadores. Plugin de PVR para DVBLink de DvbLogic.com; suporta streaming de tv ao vivo e gravações, EPG, Agendamentos Plugin PVR pentru DVBLink de la DvbLogic.com; se poate difuza în flux a televiziunii în direct și a înregistrăriilor, EPG, Cronometre Плагин PVR для DVBLink с сайта DvbLogic.com; поддержка трансляции Прямого вещания и записей Live TV & Recordings, EPG, Таймеров DvbLogic.com වලින් DBVLink සඳහා PVR පේනුකිරීම; සජීව රූපවාහිනී සහ පටිගත කිරීම් ප්‍රවාහන කිරීම ,EPG, මුහුර්තක උදව් PVR zásuvný modul pre DVBLink od firmy DvbLogic.com; je podporované streamovanie živého televízneho vysielania a nahrávok, EPG, časovačov - Vtičnik PVR za DVBLink z DvbLogic.com; podpira predvajanje televizije v živo & posnetkov, EPG, časovnike. + PVR vmesnik za DVBLink iz DvbLogic.com; podpira pretakanje televizije v živo in posnetkov, EPG, časovnike. PVR tillägg för DVBLink från DvbLogic.com; stöder strömmande Live TV & inspelningar, EPG, timers 来自 DvbLogic.com 的 DVBLink 的 PVR 插件,支持直播电视播放和录制、电子节目单、定时器 Hierdie is onstabiele sagteware! Die outeurs is op geen manier verantwoordelik vir gefaalde opnames, inkorrekte tydhouers, gemorsde ure, of enige ander ongewensde effekte. @@ -131,7 +125,7 @@ 이 소프트웨어는 불안정합니다! 제작자는 녹화 실패, 부정확한 타이머, 시간 낭비 및 기타 예상하지 못한 결과에 대해 책임지지 않습니다.. Tai yra nestabili programinė įranga! Autorius jokiu būdu neatsakingas už nepavykusius įrašus, neteisingus laikmačius, iššvaistytas valandas, ar nutikus kitiems nepageidaujamiems poveikiams ...[COLOR=red](Kodi.lt rekomenduoja testuojant šį priedą persijungti į Anglų [orinali] kalbą)[/COLOR] Šī ir nestabila programmatūra! Autori nav atbildīgi par nesanākušiem ierakstiem, nepareiziem taimeriem, iztērētām stundām vai jebkādiem citiem nevēlamiem efektiem.. - Ова е нестабилен софтвер! Авторите на ниту еден начин не одговараат за неуспешни снимки, неточни тајмери, залудно потрошени часови, или било кои други несакани ефекти. + Ова е нестабилен софтвер! Авторите на ниту еден начин не одговараат за неуспешни снимки, неточни тајмери, потрошени часови, или било кои други несакани ефекти. Тус програм нь гүйцэд хийгдэж дуусаагүй! Зохиогч нь алдаатай бичлэг, цагийн буруу хөтлөлт, алдагдсан цаг хугацаа эсвэл бусад ямар нэгэн хүсээгүй үр дүнд хариуцлага хүлээхгүй. Ini merupakan perisian tidak stabil! Pengarang tidak bertanggungjawab atas kegagalan rakaman, pemasa tidak betul, masa yang dibazirkan, atau apa jua kesan yang tidak dikehendaki.. Dit is instabiele software! De auteurs zijn op geen enkele wijze verantwoordelijk voor mislukte opnames, onjuiste timers, verspilde uren, of andere ongewenste effecten .. diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/changelog.txt kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/changelog.txt --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/changelog.txt 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/changelog.txt 2015-04-01 08:50:10.000000000 +0000 @@ -1,24 +1,5 @@ -[B]Version 1.10.1[/B] -Updated to PVR API v1.9.4 - -[B]Version 1.9.16[/B] -Updated: language files from Transifex - -[B]Version 1.9.15[/B] -Updated: language files from Transifex -Fixed: Minor changes to conform with C++11 - -[B]Version 1.9.14[/B] -Updated: language files from Transifex - -[B]Version 1.9.13[/B] -Added: getBackendHostname function -Fixed: no timers are added from EPG of DVBLink TV Adviser product - [B]Version 1.9.12[/B] -Added: Grouping recordings by series -Added: Year to the episode title -Fixed: incorrect available disk space calculations +Fixed: platform fixes [B]Version 1.9.11[/B] Updated: Fixed crash when switching channels with enabled timeshifting diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Amharic/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Amharic/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Amharic/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Amharic/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -20,14 +20,6 @@ msgid "General" msgstr "ባጠቃላይ" -msgctxt "#30001" -msgid "Server Address" -msgstr "የሰርቨር አድራሻ " - -msgctxt "#30003" -msgid "Client name" -msgstr "የ ደንበኛ ስም" - msgctxt "#30005" msgid "Username" msgstr "የተጠቃሚ ስም " @@ -36,18 +28,6 @@ msgid "Password" msgstr "የመግቢያ ቃል" -msgctxt "#30100" -msgid "Stream" -msgstr "ማስተላለፊያ" - -msgctxt "#30103" -msgid "Height" -msgstr "እርዝመት" - -msgctxt "#30104" -msgid "Width" -msgstr "ስፋት" - msgctxt "#30107" msgid "HTTP" msgstr "HTTP" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Bulgarian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Bulgarian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Bulgarian/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Bulgarian/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -96,41 +96,17 @@ msgid "Advanced" msgstr "Допълнителни" -msgctxt "#30201" -msgid "Use channel handle instead of client id" -msgstr "Използвай идентификатора на канала вместо този на клиента" - msgctxt "#30202" msgid "Show information messages" msgstr "Показвай информативни съобщения" -msgctxt "#30203" -msgid "Combine title and episode name for recordings" -msgstr "Комбинирай заглавието и името на епизода при записване" - -msgctxt "#30204" -msgid "Group Recordings by Series" -msgstr "Групирай записите по сериал" - msgctxt "#32001" msgid "Connected to DVBLink Server '%s'" -msgstr "Свързан към DVBLink сървъра „%s“" +msgstr "Свързан към DVBLink сървъра '%s'" msgctxt "#32002" msgid "Found '%d' channels" -msgstr "Открити са %d канала" - -msgctxt "#32003" -msgid "Could not connect to DVBLink Server '%s' (Error code : %d)" -msgstr "Неуспешно свързване към DVBLink сървъра „%s“ (код на грешката : %d)" - -msgctxt "#32004" -msgid "Could not get recordings (Error code : %d)" -msgstr "Неуспешно получаване на записи (кода на грешката : %d)" - -msgctxt "#32006" -msgid "Could not get timers(Error code : %d)" -msgstr "Неуспешно получаване на броячи (код на грешката : %d)" +msgstr "Открити са '%d' канала" msgctxt "#32007" msgid "Found %d EPG timers" @@ -144,30 +120,10 @@ msgid "Found %d recordings" msgstr "Открити са %d записа" -msgctxt "#32010" -msgid "Could not get stream for channel %s (Error code : %d)" -msgstr "Неуспешно получаване на потока за канала %s (код на грешката : %d)" - -msgctxt "#32011" -msgid "Series recording" -msgstr "Запис на сериал" - msgctxt "#32012" msgid "Record this episode only" msgstr "Запиши само този епизод" -msgctxt "#32013" -msgid "Record all episodes" -msgstr "Запиши всички епизоди" - msgctxt "#32014" msgid "Delete timer" msgstr "Изтрий брояча" - -msgctxt "#32015" -msgid "Delete this timer only" -msgstr "Изтрий само този брояч" - -msgctxt "#32016" -msgid "Delete the entire series" -msgstr "Изтрий целия сериал" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Catalan/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Catalan/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Catalan/strings.po 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Catalan/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -96,10 +96,6 @@ msgid "Advanced" msgstr "Avançat" -msgctxt "#32002" -msgid "Found '%d' channels" -msgstr "S'han trobat '%d' canals" - msgctxt "#32014" msgid "Delete timer" msgstr "Suprimeix el temporitzador" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Chinese (Simple)/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Chinese (Simple)/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Chinese (Simple)/strings.po 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Chinese (Simple)/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -108,10 +108,6 @@ msgid "Combine title and episode name for recordings" msgstr "录像时结合标题和集名" -msgctxt "#30204" -msgid "Group Recordings by Series" -msgstr "按剧集分组录像" - msgctxt "#32001" msgid "Connected to DVBLink Server '%s'" msgstr "连接到 DVBLink 服务器“%s”" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Croatian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Croatian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Croatian/strings.po 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Croatian/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -108,10 +108,6 @@ msgid "Combine title and episode name for recordings" msgstr "Kombiniraj naslove i nazive epizoda za snimanje" -msgctxt "#30204" -msgid "Group Recordings by Series" -msgstr "Grupno snimanje serija" - msgctxt "#32001" msgid "Connected to DVBLink Server '%s'" msgstr "Povezano s DVBLink poslužiteljem '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Czech/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Czech/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Czech/strings.po 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Czech/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -108,10 +108,6 @@ msgid "Combine title and episode name for recordings" msgstr "Zkombinuj název serie a jméno epizody pro nahrávání" -msgctxt "#30204" -msgid "Group Recordings by Series" -msgstr "Seskup nahrávky podle serie" - msgctxt "#32001" msgid "Connected to DVBLink Server '%s'" msgstr "Připojeno k DVBLink serveru '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Dutch/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Dutch/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Dutch/strings.po 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Dutch/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -108,10 +108,6 @@ msgid "Combine title and episode name for recordings" msgstr "combineer titel en aflevering naam voor opnamen." -msgctxt "#30204" -msgid "Group Recordings by Series" -msgstr "Groepeer opnamen via Series" - msgctxt "#32001" msgid "Connected to DVBLink Server '%s'" msgstr "Verbonden met de DVBLink Server '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/English/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/English/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/English/strings.po 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/English/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -118,11 +118,7 @@ msgid "Combine title and episode name for recordings" msgstr "" -msgctxt "#30204" -msgid "Group Recordings by Series" -msgstr "" - -#empty strings from id 30205 to 32000 +#empty strings from id 30204 to 32000 #category labels msgctxt "#32001" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/English (Australia)/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/English (Australia)/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/English (Australia)/strings.po 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/English (Australia)/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -108,10 +108,6 @@ msgid "Combine title and episode name for recordings" msgstr "Combine title and episode name for recordings" -msgctxt "#30204" -msgid "Group Recordings by Series" -msgstr "Group Recordings by Series" - msgctxt "#32001" msgid "Connected to DVBLink Server '%s'" msgstr "Connected to DVBLink Server '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/English (US)/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/English (US)/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/English (US)/strings.po 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/English (US)/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -108,10 +108,6 @@ msgid "Combine title and episode name for recordings" msgstr "Combine title and episode name for recordings" -msgctxt "#30204" -msgid "Group Recordings by Series" -msgstr "Group Recordings by Series" - msgctxt "#32001" msgid "Connected to DVBLink Server '%s'" msgstr "Connected to DVBLink Server '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Finnish/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Finnish/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Finnish/strings.po 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Finnish/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -44,10 +44,6 @@ msgid "Advanced" msgstr "Lisäasetukset" -msgctxt "#32012" -msgid "Record this episode only" -msgstr "Tallenna vain tämä jakso" - msgctxt "#32014" msgid "Delete timer" msgstr "Poista ajastus" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/French/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/French/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/French/strings.po 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/French/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -108,10 +108,6 @@ msgid "Combine title and episode name for recordings" msgstr "Combine Titre et nom de l' épisode por enregistrements" -msgctxt "#30204" -msgid "Group Recordings by Series" -msgstr "Regrouper les enregistrements en séries" - msgctxt "#32001" msgid "Connected to DVBLink Server '%s'" msgstr "Connexion rétablie au serveur '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/French (Canada)/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/French (Canada)/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/French (Canada)/strings.po 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/French (Canada)/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -108,10 +108,6 @@ msgid "Combine title and episode name for recordings" msgstr "Combiner le titre et le nom de l'épisode pour les enregistrements" -msgctxt "#30204" -msgid "Group Recordings by Series" -msgstr "Grouper les enregistrements par séries" - msgctxt "#32001" msgid "Connected to DVBLink Server '%s'" msgstr "Connecté au serveur DVBLink « %s »" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Galician/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Galician/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Galician/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Galician/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -108,10 +108,6 @@ msgid "Combine title and episode name for recordings" msgstr "Combinar o título e o nome do episodio para as gravacións" -msgctxt "#30204" -msgid "Group Recordings by Series" -msgstr "Agrupar Gravacións por Series" - msgctxt "#32001" msgid "Connected to DVBLink Server '%s'" msgstr "Conectado ao Servidor DVBLink '%s'" @@ -148,10 +144,6 @@ msgid "Could not get stream for channel %s (Error code : %d)" msgstr "Non foi posíbel obter o fluxo da canle %s (código do erro: %d)" -msgctxt "#32011" -msgid "Series recording" -msgstr "Gravación de series" - msgctxt "#32012" msgid "Record this episode only" msgstr "Gravar só este episodio" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/German/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/German/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/German/strings.po 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/German/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -108,10 +108,6 @@ msgid "Combine title and episode name for recordings" msgstr "Titel und Folgenname für Aufnahmen kombinieren" -msgctxt "#30204" -msgid "Group Recordings by Series" -msgstr "Aufnahmen nach Serien gruppieren" - msgctxt "#32001" msgid "Connected to DVBLink Server '%s'" msgstr "Verbunden mit dem DVBLink-Server '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Greek/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Greek/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Greek/strings.po 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Greek/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -102,16 +102,12 @@ msgctxt "#30202" msgid "Show information messages" -msgstr "Εμφάνιση μηνυμάτων πληροφοριών" +msgstr "Εμφάνιση μηνύματων πληροφοριών" msgctxt "#30203" msgid "Combine title and episode name for recordings" msgstr "Συνδυασμός τίτλου και ονόματος επεισοδίου στις εγγραφές" -msgctxt "#30204" -msgid "Group Recordings by Series" -msgstr "Εγγραφές σε γκρουπ ανά Σειρά" - msgctxt "#32001" msgid "Connected to DVBLink Server '%s'" msgstr "Συνδέθηκε στο Διακομιστή DVBLink '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Hebrew/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Hebrew/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Hebrew/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Hebrew/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -108,10 +108,6 @@ msgid "Combine title and episode name for recordings" msgstr "שלב כותרת ושם הפרק בהקלטות" -msgctxt "#30204" -msgid "Group Recordings by Series" -msgstr "קבץ הקלטות לפי סדרה" - msgctxt "#32001" msgid "Connected to DVBLink Server '%s'" msgstr "מחובר לשרת DVBLink '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Hungarian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Hungarian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Hungarian/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Hungarian/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -108,10 +108,6 @@ msgid "Combine title and episode name for recordings" msgstr "Kombinálja a címed és az epizódnevet a felvtelhez" -msgctxt "#30204" -msgid "Group Recordings by Series" -msgstr "Csoport felvételek Sorozat szerint" - msgctxt "#32001" msgid "Connected to DVBLink Server '%s'" msgstr "Kapcsolódva a DVBLink Kiszolgálóhoz '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Icelandic/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Icelandic/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Icelandic/strings.po 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Icelandic/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -104,10 +104,6 @@ msgid "Show information messages" msgstr "Sýna upplýsingaskilaboð" -msgctxt "#30203" -msgid "Combine title and episode name for recordings" -msgstr "Sameina titil og þáttaraðir í nafni á upptökum" - msgctxt "#32001" msgid "Connected to DVBLink Server '%s'" msgstr "Tengdur við DVBLink miðlara '%s'" @@ -144,26 +140,14 @@ msgid "Could not get stream for channel %s (Error code : %d)" msgstr "Gat ekki náð í straum fyrir rásina %s (Villukóði : %d)" -msgctxt "#32011" -msgid "Series recording" -msgstr "Upptökur þáttaraðar" - msgctxt "#32012" msgid "Record this episode only" msgstr "Aðeins taka upp þennan þátt" -msgctxt "#32013" -msgid "Record all episodes" -msgstr "Taka upp allar þáttaraðir" - msgctxt "#32014" msgid "Delete timer" msgstr "Eyða tímatöku" -msgctxt "#32015" -msgid "Delete this timer only" -msgstr "Eyða aðeins þessari tímatöku" - msgctxt "#32016" msgid "Delete the entire series" msgstr "Eyða fyrir alla þáttaröðina" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Indonesian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Indonesian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Indonesian/strings.po 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Indonesian/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -38,11 +38,11 @@ msgctxt "#30005" msgid "Username" -msgstr "Nama Pengguna" +msgstr "NamaPengguna" msgctxt "#30006" msgid "Password" -msgstr "Sandi" +msgstr "Password" msgctxt "#30100" msgid "Stream" @@ -104,14 +104,6 @@ msgid "Show information messages" msgstr "Tampilkan pesan informasi" -msgctxt "#30203" -msgid "Combine title and episode name for recordings" -msgstr "Kombinasi judul dan nama episode untuk rekaman" - -msgctxt "#30204" -msgid "Group Recordings by Series" -msgstr "Kelompokan Rekaman dengan Seri" - msgctxt "#32001" msgid "Connected to DVBLink Server '%s'" msgstr "Tersambung ke Server DVBLink '%s" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Italian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Italian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Italian/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Italian/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -104,14 +104,6 @@ msgid "Show information messages" msgstr "Mostra messaggi di informazione" -msgctxt "#30203" -msgid "Combine title and episode name for recordings" -msgstr "Combina titolo e nome dell'episodio per le registrazioni" - -msgctxt "#30204" -msgid "Group Recordings by Series" -msgstr "Raggruppa registrazioni per Serie" - msgctxt "#32001" msgid "Connected to DVBLink Server '%s'" msgstr "Connesso al server DVBLink '%s'" @@ -148,26 +140,14 @@ msgid "Could not get stream for channel %s (Error code : %d)" msgstr "Non posso ottenere lo stream per il canale %s (Codice d'errore: %d)" -msgctxt "#32011" -msgid "Series recording" -msgstr "Registrazione Serie" - msgctxt "#32012" msgid "Record this episode only" msgstr "Registra questo episodio solo" -msgctxt "#32013" -msgid "Record all episodes" -msgstr "Registra tutti gli episodi" - msgctxt "#32014" msgid "Delete timer" msgstr "Cancella timer" -msgctxt "#32015" -msgid "Delete this timer only" -msgstr "Elimina solo questo timer" - msgctxt "#32016" msgid "Delete the entire series" msgstr "Elimina l'intera serie" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Japanese/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Japanese/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Japanese/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Japanese/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -104,14 +104,6 @@ msgid "Show information messages" msgstr "情報メッセージを表示" -msgctxt "#30203" -msgid "Combine title and episode name for recordings" -msgstr "録画のタイトルをタイトルとシリーズ(エピソード)名を結合したものにする" - -msgctxt "#30204" -msgid "Group Recordings by Series" -msgstr "録画をシリーズごとにグループ化" - msgctxt "#32001" msgid "Connected to DVBLink Server '%s'" msgstr "DVBLink サーバ '%s' に接続" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Korean/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Korean/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Korean/strings.po 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Korean/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -108,10 +108,6 @@ msgid "Combine title and episode name for recordings" msgstr "녹화에 제목과 에피소드 조합" -msgctxt "#30204" -msgid "Group Recordings by Series" -msgstr "시리즈별 그룹 녹화" - msgctxt "#32001" msgid "Connected to DVBLink Server '%s'" msgstr "DVBLink 서버 '%s' 에 연결 됨" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Latvian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Latvian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Latvian/strings.po 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Latvian/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -20,14 +20,6 @@ msgid "General" msgstr "Vispārīgi" -msgctxt "#30001" -msgid "Server Address" -msgstr "Servera adrese" - -msgctxt "#30002" -msgid "Server Port" -msgstr "Servera ports" - msgctxt "#30005" msgid "Username" msgstr "LIetotājvārds" @@ -44,14 +36,6 @@ msgid "Enable transcoding" msgstr "Ieslēgt transkodēšanu" -msgctxt "#30103" -msgid "Height" -msgstr "Augstums" - -msgctxt "#30104" -msgid "Width" -msgstr "Platums" - msgctxt "#30105" msgid "Bitrate" msgstr "Bitu ātrums" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Lithuanian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Lithuanian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Lithuanian/strings.po 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Lithuanian/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -108,10 +108,6 @@ msgid "Combine title and episode name for recordings" msgstr "Sujungti pavadinimą ir epizodo vardą įrašams" -msgctxt "#30204" -msgid "Group Recordings by Series" -msgstr "Grupiniai įrašymai pagal serialą" - msgctxt "#32001" msgid "Connected to DVBLink Server '%s'" msgstr "Prisijungta prie DVBLink serverio '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Macedonian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Macedonian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Macedonian/strings.po 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Macedonian/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -20,22 +20,6 @@ msgid "General" msgstr "Општо" -msgctxt "#30001" -msgid "Server Address" -msgstr "Адреса на серверот" - -msgctxt "#30002" -msgid "Server Port" -msgstr "Порта на серверот" - -msgctxt "#30003" -msgid "Client name" -msgstr "Име на клиентот" - -msgctxt "#30004" -msgid "Connection timeout (s)" -msgstr "Connection timeout (s)" - msgctxt "#30005" msgid "Username" msgstr "Корисничко име" @@ -44,126 +28,18 @@ msgid "Password" msgstr "Лозинка" -msgctxt "#30100" -msgid "Stream" -msgstr "Stream" - msgctxt "#30102" msgid "Enable transcoding" msgstr "Активирај транскодирање" -msgctxt "#30103" -msgid "Height" -msgstr "Висина" - -msgctxt "#30104" -msgid "Width" -msgstr "Ширина" - msgctxt "#30105" msgid "Bitrate" msgstr "Брзина на проток" -msgctxt "#30106" -msgid "Audio track" -msgstr "Аудио трака" - msgctxt "#30107" msgid "HTTP" msgstr "HTTP" -msgctxt "#30108" -msgid "RTP" -msgstr "RTP" - -msgctxt "#30109" -msgid "HLS" -msgstr "HLS" - -msgctxt "#30110" -msgid "ASF" -msgstr "ASF" - -msgctxt "#30111" -msgid "Enable Timeshift" -msgstr "Овозможи Timeshift" - -msgctxt "#30112" -msgid "Timeshift buffer path" -msgstr "Timeshift buffer path" - msgctxt "#30200" msgid "Advanced" msgstr "Напредно" - -msgctxt "#30201" -msgid "Use channel handle instead of client id" -msgstr "Користи channel handle наместо client id" - -msgctxt "#30202" -msgid "Show information messages" -msgstr "Прикажи ги информативните пораки" - -msgctxt "#30203" -msgid "Combine title and episode name for recordings" -msgstr "Комбинирај го името на серијата и епизодата за снимките" - -msgctxt "#32001" -msgid "Connected to DVBLink Server '%s'" -msgstr "Поврзан со DVBLink серверот '%s'" - -msgctxt "#32002" -msgid "Found '%d' channels" -msgstr "Најдени се '%d' канали" - -msgctxt "#32003" -msgid "Could not connect to DVBLink Server '%s' (Error code : %d)" -msgstr "Неуспешно е поврзувањето со DVBLink серверот '%s' (Error code : %d)" - -msgctxt "#32004" -msgid "Could not get recordings (Error code : %d)" -msgstr "Не можеа да се добијат снимките (Error код : %d)" - -msgctxt "#32006" -msgid "Could not get timers(Error code : %d)" -msgstr "Не можеа да се добијат тајмерите (Error код : %d)" - -msgctxt "#32007" -msgid "Found %d EPG timers" -msgstr "Најдени %d EPG тајмери" - -msgctxt "#32008" -msgid "Found %d manual timers" -msgstr "Најдени %d рачни тајмери" - -msgctxt "#32009" -msgid "Found %d recordings" -msgstr "Најдени %d снимки" - -msgctxt "#32010" -msgid "Could not get stream for channel %s (Error code : %d)" -msgstr "Не може да се добие stream за каналот %s (Error код : %d)" - -msgctxt "#32011" -msgid "Series recording" -msgstr "Серијата се снима" - -msgctxt "#32012" -msgid "Record this episode only" -msgstr "Сними ја само оваа епизода" - -msgctxt "#32013" -msgid "Record all episodes" -msgstr "Сними ги сите епизоди" - -msgctxt "#32014" -msgid "Delete timer" -msgstr "Избриши го тајмерот" - -msgctxt "#32015" -msgid "Delete this timer only" -msgstr "Избриши го само овој тајмер" - -msgctxt "#32016" -msgid "Delete the entire series" -msgstr "Избриши ја целата серија" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Persian (Iran)/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Persian (Iran)/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Persian (Iran)/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Persian (Iran)/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -31,15 +31,3 @@ msgctxt "#30105" msgid "Bitrate" msgstr "نرخ بیت" - -msgctxt "#30107" -msgid "HTTP" -msgstr "HTTP" - -msgctxt "#30200" -msgid "Advanced" -msgstr "پیشرفته" - -msgctxt "#32014" -msgid "Delete timer" -msgstr "حذف تایمر" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Polish/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Polish/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Polish/strings.po 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Polish/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -108,10 +108,6 @@ msgid "Combine title and episode name for recordings" msgstr "Scalaj tytuł i nazwę odcinka nagrań" -msgctxt "#30204" -msgid "Group Recordings by Series" -msgstr "Grupuj nagrania wg serii" - msgctxt "#32001" msgid "Connected to DVBLink Server '%s'" msgstr "Połączono z serwerem DVBLink '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Portuguese/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Portuguese/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Portuguese/strings.po 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Portuguese/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -108,10 +108,6 @@ msgid "Combine title and episode name for recordings" msgstr "Combinar título e nome do episódio para gravações" -msgctxt "#30204" -msgid "Group Recordings by Series" -msgstr "Agrupar gravações por séries" - msgctxt "#32001" msgid "Connected to DVBLink Server '%s'" msgstr "Ligado ao Servidor DVBLink '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Portuguese (Brazil)/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Portuguese (Brazil)/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Portuguese (Brazil)/strings.po 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Portuguese (Brazil)/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -108,10 +108,6 @@ msgid "Combine title and episode name for recordings" msgstr "Combine título e nome do episódio para gravações" -msgctxt "#30204" -msgid "Group Recordings by Series" -msgstr "Agrupar Gravações por Séries" - msgctxt "#32001" msgid "Connected to DVBLink Server '%s'" msgstr "Conectado ao Servidor DVBLink '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Serbian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Serbian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Serbian/strings.po 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Serbian/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -36,10 +36,6 @@ msgid "Bitrate" msgstr "Brzina protoka" -msgctxt "#30107" -msgid "HTTP" -msgstr "HTTP" - msgctxt "#30111" msgid "Enable Timeshift" msgstr "Омогући временски помак" @@ -47,7 +43,3 @@ msgctxt "#30112" msgid "Timeshift buffer path" msgstr "Путања до међумеморије временског помака" - -msgctxt "#30200" -msgid "Advanced" -msgstr "Napredno" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Slovenian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Slovenian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Slovenian/strings.po 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Slovenian/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -50,7 +50,7 @@ msgctxt "#30102" msgid "Enable transcoding" -msgstr "Omogoči pretvarjanje" +msgstr "Vključi pretvarjanje" msgctxt "#30103" msgid "Height" @@ -66,7 +66,7 @@ msgctxt "#30106" msgid "Audio track" -msgstr "Zvočna sled" +msgstr "Zvočni posnetek" msgctxt "#30107" msgid "HTTP" @@ -98,7 +98,7 @@ msgctxt "#30201" msgid "Use channel handle instead of client id" -msgstr "Uporabi oznako programe namesto ID odjemalca" +msgstr "Uporabite ročico kanala namesto ID odjemalca" msgctxt "#30202" msgid "Show information messages" @@ -106,19 +106,15 @@ msgctxt "#30203" msgid "Combine title and episode name for recordings" -msgstr "V posnetkih združi naslov in ime epizode" - -msgctxt "#30204" -msgid "Group Recordings by Series" -msgstr "Združevanje posnetkov po serijah" +msgstr "Kombiniraj naslov in ime epizode za snemanje" msgctxt "#32001" msgid "Connected to DVBLink Server '%s'" -msgstr "Povezan z strežnikom DVBLink '%s'" +msgstr "Povezan z DVBLink strežnikom '%s'" msgctxt "#32002" msgid "Found '%d' channels" -msgstr "Najdenih '%d' programov" +msgstr "Najdeni '%d' kanali" msgctxt "#32003" msgid "Could not connect to DVBLink Server '%s' (Error code : %d)" @@ -134,7 +130,7 @@ msgctxt "#32007" msgid "Found %d EPG timers" -msgstr "Najdeno %d časovnikov EPG" +msgstr "Najdeno %d EPG časovnikov" msgctxt "#32008" msgid "Found %d manual timers" @@ -146,15 +142,15 @@ msgctxt "#32010" msgid "Could not get stream for channel %s (Error code : %d)" -msgstr "Pridobitev pretoka za program %s neuspešna (Koda napake : %d)" +msgstr "Pridobitev pretoka za kanal %s neuspešna (Koda napake : %d)" msgctxt "#32011" msgid "Series recording" -msgstr "Posnetek serije" +msgstr "Snemam serijo" msgctxt "#32012" msgid "Record this episode only" -msgstr "Posnemi le to epizodo" +msgstr "Posnemi samo to epizodo" msgctxt "#32013" msgid "Record all episodes" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Spanish (Argentina)/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Spanish (Argentina)/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Spanish (Argentina)/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Spanish (Argentina)/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -108,10 +108,6 @@ msgid "Combine title and episode name for recordings" msgstr "Combinar nombres de títulos y episodios para grabaciones" -msgctxt "#30204" -msgid "Group Recordings by Series" -msgstr "Agrupar grabaciones por serie" - msgctxt "#32001" msgid "Connected to DVBLink Server '%s'" msgstr "Conectado al servidor DVBLink '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Spanish (Mexico)/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Spanish (Mexico)/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Spanish (Mexico)/strings.po 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Spanish (Mexico)/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -20,22 +20,6 @@ msgid "General" msgstr "General" -msgctxt "#30001" -msgid "Server Address" -msgstr "Dirección del servidor" - -msgctxt "#30002" -msgid "Server Port" -msgstr "Puerto del servidor" - -msgctxt "#30003" -msgid "Client name" -msgstr "Nombre del cliente" - -msgctxt "#30004" -msgid "Connection timeout (s)" -msgstr "Tiempo de espera agotado (s)" - msgctxt "#30005" msgid "Username" msgstr "Usuario" @@ -48,82 +32,18 @@ msgid "Stream" msgstr "Stream" -msgctxt "#30102" -msgid "Enable transcoding" -msgstr "Habilitar la transcodificación" - -msgctxt "#30103" -msgid "Height" -msgstr "Alto" - -msgctxt "#30104" -msgid "Width" -msgstr "Ancho" - msgctxt "#30105" msgid "Bitrate" msgstr "Bitrate" -msgctxt "#30106" -msgid "Audio track" -msgstr "Pista de audio" - msgctxt "#30107" msgid "HTTP" msgstr "HTTP" -msgctxt "#30108" -msgid "RTP" -msgstr "RTP" - -msgctxt "#30109" -msgid "HLS" -msgstr "HLS" - -msgctxt "#30110" -msgid "ASF" -msgstr "ASF" - -msgctxt "#30111" -msgid "Enable Timeshift" -msgstr "Activar Timeshift" - -msgctxt "#30112" -msgid "Timeshift buffer path" -msgstr "Ruta del buffer de TimeShift" - msgctxt "#30200" msgid "Advanced" msgstr "Avanzado" -msgctxt "#30201" -msgid "Use channel handle instead of client id" -msgstr "Usar canales en lugar de ID de cliente" - -msgctxt "#30202" -msgid "Show information messages" -msgstr "Mostrar mensajes de información" - -msgctxt "#32011" -msgid "Series recording" -msgstr "Grabación de series" - -msgctxt "#32012" -msgid "Record this episode only" -msgstr "Grabar solo este episodio" - -msgctxt "#32013" -msgid "Record all episodes" -msgstr "Grabar todos los episodios" - msgctxt "#32014" msgid "Delete timer" msgstr "Eliminar temporizador" - -msgctxt "#32015" -msgid "Delete this timer only" -msgstr "Eliminar solo este temporizador" - -msgctxt "#32016" -msgid "Delete the entire series" -msgstr "Eliminar serie completa" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Swedish/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Swedish/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Swedish/strings.po 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Swedish/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -108,10 +108,6 @@ msgid "Combine title and episode name for recordings" msgstr "Kombinera titel och episodnamn för inspelningar" -msgctxt "#30204" -msgid "Group Recordings by Series" -msgstr "Gruppinspelning av serie" - msgctxt "#32001" msgid "Connected to DVBLink Server '%s'" msgstr "Ansluten till DVBLink server '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Tamil (India)/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Tamil (India)/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Tamil (India)/strings.po 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Tamil (India)/strings.po 1970-01-01 00:00:00.000000000 +0000 @@ -1,49 +0,0 @@ -# Kodi Media Center language file -# Addon Name: DVBLink PVR Client -# Addon id: pvr.dvblink -# Addon Provider: DVBLogic -msgid "" -msgstr "" -"Project-Id-Version: XBMC Main\n" -"Report-Msgid-Bugs-To: http://trac.xbmc.org/\n" -"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Kodi Translation Team\n" -"Language-Team: Tamil (India) (http://www.transifex.com/projects/p/xbmc-main/language/ta_IN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ta_IN\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgctxt "#30000" -msgid "General" -msgstr "பொதுவானது" - -msgctxt "#30005" -msgid "Username" -msgstr "பயனர்பெயர்" - -msgctxt "#30006" -msgid "Password" -msgstr "அடையாளச் சொல்" - -msgctxt "#30100" -msgid "Stream" -msgstr "ஒலிப்பேழை" - -msgctxt "#30105" -msgid "Bitrate" -msgstr "பிட்வீதம்" - -msgctxt "#30107" -msgid "HTTP" -msgstr "HTTP" - -msgctxt "#30200" -msgid "Advanced" -msgstr "மேம்பட்ட" - -msgctxt "#32014" -msgid "Delete timer" -msgstr "டைமர் நீக்கு" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Uzbek/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Uzbek/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Uzbek/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Uzbek/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -32,10 +32,6 @@ msgid "Bitrate" msgstr "Bitreyt" -msgctxt "#30107" -msgid "HTTP" -msgstr "HTTP" - msgctxt "#32014" msgid "Delete timer" msgstr "Taymerni o'chirish" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Welsh/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Welsh/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/language/Welsh/strings.po 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/language/Welsh/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -104,14 +104,6 @@ msgid "Show information messages" msgstr "Dangoswch gwybodaeth negeseuon" -msgctxt "#30203" -msgid "Combine title and episode name for recordings" -msgstr "Cyfuno'r enw'r teitl a'r bennod ar gyfer recordio" - -msgctxt "#30204" -msgid "Group Recordings by Series" -msgstr "Grwpio Recordiadau yn ôl Cyfres" - msgctxt "#32001" msgid "Connected to DVBLink Server '%s'" msgstr "Cysylltu i Weinydd DVBLink '%s'" @@ -148,26 +140,6 @@ msgid "Could not get stream for channel %s (Error code : %d)" msgstr "Methu estyn llif ar gyfer sianel %s (Cod gwall: %d)" -msgctxt "#32011" -msgid "Series recording" -msgstr "Recordio cyfres" - -msgctxt "#32012" -msgid "Record this episode only" -msgstr "Recordio'r bennod yma" - -msgctxt "#32013" -msgid "Record all episodes" -msgstr "Recordio pob pennod" - msgctxt "#32014" msgid "Delete timer" msgstr "Dileu'r amserydd" - -msgctxt "#32015" -msgid "Delete this timer only" -msgstr "Dileu'r amserydd yma'n unig" - -msgctxt "#32016" -msgid "Delete the entire series" -msgstr "Dileu'r gyfres gyfan" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/settings.xml kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/settings.xml --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/addon/resources/settings.xml 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/addon/resources/settings.xml 2015-04-01 08:50:10.000000000 +0000 @@ -21,6 +21,5 @@ - \ No newline at end of file diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/Makefile.am kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/Makefile.am --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/Makefile.am 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/Makefile.am 2015-04-01 08:50:10.000000000 +0000 @@ -14,7 +14,7 @@ include ../Makefile.include.am -AM_CPPFLAGS+=-Isrc +INCLUDES+=-Isrc libdvblink_addon_la_SOURCES = src/client.cpp \ src/base64.cpp \ diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/project/VS2010Express/pvrclient_dvblink.vcxproj kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/project/VS2010Express/pvrclient_dvblink.vcxproj --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/project/VS2010Express/pvrclient_dvblink.vcxproj 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/project/VS2010Express/pvrclient_dvblink.vcxproj 2015-04-01 08:50:10.000000000 +0000 @@ -130,12 +130,6 @@ {fe4573f6-a794-4ad3-b37f-49e51f1140e6} - - - - - - diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/project/VS2010Express/pvrclient_dvblink.vcxproj.filters kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/project/VS2010Express/pvrclient_dvblink.vcxproj.filters --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/project/VS2010Express/pvrclient_dvblink.vcxproj.filters 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/project/VS2010Express/pvrclient_dvblink.vcxproj.filters 2015-04-01 08:50:10.000000000 +0000 @@ -66,10 +66,4 @@ Header Files - - - - - - \ No newline at end of file diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/src/client.cpp kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/src/client.cpp --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/src/client.cpp 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/src/client.cpp 2015-04-01 08:50:10.000000000 +0000 @@ -59,7 +59,6 @@ std::string g_szAudiotrack = DEFAULT_AUDIOTRACK; ///< Audiotrack to include in stream when using transcoding bool g_bUseTimeshift = DEFAULT_USETIMESHIFT; ///< Use timeshift bool g_bAddRecEpisode2title = DEFAULT_ADDRECEPISODE2TITLE; ///< Concatenate title and episode info for recordings -bool g_bGroupRecBySeries = DEFAULT_GROUPRECBYSERIES; ///< Group Recordings as Directories by series CHelper_libXBMC_addon *XBMC = NULL; CHelper_libXBMC_pvr *PVR = NULL; CHelper_libXBMC_gui *GUI = NULL; @@ -213,14 +212,6 @@ g_bAddRecEpisode2title = DEFAULT_ADDRECEPISODE2TITLE; } - /* Read setting "Group recordings by title" from settings.xml */ - if (!XBMC->GetSetting("group_recordings_by_series", &g_bGroupRecBySeries)) - { - /* If setting is unknown fallback to defaults */ - XBMC->Log(LOG_ERROR, "Couldn't get 'group_recordings_by_series' setting, falling back to 'true' as default"); - g_bGroupRecBySeries = DEFAULT_GROUPRECBYSERIES; - } - /* Read setting "height" from settings.xml */ if (!XBMC->GetSetting("height", &g_iHeight)) { @@ -259,7 +250,7 @@ /* Log the current settings for debugging purposes */ XBMC->Log(LOG_DEBUG, "settings: enable_transcoding='%i' host='%s', port=%i", g_bUseTranscoding, g_szHostname.c_str(), g_lPort); - dvblinkclient = new DVBLinkClient(XBMC, PVR, GUI, g_szClientname, g_szHostname, g_lPort, g_bShowInfoMSG, g_szUsername, g_szPassword, g_bAddRecEpisode2title, g_bGroupRecBySeries); + dvblinkclient = new DVBLinkClient(XBMC, PVR, GUI, g_szClientname, g_szHostname, g_lPort, g_bShowInfoMSG, g_szUsername, g_szPassword, g_bAddRecEpisode2title); if (dvblinkclient->GetStatus()) m_CurStatus = ADDON_STATUS_OK; @@ -358,12 +349,6 @@ g_bAddRecEpisode2title = *(bool*)settingValue; return ADDON_STATUS_NEED_RESTART; } - else if (str == "group_recordings_by_series") - { - XBMC->Log(LOG_INFO, "Changed Setting 'group_recordings_by_series' from %u to %u", g_bGroupRecBySeries, *(int*)settingValue); - g_bGroupRecBySeries = *(bool*)settingValue; - return ADDON_STATUS_NEED_RESTART; - } else if (str == "height") { XBMC->Log(LOG_INFO, "Changed Setting 'height' from %u to %u", g_iHeight, *(int*) settingValue); @@ -435,7 +420,6 @@ { pCapabilities->bSupportsEPG = true; pCapabilities->bSupportsRecordings = true; - pCapabilities->bSupportsRecordingsUndelete = false; pCapabilities->bSupportsTimers = true; pCapabilities->bSupportsTV = true; pCapabilities->bSupportsRadio = true; @@ -460,11 +444,6 @@ return g_szHostname.c_str(); } -const char *GetBackendHostname(void) -{ - return g_szHostname.c_str(); -} - PVR_ERROR GetDriveSpace(long long *iTotal, long long *iUsed) { if (dvblinkclient) @@ -647,7 +626,7 @@ } -int GetRecordingsAmount(bool deleted) +int GetRecordingsAmount(void) { if (dvblinkclient) return dvblinkclient->GetRecordingsAmount(); @@ -655,7 +634,7 @@ return -1; } -PVR_ERROR GetRecordings(ADDON_HANDLE handle, bool deleted) +PVR_ERROR GetRecordings(ADDON_HANDLE handle) { if (dvblinkclient) return dvblinkclient->GetRecordings(handle); @@ -770,7 +749,7 @@ } -PVR_ERROR OpenDialogChannelScan(void) +PVR_ERROR DialogChannelScan(void) { return PVR_ERROR_NOT_IMPLEMENTED; } @@ -795,12 +774,12 @@ return PVR_ERROR_NOT_IMPLEMENTED; } -PVR_ERROR OpenDialogChannelSettings(const PVR_CHANNEL &channel) +PVR_ERROR DialogChannelSettings(const PVR_CHANNEL &channel) { return PVR_ERROR_NOT_IMPLEMENTED; } -PVR_ERROR OpenDialogChannelAdd(const PVR_CHANNEL &channel) +PVR_ERROR DialogAddChannel(const PVR_CHANNEL &channel) { return PVR_ERROR_NOT_IMPLEMENTED; } @@ -849,16 +828,6 @@ return -1; } -PVR_ERROR UndeleteRecording(const PVR_RECORDING& recording) -{ - return PVR_ERROR_NOT_IMPLEMENTED; -} - -PVR_ERROR DeleteAllRecordingsFromTrash() -{ - return PVR_ERROR_NOT_IMPLEMENTED; -} - void DemuxAbort(void) { } diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/src/client.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/src/client.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/src/client.h 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/src/client.h 2015-04-01 08:50:10.000000000 +0000 @@ -41,5 +41,4 @@ #define DEFAULT_AUDIOTRACK "eng" #define DEFAULT_USETIMESHIFT false #define DEFAULT_ADDRECEPISODE2TITLE true -#define DEFAULT_GROUPRECBYSERIES true diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/src/DVBLinkClient.cpp kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/src/DVBLinkClient.cpp --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/src/DVBLinkClient.cpp 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/src/DVBLinkClient.cpp 2015-04-01 08:50:10.000000000 +0000 @@ -58,7 +58,7 @@ } DVBLinkClient::DVBLinkClient(CHelper_libXBMC_addon* xbmc, CHelper_libXBMC_pvr* pvr, CHelper_libXBMC_gui* gui, std::string clientname, std::string hostname, - long port, bool showinfomsg, std::string username, std::string password, bool add_episode_to_rec_title, bool group_recordings_by_series) + long port, bool showinfomsg, std::string username, std::string password, bool add_episode_to_rec_title) { PVR = pvr; XBMC = xbmc; @@ -69,7 +69,6 @@ m_currentChannelId = 0; m_showinfomsg = showinfomsg; m_add_episode_to_rec_title = add_episode_to_rec_title; - m_group_recordings_by_series = group_recordings_by_series; m_httpClient = new HttpPostClient(XBMC,hostname, port, username, password); m_dvblinkRemoteCommunication = DVBLinkRemote::Connect((HttpClient&)*m_httpClient, m_hostname.c_str(), port, username.c_str(), password.c_str()); @@ -101,12 +100,7 @@ } m_recordingsid = GetBuildInRecorderObjectID(); - - m_recordingsid_by_date = m_recordingsid; - m_recordingsid_by_date.append(DVBLINK_RECODINGS_BY_DATA_ID); - - m_recordingsid_by_series = m_recordingsid; - m_recordingsid_by_series.append(DVBLINK_RECODINGS_BY_SERIES_ID); + m_recordingsid.append(DVBLINK_RECODINGS_BY_DATA_ID); m_updating = true; CreateThread(); @@ -269,7 +263,7 @@ xbmcTimer.bIsRepeating = rec->GetProgram().IsRepeatRecord; - xbmcTimer.iEpgUid = rec->GetProgram().GetStartTime(); + PVR_STR2INT(xbmcTimer.iEpgUid, rec->GetProgram().GetID().c_str()); xbmcTimer.startTime =rec->GetProgram().GetStartTime(); xbmcTimer.endTime = rec->GetProgram().GetStartTime() + rec->GetProgram().GetDuration(); @@ -296,23 +290,6 @@ return result; } -bool DVBLinkClient::get_dvblink_program_id(std::string& channelId, int start_time, std::string& dvblink_program_id) -{ - bool ret_val = false; - - EpgSearchResult epgSearchResult; - if (DoEPGSearch(epgSearchResult, channelId, start_time, start_time)) - { - if (epgSearchResult.size() > 0 && epgSearchResult.at(0)->GetEpgData().size() > 0) - { - dvblink_program_id = epgSearchResult.at(0)->GetEpgData().at(0)->GetID(); - ret_val = true; - } - } - - return ret_val; -} - static bool is_bit_set(int bit_num, unsigned char bit_field) { unsigned char mask = (0x01 << bit_num); @@ -345,15 +322,9 @@ } } - std::string dvblink_program_id; - if (get_dvblink_program_id(channelId, timer.iEpgUid, dvblink_program_id)) - { - addScheduleRequest = new AddScheduleByEpgRequest(channelId, dvblink_program_id, record_series); - } - else - { - return PVR_ERROR_FAILED; - } + char programId [128]; + PVR_INT2STR(programId,timer.iEpgUid); + addScheduleRequest = new AddScheduleByEpgRequest(channelId, programId, record_series); } else { @@ -511,13 +482,13 @@ return result; } -static std::string get_subtitle(int season, int episode, const std::string& episode_name, int year) +static std::string get_subtitle(int season, int episode, const std::string& episode_name) { std::string se_str; - char buf[1024]; - if (season > 0 || episode > 0) { + char buf[1024]; + se_str += "("; if (season > 0) { @@ -531,179 +502,81 @@ } se_str += ")"; } - - if (year > 0) - { - if (se_str.size() > 0) - se_str += " "; - - se_str += "["; - sprintf(buf, "%04d", year); - se_str += buf; - se_str += "]"; - } - if (episode_name.size() > 0) - { - if (se_str.size() > 0) - se_str += " - "; - - se_str += episode_name; - } - + se_str += " " + episode_name; return se_str; } -static void get_timer_id_from_recording_id(const std::string& recording_id, std::string& timer_id) +PVR_ERROR DVBLinkClient::GetRecordings(ADDON_HANDLE handle) { - //find last / - std::string::size_type pos = recording_id.rfind("/"); - if (pos != std::string::npos) - { - timer_id = recording_id.substr(pos + 1); - } - else - { - timer_id = recording_id; - } -} + PLATFORM::CLockObject critsec(m_mutex); + PVR_ERROR result = PVR_ERROR_FAILED; + DVBLinkRemoteStatusCode status; + m_recording_id_to_url_map.clear(); -bool DVBLinkClient::build_recording_series_map(std::map& rec_id_to_series_name) -{ - //get all series containers - PVR_ERROR result = PVR_ERROR_FAILED; - DVBLinkRemoteStatusCode status; + GetPlaybackObjectRequest getPlaybackObjectRequest(m_hostname.c_str(), m_recordingsid); + getPlaybackObjectRequest.IncludeChildrenObjectsForRequestedObject = true; + GetPlaybackObjectResponse getPlaybackObjectResponse; - GetPlaybackObjectRequest getPlaybackObjectRequest(m_hostname.c_str(), m_recordingsid_by_series); - getPlaybackObjectRequest.IncludeChildrenObjectsForRequestedObject = true; - GetPlaybackObjectResponse getPlaybackObjectResponse; + if ((status = m_dvblinkRemoteCommunication->GetPlaybackObject(getPlaybackObjectRequest, getPlaybackObjectResponse)) != DVBLINK_REMOTE_STATUS_OK) + { + std::string error; + m_dvblinkRemoteCommunication->GetLastError(error); + XBMC->Log(LOG_ERROR,"Could not get recordings (Error code : %d Description : %s)", (int)status, error.c_str()); + //XBMC->QueueNotification(QUEUE_ERROR, XBMC->GetLocalizedString(32004), (int)status); + return result; + } + + XBMC->Log(LOG_INFO, "Found %d recordings", getPlaybackObjectResponse.GetPlaybackItems().size()); + + if (m_showinfomsg) + { + XBMC->QueueNotification(QUEUE_INFO, XBMC->GetLocalizedString(32009), getPlaybackObjectResponse.GetPlaybackItems().size()); + } - if ((status = m_dvblinkRemoteCommunication->GetPlaybackObject(getPlaybackObjectRequest, getPlaybackObjectResponse)) != DVBLINK_REMOTE_STATUS_OK) - { - std::string error; - m_dvblinkRemoteCommunication->GetLastError(error); - XBMC->Log(LOG_ERROR, "Could not get recording series container (Error code : %d Description : %s)", (int)status, error.c_str()); - return false; - } + for (std::vector::iterator it = getPlaybackObjectResponse.GetPlaybackItems().begin(); it < getPlaybackObjectResponse.GetPlaybackItems().end(); it++) + { + RecordedTvItem * tvitem = (RecordedTvItem *) *it; + PVR_RECORDING xbmcRecording; + memset(&xbmcRecording, 0, sizeof(PVR_RECORDING)); + + PVR_STRCPY(xbmcRecording.strRecordingId,tvitem->GetObjectID().c_str()); - PlaybackContainerList& series_containers = getPlaybackObjectResponse.GetPlaybackContainers(); - for (size_t i = 0; iGetMetadata().GetTitle(); + if (m_add_episode_to_rec_title) { - //ask for the items of this container - GetPlaybackObjectRequest container_items_req(m_hostname.c_str(), series_containers.at(i)->GetObjectID()); - container_items_req.IncludeChildrenObjectsForRequestedObject = true; - GetPlaybackObjectResponse container_items_resp; - - if ((status = m_dvblinkRemoteCommunication->GetPlaybackObject(container_items_req, container_items_resp)) == DVBLINK_REMOTE_STATUS_OK) - { - PlaybackItemList& playback_items = container_items_resp.GetPlaybackItems(); - for (size_t j = 0; jGetObjectID(), timer_id); - rec_id_to_series_name[timer_id] = series_containers.at(i)->GetName(); - } - } - else - { - std::string error; - m_dvblinkRemoteCommunication->GetLastError(error); - XBMC->Log(LOG_ERROR, "Could not get recording items for container %s (Error code : %d Description : %s)", series_containers.at(i)->GetObjectID().c_str(), (int)status, error.c_str()); - } + //form a title as "name - (SxxExx) subtitle" because XBMC does not display episode/season information almost anywhere + std::string se_str = get_subtitle(tvitem->GetMetadata().SeasonNumber, tvitem->GetMetadata().EpisodeNumber, tvitem->GetMetadata().SubTitle); + if (se_str.size() > 0) + title += " - " + se_str; } - - return true; -} - -PVR_ERROR DVBLinkClient::GetRecordings(ADDON_HANDLE handle) -{ - PLATFORM::CLockObject critsec(m_mutex); - PVR_ERROR result = PVR_ERROR_FAILED; - DVBLinkRemoteStatusCode status; - m_recording_id_to_url_map.clear(); - - GetPlaybackObjectRequest getPlaybackObjectRequest(m_hostname.c_str(), m_recordingsid_by_date); - getPlaybackObjectRequest.IncludeChildrenObjectsForRequestedObject = true; - GetPlaybackObjectResponse getPlaybackObjectResponse; - - if ((status = m_dvblinkRemoteCommunication->GetPlaybackObject(getPlaybackObjectRequest, getPlaybackObjectResponse)) != DVBLINK_REMOTE_STATUS_OK) + PVR_STRCPY(xbmcRecording.strTitle, title.c_str()); + + xbmcRecording.recordingTime = tvitem->GetMetadata().GetStartTime(); + PVR_STRCPY(xbmcRecording.strPlot, tvitem->GetMetadata().ShortDescription.c_str()); + PVR_STRCPY(xbmcRecording.strPlotOutline, tvitem->GetMetadata().SubTitle.c_str()); +// PVR_STRCPY(xbmcRecording.strStreamURL, tvitem->GetPlaybackUrl().c_str()); + m_recording_id_to_url_map[xbmcRecording.strRecordingId] = tvitem->GetPlaybackUrl(); + xbmcRecording.iDuration = tvitem->GetMetadata().GetDuration(); + PVR_STRCPY(xbmcRecording.strChannelName, tvitem->ChannelName.c_str()); + PVR_STRCPY(xbmcRecording.strThumbnailPath, tvitem->GetThumbnailUrl().c_str()); + int genre_type, genre_subtype; + SetEPGGenre(tvitem->GetMetadata(), genre_type, genre_subtype); + if (genre_type == EPG_GENRE_USE_STRING) { - std::string error; - m_dvblinkRemoteCommunication->GetLastError(error); - XBMC->Log(LOG_ERROR, "Could not get recordings (Error code : %d Description : %s)", (int)status, error.c_str()); - //XBMC->QueueNotification(QUEUE_ERROR, XBMC->GetLocalizedString(32004), (int)status); - return result; - } - - XBMC->Log(LOG_INFO, "Found %d recordings", getPlaybackObjectResponse.GetPlaybackItems().size()); - - if (m_showinfomsg) + xbmcRecording.iGenreType = EPG_EVENT_CONTENTMASK_UNDEFINED; + } else { - XBMC->QueueNotification(QUEUE_INFO, XBMC->GetLocalizedString(32009), getPlaybackObjectResponse.GetPlaybackItems().size()); + xbmcRecording.iGenreType = genre_type; + xbmcRecording.iGenreSubType = genre_subtype; } - //get a map of recording per series - std::map rec_id_to_series_name; - - if (m_group_recordings_by_series) - build_recording_series_map(rec_id_to_series_name); + PVR->TransferRecordingEntry(handle, &xbmcRecording); - for (std::vector::iterator it = getPlaybackObjectResponse.GetPlaybackItems().begin(); it < getPlaybackObjectResponse.GetPlaybackItems().end(); it++) - { - RecordedTvItem * tvitem = (RecordedTvItem *)*it; - PVR_RECORDING xbmcRecording; - memset(&xbmcRecording, 0, sizeof(PVR_RECORDING)); - - PVR_STRCPY(xbmcRecording.strRecordingId, tvitem->GetObjectID().c_str()); - - std::string title = tvitem->GetMetadata().GetTitle(); - if (m_add_episode_to_rec_title) - { - //form a title as "name - (SxxExx) subtitle" because XBMC does not display episode/season information almost anywhere - std::string se_str = get_subtitle(tvitem->GetMetadata().SeasonNumber, tvitem->GetMetadata().EpisodeNumber, tvitem->GetMetadata().SubTitle, (int)tvitem->GetMetadata().Year); - if (se_str.size() > 0) - title += " - " + se_str; - } - PVR_STRCPY(xbmcRecording.strTitle, title.c_str()); - - xbmcRecording.recordingTime = tvitem->GetMetadata().GetStartTime(); - PVR_STRCPY(xbmcRecording.strPlot, tvitem->GetMetadata().ShortDescription.c_str()); - PVR_STRCPY(xbmcRecording.strPlotOutline, tvitem->GetMetadata().SubTitle.c_str()); - // PVR_STRCPY(xbmcRecording.strStreamURL, tvitem->GetPlaybackUrl().c_str()); - m_recording_id_to_url_map[xbmcRecording.strRecordingId] = tvitem->GetPlaybackUrl(); - xbmcRecording.iDuration = tvitem->GetMetadata().GetDuration(); - PVR_STRCPY(xbmcRecording.strChannelName, tvitem->ChannelName.c_str()); - PVR_STRCPY(xbmcRecording.strThumbnailPath, tvitem->GetThumbnailUrl().c_str()); - int genre_type, genre_subtype; - SetEPGGenre(tvitem->GetMetadata(), genre_type, genre_subtype); - if (genre_type == EPG_GENRE_USE_STRING) - { - xbmcRecording.iGenreType = EPG_EVENT_CONTENTMASK_UNDEFINED; - } - else - { - xbmcRecording.iGenreType = genre_type; - xbmcRecording.iGenreSubType = genre_subtype; - } - - if (m_group_recordings_by_series) - { - //compare timer_ids - std::string timer_id; - get_timer_id_from_recording_id(tvitem->GetObjectID(), timer_id); - - if (rec_id_to_series_name.find(timer_id) != rec_id_to_series_name.end()) - { - PVR_STRCPY(xbmcRecording.strDirectory, rec_id_to_series_name[timer_id].c_str()); - } - } - - PVR->TransferRecordingEntry(handle, &xbmcRecording); - - } - m_recordingCount = getPlaybackObjectResponse.GetPlaybackItems().size(); - result = PVR_ERROR_NO_ERROR; - return result; + } + m_recordingCount = getPlaybackObjectResponse.GetPlaybackItems().size(); + result = PVR_ERROR_NO_ERROR; + return result; } bool DVBLinkClient::GetRecordingURL(const char* recording_id, std::string& url) @@ -732,7 +605,7 @@ if ((status = m_dvblinkRemoteCommunication->GetRecordingSettings(recordingsettingsrequest, settings)) == DVBLINK_REMOTE_STATUS_OK) { *iTotal = settings.TotalSpace; - *iUsed = (settings.TotalSpace - settings.AvailableSpace); + *iUsed = settings.AvailableSpace; } } @@ -974,7 +847,7 @@ EPG_TAG broadcast; memset(&broadcast, 0, sizeof(EPG_TAG)); - broadcast.iUniqueBroadcastId = p->GetStartTime(); + PVR_STR2INT(broadcast.iUniqueBroadcastId, p->GetID().c_str() ); broadcast.strTitle = p->GetTitle().c_str(); broadcast.iChannelNumber = channel.iChannelNumber; broadcast.startTime = p->GetStartTime(); diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/src/DVBLinkClient.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/src/DVBLinkClient.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvblink/src/DVBLinkClient.h 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvblink/src/DVBLinkClient.h 2015-04-01 08:50:10.000000000 +0000 @@ -40,7 +40,6 @@ #define DVBLINK_BUILD_IN_RECORDER_SOURCE_ID "8F94B459-EFC0-4D91-9B29-EC3D72E92677" #define DVBLINK_RECODINGS_BY_DATA_ID "F6F08949-2A07-4074-9E9D-423D877270BB" -#define DVBLINK_RECODINGS_BY_SERIES_ID "0E03FEB8-BD8F-46e7-B3EF-34F6890FB458" typedef std::map recording_id_to_url_map_t; @@ -48,7 +47,7 @@ { public: DVBLinkClient(ADDON::CHelper_libXBMC_addon* xbmc, CHelper_libXBMC_pvr* pvr, CHelper_libXBMC_gui* gui, std::string clientname, std::string hostname, long port, - bool showinfomsg, std::string username, std::string password, bool add_episode_to_rec_title, bool group_recordings_by_series); + bool showinfomsg, std::string username, std::string password, bool add_episode_to_rec_title); ~DVBLinkClient(void); int GetChannelsAmount(); PVR_ERROR GetChannels(ADDON_HANDLE handle, bool bRadio); @@ -83,8 +82,6 @@ std::string GetRecordedTVByDateObjectID(const std::string& buildInRecoderObjectID); int GetInternalUniqueIdFromChannelId(const std::string& channelId); virtual void * Process(void); - bool build_recording_series_map(std::map& rec_id_to_series_name); - bool get_dvblink_program_id(std::string& channelId, int start_time, std::string& dvblink_program_id); std::string make_timer_hash(const std::string& timer_id, const std::string& schedule_id); bool parse_timer_hash(const char* timer_hash, std::string& timer_id, std::string& schedule_id); @@ -106,12 +103,9 @@ std::string m_hostname; LiveStreamerBase* m_live_streamer; bool m_add_episode_to_rec_title; - bool m_group_recordings_by_series; bool m_showinfomsg; bool m_updating; std::string m_recordingsid; - std::string m_recordingsid_by_date; - std::string m_recordingsid_by_series; recording_id_to_url_map_t m_recording_id_to_url_map; }; diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/addon/addon.xml.in kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/addon/addon.xml.in --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/addon/addon.xml.in 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/addon/addon.xml.in 2015-04-01 08:50:10.000000000 +0000 @@ -1,12 +1,12 @@ - + Kodi se voorprogram vir DVBViewer Kodi's frontend for DVBViewer Kodi клиент за DVBViewer - Frontal del Kodi pel DVBViewer + Frontal de l'Kodi pel DVBViewer Rozhraní Kodi pro DVBViewer Blaen Kodi ar gyfer DVBViewer Kodi's frontend til DVBViewer @@ -33,7 +33,6 @@ Frontend de Kodi para DVBViewer Frontend de Kodi para DVBViewer Kodi esi DVBViewer'ile - DBVViewer-erako Kodiren frontend-a Interface logicielle pour DVBViewer Frontal Kodi pour DVBViewer Interface de Kodi para DVBViewer @@ -58,7 +57,7 @@ Interfața Kodi pentru DVBViewer Фронтэнд Kodi для DVBViewer Kodi rozhranie pre DVBViewer - Kodijev vmesnik za DVBViewer + Kodi-jev vmesnik za DVBViewer "Frontend'i" i Kodi'së për DVBViewer Интерфејс Kodi-а за DVBViewer Kodis gränssnitt för DVBViewer @@ -70,7 +69,7 @@ DVBViewer Opname Diens voorprogram; ondersteun stroom van lewendige TV, Tydhouers, Opnames & EPG. Om die XML uittree vanaf die RS webkoppelvlak te ontleed word die xmlParser biblioteek gebruik, ontwikkel deur Frank Vanden Berghen (http://www.applied-mathematics.net/tools/xmlParser.html). Baie dankie hiervoor! DVBViewer Recording Service frontend; supporting streaming of LiveTV, Timers, Recordings & EPG. For parsing the XML output from the RS webinterface it uses the xmlParser library developed by Frank Vanden Berghen (http://www.applied-mathematics.net/tools/xmlParser.html). Many thanks for this! DVBViewer клиентска услуга за записване. Поддържа стрийминг и записване на телевизия, броячи и електронен програмен справочник. За разбор на XML изхода от RS уеб интерфейс, използва библиотеката xmlParser разработена от Frank Vanden Berghen (http://www.applied-mathematics.net/tools/xmlParser.html). Благодарим му за това! - Frontal del servei d'enregistrament del DVBViewer; compatible amb la transmissió de TV en viu, temporitzadors, enregistraments i EPG. + Frontal del servei d'enregistrament del DVBViewer; suportant transmissió de TV en viu, temporitzadors, enregistraments i EPG. Per analitzar la sortida XML de la interfície web RS utilitza la llibreria xmlParser desenvolupada per Frank Vanden Berghen (http://www.applied-mathematics.net/tools/xmlParser.html). Moltes gràcies! Rozhraní služby nahrávek DVBViewer. Podporuje proudové vysílání živého vysílání, nahrávky a EPG. Pro zpracování výstupu XML z webového rozhraní RS používá knihovnu xmlParser, kterou vyvinul Frank Vanden Berghen (http://www.applied-mathematics.net/tools/xmlParser.html). Za to mnohokrát děkujeme. Blaen DBViewer Recording Service; cynnal ffrydio Teledu Byw, Amseryddion, Recordio acAmserlenydd. Ar gyfer didoli allbwn XML o ryngwyneb RS mae'n defnyddio llyfrgell xmlParser ddatblygwyd gan Frank Vanden Berghen ( http://www.applied-mathematics.net/tools/xmlParser.html). Diolch yn fawr am hyn! DVBViewer Recording Service frontend; Understøtter streaming af Direkte TV, Timere, Optagelser og EPG. For parsing af XML output fra RS webinterface bruges xmlParser biblioteket, der er udviklet af Frank Vanden Berghen (http://www.applied-mathematics.net/tools/xmlParser.html). Mange tak for dette! @@ -101,13 +100,13 @@ Bahagian hadapan perkhidmatan Rakaman DVBViewer; menyokong penstriman bagi TV Langsung, Pemasa, Rakaman & EPG. Untuk menghurai output XML dari webinterface RS ia gunakan pustaka penghurai xml yang dibangunkan oleh Frank Vanden Berghen (http://www.applied-mathematics.net/tools/xmlParser.html). Terima kasih!⏎ DVBViewer opnamen service frontend; ondersteunt streaming van LiveTV, Timers, opnamen& EPG. Voor parsing de XML output van de RS webinterface gebruikt het de xmlParser bibliotheek ontwikkelt door Frank van den Berghen (http://www.applied-mathematics.net/tools/xmlParser.html) Hartelijk bedankt voor dit! DVBViewer Recording Service frontend; støtter streaming av live TV, timere, Opptak og EPG. For å legge til XML utdata fra RS webinterface bruker det xmlParser bibloteket laget av Frank Vanden Berghen (http://www.applied-mathematics.net/tools/xmlParser.html). Mange takk for dette! - Klient usługi DVBViewer Recording Service obsługuje strumieniowanie kanałów radiowych i telewizyjnych, nagrywanie natychmiastowe i wg harmonogramu oraz funkcje przewodnika programów. + Klient usługi DVBViewer Recording Service wspiera strumieniowanie kanałów radiowych i telewizyjnych, nagrywanie natychmiastowe i wg harmonogramu oraz funkcje przewodnika programów. Frontend para o serviço de gravação DVBViewer; permite transmissão de TV em directo, temporizadores, gravações e EPG. DVBViewer frontend Serviço de gravações, suporta streaming de TV ao Vivo, Agendamentos, Gravações e EPG. Para analisar a saída XML do RS webinterface ele usa a biblioteca XmlParser desenvolvido por Frank Vanden Berghen (http://www.applied-mathematics.net/tools/xmlParser.html). Muito obrigado por isso! DVBViewer serviciu interfață de înregistrare; suporta streaming de LiveTV, Timers, Înregistrări și EPG. Фронтэнд сервиса записи DVBViewer; поддерживает потоковое вещание ТВ, таймеры, запись и ЕПГ. Для разбора XML-вывода RS-интерфейса использует библиотеку xmlParser, написанную Frank Vanden Berghen (http://www.applied-mathematics.net/tools/xmlParser.html). За что благодарим его!⏎ Rozhranie pre spoluprácu s nahrávacou službou aplikácie DVBViewer; podporuje streamovanie živej televízie, časovače, nahrávky a EPG. Na získavanie dát zo XML výstupu z RS webového rozhrania používa knižnicu xmlParser, ktorú vyvinul Frank Vanden Berghen (http://www.applied-mathematics.net/tools/xmlParser.html). Za to mu veľmi ďakujeme! - Vmesnik za DVBViewer; podpira pretakanje televizije v živo, časovnike, snemanje & EPG. + Vmesnik za DVBViewer; podpira pretakanje televizije v živo, časovnike, snemanje & EPG. Za branje zapisa XML s spletnega vmesnika RS uporablja knjižnico xmlParser avtorja Franka Vanden Berghena (http://www.applied-mathematics.net/tools/xmlParser.html). Hvala za to! DVBViewer Recording Service frontend; përkrahën transmetimin té LiveTV, Orarin, Regjistrime & EPG. Për të bërë "parsing" i XML prej RS "webinterface'it" ky përdorën bibliotekën të "xmlParser'it" që është zhvilluar nga Frank van den Berghen (http://www.applied-mathematics.net/tools/xmlParser.html). Many thanks for this!. Shum i falemnderohemi! Интерфејс за услугу снимања DVBViewer-а; подржава емитовање телевизије уживо, бројаче, снимање и програмски водич (EPG). Користи библиотеку xmlParser коју је развио Франк Фанден Берген за рашчлањивање XML датотека из RS веб интерфејса (http://www.applied-mathematics.net/tools/xmlParser.html). Хвала много на овоме! DVBViewers gränssnitt för inspelningstjänst, stödjer strömning av direktsänd TV, timers, inspelningar och EPG. För att tolka XML-data från RS-webbgränssnitt använder den biblioteket xmlParser utvecklat av Frank Vanden Berghen (http://www.applied-mathematics.net/tools/xmlParser.html). Många tack för detta! @@ -149,7 +148,7 @@ 이 소프트웨어는 불안정합니다! 제작자는 녹화 실패, 부정확한 타이머, 시간 낭비 및 기타 예상하지 못한 결과에 대해 책임지지 않습니다.. Tai yra nestabili programinė įranga! Autorius jokiu būdu neatsakingas už nepavykusius įrašus, neteisingus laikmačius, iššvaistytas valandas, ar nutikus kitiems nepageidaujamiems poveikiams ...[COLOR=red](Kodi.lt siūlo/rekomenduoja testuojant šį priedą persijungti į Anglų [orinali] kalbą)[/COLOR] Šī ir nestabila programmatūra! Autori nav atbildīgi par nesanākušiem ierakstiem, nepareiziem taimeriem, iztērētām stundām vai jebkādiem citiem nevēlamiem efektiem.. - Ова е нестабилен софтвер! Авторите на ниту еден начин не одговараат за неуспешни снимки, неточни тајмери, залудно потрошени часови, или било кои други несакани ефекти. + Ова е нестабилен софтвер! Авторите на ниту еден начин не одговараат за неуспешни снимки, неточни тајмери, потрошени часови, или било кои други несакани ефекти. Тус програм нь гүйцэд хийгдэж дуусаагүй! Зохиогч нь алдаатай бичлэг, цагийн буруу хөтлөлт, алдагдсан цаг хугацаа эсвэл бусад ямар нэгэн хүсээгүй үр дүнд хариуцлага хүлээхгүй. Ini merupakan perisian tidak stabil! Pengarang tidak bertanggungjawab atas kegagalan rakaman, pemasa tidak betul, masa yang dibazirkan, atau apa jua kesan yang tidak dikehendaki.. Deze software is niet 100% stabiel! De auteurs zijn op geen enkele wijze aansprakelijk voor mislukte opnames, verspilde tijd, of enig ander ongewild neveneffect.. diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/addon/changelog.txt kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/addon/changelog.txt --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/addon/changelog.txt 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/addon/changelog.txt 2015-04-01 08:50:10.000000000 +0000 @@ -1,30 +1,9 @@ -1.10.29 -[added] RecordingReader: Allows playback of ongoing recordings - There are still some minor quirks. e.g. In case we reach the end during - playback/seek we'll sleep until the next refresh. This should happen - once but sometimes this happens twice. -[added] Support for putting outline before plot -[fixed] Removed custom notification if backend is unavailable -[fixed] A new timer has been removed and re-added again shortly after it has - been added the first time - -1.10.0 -[updated] to PVR API v1.9.4 - -1.9.27 -[updated] Language files from Transifex - -1.9.26 -[updated] Language files from Transifex -[fixed] Minor changes to conform with C++11 - -1.9.25 -[added] getBackendHostname function - 1.9.24 -[fixed] mime-type for MPEG-TS + +[fixed] platform fixes 1.9.23 + [updated] Language files from Transifex 1.9.22 @@ -34,18 +13,23 @@ [fixed] deadlock when activating the addon on some darwin (osx, ios) runtimes 1.9.20 + [updated] Language files from Transifex 1.9.19 + [updated] Language files from Transifex 1.9.18 + [updated] to API v1.9.2 1.9.16 + [updated] Language files from Transifex 1.9.15 + [updated] Speed up timeshift startup time [added] If available add genre to EPG [added] Support for grouping recordings. Grouping can be by rec. directory, @@ -53,21 +37,25 @@ [fixed] Another timezone offsets fix 1.9.14 + [updated] Require DVB Viewer Recording Service 1.26.0 or later [updated] Removed external XML library. Use TinyXML instead [added] Low performance mode for devices like the raspberry pi [fixed] Timers starting near 12pm could have wrong date 1.9.13 + [updated] Language files from Transifex 1.9.12 + [updated] Language files from Transifex 1.9.11 [added] add timeshift buffer functions 1.8.10 + [updated] Require DVB Viewer Recording Service 1.25.0 or later [updated] In general use RS XML API instead of HTML/channeldat parsing [updated] Rewrote channel parsing. Use favourites if you want fast startups. @@ -80,18 +68,23 @@ [fixed] possible crash (2x) 1.8.9 + [updated] sync with PVR API v1.8.0 1.7.9 + [fixed] loading favourites without groups/folders 1.7.8 + [fixed] fix crash with Recording Service 1.25.0 1.7.7 + [fixed] fix possible crash during timer updates 1.7.6 + [added] Basic timeshift support. [added] Use channel names from favourites. This allows easy channelname changes. [fixed] Use 64 bit channel ids. Fall back to 32 bit if favourites.xml still contain the old ones. @@ -99,28 +92,35 @@ [updated] A lot of code cleanup 1.7.5 + [updated] Bump after PVR API version bump 1.6.5 + [updated] Language files from Transifex 1.6.4 + [fixed] Use utf-8 encoding to get and set the timers. [fixed] Channel names with more than 25 chars could crash the add-on. 1.6.3 + [updated] Language files from Transifex 1.6.2 + New version number by Team XBMC 0.1.8 + [fixed] Changed the way timers are calculated. This should fix problems with scheduled and instant recordings on some machines. [fixed] Favourites didn't show channels if the audio track wasn't the first one. [fixed] Channel settings weren't saved/restored after a channel switch with the channels OSD. [fixed] XBMC could hang after a channel switch with the channels OSD. 0.1.7 + [added] The Recording Service version 1.21 or higher is now required. Download the latest version from the DVBViewer members area and install it. [added] Display a notification if the add-on can't connect to the Recording Service. Please, check that the RS is enabled and the IP, webinterface port, username and pass are correct. [added] If the favourites.xml selector is empty, the favourites are loaded from the web interface. @@ -130,6 +130,7 @@ [fixed] Channel names with more than 25 chars. 0.1.5 + [added] Timers support. [added] An option to load the channels from favourites.xml instead of from channels.dat (a reset of the PVR database is required). It is usually located at c:\ProgramData\CMUV\DVBViewer\ @@ -141,4 +142,5 @@ [fixed] When the EPG is missing the description entry, the event entry is used instead. 0.1.0 + First version. diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/addon/resources/language/Basque/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/addon/resources/language/Basque/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/addon/resources/language/Basque/strings.po 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/addon/resources/language/Basque/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -16,10 +16,6 @@ "Language: eu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -msgctxt "#30001" -msgid "Webinterface Port" -msgstr "Webinterface-aren Portua" - msgctxt "#30002" msgid "Username" msgstr "Erabiltzailea" @@ -28,10 +24,6 @@ msgid "Password" msgstr "Pasahitza" -msgctxt "#30010" -msgid "Use favourites instead of channel list" -msgstr "Gogokoak erabili kanalen zerrendaren ordez" - msgctxt "#30100" msgid "General" msgstr "Orokorra" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/addon/resources/language/Bulgarian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/addon/resources/language/Bulgarian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/addon/resources/language/Bulgarian/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/addon/resources/language/Bulgarian/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -56,38 +56,10 @@ msgid "Use RTSP streaming for live TV" msgstr "Ползвай RTSP стрийминг за телевизия на живо" -msgctxt "#30040" -msgid "Enable low performance mode (disables logos & thumbnails)" -msgstr "Включи режим на слаба производителност (изключва емблемите и умалените изображения)" - -msgctxt "#30050" -msgid "Group recordings" -msgstr "Групирай записите" - msgctxt "#30051" msgid "disabled" msgstr "изключено" -msgctxt "#30052" -msgid "by recording directory" -msgstr "по папка, в която се записват" - -msgctxt "#30053" -msgid "by recording date" -msgstr "по дата на записване" - -msgctxt "#30054" -msgid "by first letter" -msgstr "по първа буква" - -msgctxt "#30055" -msgid "by tv channel" -msgstr "по тв канал" - -msgctxt "#30056" -msgid "by series" -msgstr "по сериал" - msgctxt "#30100" msgid "General" msgstr "Основни" @@ -100,14 +72,6 @@ msgid "Recordings" msgstr "Записи" -msgctxt "#30500" -msgid "Unable to connect to the DVBViewer Recording Service" -msgstr "Неуспешно свързване към DVBViewer услуга за записване" - -msgctxt "#30501" -msgid "DVBViewer Recording Service version %s or higher required" -msgstr "Версията на DVBViewer услугата за записване трябва да е поне %s" - msgctxt "#30502" msgid "Unable to parse channel list" msgstr "Не може да се анализира каналния списък" @@ -126,4 +90,4 @@ msgctxt "#30506" msgid "Unable to parse timer list" -msgstr "Списъкът с броячи не може да бъде анализиран" +msgstr "Не може да се анализира списъка с броячи" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/addon/resources/language/Catalan/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/addon/resources/language/Catalan/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/addon/resources/language/Catalan/strings.po 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/addon/resources/language/Catalan/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -56,34 +56,10 @@ msgid "Use RTSP streaming for live TV" msgstr "Utilitza flux RTSP per a TV en viu" -msgctxt "#30050" -msgid "Group recordings" -msgstr "Grup d'enregistraments" - msgctxt "#30051" msgid "disabled" msgstr "Inhabilitat" -msgctxt "#30052" -msgid "by recording directory" -msgstr "per directori d'enregistrament" - -msgctxt "#30053" -msgid "by recording date" -msgstr "per la data d'enregistrament" - -msgctxt "#30054" -msgid "by first letter" -msgstr "per la primera lletra" - -msgctxt "#30055" -msgid "by tv channel" -msgstr "pel canal de TV" - -msgctxt "#30056" -msgid "by series" -msgstr "per les sèries" - msgctxt "#30100" msgid "General" msgstr "General" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/addon/resources/language/English/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/addon/resources/language/English/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/addon/resources/language/English/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/addon/resources/language/English/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -100,29 +100,7 @@ msgid "by series" msgstr "" -#empty strings from id 30057 to 30059 - -msgctxt "#30060" -msgid "Put outline (e.g. subtitles) before plot" -msgstr "" - -msgctxt "#30061" -msgid "Never" -msgstr "" - -msgctxt "#30062" -msgid "In EPG only" -msgstr "" - -msgctxt "#30063" -msgid "In recordings only" -msgstr "" - -msgctxt "#30064" -msgid "Always" -msgstr "" - -#empty strings from id 30065 to 30099 +#empty strings from id 30057 to 30099 #sections msgctxt "#30100" @@ -167,7 +145,3 @@ msgctxt "#30506" msgid "Unable to parse timer list" msgstr "" - -msgctxt "#30507" -msgid "Please reset the EPG database and restart Kodi afterwards" -msgstr "" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/addon/resources/language/Macedonian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/addon/resources/language/Macedonian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/addon/resources/language/Macedonian/strings.po 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/addon/resources/language/Macedonian/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -36,58 +36,10 @@ msgid "Use favourites instead of channel list" msgstr "Користи ги омилените наместо листата канали" -msgctxt "#30011" -msgid "Use local favourites file" -msgstr "Користи локален фајл за омилени" - msgctxt "#30012" msgid "Select the favourites.xml file" msgstr "Одбери favourites.xml папка" -msgctxt "#30020" -msgid "Enable Timeshift" -msgstr "Вклучи Timeshift" - -msgctxt "#30021" -msgid "Timeshift buffer path" -msgstr "Пат за Timeshift buffer-от" - -msgctxt "#30030" -msgid "Use RTSP streaming for live TV" -msgstr "Користи RTSP streaming за ТВ во живо" - -msgctxt "#30040" -msgid "Enable low performance mode (disables logos & thumbnails)" -msgstr "Работи во ниско-перформансен режим (ги исклучува логоата и сликичките)" - -msgctxt "#30050" -msgid "Group recordings" -msgstr "Групирај ги снимките" - -msgctxt "#30051" -msgid "disabled" -msgstr "исклучено" - -msgctxt "#30052" -msgid "by recording directory" -msgstr "според локација на снимките" - -msgctxt "#30053" -msgid "by recording date" -msgstr "според датум на снимање" - -msgctxt "#30054" -msgid "by first letter" -msgstr "според првата буква" - -msgctxt "#30055" -msgid "by tv channel" -msgstr "според ТВ канал" - -msgctxt "#30056" -msgid "by series" -msgstr "според серија" - msgctxt "#30100" msgid "General" msgstr "Општо" @@ -99,31 +51,3 @@ msgctxt "#30102" msgid "Recordings" msgstr "Снимки" - -msgctxt "#30500" -msgid "Unable to connect to the DVBViewer Recording Service" -msgstr "Невозможно поврзување со DVBViewer Recording Service-от" - -msgctxt "#30501" -msgid "DVBViewer Recording Service version %s or higher required" -msgstr "Потребна е DVBViewer Recording Service верзија %s или повисока" - -msgctxt "#30502" -msgid "Unable to parse channel list" -msgstr "Не може да се расчлени листата на канали" - -msgctxt "#30503" -msgid "Check Kodi log for more information" -msgstr "Провери го Kodi log-от за повеќе информации" - -msgctxt "#30504" -msgid "Unable to open local favourites.xml" -msgstr "Не може да се отвори локалното favourites.xml" - -msgctxt "#30505" -msgid "Unable to parse favourites list" -msgstr "Не може да се расчлени листата на омилени" - -msgctxt "#30506" -msgid "Unable to parse timer list" -msgstr "Не може да се расчлени листата на тајмери" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/addon/resources/language/Persian (Iran)/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/addon/resources/language/Persian (Iran)/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/addon/resources/language/Persian (Iran)/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/addon/resources/language/Persian (Iran)/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -28,10 +28,6 @@ msgid "General" msgstr "عمومی" -msgctxt "#30101" -msgid "Advanced" -msgstr "پیشرفته" - msgctxt "#30102" msgid "Recordings" msgstr "ضبط شده ها" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/addon/resources/language/Polish/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/addon/resources/language/Polish/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/addon/resources/language/Polish/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/addon/resources/language/Polish/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -110,7 +110,7 @@ msgctxt "#30502" msgid "Unable to parse channel list" -msgstr "Błąd przetwarzania listy kanałów" +msgstr "Błąd parsowania listy kanałów" msgctxt "#30503" msgid "Check Kodi log for more information" @@ -122,8 +122,8 @@ msgctxt "#30505" msgid "Unable to parse favourites list" -msgstr "Błąd przetwarzania listy ulubionych" +msgstr "Błąd parsowania listy ulubionych" msgctxt "#30506" msgid "Unable to parse timer list" -msgstr "Błąd przetwarzania harmonogramu nagrań" +msgstr "Błąd parsowania harmonogramu nagrań" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/addon/resources/language/Serbian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/addon/resources/language/Serbian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/addon/resources/language/Serbian/strings.po 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/addon/resources/language/Serbian/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -48,10 +48,6 @@ msgid "General" msgstr "Opšte" -msgctxt "#30101" -msgid "Advanced" -msgstr "Napredno" - msgctxt "#30102" msgid "Recordings" msgstr "Snimci" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/addon/resources/language/Slovenian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/addon/resources/language/Slovenian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/addon/resources/language/Slovenian/strings.po 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/addon/resources/language/Slovenian/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -58,11 +58,11 @@ msgctxt "#30040" msgid "Enable low performance mode (disables logos & thumbnails)" -msgstr "Omogoči način nizke zmogljivosti (onemogoči logotipe in sličice)" +msgstr "Omogoči način nizke zmogljivosti (izključeni so logotipi in sličice)" msgctxt "#30050" msgid "Group recordings" -msgstr "Združi posnetke" +msgstr "Skupinski posnetki" msgctxt "#30051" msgid "disabled" @@ -82,7 +82,7 @@ msgctxt "#30055" msgid "by tv channel" -msgstr "po tv programu" +msgstr "po tv kanalu" msgctxt "#30056" msgid "by series" @@ -110,20 +110,20 @@ msgctxt "#30502" msgid "Unable to parse channel list" -msgstr "Seznama programov ni mogoče prebrati" +msgstr "Ne morem prikazati seznama kanalov" msgctxt "#30503" msgid "Check Kodi log for more information" -msgstr "Preverite Kodijev zapisnik za več informacij" +msgstr "Preveri Kodi zapisnik za več informacij" msgctxt "#30504" msgid "Unable to open local favourites.xml" -msgstr "Krajevne datoteke favourites.xml ni mogoče odpreti" +msgstr "Ne morem odpreti lokalne datoteke favourites.xml" msgctxt "#30505" msgid "Unable to parse favourites list" -msgstr "Seznama priljubljenih ni mogoče prebrati" +msgstr "Ne morem prikazati seznama priljubljenih" msgctxt "#30506" msgid "Unable to parse timer list" -msgstr "Seznama časovnikov ni mogoče prebrati" +msgstr "Ne morem prikazati seznama časovnika" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/addon/resources/language/Spanish (Mexico)/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/addon/resources/language/Spanish (Mexico)/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/addon/resources/language/Spanish (Mexico)/strings.po 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/addon/resources/language/Spanish (Mexico)/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -24,14 +24,6 @@ msgid "Password" msgstr "Contraseña" -msgctxt "#30020" -msgid "Enable Timeshift" -msgstr "Activar Timeshift" - -msgctxt "#30021" -msgid "Timeshift buffer path" -msgstr "Ruta del buffer de TimeShift" - msgctxt "#30100" msgid "General" msgstr "General" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/addon/resources/language/Tamil (India)/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/addon/resources/language/Tamil (India)/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/addon/resources/language/Tamil (India)/strings.po 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/addon/resources/language/Tamil (India)/strings.po 1970-01-01 00:00:00.000000000 +0000 @@ -1,37 +0,0 @@ -# Kodi Media Center language file -# Addon Name: DVBViewer Client -# Addon id: pvr.dvbviewer -# Addon Provider: jdembski, A600, Manuel Mausz, Portisch -msgid "" -msgstr "" -"Project-Id-Version: XBMC Main\n" -"Report-Msgid-Bugs-To: http://trac.xbmc.org/\n" -"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Kodi Translation Team\n" -"Language-Team: Tamil (India) (http://www.transifex.com/projects/p/xbmc-main/language/ta_IN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ta_IN\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgctxt "#30002" -msgid "Username" -msgstr "பயனர்பெயர்" - -msgctxt "#30003" -msgid "Password" -msgstr "அடையாளச் சொல்" - -msgctxt "#30100" -msgid "General" -msgstr "பொதுவானது" - -msgctxt "#30101" -msgid "Advanced" -msgstr "மேம்பட்ட" - -msgctxt "#30102" -msgid "Recordings" -msgstr "பதிவகள்" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/addon/resources/language/Turkish/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/addon/resources/language/Turkish/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/addon/resources/language/Turkish/strings.po 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/addon/resources/language/Turkish/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -56,10 +56,6 @@ msgid "Use RTSP streaming for live TV" msgstr "Canlı TV için RTSP akışını kullan" -msgctxt "#30040" -msgid "Enable low performance mode (disables logos & thumbnails)" -msgstr "Düşük performans kipini etkinleştir (logo ve küçük resimleri devre dışı bırakır)" - msgctxt "#30050" msgid "Group recordings" msgstr "Grup kayıtları" @@ -104,10 +100,6 @@ msgid "Unable to connect to the DVBViewer Recording Service" msgstr "DVDGösterici'nin Kayıt servisine bağlanılamıyor" -msgctxt "#30501" -msgid "DVBViewer Recording Service version %s or higher required" -msgstr "DVBViewer Kayıt Hizmeti sürüm %s veya sonrası gerekli" - msgctxt "#30502" msgid "Unable to parse channel list" msgstr "Kanal listesi bölünemiyor" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/addon/resources/settings.xml kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/addon/resources/settings.xml --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/addon/resources/settings.xml 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/addon/resources/settings.xml 2015-04-01 08:50:10.000000000 +0000 @@ -13,19 +13,18 @@ - - + - - + + diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/Makefile.am kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/Makefile.am --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/Makefile.am 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/Makefile.am 2015-04-01 08:50:10.000000000 +0000 @@ -16,7 +16,6 @@ libdvbviewer_addon_la_SOURCES = src/client.cpp \ src/DvbData.cpp \ - src/TimeshiftBuffer.cpp \ - src/RecordingReader.cpp + src/TimeshiftBuffer.cpp libdvbviewer_addon_la_LDFLAGS = @TARGET_LDFLAGS@ diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/project/VS2010Express/pvr.dvbviewer.vcxproj kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/project/VS2010Express/pvr.dvbviewer.vcxproj --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/project/VS2010Express/pvr.dvbviewer.vcxproj 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/project/VS2010Express/pvr.dvbviewer.vcxproj 2015-04-01 08:50:10.000000000 +0000 @@ -96,13 +96,11 @@ - - @@ -112,13 +110,7 @@ {bdc7d21d-9fd9-41aa-bec8-8b70e1448c50} - - - - - - - + \ No newline at end of file diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/project/VS2010Express/pvr.dvbviewer.vcxproj.filters kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/project/VS2010Express/pvr.dvbviewer.vcxproj.filters --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/project/VS2010Express/pvr.dvbviewer.vcxproj.filters 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/project/VS2010Express/pvr.dvbviewer.vcxproj.filters 2015-04-01 08:50:10.000000000 +0000 @@ -24,9 +24,6 @@ Source Files - - Source Files - @@ -38,14 +35,5 @@ Header Files - - Header Files - - - - - - - - \ No newline at end of file + diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/src/client.cpp kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/src/client.cpp --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/src/client.cpp 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/src/client.cpp 2015-04-01 08:50:10.000000000 +0000 @@ -22,14 +22,14 @@ #include "client.h" #include "DvbData.h" -#include "TimeshiftBuffer.h" -#include "RecordingReader.h" #include "xbmc_pvr_dll.h" #include "platform/util/util.h" #include using namespace ADDON; +ADDON_STATUS m_curStatus = ADDON_STATUS_UNKNOWN; + /* User adjustable settings are saved here. * Default values are defined inside client.h * and exported to the other source files. @@ -41,19 +41,15 @@ bool g_useFavourites = false; bool g_useFavouritesFile = false; CStdString g_favouritesFile = ""; -int g_groupRecordings = DvbRecording::GROUPING_DISABLED; +int g_groupRecordings = DvbRecording::GroupDisabled; bool g_useTimeshift = false; CStdString g_timeshiftBufferPath = DEFAULT_TSBUFFERPATH; bool g_useRTSP = false; -int g_prependOutline = PrependOutline::IN_EPG; bool g_lowPerformance = false; -ADDON_STATUS m_curStatus = ADDON_STATUS_UNKNOWN; CHelper_libXBMC_addon *XBMC = NULL; CHelper_libXBMC_pvr *PVR = NULL; Dvb *DvbData = NULL; -TimeshiftBuffer *tsBuffer = NULL; -RecordingReader *recReader = NULL; extern "C" { @@ -83,7 +79,7 @@ g_favouritesFile = buffer; if (!XBMC->GetSetting("grouprecordings", &g_groupRecordings)) - g_groupRecordings = DvbRecording::GROUPING_DISABLED; + g_groupRecordings = DvbRecording::GroupDisabled; if (!XBMC->GetSetting("usetimeshift", &g_useTimeshift)) g_useTimeshift = false; @@ -94,9 +90,6 @@ if (!XBMC->GetSetting("usertsp", &g_useRTSP) || g_useTimeshift) g_useRTSP = false; - if (!XBMC->GetSetting("prependoutline", &g_prependOutline)) - g_prependOutline = PrependOutline::IN_EPG; - if (!XBMC->GetSetting("lowperformance", &g_lowPerformance)) g_lowPerformance = false; @@ -112,14 +105,12 @@ XBMC->Log(LOG_DEBUG, "Use favourites: %s", (g_useFavourites) ? "yes" : "no"); if (g_useFavouritesFile) XBMC->Log(LOG_DEBUG, "Favourites file: %s", g_favouritesFile.c_str()); - if (g_groupRecordings != DvbRecording::GROUPING_DISABLED) + if (g_groupRecordings != DvbRecording::GroupDisabled) XBMC->Log(LOG_DEBUG, "Group recordings: %d", g_groupRecordings); XBMC->Log(LOG_DEBUG, "Timeshift: %s", (g_useTimeshift) ? "enabled" : "disabled"); if (g_useTimeshift) XBMC->Log(LOG_DEBUG, "Timeshift buffer path: %s", g_timeshiftBufferPath.c_str()); XBMC->Log(LOG_DEBUG, "Use RTSP: %s", (g_useRTSP) ? "yes" : "no"); - if (g_prependOutline != PrependOutline::NEVER) - XBMC->Log(LOG_DEBUG, "Prepend outline: %d", g_prependOutline); XBMC->Log(LOG_DEBUG, "Low performance mode: %s", (g_lowPerformance) ? "yes" : "no"); } @@ -143,7 +134,7 @@ return ADDON_STATUS_PERMANENT_FAILURE; } - XBMC->Log(LOG_DEBUG, "%s: Creating DVBViewer PVR-Client", __FUNCTION__); + XBMC->Log(LOG_DEBUG, "%s Creating DVBViewer PVR-Client", __FUNCTION__); m_curStatus = ADDON_STATUS_UNKNOWN; ADDON_ReadSettings(); @@ -241,7 +232,7 @@ } else if (sname == "grouprecordings") { - if (g_groupRecordings != *(const DvbRecording::Grouping *)settingValue) + if (g_groupRecordings != *(const DvbRecording::Group *)settingValue) return ADDON_STATUS_NEED_RESTART; } else if (sname == "timeshiftpath") @@ -249,9 +240,8 @@ CStdString newValue = (const char *)settingValue; if (g_timeshiftBufferPath != newValue) { - XBMC->Log(LOG_DEBUG, "%s: Changed setting '%s' from '%s' to '%s'", - __FUNCTION__, settingName, g_timeshiftBufferPath.c_str(), - newValue.c_str()); + XBMC->Log(LOG_DEBUG, "%s Changed Setting '%s' from '%s' to '%s'", __FUNCTION__, + settingName, g_timeshiftBufferPath.c_str(), newValue.c_str()); g_timeshiftBufferPath = newValue; } } @@ -260,17 +250,6 @@ if (g_useRTSP != *(bool *)settingValue) return ADDON_STATUS_NEED_RESTART; } - else if (sname == "prependoutline") - { - PrependOutline::options newValue = *(const PrependOutline::options *)settingValue; - if (g_prependOutline != newValue) - { - g_prependOutline = newValue; - // EPG view seems cached, so TriggerEpgUpdate isn't reliable - // also if PVR is currently disabled we don't get notified at all - XBMC->QueueNotification(QUEUE_WARNING, XBMC->GetLocalizedString(30507)); - } - } else if (sname == "lowperformance") { if (g_lowPerformance != *(bool *)settingValue) @@ -287,11 +266,9 @@ { } -void ADDON_Announce(const char *_UNUSED(flag), const char *sender, - const char *message, const void *_UNUSED(data)) +void ADDON_Announce(const char *_UNUSED(flag), const char *_UNUSED(sender), + const char *_UNUSED(message), const void *_UNUSED(data)) { - if (recReader != NULL && strcmp(sender, "xbmc") == 0) - recReader->Announce(message); } /*********************************************************** @@ -328,7 +305,6 @@ pCapabilities->bSupportsTV = true; pCapabilities->bSupportsRadio = true; pCapabilities->bSupportsRecordings = true; - pCapabilities->bSupportsRecordingsUndelete = false; pCapabilities->bSupportsTimers = true; pCapabilities->bSupportsChannelGroups = true; pCapabilities->bSupportsChannelScan = false; @@ -363,42 +339,20 @@ return conn.c_str(); } -const char *GetBackendHostname(void) -{ - return g_hostname.c_str(); -} - -PVR_ERROR SignalStatus(PVR_SIGNAL_STATUS &signalStatus) +PVR_ERROR GetDriveSpace(long long *iTotal, long long *iUsed) { - // the RS api doesn't provide information about signal quality (yet) - strncpy(signalStatus.strAdapterName, "DVBViewer Recording Service", - sizeof(signalStatus.strAdapterName)); - strncpy(signalStatus.strAdapterStatus, "OK", - sizeof(signalStatus.strAdapterStatus)); - return PVR_ERROR_NO_ERROR; -} + if (!DvbData || !DvbData->IsConnected()) + return PVR_ERROR_SERVER_ERROR; -PVR_ERROR GetDriveSpace(long long *total, long long *used) -{ - return (DvbData && DvbData->IsConnected() - && DvbData->GetDriveSpace(total, used)) - ? PVR_ERROR_NO_ERROR : PVR_ERROR_SERVER_ERROR; + return DvbData->GetDriveSpace(iTotal, iUsed); } -/* channel functions */ -PVR_ERROR GetChannels(ADDON_HANDLE handle, bool radio) +PVR_ERROR GetEPGForChannel(ADDON_HANDLE handle, const PVR_CHANNEL &channel, time_t iStart, time_t iEnd) { - return (DvbData && DvbData->IsConnected() - && DvbData->GetChannels(handle, radio)) - ? PVR_ERROR_NO_ERROR : PVR_ERROR_SERVER_ERROR; -} + if (!DvbData || !DvbData->IsConnected()) + return PVR_ERROR_SERVER_ERROR; -PVR_ERROR GetEPGForChannel(ADDON_HANDLE handle, const PVR_CHANNEL &channel, - time_t start, time_t end) -{ - return (DvbData && DvbData->IsConnected() - && DvbData->GetEPGForChannel(handle, channel, start, end)) - ? PVR_ERROR_NO_ERROR : PVR_ERROR_SERVER_ERROR; + return DvbData->GetEPGForChannel(handle, channel, iStart, iEnd); } int GetChannelsAmount(void) @@ -409,46 +363,43 @@ return DvbData->GetChannelsAmount(); } -int GetCurrentClientChannel(void) +PVR_ERROR GetChannels(ADDON_HANDLE handle, bool bRadio) { if (!DvbData || !DvbData->IsConnected()) return PVR_ERROR_SERVER_ERROR; - return DvbData->GetCurrentClientChannel(); + return DvbData->GetChannels(handle, bRadio); } -bool SwitchChannel(const PVR_CHANNEL &channel) +int GetRecordingsAmount(void) { if (!DvbData || !DvbData->IsConnected()) - return false; + return PVR_ERROR_SERVER_ERROR; - return DvbData->SwitchChannel(channel); + return DvbData->GetRecordingsAmount(); } -/* channel group functions */ -int GetChannelGroupsAmount(void) +PVR_ERROR GetRecordings(ADDON_HANDLE handle) { if (!DvbData || !DvbData->IsConnected()) - return 0; + return PVR_ERROR_SERVER_ERROR; - return DvbData->GetChannelGroupsAmount(); + return DvbData->GetRecordings(handle); } -PVR_ERROR GetChannelGroups(ADDON_HANDLE handle, bool radio) +PVR_ERROR DeleteRecording(const PVR_RECORDING &recording) { - return (DvbData && DvbData->IsConnected() - && DvbData->GetChannelGroups(handle, radio)) - ? PVR_ERROR_NO_ERROR : PVR_ERROR_SERVER_ERROR; + if (!DvbData || !DvbData->IsConnected()) + return PVR_ERROR_SERVER_ERROR; + + return DvbData->DeleteRecording(recording); } -PVR_ERROR GetChannelGroupMembers(ADDON_HANDLE handle, const PVR_CHANNEL_GROUP &group) +PVR_ERROR RenameRecording(const PVR_RECORDING &_UNUSED(recording)) { - return (DvbData && DvbData->IsConnected() - && DvbData->GetChannelGroupMembers(handle, group)) - ? PVR_ERROR_NO_ERROR : PVR_ERROR_SERVER_ERROR; + return PVR_ERROR_NOT_IMPLEMENTED; } -/* timer functions */ int GetTimersAmount(void) { if (!DvbData || !DvbData->IsConnected()) @@ -459,55 +410,87 @@ PVR_ERROR GetTimers(ADDON_HANDLE handle) { - return (DvbData && DvbData->IsConnected() && DvbData->GetTimers(handle)) - ? PVR_ERROR_NO_ERROR : PVR_ERROR_SERVER_ERROR; + if (!DvbData || !DvbData->IsConnected()) + return PVR_ERROR_SERVER_ERROR; + + return DvbData->GetTimers(handle); } PVR_ERROR AddTimer(const PVR_TIMER &timer) { - return (DvbData && DvbData->IsConnected() && DvbData->AddTimer(timer)) - ? PVR_ERROR_NO_ERROR : PVR_ERROR_SERVER_ERROR; + if (!DvbData || !DvbData->IsConnected()) + return PVR_ERROR_SERVER_ERROR; + + return DvbData->AddTimer(timer); +} + +PVR_ERROR DeleteTimer(const PVR_TIMER &timer, bool _UNUSED(bForceDelete)) +{ + if (!DvbData || !DvbData->IsConnected()) + return PVR_ERROR_SERVER_ERROR; + + return DvbData->DeleteTimer(timer); } PVR_ERROR UpdateTimer(const PVR_TIMER &timer) { - return (DvbData && DvbData->IsConnected() && DvbData->AddTimer(timer, true)) - ? PVR_ERROR_NO_ERROR : PVR_ERROR_SERVER_ERROR; + if (!DvbData || !DvbData->IsConnected()) + return PVR_ERROR_SERVER_ERROR; + + return DvbData->UpdateTimer(timer); } -PVR_ERROR DeleteTimer(const PVR_TIMER &timer, bool _UNUSED(bForceDelete)) +int GetCurrentClientChannel(void) { - return (DvbData && DvbData->IsConnected() && DvbData->DeleteTimer(timer)) - ? PVR_ERROR_NO_ERROR : PVR_ERROR_SERVER_ERROR; + if (!DvbData || !DvbData->IsConnected()) + return PVR_ERROR_SERVER_ERROR; + + return DvbData->GetCurrentClientChannel(); } -/* live stream functions */ -bool OpenLiveStream(const PVR_CHANNEL &channel) +bool SwitchChannel(const PVR_CHANNEL &channel) { if (!DvbData || !DvbData->IsConnected()) return false; - if (channel.iUniqueId == DvbData->GetCurrentClientChannel()) - return true; + return DvbData->SwitchChannel(channel); +} - if (!DvbData->OpenLiveStream(channel)) - return false; - if (!g_useTimeshift) - return true; +int GetChannelGroupsAmount(void) +{ + if (!DvbData || !DvbData->IsConnected()) + return PVR_ERROR_SERVER_ERROR; + + return DvbData->GetChannelGroupsAmount(); +} + +PVR_ERROR GetChannelGroups(ADDON_HANDLE handle, bool bRadio) +{ + if (!DvbData || !DvbData->IsConnected()) + return PVR_ERROR_SERVER_ERROR; - CStdString streamURL = DvbData->GetLiveStreamURL(channel); - XBMC->Log(LOG_INFO, "Timeshift starts; url=%s", streamURL.c_str()); - if (tsBuffer) - SAFE_DELETE(tsBuffer); - tsBuffer = new TimeshiftBuffer(streamURL, g_timeshiftBufferPath); - return tsBuffer->IsValid(); + return DvbData->GetChannelGroups(handle, bRadio); +} + +PVR_ERROR GetChannelGroupMembers(ADDON_HANDLE handle, const PVR_CHANNEL_GROUP &group) +{ + if (!DvbData || !DvbData->IsConnected()) + return PVR_ERROR_SERVER_ERROR; + + return DvbData->GetChannelGroupMembers(handle, group); } void CloseLiveStream(void) { DvbData->CloseLiveStream(); - if (tsBuffer) - SAFE_DELETE(tsBuffer); +} + +bool OpenLiveStream(const PVR_CHANNEL &channel) +{ + if (!DvbData || !DvbData->IsConnected()) + return false; + + return DvbData->OpenLiveStream(channel); } const char *GetLiveStreamURL(const PVR_CHANNEL &channel) @@ -535,52 +518,52 @@ return g_useTimeshift; } -int ReadLiveStream(unsigned char *buffer, unsigned int size) +int ReadLiveStream(unsigned char *pBuffer, unsigned int iBufferSize) { - if (!tsBuffer) + if (!DvbData || !DvbData->IsConnected() || !DvbData->GetTimeshiftBuffer()) return 0; - return tsBuffer->ReadData(buffer, size); + return DvbData->GetTimeshiftBuffer()->ReadData(pBuffer, iBufferSize); } -long long SeekLiveStream(long long position, int whence) +long long SeekLiveStream(long long iPosition, int iWhence /* = SEEK_SET */) { - if (!tsBuffer) + if (!DvbData || !DvbData->IsConnected() || !DvbData->GetTimeshiftBuffer()) return -1; - return tsBuffer->Seek(position, whence); + return DvbData->GetTimeshiftBuffer()->Seek(iPosition, iWhence); } long long PositionLiveStream(void) { - if (!tsBuffer) + if (!DvbData || !DvbData->IsConnected() || !DvbData->GetTimeshiftBuffer()) return -1; - return tsBuffer->Position(); + return DvbData->GetTimeshiftBuffer()->Position(); } long long LengthLiveStream(void) { - if (!tsBuffer) - return -1; + if (!DvbData || !DvbData->IsConnected() || !DvbData->GetTimeshiftBuffer()) + return 0; - return tsBuffer->Length(); + return DvbData->GetTimeshiftBuffer()->Length(); } time_t GetBufferTimeStart() { - if (!tsBuffer) + if (!DvbData || !DvbData->IsConnected() || !DvbData->GetTimeshiftBuffer()) return 0; - return tsBuffer->TimeStart(); + return DvbData->GetTimeshiftBuffer()->TimeStart(); } time_t GetBufferTimeEnd() { - if (!tsBuffer) + if (!DvbData || !DvbData->IsConnected() || !DvbData->GetTimeshiftBuffer()) return 0; - return tsBuffer->TimeEnd(); + return DvbData->GetTimeshiftBuffer()->TimeEnd(); } time_t GetPlayingTime() @@ -589,95 +572,39 @@ return GetBufferTimeEnd(); } -/* recording stream functions */ -int GetRecordingsAmount(bool _UNUSED(deleted)) -{ - if (!DvbData || !DvbData->IsConnected()) - return PVR_ERROR_SERVER_ERROR; - - return DvbData->GetRecordingsAmount(); -} - -PVR_ERROR GetRecordings(ADDON_HANDLE handle, bool _UNUSED(deleted)) -{ - return (DvbData && DvbData->IsConnected() - && DvbData->GetRecordings(handle)) - ? PVR_ERROR_NO_ERROR : PVR_ERROR_SERVER_ERROR; -} - -PVR_ERROR DeleteRecording(const PVR_RECORDING &recording) -{ - return (DvbData && DvbData->IsConnected() - && DvbData->DeleteRecording(recording)) - ? PVR_ERROR_NO_ERROR : PVR_ERROR_SERVER_ERROR; -} - -bool OpenRecordedStream(const PVR_RECORDING &recording) -{ - if (recReader) - SAFE_DELETE(recReader); - recReader = DvbData->OpenRecordedStream(recording); - return recReader->IsValid(); -} - -void CloseRecordedStream(void) -{ - if (recReader) - SAFE_DELETE(recReader); -} - -int ReadRecordedStream(unsigned char *buffer, unsigned int size) -{ - if (!recReader) - return 0; - - return recReader->ReadData(buffer, size); -} - -long long SeekRecordedStream(long long position, int whence) -{ - if (!recReader) - return 0; - - return recReader->Seek(position, whence); -} - -long long PositionRecordedStream(void) -{ - if (!recReader) - return -1; - - return recReader->Position(); -} - -long long LengthRecordedStream(void) +PVR_ERROR SignalStatus(PVR_SIGNAL_STATUS &signalStatus) { - if (!recReader) - return -1; - - return recReader->Length(); + // the RS api doesn't provide information about signal quality (yet) + strncpy(signalStatus.strAdapterName, "DVBViewer Recording Service", + sizeof(signalStatus.strAdapterName)); + strncpy(signalStatus.strAdapterStatus, "OK", + sizeof(signalStatus.strAdapterStatus)); + return PVR_ERROR_NO_ERROR; } /** UNUSED API FUNCTIONS */ -PVR_ERROR GetStreamProperties(PVR_STREAM_PROPERTIES *_UNUSED(pProperties)) { return PVR_ERROR_NOT_IMPLEMENTED; } +PVR_ERROR GetStreamProperties(PVR_STREAM_PROPERTIES* _UNUSED(pProperties)) { return PVR_ERROR_NOT_IMPLEMENTED; } +void DemuxAbort(void) { return; } +DemuxPacket* DemuxRead(void) { return NULL; } +PVR_ERROR DialogChannelScan(void) { return PVR_ERROR_NOT_IMPLEMENTED; } PVR_ERROR CallMenuHook(const PVR_MENUHOOK &_UNUSED(menuhook), const PVR_MENUHOOK_DATA &_UNUSED(item)) { return PVR_ERROR_NOT_IMPLEMENTED; } PVR_ERROR DeleteChannel(const PVR_CHANNEL &_UNUSED(channel)) { return PVR_ERROR_NOT_IMPLEMENTED; } PVR_ERROR RenameChannel(const PVR_CHANNEL &_UNUSED(channel)) { return PVR_ERROR_NOT_IMPLEMENTED; } PVR_ERROR MoveChannel(const PVR_CHANNEL &_UNUSED(channel)) { return PVR_ERROR_NOT_IMPLEMENTED; } -PVR_ERROR OpenDialogChannelScan(void) { return PVR_ERROR_NOT_IMPLEMENTED; } -PVR_ERROR OpenDialogChannelSettings(const PVR_CHANNEL &_UNUSED(channel)) { return PVR_ERROR_NOT_IMPLEMENTED; } -PVR_ERROR OpenDialogChannelAdd(const PVR_CHANNEL &_UNUSED(channel)) { return PVR_ERROR_NOT_IMPLEMENTED; } -DemuxPacket *DemuxRead(void) { return NULL; } -void DemuxAbort(void) {} +PVR_ERROR DialogChannelSettings(const PVR_CHANNEL &_UNUSED(channel)) { return PVR_ERROR_NOT_IMPLEMENTED; } +PVR_ERROR DialogAddChannel(const PVR_CHANNEL &_UNUSED(channel)) { return PVR_ERROR_NOT_IMPLEMENTED; } +bool OpenRecordedStream(const PVR_RECORDING &_UNUSED(recording)) { return false; } +void CloseRecordedStream(void) {} +int ReadRecordedStream(unsigned char *_UNUSED(pBuffer), unsigned int _UNUSED(iBufferSize)) { return 0; } +long long SeekRecordedStream(long long _UNUSED(iPosition), int _UNUSED(iWhence) /* = SEEK_SET */) { return 0; } void DemuxReset(void) {} void DemuxFlush(void) {} +long long PositionRecordedStream(void) { return -1; } +long long LengthRecordedStream(void) { return -1; } PVR_ERROR SetRecordingPlayCount(const PVR_RECORDING &_UNUSED(recording), int _UNUSED(count)) { return PVR_ERROR_NOT_IMPLEMENTED; } PVR_ERROR SetRecordingLastPlayedPosition(const PVR_RECORDING &_UNUSED(recording), int _UNUSED(lastplayedposition)) { return PVR_ERROR_NOT_IMPLEMENTED; } int GetRecordingLastPlayedPosition(const PVR_RECORDING &_UNUSED(recording)) { return -1; } -PVR_ERROR RenameRecording(const PVR_RECORDING &_UNUSED(recording)) { return PVR_ERROR_NOT_IMPLEMENTED; } PVR_ERROR GetRecordingEdl(const PVR_RECORDING&, PVR_EDL_ENTRY[], int*) { return PVR_ERROR_NOT_IMPLEMENTED; }; -PVR_ERROR UndeleteRecording(const PVR_RECORDING& _UNUSED(recording)) { return PVR_ERROR_NOT_IMPLEMENTED; } -PVR_ERROR DeleteAllRecordingsFromTrash() { return PVR_ERROR_NOT_IMPLEMENTED; } unsigned int GetChannelSwitchDelay(void) { return 0; } void PauseStream(bool _UNUSED(bPaused)) {} bool SeekTime(int, bool, double*) { return false; } diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/src/client.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/src/client.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/src/client.h 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/src/client.h 2015-04-01 08:50:10.000000000 +0000 @@ -74,21 +74,9 @@ extern bool g_useTimeshift; extern CStdString g_timeshiftBufferPath; extern bool g_useRTSP; -extern int g_prependOutline; extern bool g_lowPerformance; extern ADDON::CHelper_libXBMC_addon *XBMC; extern CHelper_libXBMC_pvr *PVR; -//TODO: convert to enum class as soon as c++11 is available -class PrependOutline -{ -public: - enum options { NEVER = 0, IN_EPG, IN_RECORDINGS, ALWAYS }; - static bool test(options flag) - { - return (g_prependOutline == flag || g_prependOutline == ALWAYS); - } -}; - #endif diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/src/DvbData.cpp kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/src/DvbData.cpp --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/src/DvbData.cpp 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/src/DvbData.cpp 2015-04-01 08:50:10.000000000 +0000 @@ -12,9 +12,34 @@ using namespace ADDON; using namespace PLATFORM; +template +void tokenize(const CStdString& str, ContainerT& tokens, + const CStdString& delimiters = " ", const bool trimEmpty = false) +{ + CStdString::size_type pos, lastPos = 0; + while (true) + { + pos = str.find_first_of(delimiters, lastPos); + if (pos == CStdString::npos) + { + pos = str.length(); + + if (pos != lastPos || !trimEmpty) + tokens.push_back(typename ContainerT::value_type(str.data() + lastPos, pos - lastPos)); + break; + } + else + { + if (pos != lastPos || !trimEmpty) + tokens.push_back(typename ContainerT::value_type(str.data() + lastPos, pos - lastPos)); + } + lastPos = pos + 1; + } +}; + + Dvb::Dvb() - : m_connected(false), m_backendVersion(0), m_currentChannel(0), - m_nextTimerId(0) + : m_connected(false), m_backendVersion(0) { // simply add user@pass in front of the URL if username/password is set CStdString auth(""); @@ -22,13 +47,19 @@ auth.Format("%s:%s@", g_username.c_str(), g_password.c_str()); m_url.Format("http://%s%s:%u/", auth.c_str(), g_hostname.c_str(), g_webPort); + m_currentChannel = 0; + m_newTimerIndex = 1; + m_updateTimers = false; m_updateEPG = false; + m_tsBuffer = NULL; } Dvb::~Dvb() { StopThread(); + if (m_tsBuffer) + SAFE_DELETE(m_tsBuffer); for (DvbChannels_t::iterator channel = m_channels.begin(); channel != m_channels.end(); ++channel) @@ -39,7 +70,8 @@ { CLockObject lock(m_mutex); - if (!(m_connected = CheckBackendVersion())) + m_connected = CheckBackendVersion(); + if (!m_connected) return false; if (!UpdateBackendStatus(true)) @@ -80,18 +112,18 @@ return version; } -bool Dvb::GetDriveSpace(long long *total, long long *used) +PVR_ERROR Dvb::GetDriveSpace(long long *total, long long *used) { if (!UpdateBackendStatus()) - return false; + return PVR_ERROR_SERVER_ERROR; *total = m_diskspace.total; *used = m_diskspace.used; - return true; + return PVR_ERROR_NO_ERROR; } -bool Dvb::SwitchChannel(const PVR_CHANNEL& channelinfo) +bool Dvb::SwitchChannel(const PVR_CHANNEL& channel) { - m_currentChannel = channelinfo.iUniqueId; + m_currentChannel = channel.iUniqueId; m_updateEPG = true; return true; } @@ -101,7 +133,7 @@ return m_currentChannel; } -bool Dvb::GetChannels(ADDON_HANDLE handle, bool radio) +PVR_ERROR Dvb::GetChannels(ADDON_HANDLE handle, bool bRadio) { for (DvbChannels_t::iterator it = m_channels.begin(); it != m_channels.end(); ++it) @@ -109,7 +141,7 @@ DvbChannel *channel = *it; if (channel->hidden) continue; - if (channel->radio != radio) + if (channel->radio != bRadio) continue; PVR_CHANNEL xbmcChannel; @@ -123,7 +155,7 @@ PVR_STRCPY(xbmcChannel.strIconPath, channel->logoURL.c_str()); if (!channel->radio && !g_useRTSP) - PVR_STRCPY(xbmcChannel.strInputFormat, "video/mp2t"); + PVR_STRCPY(xbmcChannel.strInputFormat, "video/x-mpegts"); else PVR_STRCPY(xbmcChannel.strInputFormat, ""); @@ -137,16 +169,19 @@ PVR->TransferChannelEntry(handle, &xbmcChannel); } - return true; + + return PVR_ERROR_NO_ERROR; } -bool Dvb::GetEPGForChannel(ADDON_HANDLE handle, const PVR_CHANNEL& channelinfo, - time_t start, time_t end) +//TODO: rewrite +//TODO: missing epg v2 - there's no documention +PVR_ERROR Dvb::GetEPGForChannel(ADDON_HANDLE handle, + const PVR_CHANNEL& channel, time_t iStart, time_t iEnd) { - DvbChannel *channel = m_channels[channelinfo.iUniqueId - 1]; + DvbChannel *myChannel = m_channels[channel.iUniqueId - 1]; - CStdString url = BuildURL("api/epg.html?lvl=2&channel=%" PRIu64 "&start=%f&end=%f", - channel->epgId, start/86400.0 + DELPHI_DATE, end/86400.0 + DELPHI_DATE); + CStdString url = BuildURL("api/epg.html?lvl=2&channel=%"PRIu64"&start=%f&end=%f", + myChannel->epgId, iStart/86400.0 + DELPHI_DATE, iEnd/86400.0 + DELPHI_DATE); CStdString req = GetHttpXML(url); TiXmlDocument doc; @@ -155,74 +190,66 @@ { XBMC->Log(LOG_ERROR, "Unable to parse EPG. Error: %s", doc.ErrorDesc()); - return false; + return PVR_ERROR_SERVER_ERROR; } - unsigned int numEPG = 0; + unsigned iNumEPG = 0; for (TiXmlElement *xEntry = doc.RootElement()->FirstChildElement("programme"); xEntry; xEntry = xEntry->NextSiblingElement("programme")) { DvbEPGEntry entry; - entry.channel = channel; - entry.start = ParseDateTime(xEntry->Attribute("start")); - entry.end = ParseDateTime(xEntry->Attribute("stop")); + entry.iChannelUid = channel.iUniqueId; + entry.startTime = ParseDateTime(xEntry->Attribute("start")); + entry.endTime = ParseDateTime(xEntry->Attribute("stop")); - if (end > 1 && end < entry.end) + if (iEnd > 1 && iEnd < entry.endTime) continue; - if (!XMLUtils::GetUInt(xEntry, "eventid", entry.id)) + if (!XMLUtils::GetInt(xEntry, "eventid", entry.iEventId)) continue; // since RS 1.26.0 the correct language is already merged into the elements TiXmlNode *xTitles = xEntry->FirstChild("titles"); - if (!xTitles || !XMLUtils::GetString(xTitles, "title", entry.title)) + if (!xTitles || !XMLUtils::GetString(xTitles, "title", entry.strTitle)) continue; TiXmlNode *xDescriptions = xEntry->FirstChild("descriptions"); if (xDescriptions) - XMLUtils::GetString(xDescriptions, "description", entry.plot); + XMLUtils::GetString(xDescriptions, "description", entry.strPlot); TiXmlNode *xEvents = xEntry->FirstChild("events"); if (xEvents) { - XMLUtils::GetString(xEvents, "event", entry.plotOutline); - if (entry.plot.empty()) - { - entry.plot = entry.plotOutline; - entry.plotOutline.clear(); - } - else if (PrependOutline::test(PrependOutline::IN_EPG)) - { - entry.plot.insert(0, entry.plotOutline + "\n"); - entry.plotOutline.clear(); - } + XMLUtils::GetString(xEvents, "event", entry.strPlotOutline); + if (!entry.strPlotOutline.empty() && entry.strPlot.empty()) + entry.strPlot = entry.strPlotOutline; } XMLUtils::GetUInt(xEntry, "content", entry.genre); EPG_TAG broadcast; memset(&broadcast, 0, sizeof(EPG_TAG)); - broadcast.iUniqueBroadcastId = entry.id; - broadcast.strTitle = entry.title.c_str(); - broadcast.iChannelNumber = channelinfo.iChannelNumber; - broadcast.startTime = entry.start; - broadcast.endTime = entry.end; - broadcast.strPlotOutline = entry.plotOutline.c_str(); - broadcast.strPlot = entry.plot.c_str(); + broadcast.iUniqueBroadcastId = entry.iEventId; + broadcast.strTitle = entry.strTitle.c_str(); + broadcast.iChannelNumber = channel.iChannelNumber; + broadcast.startTime = entry.startTime; + broadcast.endTime = entry.endTime; + broadcast.strPlotOutline = entry.strPlotOutline.c_str(); + broadcast.strPlot = entry.strPlot.c_str(); broadcast.iGenreType = entry.genre & 0xF0; broadcast.iGenreSubType = entry.genre & 0x0F; PVR->TransferEpgEntry(handle, &broadcast); - ++numEPG; + ++iNumEPG; - XBMC->Log(LOG_DEBUG, "%s: Loaded EPG entry '%u:%s': start=%u, end=%u", - __FUNCTION__, entry.id, entry.title.c_str(), - entry.start, entry.end); + XBMC->Log(LOG_DEBUG, "%s loaded EPG entry '%u:%s': start=%u, end=%u", + __FUNCTION__, broadcast.iUniqueBroadcastId, broadcast.strTitle, + entry.startTime, entry.endTime); } XBMC->Log(LOG_INFO, "Loaded %u EPG entries for channel '%s'", - numEPG, channel->name.c_str()); - return true; + iNumEPG, channel.strChannelName); + return PVR_ERROR_NO_ERROR; } unsigned int Dvb::GetChannelsAmount() @@ -231,14 +258,14 @@ } -bool Dvb::GetChannelGroups(ADDON_HANDLE handle, bool radio) +PVR_ERROR Dvb::GetChannelGroups(ADDON_HANDLE handle, bool bRadio) { for (DvbGroups_t::iterator group = m_groups.begin(); group != m_groups.end(); ++group) { if (group->hidden) continue; - if (group->radio != radio) + if (group->radio != bRadio) continue; PVR_CHANNEL_GROUP tag; @@ -248,11 +275,11 @@ PVR->TransferChannelGroup(handle, &tag); } - return true; + + return PVR_ERROR_NO_ERROR; } -bool Dvb::GetChannelGroupMembers(ADDON_HANDLE handle, - const PVR_CHANNEL_GROUP& pvrGroup) +PVR_ERROR Dvb::GetChannelGroupMembers(ADDON_HANDLE handle, const PVR_CHANNEL_GROUP& pvrGroup) { unsigned int channelNumberInGroup = 1; @@ -275,12 +302,12 @@ PVR->TransferChannelGroupMember(handle, &tag); - XBMC->Log(LOG_DEBUG, "%s: Add channel '%s' (%u) to group '%s'", + XBMC->Log(LOG_DEBUG, "%s add channel '%s' (%u) to group '%s'", __FUNCTION__, channel->name.c_str(), channel->backendNr, group->name.c_str()); } } - return true; + return PVR_ERROR_NO_ERROR; } unsigned int Dvb::GetChannelGroupsAmount() @@ -289,87 +316,52 @@ } -bool Dvb::GetTimers(ADDON_HANDLE handle) +PVR_ERROR Dvb::GetTimers(ADDON_HANDLE handle) { for (DvbTimers_t::iterator timer = m_timers.begin(); timer != m_timers.end(); ++timer) { PVR_TIMER tag; memset(&tag, 0, sizeof(PVR_TIMER)); - PVR_STRCPY(tag.strTitle, timer->title.c_str()); - tag.iClientIndex = timer->id; - tag.iClientChannelUid = timer->channel->id; - tag.startTime = timer->start; - tag.endTime = timer->end; + PVR_STRCPY(tag.strTitle, timer->strTitle.c_str()); + PVR_STRCPY(tag.strSummary, timer->strPlot.c_str()); + tag.iClientChannelUid = timer->iChannelUid; + tag.startTime = timer->startTime; + tag.endTime = timer->endTime; tag.state = timer->state; - tag.iPriority = timer->priority; - tag.bIsRepeating = (timer->weekdays != 0); - tag.firstDay = (timer->weekdays != 0) ? timer->start : 0; - tag.iWeekdays = timer->weekdays; + tag.iPriority = timer->iPriority; + tag.bIsRepeating = timer->bRepeating; + tag.firstDay = timer->iFirstDay; + tag.iWeekdays = timer->iWeekdays; + tag.iEpgUid = timer->iEpgId; + tag.iClientIndex = timer->iClientIndex; PVR->TransferTimerEntry(handle, &tag); } - return true; + return PVR_ERROR_NO_ERROR; } -bool Dvb::AddTimer(const PVR_TIMER& timer, bool update) +PVR_ERROR Dvb::AddTimer(const PVR_TIMER& timer) { - XBMC->Log(LOG_DEBUG, "%s: channel=%u, title='%s'", - __FUNCTION__, timer.iClientChannelUid, timer.strTitle); - - time_t startTime = timer.startTime - timer.iMarginStart * 60; - time_t endTime = timer.endTime + timer.iMarginEnd * 60; - if (!timer.startTime) - startTime = time(NULL); - - unsigned int date = ((startTime + m_timezone) / DAY_SECS) + DELPHI_DATE; - struct tm *timeinfo; - timeinfo = localtime(&startTime); - unsigned int start = timeinfo->tm_hour * 60 + timeinfo->tm_min; - timeinfo = localtime(&endTime); - unsigned int stop = timeinfo->tm_hour * 60 + timeinfo->tm_min; - - char repeat[8] = "-------"; - for (int i = 0; i < 7; ++i) - { - if (timer.iWeekdays & (1 << i)) - repeat[i] = 'T'; - } - - uint64_t channelId = m_channels[timer.iClientChannelUid - 1]->backendIds.front(); - CStdString url; - if (!update) - url = BuildURL("api/timeradd.html?ch=%" PRIu64 "&dor=%u&enable=1&start=%u&stop=%u&prio=%d&days=%s&title=%s&encoding=255", - channelId, date, start, stop, timer.iPriority, repeat, URLEncodeInline(timer.strTitle).c_str()); - else - { - DvbTimer *t = GetTimer(timer); - if (!t) - return false; - - short enabled = (timer.state == PVR_TIMER_STATE_CANCELLED) ? 0 : 1; - url = BuildURL("api/timeredit.html?id=%d&ch=%" PRIu64 "&dor=%u&enable=%d&start=%u&stop=%u&prio=%d&days=%s&title=%s&encoding=255", - t->backendId, channelId, date, enabled, start, stop, timer.iPriority, repeat, URLEncodeInline(timer.strTitle).c_str()); - } + GenerateTimer(timer); + return PVR_ERROR_NO_ERROR; +} - GetHttpXML(url); - //TODO: instead of syncing all timers, we could only sync the new/modified - m_updateTimers = true; - return true; +PVR_ERROR Dvb::UpdateTimer(const PVR_TIMER& timer) +{ + GenerateTimer(timer, false); + return PVR_ERROR_NO_ERROR; } -bool Dvb::DeleteTimer(const PVR_TIMER& timer) +PVR_ERROR Dvb::DeleteTimer(const PVR_TIMER& timer) { - DvbTimer *t = GetTimer(timer); - if (!t) - return false; + GetHttpXML(BuildURL("api/timerdelete.html?id=%d", GetTimerId(timer))); - GetHttpXML(BuildURL("api/timerdelete.html?id=%u", t->backendId)); if (timer.state == PVR_TIMER_STATE_RECORDING) PVR->TriggerRecordingUpdate(); m_updateTimers = true; - return true; + return PVR_ERROR_NO_ERROR; } unsigned int Dvb::GetTimersAmount() @@ -378,7 +370,7 @@ } -bool Dvb::GetRecordings(ADDON_HANDLE handle) +PVR_ERROR Dvb::GetRecordings(ADDON_HANDLE handle) { CStdString url = BuildURL("api/recordings.html?images=1"); CStdString req = GetHttpXML(url); @@ -390,13 +382,12 @@ { XBMC->Log(LOG_ERROR, "Unable to parse recordings. Error: %s", doc.ErrorDesc()); - return false; + return PVR_ERROR_SERVER_ERROR; } - CStdString imageURL; + CStdString streamURL, imageURL; TiXmlElement *root = doc.RootElement(); - // refresh in case this has changed - XMLUtils::GetString(root, "serverURL", m_recordingURL); + XMLUtils::GetString(root, "serverURL", streamURL); XMLUtils::GetString(root, "imageURL", imageURL); // there's no need to merge new recordings in older ones as XBMC does this @@ -420,44 +411,42 @@ XMLUtils::GetString(xRecording, "info", recording.plotOutline); XMLUtils::GetString(xRecording, "desc", recording.plot); if (recording.plot.empty()) - { recording.plot = recording.plotOutline; - recording.plotOutline.clear(); - } - else if (PrependOutline::test(PrependOutline::IN_RECORDINGS)) - { - recording.plot.insert(0, recording.plotOutline + "\n"); - recording.plotOutline.clear(); - } + + recording.streamURL = BuildExtURL(streamURL, "%s.ts", recording.id.c_str()); CStdString thumbnail; if (!g_lowPerformance && XMLUtils::GetString(xRecording, "image", thumbnail)) recording.thumbnailPath = BuildExtURL(imageURL, "%s", thumbnail.c_str()); CStdString startTime = xRecording->Attribute("start"); - recording.start = ParseDateTime(startTime); + recording.startTime = ParseDateTime(startTime); int hours, mins, secs; sscanf(xRecording->Attribute("duration"), "%02d%02d%02d", &hours, &mins, &secs); recording.duration = hours*60*60 + mins*60 + secs; - PVR_RECORDING recinfo; - memset(&recinfo, 0, sizeof(PVR_RECORDING)); - PVR_STRCPY(recinfo.strRecordingId, recording.id.c_str()); - PVR_STRCPY(recinfo.strTitle, recording.title.c_str()); - PVR_STRCPY(recinfo.strPlotOutline, recording.plotOutline.c_str()); - PVR_STRCPY(recinfo.strPlot, recording.plot.c_str()); - PVR_STRCPY(recinfo.strChannelName, recording.channelName.c_str()); - PVR_STRCPY(recinfo.strThumbnailPath, recording.thumbnailPath.c_str()); - recinfo.recordingTime = recording.start; - recinfo.iDuration = recording.duration; - recinfo.iGenreType = recording.genre & 0xF0; - recinfo.iGenreSubType = recording.genre & 0x0F; + // generate a more unique id + recording.id += "_" + startTime; + + PVR_RECORDING tag; + memset(&tag, 0, sizeof(PVR_RECORDING)); + PVR_STRCPY(tag.strRecordingId, recording.id.c_str()); + PVR_STRCPY(tag.strTitle, recording.title.c_str()); + PVR_STRCPY(tag.strStreamURL, recording.streamURL.c_str()); + PVR_STRCPY(tag.strPlotOutline, recording.plotOutline.c_str()); + PVR_STRCPY(tag.strPlot, recording.plot.c_str()); + PVR_STRCPY(tag.strChannelName, recording.channelName.c_str()); + PVR_STRCPY(tag.strThumbnailPath, recording.thumbnailPath.c_str()); + tag.recordingTime = recording.startTime; + tag.iDuration = recording.duration; + tag.iGenreType = recording.genre & 0xF0; + tag.iGenreSubType = recording.genre & 0x0F; CStdString tmp; switch(g_groupRecordings) { - case DvbRecording::GROUP_BY_DIRECTORY: + case DvbRecording::GroupByDirectory: XMLUtils::GetString(xRecording, "file", tmp); tmp.ToLower(); for (std::vector::reverse_iterator recf = m_recfolders.rbegin(); @@ -467,50 +456,56 @@ continue; tmp = tmp.substr(recf->length(), tmp.ReverseFind('\\') - recf->length()); tmp.Replace('\\', '/'); - PVR_STRCPY(recinfo.strDirectory, tmp.c_str() + 1); + PVR_STRCPY(tag.strDirectory, tmp.c_str() + 1); break; } break; - case DvbRecording::GROUP_BY_DATE: + case DvbRecording::GroupByDate: tmp.Format("%s/%s", startTime.substr(0, 4), startTime.substr(4, 2)); - PVR_STRCPY(recinfo.strDirectory, tmp.c_str()); + PVR_STRCPY(tag.strDirectory, tmp.c_str()); break; - case DvbRecording::GROUP_BY_FIRST_LETTER: - recinfo.strDirectory[0] = recording.title[0]; - recinfo.strDirectory[1] = '\0'; + case DvbRecording::GroupByFirstLetter: + tag.strDirectory[0] = recording.title[0]; + tag.strDirectory[1] = '\0'; break; - case DvbRecording::GROUP_BY_TV_CHANNEL: - PVR_STRCPY(recinfo.strDirectory, recording.channelName.c_str()); + case DvbRecording::GroupByTVChannel: + PVR_STRCPY(tag.strDirectory, recording.channelName.c_str()); break; - case DvbRecording::GROUP_BY_SERIES: + case DvbRecording::GroupBySeries: tmp = "Unknown"; XMLUtils::GetString(xRecording, "series", tmp); - PVR_STRCPY(recinfo.strDirectory, tmp.c_str()); + PVR_STRCPY(tag.strDirectory, tmp.c_str()); break; default: break; } - PVR->TransferRecordingEntry(handle, &recinfo); + PVR->TransferRecordingEntry(handle, &tag); ++m_recordingAmount; - XBMC->Log(LOG_DEBUG, "%s: Loaded recording entry '%s': start=%u, length=%u", - __FUNCTION__, recording.title.c_str(), recording.start, + XBMC->Log(LOG_DEBUG, "%s loaded Recording entry '%s': start=%u, length=%u", + __FUNCTION__, recording.title.c_str(), recording.startTime, recording.duration); } - XBMC->Log(LOG_INFO, "Loaded %u recording entries", m_recordingAmount); - return true; + XBMC->Log(LOG_INFO, "Loaded %u Recording Entries", m_recordingAmount); + + return PVR_ERROR_NO_ERROR; } -bool Dvb::DeleteRecording(const PVR_RECORDING& recinfo) +PVR_ERROR Dvb::DeleteRecording(const PVR_RECORDING& recinfo) { + CStdString recid = recinfo.strRecordingId; + CStdString::size_type pos = recid.find('_'); + if (pos != CStdString::npos) + recid.erase(pos); + // RS api doesn't return a result - GetHttpXML(BuildURL("api/recdelete.html?recid=%s&delfile=1", - recinfo.strRecordingId)); + GetHttpXML(BuildURL("api/recdelete.html?recid=%s&delfile=1", recid.c_str())); PVR->TriggerRecordingUpdate(); - return true; + + return PVR_ERROR_NO_ERROR; } unsigned int Dvb::GetRecordingsAmount() @@ -518,41 +513,37 @@ return m_recordingAmount; } -RecordingReader *Dvb::OpenRecordedStream(const PVR_RECORDING &recinfo) -{ - time_t now = time(NULL), end = 0; - CStdString channelName = recinfo.strChannelName; - for (DvbTimers_t::iterator timer = m_timers.begin(); - timer != m_timers.end(); ++timer) - { - if (timer->start <= now && now <= timer->end - && timer->state != PVR_TIMER_STATE_CANCELLED - && timer->channel->name.compare(0, channelName.length(), channelName) == 0) - { - end = timer->end; - break; - } - } - - return new RecordingReader(BuildExtURL(m_recordingURL, "%s.ts", - recinfo.strRecordingId), end); -} - bool Dvb::OpenLiveStream(const PVR_CHANNEL& channelinfo) { - XBMC->Log(LOG_DEBUG, "%s: channel=%u", __FUNCTION__, channelinfo.iUniqueId); + XBMC->Log(LOG_DEBUG, "%s channel=%u", __FUNCTION__, channelinfo.iUniqueId); if (channelinfo.iUniqueId == m_currentChannel) return true; SwitchChannel(channelinfo); - return true; + if (!g_useTimeshift) + return true; + + if (m_tsBuffer) + SAFE_DELETE(m_tsBuffer); + + CStdString streamURL = GetLiveStreamURL(channelinfo); + XBMC->Log(LOG_INFO, "Timeshift starts; url=%s", streamURL.c_str()); + m_tsBuffer = new TimeshiftBuffer(streamURL, g_timeshiftBufferPath); + return m_tsBuffer->IsValid(); } void Dvb::CloseLiveStream(void) { m_currentChannel = 0; + if (m_tsBuffer) + SAFE_DELETE(m_tsBuffer); +} + +TimeshiftBuffer *Dvb::GetTimeshiftBuffer() +{ + return m_tsBuffer; } CStdString& Dvb::GetLiveStreamURL(const PVR_CHANNEL& channelinfo) @@ -564,7 +555,7 @@ void *Dvb::Process() { int updateTimer = 0; - XBMC->Log(LOG_DEBUG, "%s: Running...", __FUNCTION__); + XBMC->Log(LOG_DEBUG, "%s starting", __FUNCTION__); while (!IsStopped()) { @@ -598,6 +589,7 @@ CLockObject lock(m_mutex); m_started.Broadcast(); + return NULL; } @@ -864,6 +856,7 @@ return true; } +//TODO: rewrite DvbTimers_t Dvb::LoadTimers() { DvbTimers_t timers; @@ -888,59 +881,71 @@ { DvbTimer timer; - if (!XMLUtils::GetString(xTimer, "GUID", timer.guid)) + CStdString strTmp; + if (XMLUtils::GetString(xTimer, "Descr", strTmp)) + XBMC->Log(LOG_DEBUG, "%s Processing timer '%s'", __FUNCTION__, strTmp.c_str()); + + timer.strTitle = strTmp; + timer.iChannelUid = GetChannelUid(xTimer->FirstChildElement("Channel")->Attribute("ID")); + if (timer.iChannelUid == 0) continue; - XMLUtils::GetUInt(xTimer, "ID", timer.backendId); - XMLUtils::GetString(xTimer, "Descr", timer.title); + timer.state = PVR_TIMER_STATE_SCHEDULED; - uint64_t backendId = 0; - std::istringstream ss(xTimer->FirstChildElement("Channel")->Attribute("ID")); - ss >> backendId; - if (!backendId) - continue; + CStdString DateTime = xTimer->Attribute("Date"); + DateTime.append(xTimer->Attribute("Start")); + timer.startTime = ParseDateTime(DateTime, false); + timer.endTime = timer.startTime + atoi(xTimer->Attribute("Dur")) * 60; - timer.channel = GetChannelByBackendId(backendId); - if (!timer.channel) - continue; + CStdString Weekdays = xTimer->Attribute("Days"); + timer.iWeekdays = 0; + for (unsigned int j = 0; j < Weekdays.length(); ++j) + { + if (Weekdays.data()[j] != '-') + timer.iWeekdays += (1 << j); + } + + if (timer.iWeekdays != 0) + { + timer.iFirstDay = timer.startTime; + timer.bRepeating = true; + } + else + timer.bRepeating = false; + + timer.iPriority = atoi(xTimer->Attribute("Priority")); + + if (xTimer->Attribute("EPGEventID")) + timer.iEpgId = atoi(xTimer->Attribute("EPGEventID")); - CStdString startDate = xTimer->Attribute("Date"); - startDate += xTimer->Attribute("Start"); - timer.start = ParseDateTime(startDate, false); - timer.end = timer.start + atoi(xTimer->Attribute("Dur")) * 60; - - CStdString weekdays = xTimer->Attribute("Days"); - timer.weekdays = 0; - for (unsigned int j = 0; j < weekdays.length(); ++j) - { - if (weekdays.data()[j] != '-') - timer.weekdays += (1 << j); - } - - timer.priority = atoi(xTimer->Attribute("Priority")); - timer.updateState = DvbTimer::STATE_NEW; - timer.state = PVR_TIMER_STATE_SCHEDULED; if (xTimer->Attribute("Enabled")[0] == '0') timer.state = PVR_TIMER_STATE_CANCELLED; - int tmp; - XMLUtils::GetInt(xTimer, "Recording", tmp); - if (tmp == -1) - timer.state = PVR_TIMER_STATE_RECORDING; + int iTmp; + if (XMLUtils::GetInt(xTimer, "Recording", iTmp)) + { + if (iTmp == -1) + timer.state = PVR_TIMER_STATE_RECORDING; + } + + if (XMLUtils::GetInt(xTimer, "ID", iTmp)) + timer.iTimerId = iTmp; timers.push_back(timer); - XBMC->Log(LOG_DEBUG, "%s: Loaded timer entry '%s': start=%u, end=%u", - __FUNCTION__, timer.title.c_str(), timer.start, timer.end); + + XBMC->Log(LOG_DEBUG, "%s loaded Timer entry '%s': start=%u, end=%u", + __FUNCTION__, timer.strTitle.c_str(), timer.startTime, timer.endTime); } - XBMC->Log(LOG_INFO, "Loaded %u timer entries", timers.size()); + XBMC->Log(LOG_INFO, "Loaded %u Timer entries", timers.size()); return timers; } +//TODO: rewrite void Dvb::TimerUpdates() { for (DvbTimers_t::iterator timer = m_timers.begin(); timer != m_timers.end(); ++timer) - timer->updateState = DvbTimer::STATE_NONE; + timer->iUpdateState = DVB_UPDATE_STATE_NONE; DvbTimers_t newtimers = LoadTimers(); unsigned int updated = 0, unchanged = 0; @@ -950,18 +955,30 @@ for (DvbTimers_t::iterator timer = m_timers.begin(); timer != m_timers.end(); ++timer) { - if (timer->guid != newtimer->guid) + if (!timer->like(*newtimer)) continue; - if (timer->updateFrom(*newtimer)) + if (*timer == *newtimer) { - timer->updateState = newtimer->updateState = DvbTimer::STATE_UPDATED; - ++updated; + timer->iUpdateState = newtimer->iUpdateState = DVB_UPDATE_STATE_FOUND; + ++unchanged; } else { - timer->updateState = newtimer->updateState = DvbTimer::STATE_FOUND; - ++unchanged; + timer->iUpdateState = newtimer->iUpdateState = DVB_UPDATE_STATE_UPDATED; + timer->strTitle = newtimer->strTitle; + timer->strPlot = newtimer->strPlot; + timer->iChannelUid = newtimer->iChannelUid; + timer->startTime = newtimer->startTime; + timer->endTime = newtimer->endTime; + timer->bRepeating = newtimer->bRepeating; + timer->iWeekdays = newtimer->iWeekdays; + timer->iEpgId = newtimer->iEpgId; + timer->iTimerId = newtimer->iTimerId; + timer->iPriority = newtimer->iPriority; + timer->iFirstDay = newtimer->iFirstDay; + timer->state = newtimer->state; + ++updated; } } } @@ -969,10 +986,10 @@ unsigned int removed = 0; for (DvbTimers_t::iterator it = m_timers.begin(); it != m_timers.end();) { - if (it->updateState == DvbTimer::STATE_NONE) + if (it->iUpdateState == DVB_UPDATE_STATE_NONE) { - XBMC->Log(LOG_DEBUG, "%s: Removed timer '%s': id=%u", __FUNCTION__, - it->title.c_str(), it->id); + XBMC->Log(LOG_DEBUG, "%s Removed timer: '%s', ClientIndex: %u", + __FUNCTION__, it->strTitle.c_str(), it->iClientIndex); it = m_timers.erase(it); ++removed; } @@ -983,18 +1000,18 @@ unsigned int added = 0; for (DvbTimers_t::iterator it = newtimers.begin(); it != newtimers.end(); ++it) { - if (it->updateState == DvbTimer::STATE_NEW) + if (it->iUpdateState == DVB_UPDATE_STATE_NEW) { - it->id = m_nextTimerId; - XBMC->Log(LOG_DEBUG, "%s: New timer '%s': id=%u", __FUNCTION__, - it->title.c_str(), it->id); + it->iClientIndex = m_newTimerIndex; + XBMC->Log(LOG_DEBUG, "%s New timer: '%s', ClientIndex: %u", + __FUNCTION__, it->strTitle.c_str(), m_newTimerIndex); m_timers.push_back(*it); - ++m_nextTimerId; + ++m_newTimerIndex; ++added; } } - XBMC->Log(LOG_DEBUG, "%s: Timers update: removed=%u, unchanged=%u, updated=%u, added=%u", + XBMC->Log(LOG_DEBUG, "%s Timers update: removed=%u, untouched=%u, updated=%u, added=%u", __FUNCTION__, removed, unchanged, updated, added); if (removed || updated || added) @@ -1004,14 +1021,60 @@ } } -DvbTimer *Dvb::GetTimer(const PVR_TIMER& timer) +void Dvb::GenerateTimer(const PVR_TIMER& timer, bool newTimer) +{ + // http://en.dvbviewer.tv/wiki/Recording_Service_Web_API#Add_a_timer + + XBMC->Log(LOG_DEBUG, "%s iChannelUid=%u title='%s' epgid=%d", + __FUNCTION__, timer.iClientChannelUid, timer.strTitle, timer.iEpgUid); + + time_t startTime = timer.startTime, endTime = timer.endTime; + if (!startTime) + startTime = time(NULL); + else + { + startTime -= timer.iMarginStart * 60; + endTime += timer.iMarginEnd * 60; + } + + unsigned int date = ((startTime + m_timezone) / DAY_SECS) + DELPHI_DATE; + struct tm *timeinfo; + timeinfo = localtime(&startTime); + unsigned int start = timeinfo->tm_hour * 60 + timeinfo->tm_min; + timeinfo = localtime(&endTime); + unsigned int stop = timeinfo->tm_hour * 60 + timeinfo->tm_min; + + char repeat[8] = "-------"; + for (int i = 0; i < 7; ++i) + { + if (timer.iWeekdays & (1 << i)) + repeat[i] = 'T'; + } + + uint64_t iChannelId = m_channels[timer.iClientChannelUid - 1]->backendIds.front(); + CStdString url; + if (newTimer) + url = BuildURL("api/timeradd.html?ch=%"PRIu64"&dor=%u&enable=1&start=%u&stop=%u&prio=%d&days=%s&title=%s&encoding=255", + iChannelId, date, start, stop, timer.iPriority, repeat, URLEncodeInline(timer.strTitle).c_str()); + else + { + short enabled = (timer.state == PVR_TIMER_STATE_CANCELLED) ? 0 : 1; + url = BuildURL("api/timeredit.html?id=%d&ch=%"PRIu64"&dor=%u&enable=%d&start=%u&stop=%u&prio=%d&days=%s&title=%s&encoding=255", + GetTimerId(timer), iChannelId, date, enabled, start, stop, timer.iPriority, repeat, URLEncodeInline(timer.strTitle).c_str()); + } + + GetHttpXML(url); + m_updateTimers = true; +} + +int Dvb::GetTimerId(const PVR_TIMER& timer) { for (DvbTimers_t::iterator it = m_timers.begin(); it != m_timers.end(); ++it) { - if (it->id == timer.iClientIndex) - return &*it; + if (it->iClientIndex == timer.iClientIndex) + return it->iTimerId; } - return NULL; + return 0; } @@ -1032,6 +1095,8 @@ { XBMC->Log(LOG_ERROR, "Unable to connect to the backend service. Error: %s", doc.ErrorDesc()); + XBMC->QueueNotification(QUEUE_ERROR, XBMC->GetLocalizedString(30500)); + Sleep(10000); return false; } @@ -1106,11 +1171,11 @@ m_diskspace.used += (size - free) / 1024; } - if (updateSettings && g_groupRecordings != DvbRecording::GROUPING_DISABLED) + if (updateSettings && g_groupRecordings != DvbRecording::GroupDisabled) m_recfolders.push_back(CStdString(xFolder->GetText()).ToLower()); } - if (updateSettings && g_groupRecordings != DvbRecording::GROUPING_DISABLED) + if (updateSettings && g_groupRecordings != DvbRecording::GroupDisabled) std::sort(m_recfolders.begin(), m_recfolders.end(), StringGreaterThan); return true; @@ -1136,20 +1201,55 @@ return mktime(&timeinfo); } -DvbChannel *Dvb::GetChannelByBackendId(const uint64_t backendId) +uint64_t Dvb::ParseChannelString(const CStdString& str, CStdString& channelName) +{ + std::vector tokenlist; + tokenize >(str, tokenlist, "|"); + if (tokenlist.size() < 1) + { + XBMC->Log(LOG_ERROR, "Unable to parse channel string: %s", str.c_str()); + return 0; + } + + uint64_t channelId = 0; + std::istringstream ss(tokenlist[0]); + ss >> channelId; + if (ss.fail()) + { + XBMC->Log(LOG_ERROR, "Unable to parse channel id: %s", + tokenlist[0].c_str()); + return 0; + } + + channelName.clear(); + if (tokenlist.size() >= 2) + channelName = ConvertToUtf8(tokenlist[1]); + return channelId; +} + +unsigned int Dvb::GetChannelUid(const CStdString& str) +{ + CStdString channelName; + uint64_t channelId = ParseChannelString(str, channelName); + if (channelId == 0) + return 0; + return GetChannelUid(channelId); +} + +unsigned int Dvb::GetChannelUid(const uint64_t channelId) { for (DvbChannels_t::iterator it = m_channels.begin(); it != m_channels.end(); ++it) { DvbChannel *channel = *it; - for (std::list::iterator it2 = channel->backendIds.begin(); - it2 != channel->backendIds.end(); it2++) + for (std::list::iterator backendId = channel->backendIds.begin(); + backendId != channel->backendIds.end(); backendId++) { - if (backendId == *it2) - return channel; + if (channelId == *backendId) + return channel->id; } } - return NULL; + return 0; } CStdString Dvb::BuildURL(const char* path, ...) diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/src/DvbData.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/src/DvbData.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/src/DvbData.h 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/src/DvbData.h 2015-04-01 08:50:10.000000000 +0000 @@ -4,7 +4,7 @@ #define PVR_DVBVIEWER_DVBDATA_H #include "client.h" -#include "RecordingReader.h" +#include "TimeshiftBuffer.h" #include "platform/util/StdString.h" #include "platform/threads/threads.h" #include @@ -31,6 +31,14 @@ /* forward declaration */ class DvbGroup; +typedef enum DVB_UPDATE_STATE +{ + DVB_UPDATE_STATE_NONE, + DVB_UPDATE_STATE_FOUND, + DVB_UPDATE_STATE_UPDATED, + DVB_UPDATE_STATE_NEW +} DVB_UPDATE_STATE; + class DvbChannel { public: @@ -39,10 +47,7 @@ {} public: - /*!< @brief unique id passed to xbmc database. - * starts at 1 and increases by each channel regardless of hidden state. - * see FIXME for more details - */ + /*!< @brief unique id passed to xbmc database. see FIXME for more details */ unsigned int id; /*!< @brief backend number for generating the stream url */ unsigned int backendNr; @@ -76,83 +81,74 @@ {} public: - unsigned int id; - DvbChannel *channel; - CStdString title; - time_t start; - time_t end; + int iEventId; + CStdString strTitle; + unsigned int iChannelUid; + time_t startTime; + time_t endTime; unsigned int genre; - CStdString plotOutline; - CStdString plot; + CStdString strPlotOutline; + CStdString strPlot; }; class DvbTimer { public: - enum State - { - STATE_NONE, - STATE_NEW, - STATE_FOUND, - STATE_UPDATED - }; - DvbTimer() - : updateState(STATE_NEW) - {} + { + iUpdateState = DVB_UPDATE_STATE_NEW; + } -#define TIMER_UPDATE_MEMBER(member) \ - if (member != source.member) \ - { \ - member = source.member; \ - updated = true; \ - } + bool like(const DvbTimer& right) const + { + bool bChanged = true; + bChanged = bChanged && (startTime == right.startTime); + bChanged = bChanged && (endTime == right.endTime); + bChanged = bChanged && (iChannelUid == right.iChannelUid); + bChanged = bChanged && (bRepeating == right.bRepeating); + bChanged = bChanged && (iWeekdays == right.iWeekdays); + bChanged = bChanged && (iEpgId == right.iEpgId); + return bChanged; + } - bool updateFrom(const DvbTimer &source) + bool operator==(const DvbTimer& right) const { - bool updated = false; - TIMER_UPDATE_MEMBER(channel); - TIMER_UPDATE_MEMBER(title); - TIMER_UPDATE_MEMBER(start); - TIMER_UPDATE_MEMBER(end); - TIMER_UPDATE_MEMBER(priority); - TIMER_UPDATE_MEMBER(weekdays); - TIMER_UPDATE_MEMBER(state); - return updated; + bool bChanged = true; + bChanged = bChanged && like(right); + bChanged = bChanged && (state == right.state); + bChanged = bChanged && (strTitle == right.strTitle); + bChanged = bChanged && (strPlot == right.strPlot); + return bChanged; } public: - /*!< @brief unique id passed to xbmc database - * starts at 1 and increases by each new timer. never decreases. - */ - unsigned int id; - /*!< @brief unique guid provided by backend. unique every time */ - CStdString guid; - /*!< @brief timer id on backend. unique at a time */ - unsigned int backendId; - - DvbChannel *channel; - CStdString title; - uint64_t channelId; - time_t start; - time_t end; - int priority; - unsigned int weekdays; + CStdString strTitle; + CStdString strPlot; + unsigned int iChannelUid; + time_t startTime; + time_t endTime; + bool bRepeating; + int iWeekdays; + int iEpgId; + int iTimerId; + int iPriority; + int iFirstDay; PVR_TIMER_STATE state; - State updateState; + DVB_UPDATE_STATE iUpdateState; + unsigned int iClientIndex; }; class DvbRecording { public: - enum Grouping + enum Group { - GROUPING_DISABLED = 0, - GROUP_BY_DIRECTORY, - GROUP_BY_DATE, - GROUP_BY_FIRST_LETTER, - GROUP_BY_TV_CHANNEL, - GROUP_BY_SERIES + GroupDisabled = 0, + GroupByDirectory, + GroupByDate, + GroupByFirstLetter, + GroupByTVChannel, + GroupBySeries, }; public: @@ -162,10 +158,11 @@ public: CStdString id; - time_t start; + time_t startTime; int duration; unsigned int genre; CStdString title; + CStdString streamURL; CStdString plot; CStdString plotOutline; CStdString channelName; @@ -188,32 +185,31 @@ CStdString GetBackendName(); CStdString GetBackendVersion(); - bool GetDriveSpace(long long *total, long long *used); + PVR_ERROR GetDriveSpace(long long *total, long long *used); - bool SwitchChannel(const PVR_CHANNEL& channelinfo); + bool SwitchChannel(const PVR_CHANNEL& channel); unsigned int GetCurrentClientChannel(void); - bool GetChannels(ADDON_HANDLE handle, bool radio); - bool GetEPGForChannel(ADDON_HANDLE handle, const PVR_CHANNEL& channelinfo, - time_t start, time_t end); + PVR_ERROR GetChannels(ADDON_HANDLE handle, bool bRadio); + PVR_ERROR GetEPGForChannel(ADDON_HANDLE handle, const PVR_CHANNEL& channel, time_t iStart, time_t iEnd); unsigned int GetChannelsAmount(void); - bool GetChannelGroups(ADDON_HANDLE handle, bool radio); - bool GetChannelGroupMembers(ADDON_HANDLE handle, - const PVR_CHANNEL_GROUP& group); + PVR_ERROR GetChannelGroups(ADDON_HANDLE handle, bool bRadio); + PVR_ERROR GetChannelGroupMembers(ADDON_HANDLE handle, const PVR_CHANNEL_GROUP& group); unsigned int GetChannelGroupsAmount(void); - bool GetTimers(ADDON_HANDLE handle); - bool AddTimer(const PVR_TIMER& timer, bool update = false); - bool DeleteTimer(const PVR_TIMER& timer); + PVR_ERROR GetTimers(ADDON_HANDLE handle); + PVR_ERROR AddTimer(const PVR_TIMER& timer); + PVR_ERROR UpdateTimer(const PVR_TIMER& timer); + PVR_ERROR DeleteTimer(const PVR_TIMER& timer); unsigned int GetTimersAmount(void); - bool GetRecordings(ADDON_HANDLE handle); - bool DeleteRecording(const PVR_RECORDING& recinfo); + PVR_ERROR GetRecordings(ADDON_HANDLE handle); + PVR_ERROR DeleteRecording(const PVR_RECORDING& recinfo); unsigned int GetRecordingsAmount(); - RecordingReader *OpenRecordedStream(const PVR_RECORDING &recinfo); bool OpenLiveStream(const PVR_CHANNEL& channelinfo); void CloseLiveStream(); + TimeshiftBuffer *GetTimeshiftBuffer(); CStdString& GetLiveStreamURL(const PVR_CHANNEL& channelinfo); protected: @@ -226,14 +222,17 @@ bool LoadChannels(); DvbTimers_t LoadTimers(); void TimerUpdates(); - DvbTimer *GetTimer(const PVR_TIMER& timer); + void GenerateTimer(const PVR_TIMER& timer, bool newtimer = true); + int GetTimerId(const PVR_TIMER& timer); // helper functions void RemoveNullChars(CStdString& str); bool CheckBackendVersion(); bool UpdateBackendStatus(bool updateSettings = false); time_t ParseDateTime(const CStdString& strDate, bool iso8601 = true); - DvbChannel *GetChannelByBackendId(const uint64_t backendId); + uint64_t ParseChannelString(const CStdString& str, CStdString& channelName); + unsigned int GetChannelUid(const CStdString& str); + unsigned int GetChannelUid(const uint64_t channelId); CStdString BuildURL(const char* path, ...); CStdString BuildExtURL(const CStdString& baseURL, const char* path, ...); CStdString ConvertToUtf8(const CStdString& src); @@ -242,30 +241,29 @@ private: bool m_connected; unsigned int m_backendVersion; - CStdString m_url; - CStdString m_recordingURL; long m_timezone; struct { long long total, used; } m_diskspace; std::vector m_recfolders; - /* channels */ + CStdString m_url; + unsigned int m_currentChannel; + + /* channels + active (not hidden) channels */ DvbChannels_t m_channels; - /* active (not hidden) channels */ unsigned int m_channelAmount; - unsigned int m_currentChannel; - /* channel groups */ + /* channel groups + active (not hidden) groups */ DvbGroups_t m_groups; - /* active (not hidden) groups */ unsigned int m_groupAmount; bool m_updateTimers; bool m_updateEPG; unsigned int m_recordingAmount; + TimeshiftBuffer *m_tsBuffer; DvbTimers_t m_timers; - unsigned int m_nextTimerId; + unsigned int m_newTimerIndex; PLATFORM::CMutex m_mutex; PLATFORM::CCondition m_started; diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/src/RecordingReader.cpp kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/src/RecordingReader.cpp --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/src/RecordingReader.cpp 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/src/RecordingReader.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,100 +0,0 @@ -#include "RecordingReader.h" -#include "client.h" -#include "platform/util/util.h" -#include "platform/threads/mutex.h" - -#define REOPEN_INTERVAL 30 -#define REOPEN_INTERVAL_FAST 10 - -using namespace ADDON; - -RecordingReader::RecordingReader(CStdString streamURL, time_t end) - : m_streamURL(streamURL), m_end(end), m_fastReopen(false), m_playback(false) -{ - m_readHandle = XBMC->OpenFile(m_streamURL, 0); - m_len = XBMC->GetFileLength(m_readHandle); - m_pos = 0; - m_nextReopen = time(NULL) + REOPEN_INTERVAL; - XBMC->Log(LOG_DEBUG, "RecordingReader: Started; url=%s, end=%u", - m_streamURL.c_str(), m_end); -} - -RecordingReader::~RecordingReader(void) -{ - if (m_readHandle) - XBMC->CloseFile(m_readHandle); - XBMC->Log(LOG_DEBUG, "RecordingReader: Stopped"); -} - -bool RecordingReader::IsValid() -{ - return (m_readHandle != NULL); -} - -int RecordingReader::ReadData(unsigned char *buffer, unsigned int size) -{ - /* check for playback of ongoing recording */ - if (m_playback && m_end) - { - time_t now = time(NULL); - if (now > m_nextReopen) - { -FORCE_REOPEN: - /* reopen stream */ - XBMC->Log(LOG_DEBUG, "RecordingReader: Reopening stream..."); - XBMC->CloseFile(m_readHandle); - m_readHandle = XBMC->OpenFile(m_streamURL, 0); - m_len = XBMC->GetFileLength(m_readHandle); - XBMC->SeekFile(m_readHandle, m_pos, SEEK_SET); - - m_nextReopen = now + ((m_fastReopen) ? REOPEN_INTERVAL_FAST : REOPEN_INTERVAL); - - /* recording has finished */ - if (now > m_end) - m_end = 0; - } - else if (m_pos == m_len) - { - /* in case we reached the end we need to wait a little */ - int sleep = REOPEN_INTERVAL_FAST + 5; - if (!m_fastReopen) - sleep = std::min(sleep, static_cast(m_nextReopen - now + 1)); - XBMC->Log(LOG_DEBUG, "RecordingReader: End reached. Sleeping %d secs", - sleep); - PLATFORM::CEvent::Sleep(sleep * 1000); - now += sleep; - m_fastReopen = true; - goto FORCE_REOPEN; - } - } - - unsigned int read = XBMC->ReadFile(m_readHandle, buffer, size); - m_pos += read; - return read; -} - -long long RecordingReader::Seek(long long position, int whence) -{ - int64_t ret = XBMC->SeekFile(m_readHandle, position, whence); - // for unknown reason seek sometimes doesn't return the correct position - // so let's sync with the underlaying implementation - m_pos = XBMC->GetFilePosition(m_readHandle); - m_len = XBMC->GetFileLength(m_readHandle); - return ret; -} - -long long RecordingReader::Position() -{ - return m_pos; -} - -long long RecordingReader::Length() -{ - return m_len; -} - -void RecordingReader::Announce(const char *message) -{ - if (strcmp(message, "OnPlay") == 0) - m_playback = true; -} diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/src/RecordingReader.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/src/RecordingReader.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/src/RecordingReader.h 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/src/RecordingReader.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,38 +0,0 @@ -#pragma once - -#ifndef PVR_DVBVIEWER_RECORDINGREADER_H -#define PVR_DVBVIEWER_RECORDINGREADER_H - -#include "platform/util/StdString.h" - -class RecordingReader -{ -public: - RecordingReader(CStdString streamURL, time_t end); - ~RecordingReader(void); - int ReadData(unsigned char *buffer, unsigned int size); - bool IsValid(); - long long Seek(long long position, int whence); - long long Position(); - long long Length(); - void Announce(const char *message); - -private: - CStdString m_streamURL; - void *m_readHandle; - - /*!< @brief end time of the recording in case this an ongoing recording */ - time_t m_end; - time_t m_nextReopen; - bool m_fastReopen; - - /*!< @brief indicates if ffmpeg playback has started - * In case we reach the end we need to sleep until the next reopen. However - * during start/seek/jump/resume ffmpeg seeks and reads till the end. - */ - bool m_playback; - uint64_t m_pos; - uint64_t m_len; -}; - -#endif diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/src/TimeshiftBuffer.cpp kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/src/TimeshiftBuffer.cpp --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/src/TimeshiftBuffer.cpp 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/src/TimeshiftBuffer.cpp 2015-04-01 08:50:10.000000000 +0000 @@ -2,16 +2,12 @@ #include "client.h" #include "platform/util/util.h" -#define STREAM_READ_BUFFER_SIZE 32768 -#define BUFFER_READ_TIMEOUT 10000 -#define BUFFER_READ_WAITTIME 50 - using namespace ADDON; -TimeshiftBuffer::TimeshiftBuffer(CStdString streamURL, CStdString bufferPath) - : m_bufferPath(bufferPath) +TimeshiftBuffer::TimeshiftBuffer(CStdString streampath, CStdString bufferpath) + : m_bufferPath(bufferpath) { - m_streamHandle = XBMC->OpenFile(streamURL, READ_NO_CACHE); + m_streamHandle = XBMC->OpenFile(streampath, READ_NO_CACHE); m_bufferPath += "/tsbuffer.ts"; m_filebufferWriteHandle = XBMC->OpenFileForWrite(m_bufferPath, true); #ifndef TARGET_POSIX @@ -39,9 +35,7 @@ bool TimeshiftBuffer::IsValid() { - return (m_streamHandle != NULL - && m_filebufferWriteHandle != NULL - && m_filebufferReadHandle != NULL); + return (m_streamHandle != NULL); } void TimeshiftBuffer::Stop() @@ -51,7 +45,7 @@ void *TimeshiftBuffer::Process() { - XBMC->Log(LOG_DEBUG, "Timeshift: Thread started"); + XBMC->Log(LOG_DEBUG, "Timeshift: thread started"); byte buffer[STREAM_READ_BUFFER_SIZE]; while (m_start) @@ -65,22 +59,29 @@ m_mutex.Unlock(); #endif } - XBMC->Log(LOG_DEBUG, "Timeshift: Thread stopped"); + XBMC->Log(LOG_DEBUG, "Timeshift: thread stopped"); return NULL; } long long TimeshiftBuffer::Seek(long long position, int whence) { - return XBMC->SeekFile(m_filebufferReadHandle, position, whence); + if (m_filebufferReadHandle) + return XBMC->SeekFile(m_filebufferReadHandle, position, whence); + return -1; } long long TimeshiftBuffer::Position() { - return XBMC->GetFilePosition(m_filebufferReadHandle); + if (m_filebufferReadHandle) + return XBMC->GetFilePosition(m_filebufferReadHandle); + return -1; } long long TimeshiftBuffer::Length() { + if (!m_filebufferReadHandle || !m_filebufferWriteHandle) + return 0; + // We can't use GetFileLength here as it's value will be cached // by XBMC until we read or seek above it. // see xbm/xbmc/filesystem/HDFile.cpp CHDFile::GetLength() @@ -101,8 +102,11 @@ int TimeshiftBuffer::ReadData(unsigned char *buffer, unsigned int size) { + if (!m_filebufferReadHandle || !m_filebufferWriteHandle) + return 0; + /* make sure we never read above the current write position */ - int64_t readPos = XBMC->GetFilePosition(m_filebufferReadHandle); + int64_t readPos = XBMC->GetFilePosition(m_filebufferReadHandle); unsigned int timeWaited = 0; while (readPos + size > Length()) { diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/src/TimeshiftBuffer.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/src/TimeshiftBuffer.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.dvbviewer/src/TimeshiftBuffer.h 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.dvbviewer/src/TimeshiftBuffer.h 2015-04-01 08:50:10.000000000 +0000 @@ -6,14 +6,18 @@ #include "platform/util/StdString.h" #include "platform/threads/threads.h" +#define STREAM_READ_BUFFER_SIZE 32768 +#define BUFFER_READ_TIMEOUT 10000 +#define BUFFER_READ_WAITTIME 50 + class TimeshiftBuffer : public PLATFORM::CThread { public: - TimeshiftBuffer(CStdString streamURL, CStdString bufferPath); + TimeshiftBuffer(CStdString streamPath, CStdString bufferPath); ~TimeshiftBuffer(void); - bool IsValid(); int ReadData(unsigned char *buffer, unsigned int size); + bool IsValid(); long long Seek(long long position, int whence); long long Position(); long long Length(); diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.filmon/addon/addon.xml.in kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.filmon/addon/addon.xml.in --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.filmon/addon/addon.xml.in 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.filmon/addon/addon.xml.in 2015-04-01 08:50:10.000000000 +0000 @@ -1,12 +1,12 @@ - + Filmon ПВР клиент - Client PVR Filmon Filmon PVR Klient - Cleient Recordydd Filmon Filmon PVR-Client Πελάτης PVR Filmon Filmon PVR Client @@ -30,54 +28,41 @@ Cliente PVF Filmon Client PVR Filmon Client de numériscope Filmon - Cliente PVR Filmon לקוח טלוויזיה חיה עבור Filmon Filmon PVR klijent Filmon PVR Kliens - Client Filmon PVR - Filmon PVR Biðlari - Client PVR Filmon Filmon 用 PVR クライアント Filmon PVR 클라이언트 Filmon PVR klientas - Filmon PVR Client Filmon PVR харилцагч - Filmon PVR-client - Filmon PVR-klient + Filmon PVR Cliënt Klient TV dla FilmOn Cliente de PVR Filmon Cliente de PVR Filmon Filmon PVR klient - Odjemalec PVR Filmon + Snemaj na PVR odjemalca Filmon PVR Klient Filmon PVR İstemcisi Filmon PVR 客户端 Filmon frontend. Podpora pro live TV, nahrávání, EPG. Požaduje Filmon předplatné. Před spuštěním: (a) ve Filmonu nastavte kanály, které chceš vidět v Kodi jako oblíbené (b) vložte jméno a heslo v nastavení addonu. Pozn: nahrané pořady se mohou objevi až za několi minut po dokončení časovače - Blaen Filmon. Mae'n cynnal teledu byw, recordiadau, amserydd. Mae angen tanysgrifiad Filmon. Cyn ei alluogi: (a) o fewn Filmon mae angen gosod sianeli fel ffefrynnau i'w gweld o fewn Kodi (b) rhowch eich enw defnyddiwr a chyfrinair o fewn gosodiadau'r ychwanegyn. Sylw: gall recordiad gymryd rhai munudau i ymddangos wedi i'r amserydd gwblhau ei waith. Filmon Frontend. Unterstützt Live-TV, Aufnahmen, EPG. Benötigt ein Filmon-Abo. Vor dem Aktivieren: (a) in Filmon Kanäle als Favoriten einstellen um sie in Kodi zu sehen (b) Benutzername und Passwort in diesen Addon-Einstellungen eingeben. Hinweis: Aufnahmen können mehrere Minuten benötigen um zu erscheinen nachdem der Timer beendet ist. Frontend για το Filmon. Υποστηρίζει Live TV, εγγραφές, EPG. Απαιτείται συνδρομή/εγγραφή στο Filmon. Πριν το ενεργοποιήσετε: (α) ορίστε στο Filmon τα κανάλια σαν αγαπημένα για να εμφανίζονται στο Kodi, (β) εισάγετε το όνομα χρήστη και τον κωδικό σας στις ρυθμίσεις του πρόσθετου. Σημείωση: ενδέχεται να περάσουν κάποια λεπτά προτού εμφανιστούν οι εγγραφές μετά την ολοκλήρωση του χρονοδιακόπτη. Filmon frontend. Supports live TV, recordings, EPG. Requires a Filmon subscription. Before enabling: (a) in Filmon set channels as favourite to see them in Kodi (b) enter your username and password in this addon's settings. Note: recordings can take several minutes to appear after timer is completed. Filmon frontend. Supports live TV, recordings, EPG. Requires a Filmon subscription. Before enabling: (a) in Filmon set channels as favourite to see them in Kodi (b) enter your username and password in this addon's settings. Note: recordings can take several minutes to appear after timer is completed. Filmon frontend. Supports live TV, recordings, EPG. Requires a Filmon subscription. Before enabling: (a) in Filmon set channels as favorite to see them in Kodi (b) enter your username and password in this addon's settings. Note: recordings can take several minutes to appear after timer is completed. Frontend Filmon. Soporta TV en directo, grabaciones, EPG. Requiere subscripción a Filmon. Antes de activar: (a) En Filmon, configura los canales como favoritos para verlos en Kodi (b) Configura este addon con tu usuario y clave. Nota: Las grabaciones pueden tardar varios minutos en aparecer tras finalizarse. - Frontend Filmon. Soporta TV en vivo, grabación, GEP. Requiere una cuenta Filmon. Antes de activar: (a) Marque canales como favoritos en Filmon para poder verlos en Kodi (b) introduzca su nombre de usuario y contraseña en los ajustes de este add-on. Nota: Es posible que las grabaciones aparezcan luego de varios minutos después de que se complete el cronómetro. Frontend Filmon. Prend en charge la TV en direct, enregistrements, EPG. Nécessite un abonnement Filmon. Avant d'activer: (a) dans Filmon régler les chaînes comme favori pour les voir dans Kodi (b) de saisir votre nom d'utilisateur et mot de passe dans les paramètres de cet addon. Remarque: Les enregistrements peuvent prendre plusieurs minutes pour apparaître après la minuterie terminée. Frontal Filmon. Prend en charge la télé en direct, les enregistrements et le GÉP. Exige un abonnement à Filmon. Avant de l'activer : (a) dans Filmon, définir les chaînes comme favorites pour les voir dans Kodi (b) saisir votre nom d'utilisateur et votre mot de passe dans les paramètres de l'addiciel. Note : en fin de minuterie, les enregistrements peuvent prendre plusieurs minutes avant d'apparaître. לקוח טלוויזיה חיה של Filmon. תומך בהזרמת שידורים חיים, הצגת לוח שידורים ותזמון הקלטות. מחייב מנוי לשירות Filmon. לפני הפעלת ההרחבה: (א) יש לסמן ערוץ כמועדף ע"מ שיוצג ב־Kodi (ב) יש להזין שם משתמש וסיסמת שירות Filmon בהגדרות הרחבה זו. הערה: יכולות מספר דקות מתום ההקלטה עד אשר תהיה זמינה לצפיה. Filmon sučelje. Podržava gledanje TV uživo, snimanje, EPG. Zahtijeva Filmon pretplatu. Prije omogućavanja: (a) u Filmonu postavite vaše programe kao omiljene da bi bili vidljivi u Kodiju (b) upišite vaše korisničko ime i lozinku u postavke ovog dodatka. Napomena: snimanjima je potrebno nekoliko minuta da se pojave nakon što je zakazno vrijeme snimanja završilo. Filmon előtér-kiszolgáló. Támogatja az Élő TV-t, felvételeket, EPG-t. Filmon regisztráció szükséges. Engedélyezése előtt: (a) a Filmon-ban állítsa be kedvencként a csatornát hogy megjelenjen a Kodi-ban (b) írja be a felhasználónevet és a jelszót a kiegészítő beállításainál. Megjegyzés: a felvételek befejezése után előfordulhat hogy csak egy idő mulva jelennek meg a felvételi listában. - Front end Filmon. Mendukung siaran TV, rekaman, EPG. Memerlukan langganan Filmon. Sebelum mengaktifkan: (a) dalam menetapkan saluran Filmon sebagai favorit untuk melihat mereka di Kodi (b) masukkan nama penggunan dan sandi pada pengaturan addon ini. Catatan : rekaman bisa memerlukan beberapa menit untuk muncul setelah timer selesai - Filmon framendi. Styður beina útsendingu, upptökur, rafræna dagskrárupplýsingar. Þarfnast Filmon áskriftar. Áður en þú gerir virkt: (a) í Filmon settu rásir sem uppáhalds til að sjá þær í Kodi. (b) settu inn notandanafn þitt og lykilorð í uppsetningu viðbótarinnar. Taktu eftir: það getur tekið nokkrar mínútur þangað til upptaka verður sýnileg eftir að upptöku líkur. - Frontend Filmon. Supporta TV in diretta, registrazioni, EPG. Richiede l'abbonamento a Filmon. Prima di abilitare: (a) in Filmon, imposta i canali come preferiti per visualizzarli in Kodi (b) inserisci i tuoi username e password nelle impostazioni dell'addon. Nota: le registrazioni potrebbero apparire dopo alcuni minuti dallo scadere del timer. Filmon 프론트엔드. 라이브 TV, 녹화, EPG 지원. Filmon 계정정보 필요. 활성화하기 전에: (a) Kodi에서 보려면 Filmon에서 채널을 즐겨찾기에 등록하세요. (b) 애드온 설정에 사용자명과 비밀번호를 입력하세요. 노트: 녹화물은 타이머가 만료된 후 몇 분 뒤에 나타날 수 있습니다. Filmon naudotojo sąsaja. Palaiko TV transliaciją, laidų įrašymą, EPG. Reikalinga Filmon paskyra. Prieš įjungiant: (a) Filmon puslapyje nustatykite kanalus, kuriuos norite matyti Kodi, kaip mėgstamiausius (b) įveskite savo vartotojo vardą ir slaptažodį šio priedo nustatymuose. Pastaba: įrašymo atsiradimui gali prireikti keleto minučių po laikmačio sukūrimo. - Интерфејс за Filmon. Поддржува ТВ во живо, снимки, EPG. Бара Filmon претплата. Пред да го вклучите: (а) во Filmon поставете канали како омилени за да можете да ги видите во Kodi (б) внесете го вашето име и лозинка во подесувањата за овој аддон. Белешка: на снимките може да им требаат неколку минути за да се појават откако тајмерот ќе заврши. Filmon нүүр. Live TV, бичлэг, EPG дэмждэг. Filmon захиалсан байх шаардлагатай. Идэвхижүүлэхийн өмнө: (a) in Filmon set channels as favourite to see them in Kodi (b) Энэхүү addon's тохиргоонд хэрэглэгчийн нэр, нууц үгээ оруулна уу. Анхааруулга: бичлэг нь цаг тоололт дууссанаас хойш гарч иртэл хэдэн минут болох боломжтой. Filmon frontend. Ondersteunt live TV, Opnamen, EPG. Vereist een Filmon inschrijving. Voordat je inschakelt: (a) in Filmon stel kanalen in als favoriet om ze te zien in Kodi (b) voer je gebruikersnaam en wachtwoord in in de add-on instellingen. PS: opnamen kunnen meerdere minuten duren voordat ze worden getoond nadat de timer is gecomplementeerd. - Klient FilmOn obsługuje strumieniowanie kanałów telewizyjnych, nagrywanie oraz funkcje przewodnika programów. Wymaga płatnej subskrypcji usług FilmOn. Przed użyciem należy: (a) ustawić kanały jako ulubione (b) wprowadzić nazwę użytkownika i hasło w ustawieniach klienta. Uwaga: Nagrania mogą się pojawić dopiero po kilku minutach po zakończeniu nagrywania. + Klient FilmOn wspiera strumieniowanie kanałów telewizyjnych, nagrywanie oraz funkcje przewodnika programów. Wymaga płatnej subskrypcji usług FilmOn. Przed użyciem należy: (a) ustawić kanały jako ulubione (b) wprowadzić nazwę użytkownika i hasło w ustawieniach klienta. Uwaga: Nagrania mogą się pojawić dopiero po kilku minutach po zakończeniu nagrywania. Interface Filmon . Suporta TV ao vivo, gravações, EPG. Requer uma assinatura Filmon. Antes de permitir: (a) em Filmon definir canais como favorito para vê-los em Kodi (b), digite seu nome de usuário e senha nas configurações deste addon. Nota: as gravações podem levar alguns minutos a aparecer após temporizador ter concluído. PVR Filmon. Suporte TV ao Vivo, gravações, EPG. Requer uma subscrição Filmon. Antes de ativar: (a) em Filmon defina os canais favoritos para vê-los no Kodi (b) Entre seu nome de usuário e senha nos ajustes do addon. Nota: Gravações pode levar algum tempo para ficar disponível após o mesmo ter sido completado. - Odjemalec Filmon. Podpira TV v živo, posnetke, EPG. Potrebna je naročnina na Filmon. Preden omogočite: (a) v Filmonu nastavite programe kot priljubljene, da se prikažejo v Kodiju (b) vnesite vaše uporabniško ime in geslo v nastavitvah tega dodatka. Opomba: posnetki se lahko prikažejo šele po nekaj minutah, ko se snemanje zaključi. Filmon frontend. Stöder live-TV, inspelningar, EPG. Kräver ett Filmon-abonnemang. Innan du aktiverar: (a) Ställ in favoritkanaler i Filmon för att kunna se dem i Kodi. (b) Ange ditt användarnamn och lösenord i inställningar för detta tillägg. Observera: Det kan ta flera minuter innan inspelningar visas efter att timern är klar. Filmon 前端。支持直播电视、录像、电子节目单。需要有 Filmon 订阅。激活前:(a) 在 Filmon 中设置喜爱的频道以便在 Kodi 中看到 (b) 在本插件的设置中输入你的用户名和密码。注意:录像要在完成后几分钟后才能看到。 @OS@ diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.filmon/addon/changelog.txt kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.filmon/addon/changelog.txt --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.filmon/addon/changelog.txt 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.filmon/addon/changelog.txt 2015-04-01 08:50:10.000000000 +0000 @@ -1,14 +1,5 @@ -0.5.1 -Updated to API v1.9.4 - -0.4.8 -Updated Language files from Transifex - -0.4.7 -Updated Language files from Transifex - 0.4.6 -Add getBackendHostname function +platform fixes 0.4.5 Updated Language files from Transifex diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.filmon/addon/resources/language/Indonesian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.filmon/addon/resources/language/Indonesian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.filmon/addon/resources/language/Indonesian/strings.po 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.filmon/addon/resources/language/Indonesian/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -18,7 +18,7 @@ msgctxt "#30000" msgid "Username" -msgstr "Nama Pengguna" +msgstr "NamaPengguna" msgctxt "#30001" msgid "Password" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.filmon/addon/resources/language/Tamil (India)/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.filmon/addon/resources/language/Tamil (India)/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.filmon/addon/resources/language/Tamil (India)/strings.po 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.filmon/addon/resources/language/Tamil (India)/strings.po 1970-01-01 00:00:00.000000000 +0000 @@ -1,25 +0,0 @@ -# Kodi Media Center language file -# Addon Name: PVR Filmon Client -# Addon id: pvr.filmon -# Addon Provider: Stephen Denham -msgid "" -msgstr "" -"Project-Id-Version: XBMC Main\n" -"Report-Msgid-Bugs-To: http://trac.xbmc.org/\n" -"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Kodi Translation Team\n" -"Language-Team: Tamil (India) (http://www.transifex.com/projects/p/xbmc-main/language/ta_IN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ta_IN\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgctxt "#30000" -msgid "Username" -msgstr "பயனர்பெயர்" - -msgctxt "#30001" -msgid "Password" -msgstr "அடையாளச் சொல்" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.filmon/src/client.cpp kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.filmon/src/client.cpp --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.filmon/src/client.cpp 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.filmon/src/client.cpp 2015-04-01 08:50:10.000000000 +0000 @@ -192,7 +192,6 @@ pCapabilities->bSupportsTV = true; pCapabilities->bSupportsEPG = true; pCapabilities->bSupportsRecordings = true; - pCapabilities->bSupportsRecordingsUndelete = false; pCapabilities->bSupportsTimers = true; pCapabilities->bSupportsChannelGroups = true; pCapabilities->bSupportsRadio = false; @@ -227,11 +226,6 @@ return strConnectionString.c_str(); } -const char *GetBackendHostname(void) -{ - return ""; -} - PVR_ERROR GetDriveSpace(long long *iTotal, long long *iUsed) { m_data->GetDriveSpace(iTotal, iUsed); return PVR_ERROR_NO_ERROR; @@ -295,14 +289,14 @@ return PVR_ERROR_NO_ERROR; } -int GetRecordingsAmount(bool deleted) { +int GetRecordingsAmount(void) { if (m_data) return m_data->GetRecordingsAmount(); return -1; } -PVR_ERROR GetRecordings(ADDON_HANDLE, bool deleted) { +PVR_ERROR GetRecordings(ADDON_HANDLE handle) { if (m_data) return m_data->GetRecordings(handle); @@ -353,7 +347,7 @@ } /** UNUSED API FUNCTIONS */ -PVR_ERROR OpenDialogChannelScan(void) { +PVR_ERROR DialogChannelScan(void) { return PVR_ERROR_NOT_IMPLEMENTED; } PVR_ERROR CallMenuHook(const PVR_MENUHOOK &menuhook, @@ -375,10 +369,10 @@ int GetCurrentClientChannel(void) { return 0; } -PVR_ERROR OpenDialogChannelSettings(const PVR_CHANNEL &channel) { +PVR_ERROR DialogChannelSettings(const PVR_CHANNEL &channel) { return PVR_ERROR_NOT_IMPLEMENTED; } -PVR_ERROR OpenDialogChannelAdd(const PVR_CHANNEL &channel) { +PVR_ERROR DialogAddChannel(const PVR_CHANNEL &channel) { return PVR_ERROR_NOT_IMPLEMENTED; } bool OpenRecordedStream(const PVR_RECORDING &recording) { @@ -477,12 +471,4 @@ time_t GetBufferTimeEnd() { return 0; } -PVR_ERROR UndeleteRecording(const PVR_RECORDING& recording) -{ - return PVR_ERROR_NOT_IMPLEMENTED; -} -PVR_ERROR DeleteAllRecordingsFromTrash() -{ - return PVR_ERROR_NOT_IMPLEMENTED; -} } diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/addon.xml.in kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/addon.xml.in --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/addon.xml.in 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/addon.xml.in 2015-04-01 08:50:10.000000000 +0000 @@ -1,14 +1,14 @@ + provider-name="Lars Op den Kamp, Team XBMC"> - - - + + + Kodi se voorprogram vir Tvheadend Kodi's frontend for Tvheadend Kodi клиент за Tvheadend - Frontal del Kodi pel Tvheadend + Frontal de l'Kodi pel Tvheadend Rozhraní Kodi pro Tvheadend Blaen Kodi ar gyfer Tvheadend Kodi's frontend til Tvheadend @@ -61,7 +61,7 @@ Frontend Kodi pentru Tvheadend Интерфейс Kodi для Tvheadend Kodi rozhranie pre Tvheadend - Kodijev vmesnik za Tvheadend + Kodi-jev vmesnik za Tvheadend Frontend i Kodi'së për Tvheadend Kodi's frontend för Tvheadend Интерфейси Kodi барои Tvheadend @@ -73,7 +73,7 @@ Tvheadend voorprogram; ondersteun stroom van Lewendige TV & Opnames, EPG, Tydhouers Tvheadend frontend; supporting streaming of Live TV & Recordings, EPG, Timers Tvheadend клиент. Поддържа стрийминг и записване на телевизия, електронен програмен справочник и броячи. - Interfície per al Tvheadend; compatible amb la transmissió de TV en viu i enregistraments, EPG, temporitzadors + Interfície per al Tvheadend; suportant fluxes de TV en directe i enregistraments, EPG, temporitzadors Rozhraní Tvheadend. Podporuje proudové vysílání živého vysílání a nahrávek, poslech kanálů rádia, EPG, a časovače. Blaen Tvheadend: cefnogi ffrydio Teledu Byw a Recordio, Amserlenni, Amseryddion Tvheadend frontend; understøtter streaming af direkte TV og optagelser, EPG og timere @@ -104,9 +104,9 @@ Tvheadend frontend; supporting streaming of Live TV & Recordings, EPG, Timers Tvheadend нүүр; Live TV & бичлэг дамжуулалт, EPG, Timer Bahagian hadapan Tvheadend; menyokong penstirman Langsung & Rakaman, EPG, Pemasa TV - Tvheadend frontend; ondersteuning van streaming, Live TV & opnames, EPG, Timers + Tvheadend frontend, het ondersteunen streaming van Live TV & Recordings, EPG, Timers Tvheadend frontend; støtte for visning av direkte TV og opptakk, EPG, tidstakere - Klient Tvheadend obsługuje strumieniowanie kanałów radiowych i telewizyjnych, nagrywanie natychmiastowe i wg harmonogramu oraz funkcje przewodnika programów. + Klient Tvheadend wspiera strumieniowanie kanałów radiowych i telewizyjnych, nagrywanie natychmiastowe i wg harmonogramu oraz funkcje przewodnika programów. Frontend Tvheadend; suporta transmissão de TV em directo e gravações, EPG, temporizadores Tvheadend; suporta streaming de TV Ao Vivo e Gravada, EPG, Agendamentos Frontend Tvheadend; se poate difuza în flux a televiziunii în direct și a înregistrăriilor, EPG, Cronometre @@ -157,7 +157,7 @@ This is unstable software! The authors are in no way responsible for failed recordings, incorrect timers, wasted hours, or any other undesirable effects. Тус програм нь гүйцэд хийгдэж дуусаагүй! Зохиогч нь алдаатай бичлэг, цагийн буруу хөтлөлт, алдагдсан цаг хугацаа эсвэл бусад ямар нэгэн хүсээгүй үр дүнд хариуцлага хүлээхгүй. Ini merupakan perisian tidak stabil! Pengarang tidak bertanggungjawab atas kegagalan rakaman, pemasa tidak betul, masa yang dibazirkan, atau apa jua kesan yang tidak dikehendaki.. - Dit is instabiele software! De auteurs zijn op geen enkele wijze verantwoordelijk voor de mislukte opnames, onjuiste timers, verspilde uren, of een andere ongewenste effecten. + Dit is mogelijk onstabiele software! De auteurs zijn op geen enkele wijze verantwoordelijk voor de mislukte opnames, onjuiste timers, verspilde uren, of een andere ongewenste effecten .. Dette er ustabilt programvare! Forfatterne er ikke ansvarlig på noen måte for ødelagte opptak, feile timere, bortkastede timer, eller andre uønskede hendinger... 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 software é instável! Os autores não são de forma alguma responsáveis por gravações falhadas, temporizadores incorrectos, horas desperdiçadas, ou qualquer outro tipo de efeitos indesejáveis.. diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/changelog.txt kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/changelog.txt --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/changelog.txt 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/changelog.txt 2015-04-01 08:50:10.000000000 +0000 @@ -1,27 +1,5 @@ -2.1.1 -- Updated to PVR API v1.9.4 -- Updated to GUI API v5.8.0 -- Updated to Codec API v1.0.1 - -2.0.5 -- fixed incorrect timeout value when deleting recordings (thanks @ksooo) - -2.0.4 -- added a missing commit that somehow got lost when making v2.0.3 - -2.0.3 -- rebrand of HTSP client identifier -- improve the VFS slightly by doing reading and buffering on separate threads, as well as tweaking the read length - -2.0.2 -- language files from Transifex -- minor changes to conform with C++11 - -2.0.0 -- replaced by the newer pvr.tvh implementation - 1.9.40 -- added getBackendHostname function +- platform fixes 1.9.38 - change library name to Kodi diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Afrikaans/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Afrikaans/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Afrikaans/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Afrikaans/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -16,30 +16,50 @@ "Language: af\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -msgctxt "#30001" +msgctxt "#30000" msgid "Tvheadend hostname or IP address" msgstr "Tvheadend gasheernaam of IP adres" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "HTTP poort" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "HTSP poort" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "Gebruikersnaam" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Wagwoord" +msgctxt "#30006" +msgid "Connect timeout in seconds" +msgstr "Konnekteer tydverstreke in sekondes" + msgctxt "#30007" msgid "Response timeout in seconds" msgstr "Antwoord tydverstreke in sekondes" -msgctxt "#30200" -msgid "Debugging" -msgstr "Ontfouting" +msgctxt "#30103" +msgid "Audio codec" +msgstr "Audio kodek" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Video kodek" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Resolusie" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "Diskonnekteer van '%s'" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "Herkonnekteer aan '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Albanian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Albanian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Albanian/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Albanian/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -16,30 +16,62 @@ "Language: sq\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -msgctxt "#30001" +msgctxt "#30000" msgid "Tvheadend hostname or IP address" msgstr "Tvheadend hostname ose adresa IP" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "HTTP porti" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "HTSP porti" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" -msgstr "Emër-kalues" +msgstr "Emër-përdoruesi" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" -msgstr "Fjalkalim" +msgstr "Fjalkalimi" + +msgctxt "#30006" +msgid "Connect timeout in seconds" +msgstr "Timeout i lidhjes në sekonda" msgctxt "#30007" msgid "Response timeout in seconds" msgstr "Timeout i përgjigjjes në eskonda" -msgctxt "#30200" -msgid "Debugging" -msgstr "Debugging" +msgctxt "#30100" +msgid "Tvheadend transcoding settings" +msgstr "Cilësimet e transkodimit për Tvheadend" + +msgctxt "#30101" +msgid "Transcoding settings" +msgstr "Cilësimet e transkodimit" + +msgctxt "#30102" +msgid "Enable transcoding" +msgstr "Aktivo transkodimin" + +msgctxt "#30103" +msgid "Audio codec" +msgstr "Audio codec'i" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Video codec'i" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Zbërthimi" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "U ndërpre nga '%s'" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "U rilidh me '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Amharic/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Amharic/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Amharic/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Amharic/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -16,22 +16,46 @@ "Language: am\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "HTTP port" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "HTSP port" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "የተጠቃሚ ስም " -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "የመግቢያ ቃል" +msgctxt "#30006" +msgid "Connect timeout in seconds" +msgstr "ግንኙነት ማስቆሚያ በ ሰከንዶች" + msgctxt "#30007" msgid "Response timeout in seconds" msgstr "መመለሻ ጊዜ በ ሰከንዶች" + +msgctxt "#30103" +msgid "Audio codec" +msgstr "የ ድምፅ codec" + +msgctxt "#30104" +msgid "Video codec" +msgstr "የ ቪዲዮ codec" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Resolution" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "ግንኙነት ተቋርጧል ከ '%s'" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "እንደገና ተገናኝቷል ወደ '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Arabic/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Arabic/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Arabic/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Arabic/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -16,22 +16,38 @@ "Language: ar\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "منفذ HTTP" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "منفذ HTSP" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "اسم المستخدم" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "كلمة المرور" -msgctxt "#30200" -msgid "Debugging" -msgstr "التصحيح" +msgctxt "#30103" +msgid "Audio codec" +msgstr "ترميز الصوت" + +msgctxt "#30104" +msgid "Video codec" +msgstr "ترميز الفيديو" + +msgctxt "#30105" +msgid "Resolution" +msgstr "دقة" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "قطع الاتصال من '%s'" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "أعيد الاتصال بـ '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Armenian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Armenian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Armenian/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Armenian/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -16,6 +16,10 @@ "Language: hy\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Գաղտնաբառ" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Լուծում" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Azerbaijani/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Azerbaijani/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Azerbaijani/strings.po 1970-01-01 00:00:00.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Azerbaijani/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -0,0 +1,21 @@ +# Kodi Media Center language file +# Addon Name: Tvheadend HTSP Client +# Addon id: pvr.hts +# Addon Provider: Lars Op den Kamp, Team XBMC +msgid "" +msgstr "" +"Project-Id-Version: XBMC Main\n" +"Report-Msgid-Bugs-To: http://trac.xbmc.org/\n" +"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Kodi Translation Team\n" +"Language-Team: Azerbaijani (http://www.transifex.com/projects/p/xbmc-main/language/az/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: az\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Əksetmə qabiliyyəti" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Basque/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Basque/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Basque/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Basque/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -16,14 +16,22 @@ "Language: eu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "Erabiltzailea" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Pasahitza" -msgctxt "#30200" -msgid "Debugging" -msgstr "Arazketa" +msgctxt "#30103" +msgid "Audio codec" +msgstr "Audio codec-a" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Bideo codec-a" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Bereizmena" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Belarusian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Belarusian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Belarusian/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Belarusian/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -16,30 +16,50 @@ "Language: be\n" "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -msgctxt "#30001" +msgctxt "#30000" msgid "Tvheadend hostname or IP address" msgstr "Tvheadend hostname or IP address" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "HTTP port" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "HTSP port" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" -msgstr "Карыстальнік" +msgstr "Username" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" -msgstr "Password" +msgstr "Пароль" + +msgctxt "#30006" +msgid "Connect timeout in seconds" +msgstr "Connect timeout in seconds" msgctxt "#30007" msgid "Response timeout in seconds" msgstr "Response timeout in seconds" -msgctxt "#30200" -msgid "Debugging" -msgstr "Debugging" +msgctxt "#30103" +msgid "Audio codec" +msgstr "Audio codec" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Video codec" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Разрознасьць" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "Disconnected from '%s'" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "Reconnected to '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Bosnian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Bosnian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Bosnian/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Bosnian/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -16,14 +16,22 @@ "Language: bs\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "Korisničko ime" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Lozinka" -msgctxt "#30200" -msgid "Debugging" -msgstr "Traženje grešaka" +msgctxt "#30103" +msgid "Audio codec" +msgstr "Kodek zvuka" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Video kodek" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Rezolucija" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Bulgarian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Bulgarian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Bulgarian/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Bulgarian/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -17,49 +17,61 @@ "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgctxt "#30000" -msgid "Connection Settings" -msgstr "Настройки на връзката" - -msgctxt "#30001" msgid "Tvheadend hostname or IP address" msgstr "Tvheadend хост или IP адрес" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "HTTP порт" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "HTSP порт" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" -msgstr "Потребител" +msgstr "Потребителско име" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Парола" msgctxt "#30006" -msgid "Connection timeout in seconds" -msgstr "Време на изчакване при свързване в секунди" +msgid "Connect timeout in seconds" +msgstr "Таймаут при свързване в секунди" msgctxt "#30007" msgid "Response timeout in seconds" -msgstr "Време на изчакване за отговор в секунди" +msgstr "Таймаут за отговор в секунди" msgctxt "#30100" -msgid "Data Transfer" -msgstr "Пренос на данни" +msgid "Tvheadend transcoding settings" +msgstr "Настройки за Tvheadend прекодиране" msgctxt "#30101" -msgid "Asynchronous EPG transfer" -msgstr "Асинхронно актуализиране на ЕПС" +msgid "Transcoding settings" +msgstr "Настройки за прекодиране" -msgctxt "#30200" -msgid "Debugging" -msgstr "Дебъгване" - -msgctxt "#30201" -msgid "Trace (detailed)" -msgstr "Проследяване (подробно)" +msgctxt "#30102" +msgid "Enable transcoding" +msgstr "Включи прекодирането" + +msgctxt "#30103" +msgid "Audio codec" +msgstr "Аудио кодек" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Видео кодек" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Резолюция" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "Изключен от '%s'" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "Повторно свързан с '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Burmese/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Burmese/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Burmese/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Burmese/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -16,10 +16,14 @@ "Language: my\n" "Plural-Forms: nplurals=1; plural=0;\n" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "အသုံးပြုသူအမည်" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "စကားဝှက်" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Resolution" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Catalan/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Catalan/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Catalan/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Catalan/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -16,30 +16,62 @@ "Language: ca\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -msgctxt "#30001" +msgctxt "#30000" msgid "Tvheadend hostname or IP address" msgstr "Nom de màquina o IP del Tvheadend" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "Port HTTP" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "Port HTSP" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "Nom d'usuari" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Contrasenya" +msgctxt "#30006" +msgid "Connect timeout in seconds" +msgstr "Temps d'espera de connexió en segons" + msgctxt "#30007" msgid "Response timeout in seconds" msgstr "Temps d'espera de la resposta en segons" -msgctxt "#30200" -msgid "Debugging" -msgstr "Depurant" +msgctxt "#30100" +msgid "Tvheadend transcoding settings" +msgstr "Configuració de la transcodificació del Tvheadend" + +msgctxt "#30101" +msgid "Transcoding settings" +msgstr "Configuració de la transcodificació" + +msgctxt "#30102" +msgid "Enable transcoding" +msgstr "Habilita la transcodificació" + +msgctxt "#30103" +msgid "Audio codec" +msgstr "Còdec d'àudio" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Còdec de vídeo" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Resolució" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "Desconnectat de '%s'" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "Reconnectat a '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Chinese (Simple)/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Chinese (Simple)/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Chinese (Simple)/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Chinese (Simple)/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -17,31 +17,27 @@ "Plural-Forms: nplurals=1; plural=0;\n" msgctxt "#30000" -msgid "Connection Settings" -msgstr "连接设置" - -msgctxt "#30001" msgid "Tvheadend hostname or IP address" msgstr "Tvheadend 主机名或 IP 地址" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "HTTP 端口" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "HTSP 端口" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "用户名" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "密码" msgctxt "#30006" -msgid "Connection timeout in seconds" +msgid "Connect timeout in seconds" msgstr "连接超时(秒)" msgctxt "#30007" @@ -49,17 +45,33 @@ msgstr "响应超时(秒)" msgctxt "#30100" -msgid "Data Transfer" -msgstr "数据传输" +msgid "Tvheadend transcoding settings" +msgstr "Tvheadend 转码设置" msgctxt "#30101" -msgid "Asynchronous EPG transfer" -msgstr "异步电子节目单传输" +msgid "Transcoding settings" +msgstr "转码设置" -msgctxt "#30200" -msgid "Debugging" -msgstr "调试" - -msgctxt "#30201" -msgid "Trace (detailed)" -msgstr "跟踪(细节)" +msgctxt "#30102" +msgid "Enable transcoding" +msgstr "启用转码" + +msgctxt "#30103" +msgid "Audio codec" +msgstr "音频编码" + +msgctxt "#30104" +msgid "Video codec" +msgstr "视频编码" + +msgctxt "#30105" +msgid "Resolution" +msgstr "分辨率" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "断开到“%s”的连接" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "重新连接到“%s”" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Chinese (Traditional)/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Chinese (Traditional)/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Chinese (Traditional)/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Chinese (Traditional)/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -16,30 +16,62 @@ "Language: zh_TW\n" "Plural-Forms: nplurals=1; plural=0;\n" -msgctxt "#30001" +msgctxt "#30000" msgid "Tvheadend hostname or IP address" msgstr "Tvheadend主機名稱或IP位址" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "HTTP端口" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "HTSP端口" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "帳號" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "密碼" +msgctxt "#30006" +msgid "Connect timeout in seconds" +msgstr "連接超時(秒)" + msgctxt "#30007" msgid "Response timeout in seconds" msgstr "回應超時(秒)" -msgctxt "#30200" -msgid "Debugging" -msgstr "除錯" +msgctxt "#30100" +msgid "Tvheadend transcoding settings" +msgstr "Tvheadend轉碼設定" + +msgctxt "#30101" +msgid "Transcoding settings" +msgstr "轉碼設定" + +msgctxt "#30102" +msgid "Enable transcoding" +msgstr "啟動轉碼" + +msgctxt "#30103" +msgid "Audio codec" +msgstr "音效編碼" + +msgctxt "#30104" +msgid "Video codec" +msgstr "影片編碼" + +msgctxt "#30105" +msgid "Resolution" +msgstr "解析度" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "從 '%s' 斷開連線" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "從 '%s' 重新連線" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Croatian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Croatian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Croatian/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Croatian/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -17,49 +17,61 @@ "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" msgctxt "#30000" -msgid "Connection Settings" -msgstr "Postavke povezivanja" - -msgctxt "#30001" msgid "Tvheadend hostname or IP address" msgstr "Tvheadend naziv računala ili IP adresa" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "HTTP ulaz" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "HTSP ulaz" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "Korisničko ime" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Lozinka" msgctxt "#30006" -msgid "Connection timeout in seconds" -msgstr "Istek povezivanja u sekundama" +msgid "Connect timeout in seconds" +msgstr "Istek vremena u sekundama" msgctxt "#30007" msgid "Response timeout in seconds" msgstr "Vrijeme odaziva u sekundama" msgctxt "#30100" -msgid "Data Transfer" -msgstr "Prijenos podataka" +msgid "Tvheadend transcoding settings" +msgstr "Tvheadend postavke predkôdiranja" msgctxt "#30101" -msgid "Asynchronous EPG transfer" -msgstr "Neusklađen EPG prijenos" +msgid "Transcoding settings" +msgstr "Postavke predkôdiranja" -msgctxt "#30200" -msgid "Debugging" -msgstr "Otklanjanje grešaka" - -msgctxt "#30201" -msgid "Trace (detailed)" -msgstr "Praćenje (opširnije)" +msgctxt "#30102" +msgid "Enable transcoding" +msgstr "Omogući predkôdiranje" + +msgctxt "#30103" +msgid "Audio codec" +msgstr "Zvučni kôdek" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Video kôdek" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Razlučivost" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "Odspojen s '%s'" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "Ponovno povezan s '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Czech/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Czech/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Czech/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Czech/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -17,49 +17,61 @@ "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" msgctxt "#30000" -msgid "Connection Settings" -msgstr "Nastavení připojení" - -msgctxt "#30001" msgid "Tvheadend hostname or IP address" msgstr "Název počítače, nebo adresa IP Tvheadend" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "Port HTTP" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "Port HTSP" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "Uživatelské jméno" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Heslo" msgctxt "#30006" -msgid "Connection timeout in seconds" -msgstr "Limit pro ukončení spojení v sekundách" +msgid "Connect timeout in seconds" +msgstr "Časový limit spojení v sekundách" msgctxt "#30007" msgid "Response timeout in seconds" msgstr "Časový limit odpovědi v sekundách" msgctxt "#30100" -msgid "Data Transfer" -msgstr "Přenos dat" +msgid "Tvheadend transcoding settings" +msgstr "Nastavení překódování Tvheadend" msgctxt "#30101" -msgid "Asynchronous EPG transfer" -msgstr "Asynchronní přenos EPG" +msgid "Transcoding settings" +msgstr "Nastavení překódování" -msgctxt "#30200" -msgid "Debugging" -msgstr "Ladění" - -msgctxt "#30201" -msgid "Trace (detailed)" -msgstr "Trace (detailní)" +msgctxt "#30102" +msgid "Enable transcoding" +msgstr "Povolit překódování" + +msgctxt "#30103" +msgid "Audio codec" +msgstr "Kodek zvuku" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Kodek videa" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Rozlišení" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "Odpojeno z '%s'" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "Opětovně připojeno k '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Danish/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Danish/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Danish/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Danish/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -16,30 +16,62 @@ "Language: da\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -msgctxt "#30001" +msgctxt "#30000" msgid "Tvheadend hostname or IP address" msgstr "Tvheadend værtsnavn eller IP-adresse" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "HTTP-port" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "HTSP-port" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "Brugernavn" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Adgangskode" +msgctxt "#30006" +msgid "Connect timeout in seconds" +msgstr "Tidsfrist for forbindelse i sekunder" + msgctxt "#30007" msgid "Response timeout in seconds" msgstr "Tidsfrist for svar i sekunder" -msgctxt "#30200" -msgid "Debugging" -msgstr "Foretag fejlretning" +msgctxt "#30100" +msgid "Tvheadend transcoding settings" +msgstr "Tvheadend indstillinger til transcoding" + +msgctxt "#30101" +msgid "Transcoding settings" +msgstr "Transcoding-indstillinger" + +msgctxt "#30102" +msgid "Enable transcoding" +msgstr "Aktiver transcoding" + +msgctxt "#30103" +msgid "Audio codec" +msgstr "Lyd-codec" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Video-codec" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Opløsning" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "Afbrudt fra '%s'" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "Genforbundet til '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Dutch/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Dutch/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Dutch/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Dutch/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -17,49 +17,61 @@ "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgctxt "#30000" -msgid "Connection Settings" -msgstr "Verbindingsinstellingen" - -msgctxt "#30001" msgid "Tvheadend hostname or IP address" msgstr "Tvheadend server naam of IP adres" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "HTTP poort" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "HTSP poort" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "Gebruikersnaam" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Wachtwoord" msgctxt "#30006" -msgid "Connection timeout in seconds" -msgstr "Verbindingswachttijd in seconden" +msgid "Connect timeout in seconds" +msgstr "Verbinding timeout in seconden" msgctxt "#30007" msgid "Response timeout in seconds" msgstr "Antwoord timeout in seconden" msgctxt "#30100" -msgid "Data Transfer" -msgstr "Gegevensoverdracht" +msgid "Tvheadend transcoding settings" +msgstr "Tvheadend transcoderingsinstellingen" msgctxt "#30101" -msgid "Asynchronous EPG transfer" -msgstr "Asynchrone EPG-overdracht" +msgid "Transcoding settings" +msgstr "Transcoderingsinstellingen" -msgctxt "#30200" -msgid "Debugging" -msgstr "Foutregistratie" - -msgctxt "#30201" -msgid "Trace (detailed)" -msgstr "Loggen (in detail)" +msgctxt "#30102" +msgid "Enable transcoding" +msgstr "Gebruik transcodering" + +msgctxt "#30103" +msgid "Audio codec" +msgstr "Audiocodec" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Videocodec" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Resolutie" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "Verbinding met '%s' verbroken" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "Verbinding met '%s' hersteld" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/English/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/English/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/English/strings.po 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/English/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -19,31 +19,29 @@ #settings labels msgctxt "#30000" -msgid "Connection Settings" -msgstr "" - -msgctxt "#30001" msgid "Tvheadend hostname or IP address" msgstr "" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "" +#empty string with id 30005 + msgctxt "#30006" -msgid "Connection timeout in seconds" +msgid "Connect timeout in seconds" msgstr "" msgctxt "#30007" @@ -53,19 +51,36 @@ #empty strings from id 30008 to 30099 msgctxt "#30100" -msgid "Data Transfer" +msgid "Tvheadend transcoding settings" msgstr "" msgctxt "#30101" -msgid "Asynchronous EPG transfer" +msgid "Transcoding settings" +msgstr "" + +msgctxt "#30102" +msgid "Enable transcoding" +msgstr "" + +msgctxt "#30103" +msgid "Audio codec" +msgstr "" + +msgctxt "#30104" +msgid "Video codec" +msgstr "" + +msgctxt "#30105" +msgid "Resolution" msgstr "" -#empty strings from id 30102 to 30199 +#empty strings from id 30106 to 30499 +#notifications -msgctxt "#30200" -msgid "Debugging" +msgctxt "#30500" +msgid "Disconnected from '%s'" msgstr "" -msgctxt "#30201" -msgid "Trace (detailed)" +msgctxt "#30501" +msgid "Reconnected to '%s'" msgstr "" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/English (Australia)/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/English (Australia)/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/English (Australia)/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/English (Australia)/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -16,30 +16,62 @@ "Language: en_AU\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -msgctxt "#30001" +msgctxt "#30000" msgid "Tvheadend hostname or IP address" msgstr "Tvheadend hostname or IP address" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "HTTP port" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "HTSP port" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "Username" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Password" +msgctxt "#30006" +msgid "Connect timeout in seconds" +msgstr "Connect timeout in seconds" + msgctxt "#30007" msgid "Response timeout in seconds" msgstr "Response timeout in seconds" -msgctxt "#30200" -msgid "Debugging" -msgstr "Debugging" +msgctxt "#30100" +msgid "Tvheadend transcoding settings" +msgstr "Tvheadend transcoding settings" + +msgctxt "#30101" +msgid "Transcoding settings" +msgstr "Transcoding settings" + +msgctxt "#30102" +msgid "Enable transcoding" +msgstr "Enable transcoding" + +msgctxt "#30103" +msgid "Audio codec" +msgstr "Audio codec" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Video codec" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Resolution" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "Disconnected from '%s'" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "Reconnected to '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/English (New Zealand)/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/English (New Zealand)/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/English (New Zealand)/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/English (New Zealand)/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -16,30 +16,62 @@ "Language: en_NZ\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -msgctxt "#30001" +msgctxt "#30000" msgid "Tvheadend hostname or IP address" msgstr "Tvheadend hostname or IP address" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "HTTP port" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "HTSP port" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "Username" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Password" +msgctxt "#30006" +msgid "Connect timeout in seconds" +msgstr "Connect timeout in seconds" + msgctxt "#30007" msgid "Response timeout in seconds" msgstr "Response timeout in seconds" -msgctxt "#30200" -msgid "Debugging" -msgstr "Debugging" +msgctxt "#30100" +msgid "Tvheadend transcoding settings" +msgstr "Tvheadend transcoding settings" + +msgctxt "#30101" +msgid "Transcoding settings" +msgstr "Transcoding settings" + +msgctxt "#30102" +msgid "Enable transcoding" +msgstr "Enable transcoding" + +msgctxt "#30103" +msgid "Audio codec" +msgstr "Audio codec" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Video codec" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Resolution" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "Disconnected from '%s'" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "Reconnected to '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/English (US)/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/English (US)/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/English (US)/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/English (US)/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -17,49 +17,61 @@ "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgctxt "#30000" -msgid "Connection Settings" -msgstr "Connection Settings" - -msgctxt "#30001" msgid "Tvheadend hostname or IP address" msgstr "Tvheadend hostname or IP address" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "HTTP port" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "HTSP port" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "Username" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Password" msgctxt "#30006" -msgid "Connection timeout in seconds" -msgstr "Connection timeout in seconds" +msgid "Connect timeout in seconds" +msgstr "Connect timeout in seconds" msgctxt "#30007" msgid "Response timeout in seconds" msgstr "Response timeout in seconds" msgctxt "#30100" -msgid "Data Transfer" -msgstr "Data Transfer" +msgid "Tvheadend transcoding settings" +msgstr "Tvheadend transcoding settings" msgctxt "#30101" -msgid "Asynchronous EPG transfer" -msgstr "Asynchronous EPG transfer" +msgid "Transcoding settings" +msgstr "Transcoding settings" -msgctxt "#30200" -msgid "Debugging" -msgstr "Debugging" - -msgctxt "#30201" -msgid "Trace (detailed)" -msgstr "Trace (detailed)" +msgctxt "#30102" +msgid "Enable transcoding" +msgstr "Enable transcoding" + +msgctxt "#30103" +msgid "Audio codec" +msgstr "Audio codec" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Video codec" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Resolution" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "Disconnected from '%s'" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "Reconnected to '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Esperanto/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Esperanto/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Esperanto/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Esperanto/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -16,10 +16,14 @@ "Language: eo\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "Uzulonomo" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "pasvorto" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Distingivo" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Estonian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Estonian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Estonian/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Estonian/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -16,30 +16,62 @@ "Language: et\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -msgctxt "#30001" +msgctxt "#30000" msgid "Tvheadend hostname or IP address" msgstr "Tvheadend hosti nimi või IP aadress" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "HTTP port" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "HTSP port" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "Kasutajanimi" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Salasõna" +msgctxt "#30006" +msgid "Connect timeout in seconds" +msgstr "Ühenduse aegumine sekundites" + msgctxt "#30007" msgid "Response timeout in seconds" msgstr "Vastuse aegumine sekundites" -msgctxt "#30200" -msgid "Debugging" -msgstr "Silumine" +msgctxt "#30100" +msgid "Tvheadend transcoding settings" +msgstr "Tvheadendi transkodeerimis seaded" + +msgctxt "#30101" +msgid "Transcoding settings" +msgstr "Transkodeerimis seaded" + +msgctxt "#30102" +msgid "Enable transcoding" +msgstr "Luba transkodeerimine" + +msgctxt "#30103" +msgid "Audio codec" +msgstr "Audio koodek" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Video koodek" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Resolutsioon" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "'%s' lahti ühendatud" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "'%s' uuesti ühendatud" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Faroese/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Faroese/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Faroese/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Faroese/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -16,10 +16,14 @@ "Language: fo\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "Brúkaranavn" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Loyniorð" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Skermstødd" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Finnish/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Finnish/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Finnish/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Finnish/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -16,30 +16,50 @@ "Language: fi\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -msgctxt "#30001" +msgctxt "#30000" msgid "Tvheadend hostname or IP address" msgstr "Tvheadend-palvelimen nimi tai IP-osoite" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "HTTP-portti" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "HTSP-portti" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "Käyttäjänimi" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Salasana" +msgctxt "#30006" +msgid "Connect timeout in seconds" +msgstr "Yhteyden aikakatkaisu sekunneissa" + msgctxt "#30007" msgid "Response timeout in seconds" msgstr "Vastauksen aikakatkaisu sekunneissa" -msgctxt "#30200" -msgid "Debugging" -msgstr "Debugging" +msgctxt "#30103" +msgid "Audio codec" +msgstr "Äänikoodekki" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Videokoodekki" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Näytön resoluutio" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "Yhteys katkaistu palvelimeen '%s'" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "Yhdistetty palvelimeen '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/French/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/French/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/French/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/French/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -17,49 +17,61 @@ "Plural-Forms: nplurals=2; plural=(n > 1);\n" msgctxt "#30000" -msgid "Connection Settings" -msgstr "Paramètres de connexion" - -msgctxt "#30001" msgid "Tvheadend hostname or IP address" msgstr "Nom d'hôte ou adresse IP de Tvheadend" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "Port HTTP" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "Port HTSP" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" -msgstr "Utilisateur" +msgstr "Nom d'utilisateur" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Mot de passe" msgctxt "#30006" -msgid "Connection timeout in seconds" -msgstr "Timeout de connexion en secondes" +msgid "Connect timeout in seconds" +msgstr "Temporisation de connexion en secondes" msgctxt "#30007" msgid "Response timeout in seconds" msgstr "Temporisation de réponse en secondes" msgctxt "#30100" -msgid "Data Transfer" -msgstr "Transfert de données" +msgid "Tvheadend transcoding settings" +msgstr "Paramètres de transcodage pour Tvheadend" msgctxt "#30101" -msgid "Asynchronous EPG transfer" -msgstr "Transfert EPG asynchronisé" +msgid "Transcoding settings" +msgstr "Paramètres de transcodage" -msgctxt "#30200" -msgid "Debugging" -msgstr "Débogage" - -msgctxt "#30201" -msgid "Trace (detailed)" -msgstr "Trace (détaillé)" +msgctxt "#30102" +msgid "Enable transcoding" +msgstr "Activer le transcodage" + +msgctxt "#30103" +msgid "Audio codec" +msgstr "Codec audio" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Codec vidéo" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Résolution" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "Déconnecté de '%s'" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "Reconnecté à '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/French (Canada)/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/French (Canada)/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/French (Canada)/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/French (Canada)/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -17,31 +17,27 @@ "Plural-Forms: nplurals=2; plural=(n > 1);\n" msgctxt "#30000" -msgid "Connection Settings" -msgstr "Paramètres de connexion" - -msgctxt "#30001" msgid "Tvheadend hostname or IP address" msgstr "Nom d'hôte ou adresse IP de Tvheadend " -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "Port HTTP" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "Port HTSP" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "Nom d'utilisateur" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Mot de passe" msgctxt "#30006" -msgid "Connection timeout in seconds" +msgid "Connect timeout in seconds" msgstr "Délai d'attente de connexion en secondes" msgctxt "#30007" @@ -49,17 +45,33 @@ msgstr "Délai d'attente de réponse en secondes" msgctxt "#30100" -msgid "Data Transfer" -msgstr "Transfert de données" +msgid "Tvheadend transcoding settings" +msgstr "Paramètres de transcodage de Tvheadend" msgctxt "#30101" -msgid "Asynchronous EPG transfer" -msgstr "Transfert asynchrone de l'ÉGP" +msgid "Transcoding settings" +msgstr "Paramètres de transcodage" -msgctxt "#30200" -msgid "Debugging" -msgstr "Débogage" - -msgctxt "#30201" -msgid "Trace (detailed)" -msgstr "Trace (détaillée)" +msgctxt "#30102" +msgid "Enable transcoding" +msgstr "Activer le transcodage" + +msgctxt "#30103" +msgid "Audio codec" +msgstr "Codec audio" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Codec vidéo" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Résolution" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "Se déconnecter de « %s »" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "Se reconnecter à « %s »" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Galician/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Galician/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Galician/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Galician/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -17,31 +17,27 @@ "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgctxt "#30000" -msgid "Connection Settings" -msgstr "Configuración da Conexión" - -msgctxt "#30001" msgid "Tvheadend hostname or IP address" msgstr "Nome do host ou enderezo IP" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "Porto HTTP" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "Porto HTSP" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "Nome de usuario" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Contrasinal" msgctxt "#30006" -msgid "Connection timeout in seconds" +msgid "Connect timeout in seconds" msgstr "Tempo de espera da conexión en segundos" msgctxt "#30007" @@ -49,13 +45,33 @@ msgstr "Tempo de espera da resposta en segundos" msgctxt "#30100" -msgid "Data Transfer" -msgstr "Transferencia de datos" +msgid "Tvheadend transcoding settings" +msgstr "Axustes da transcodificación de Tvheadend" msgctxt "#30101" -msgid "Asynchronous EPG transfer" -msgstr "Transferencia asíncrona da Guía" +msgid "Transcoding settings" +msgstr "Axustes da transcodificación" -msgctxt "#30200" -msgid "Debugging" -msgstr "Depuración" +msgctxt "#30102" +msgid "Enable transcoding" +msgstr "Habilitar a transcodificación" + +msgctxt "#30103" +msgid "Audio codec" +msgstr "Códec de audio" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Códec de vídeo" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Resolución" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "Desconectado dende '%s'" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "Reconectado a '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Georgian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Georgian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Georgian/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Georgian/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -16,26 +16,62 @@ "Language: ka\n" "Plural-Forms: nplurals=1; plural=0;\n" -msgctxt "#30001" +msgctxt "#30000" msgid "Tvheadend hostname or IP address" msgstr "Tvheadend-ის სერვერის სახელი ან IP მისამართი" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "HTTP პორტი" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "HTSP პორტი" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "მომხმარებელი" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "პაროლი" +msgctxt "#30006" +msgid "Connect timeout in seconds" +msgstr "შეერთების დაგვიანება წამებში" + msgctxt "#30007" msgid "Response timeout in seconds" msgstr "პასუხის დაგვიანება წამებში" + +msgctxt "#30100" +msgid "Tvheadend transcoding settings" +msgstr "Tvheadend ტრანსკოდირების პარამეტრები" + +msgctxt "#30101" +msgid "Transcoding settings" +msgstr "ტრანსკოდირების პარამეტრები" + +msgctxt "#30102" +msgid "Enable transcoding" +msgstr "ტრანსკოდირების ჩართვა" + +msgctxt "#30103" +msgid "Audio codec" +msgstr "აუდიო კოდეკი" + +msgctxt "#30104" +msgid "Video codec" +msgstr "ვიდეო კოდეკი" + +msgctxt "#30105" +msgid "Resolution" +msgstr "გარჩევადობა" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "'%s' გამოირთო" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "'%s' ისევ შეერთდა" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/German/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/German/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/German/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/German/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -17,49 +17,61 @@ "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgctxt "#30000" -msgid "Connection Settings" -msgstr "Verbindungs Einstellungen" - -msgctxt "#30001" msgid "Tvheadend hostname or IP address" msgstr "Tvheadend-Hostname oder IP-Adresse" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "HTTP-Port" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "HTSP-Port" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "Benutzername" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Passwort" msgctxt "#30006" -msgid "Connection timeout in seconds" -msgstr "Zeitüberschreitung der Verbindung in Sekunden" +msgid "Connect timeout in seconds" +msgstr "Verbindungszeitüberschreitung in Sekunden" msgctxt "#30007" msgid "Response timeout in seconds" msgstr "Antwortzeitüberschreitung in Sekunden" msgctxt "#30100" -msgid "Data Transfer" -msgstr "Datentransfer" +msgid "Tvheadend transcoding settings" +msgstr "Tvheadend-Transkodierungseinstellungen" msgctxt "#30101" -msgid "Asynchronous EPG transfer" -msgstr "Asynchroner EPG Transfer" +msgid "Transcoding settings" +msgstr "Transkodierungseinstellungen" -msgctxt "#30200" -msgid "Debugging" -msgstr "Defektlokalisierung" - -msgctxt "#30201" -msgid "Trace (detailed)" -msgstr "Verfolgung (Detailiert)" +msgctxt "#30102" +msgid "Enable transcoding" +msgstr "Transkodierung aktivieren" + +msgctxt "#30103" +msgid "Audio codec" +msgstr "Audiocodec" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Videocodec" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Auflösung" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "Getrennt von '%s'" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "Wieder verbunden mit '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Greek/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Greek/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Greek/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Greek/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -17,31 +17,27 @@ "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgctxt "#30000" -msgid "Connection Settings" -msgstr "Ρυθμίσεις Σύνδεσης" - -msgctxt "#30001" msgid "Tvheadend hostname or IP address" msgstr "Όνομα Υπολογιστή ή διεύθυνση IP του Tvheadend" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "Θύρα HTTP" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "Θύρα HTSP" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "Όνομα χρήστη" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Κωδικός πρόσβασης" msgctxt "#30006" -msgid "Connection timeout in seconds" +msgid "Connect timeout in seconds" msgstr "Χρονικό όριο σύνδεσης σε δευτερόλεπτα" msgctxt "#30007" @@ -49,17 +45,33 @@ msgstr "Χρόνος απόκρισης σε δευτερόλεπτα" msgctxt "#30100" -msgid "Data Transfer" -msgstr "Μεταφορά Δεδομένων" +msgid "Tvheadend transcoding settings" +msgstr "Ρυθμίσεις διακωδικοποίησης του Tvheadend" msgctxt "#30101" -msgid "Asynchronous EPG transfer" -msgstr "Ασύγχρονη μεταφορά EPG" +msgid "Transcoding settings" +msgstr "Ρυθμίσεις διακωδικοποίησης" -msgctxt "#30200" -msgid "Debugging" -msgstr "Εντοπισμός σφαλμάτων" - -msgctxt "#30201" -msgid "Trace (detailed)" -msgstr "Ανίχνευση (αναλυτικά)" +msgctxt "#30102" +msgid "Enable transcoding" +msgstr "Ενεργοποίηση διακωδικοποίησης" + +msgctxt "#30103" +msgid "Audio codec" +msgstr "Κωδικοποίηση ήχου" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Κωδικοποίηση βίντεο" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Ανάλυση" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "Αποσύνδεση από '%s'" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "Επανασύνδεση σε '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Haitian (Haitian Creole)/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Haitian (Haitian Creole)/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Haitian (Haitian Creole)/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Haitian (Haitian Creole)/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -16,10 +16,10 @@ "Language: ht\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "nom itilizateur" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "mo de pas" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Hebrew/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Hebrew/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Hebrew/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Hebrew/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -17,31 +17,27 @@ "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgctxt "#30000" -msgid "Connection Settings" -msgstr "הגדרות חיבור" - -msgctxt "#30001" msgid "Tvheadend hostname or IP address" msgstr "שם מארח או כתובת IP" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "פורט HTTP" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "פורט HTSP" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "שם משתמש" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "סיסמה" msgctxt "#30006" -msgid "Connection timeout in seconds" +msgid "Connect timeout in seconds" msgstr "זמן מירבי לניסיון חיבור בשניות" msgctxt "#30007" @@ -49,17 +45,33 @@ msgstr "זמן המתנה מירבי לתגובה בשניות" msgctxt "#30100" -msgid "Data Transfer" -msgstr "העברת נתונים" +msgid "Tvheadend transcoding settings" +msgstr "הגדרות קידוד מחדש" msgctxt "#30101" -msgid "Asynchronous EPG transfer" -msgstr "העברת מדריך שידורים אסינכרונית" +msgid "Transcoding settings" +msgstr "הגדרות קידוד מחדש" -msgctxt "#30200" -msgid "Debugging" -msgstr "ניפוי שגיאות" - -msgctxt "#30201" -msgid "Trace (detailed)" -msgstr "מעקב תקשורת (מפורט)" +msgctxt "#30102" +msgid "Enable transcoding" +msgstr "אפשר קידוד מחדש" + +msgctxt "#30103" +msgid "Audio codec" +msgstr "מקודד שמע" + +msgctxt "#30104" +msgid "Video codec" +msgstr "מקודד וידאו" + +msgctxt "#30105" +msgid "Resolution" +msgstr "אבחנה" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "נותק מ־'%s'" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "חובר חזרה ל־'%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Hindi (Devanagiri)/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Hindi (Devanagiri)/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Hindi (Devanagiri)/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Hindi (Devanagiri)/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -16,10 +16,10 @@ "Language: hi\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "उपयोगकर्ता नाम" -msgctxt "#30200" -msgid "Debugging" -msgstr "डिबगिंग" +msgctxt "#30105" +msgid "Resolution" +msgstr "संकल्प" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Hungarian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Hungarian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Hungarian/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Hungarian/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -17,49 +17,61 @@ "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgctxt "#30000" -msgid "Connection Settings" -msgstr "Kapcsolódási beállítások" - -msgctxt "#30001" msgid "Tvheadend hostname or IP address" msgstr "TVHeadend kiszolgálónév vagy IP cím" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "HTTP Port" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "HTSP port" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "Felhasználónév" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Jelszó" msgctxt "#30006" -msgid "Connection timeout in seconds" -msgstr "Kapcsolódási időtullépés másodpercben" +msgid "Connect timeout in seconds" +msgstr "Kapcsolódási időkorlát másodpercben" msgctxt "#30007" msgid "Response timeout in seconds" msgstr "Válasz időkorlát másodpercben" msgctxt "#30100" -msgid "Data Transfer" -msgstr "Adatátvitel" +msgid "Tvheadend transcoding settings" +msgstr "TV fejállomás átkódolási beállítások" msgctxt "#30101" -msgid "Asynchronous EPG transfer" -msgstr "Asszinkron EPG átvitel" +msgid "Transcoding settings" +msgstr "Átkódolási beállítások" -msgctxt "#30200" -msgid "Debugging" -msgstr "Hibakeresés" - -msgctxt "#30201" -msgid "Trace (detailed)" -msgstr "Nyomonkövetés (részletes)" +msgctxt "#30102" +msgid "Enable transcoding" +msgstr "Átkódolási beállítások engedélyezése" + +msgctxt "#30103" +msgid "Audio codec" +msgstr "Hang codec" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Videó codec" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Felbontás" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "'%s': Kapcsolat bontva" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "'%s': Újrakapcsolódva" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Icelandic/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Icelandic/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Icelandic/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Icelandic/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -16,30 +16,62 @@ "Language: is\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -msgctxt "#30001" +msgctxt "#30000" msgid "Tvheadend hostname or IP address" msgstr "Nafn eða IP tala Tvheadend" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "HTTP gátt" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "HTSP gátt" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "Notandanafn" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Lykilorð" +msgctxt "#30006" +msgid "Connect timeout in seconds" +msgstr "Tímatakmörk tengingar í sekúndum" + msgctxt "#30007" msgid "Response timeout in seconds" msgstr "Tímatakmörk svartíma í sekúndum" -msgctxt "#30200" -msgid "Debugging" -msgstr "Kembing" +msgctxt "#30100" +msgid "Tvheadend transcoding settings" +msgstr "Stillingar umkóðara Tvheadend" + +msgctxt "#30101" +msgid "Transcoding settings" +msgstr "Stillingar umkóðara" + +msgctxt "#30102" +msgid "Enable transcoding" +msgstr "Virkja umkóðun" + +msgctxt "#30103" +msgid "Audio codec" +msgstr "Hljóðkóðari" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Myndkóðari" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Upplausn" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "Aftengdur frá '%s'" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "Endurtengdur við '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Indonesian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Indonesian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Indonesian/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Indonesian/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -16,30 +16,62 @@ "Language: id\n" "Plural-Forms: nplurals=1; plural=0;\n" -msgctxt "#30001" +msgctxt "#30000" msgid "Tvheadend hostname or IP address" msgstr "Hostname atau alamat IP Tvheadend" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "Port HTTP" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "Port HTSP" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" -msgstr "Nama Pengguna" +msgstr "NamaPengguna" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" -msgstr "Sandi" +msgstr "Password" + +msgctxt "#30006" +msgid "Connect timeout in seconds" +msgstr "Timeout Koneksi dalam detik" msgctxt "#30007" msgid "Response timeout in seconds" msgstr "Timeout response dalam deti" -msgctxt "#30200" -msgid "Debugging" -msgstr "Debugging" +msgctxt "#30100" +msgid "Tvheadend transcoding settings" +msgstr "Pengaturan transcoding Tvheadend" + +msgctxt "#30101" +msgid "Transcoding settings" +msgstr "Pengaturan Transcoding" + +msgctxt "#30102" +msgid "Enable transcoding" +msgstr "Fungsikan Transcoding" + +msgctxt "#30103" +msgid "Audio codec" +msgstr "Kodek Audio" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Kodek video" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Resolusi" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "Terputus dari '%s'" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "Tersambung lagi pada '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Italian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Italian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Italian/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Italian/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -17,49 +17,61 @@ "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgctxt "#30000" -msgid "Connection Settings" -msgstr "Impostazioni di connessione" - -msgctxt "#30001" msgid "Tvheadend hostname or IP address" msgstr "Tvheadend hostname o indirizzo IP" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "Porta HTTP" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "Porta HTSP" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "Nome utente" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Password" msgctxt "#30006" -msgid "Connection timeout in seconds" -msgstr "Timeout di connessione in secondi" +msgid "Connect timeout in seconds" +msgstr "Timeout della connessione in secondi" msgctxt "#30007" msgid "Response timeout in seconds" msgstr "Timeout della risposta in secondi" msgctxt "#30100" -msgid "Data Transfer" -msgstr "Trasferimento dati" +msgid "Tvheadend transcoding settings" +msgstr "Impostazioni principali transcodifica TV" msgctxt "#30101" -msgid "Asynchronous EPG transfer" -msgstr "Trasferimento EPG asincrono" +msgid "Transcoding settings" +msgstr "Impostazioni transcodifica" -msgctxt "#30200" -msgid "Debugging" -msgstr "Debugging" - -msgctxt "#30201" -msgid "Trace (detailed)" -msgstr "Traccia (dettagliata)" +msgctxt "#30102" +msgid "Enable transcoding" +msgstr "Abilita transcodifica" + +msgctxt "#30103" +msgid "Audio codec" +msgstr "Codec audio" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Codec video" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Risoluzione" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "Disconnesso da '%s'" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "Riconnesso a '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Japanese/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Japanese/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Japanese/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Japanese/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -16,30 +16,62 @@ "Language: ja\n" "Plural-Forms: nplurals=1; plural=0;\n" -msgctxt "#30001" +msgctxt "#30000" msgid "Tvheadend hostname or IP address" msgstr "TVheadend ホスト名または IP アドレス" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "HTTP ポート" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "HTSP ポート" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "ユーザー名" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "パスワード" +msgctxt "#30006" +msgid "Connect timeout in seconds" +msgstr "接続タイムアウト (秒)" + msgctxt "#30007" msgid "Response timeout in seconds" msgstr "レスポンスのタイムアウト (秒)" -msgctxt "#30200" -msgid "Debugging" -msgstr "デバッグ" +msgctxt "#30100" +msgid "Tvheadend transcoding settings" +msgstr "Tvheadend のトランスコードを設定" + +msgctxt "#30101" +msgid "Transcoding settings" +msgstr "トランスコード設定" + +msgctxt "#30102" +msgid "Enable transcoding" +msgstr "トランスコードを有効化" + +msgctxt "#30103" +msgid "Audio codec" +msgstr "オーディオコーデック" + +msgctxt "#30104" +msgid "Video codec" +msgstr "ビデオコーデック" + +msgctxt "#30105" +msgid "Resolution" +msgstr "画面解像度" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "'%s' との接続が切れました" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "'%s' との接続が復活しました" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Korean/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Korean/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Korean/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Korean/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -17,49 +17,61 @@ "Plural-Forms: nplurals=1; plural=0;\n" msgctxt "#30000" -msgid "Connection Settings" -msgstr "연결 설정" - -msgctxt "#30001" msgid "Tvheadend hostname or IP address" msgstr "Tvheadend 호스트네임 또는 IP 주소" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "HTTP 포트" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "HTSP 포트" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "사용자명" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "비밀번호" msgctxt "#30006" -msgid "Connection timeout in seconds" -msgstr "연결 타임아웃 (초)" +msgid "Connect timeout in seconds" +msgstr "연결시간 제한 (초)" msgctxt "#30007" msgid "Response timeout in seconds" msgstr "응답시간 제한 (초)" msgctxt "#30100" -msgid "Data Transfer" -msgstr "데이터 전송" +msgid "Tvheadend transcoding settings" +msgstr "Tvheadend 트랜스코딩 설정" msgctxt "#30101" -msgid "Asynchronous EPG transfer" -msgstr "비동기 EPG 전송" +msgid "Transcoding settings" +msgstr "트랜스코딩 설정" -msgctxt "#30200" -msgid "Debugging" -msgstr "디버깅" - -msgctxt "#30201" -msgid "Trace (detailed)" -msgstr "추적 (상세)" +msgctxt "#30102" +msgid "Enable transcoding" +msgstr "트랜스코딩 사용" + +msgctxt "#30103" +msgid "Audio codec" +msgstr "오디오 코덱" + +msgctxt "#30104" +msgid "Video codec" +msgstr "비디오 코덱" + +msgctxt "#30105" +msgid "Resolution" +msgstr "해상도" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "'%s' 연결 해제됨" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "'%s' 다시 연결됨" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Latvian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Latvian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Latvian/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Latvian/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -16,30 +16,62 @@ "Language: lv\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n" -msgctxt "#30001" +msgctxt "#30000" msgid "Tvheadend hostname or IP address" msgstr "Tvheadend saimniekvārds vai IP adrese" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "HTTP ports" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "HTSP ports" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "LIetotājvārds" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Parole" +msgctxt "#30006" +msgid "Connect timeout in seconds" +msgstr "Savienojuma noilgums sekundēs" + msgctxt "#30007" msgid "Response timeout in seconds" msgstr "Atbildes noilgums sekundēs" -msgctxt "#30200" -msgid "Debugging" -msgstr "Atkļūdošana" +msgctxt "#30100" +msgid "Tvheadend transcoding settings" +msgstr "Tvheadend pārkodēšanas iestatījumi" + +msgctxt "#30101" +msgid "Transcoding settings" +msgstr "Transkodēšanas iestatījumi" + +msgctxt "#30102" +msgid "Enable transcoding" +msgstr "Ieslēgt transkodēšanu" + +msgctxt "#30103" +msgid "Audio codec" +msgstr "Audio kodeks" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Video kodeks" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Izšķirtspēja" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "Atvienots no '%s'" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "Atkal savienots '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Lithuanian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Lithuanian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Lithuanian/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Lithuanian/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -17,49 +17,61 @@ "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n" msgctxt "#30000" -msgid "Connection Settings" -msgstr "Prisijungimo nustatymai" - -msgctxt "#30001" msgid "Tvheadend hostname or IP address" msgstr "Tvheadend host pavadinimas arba IP adresas" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "HTTP portas" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "HTSP portas" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "Vartotojo vardas" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Slaptažodis" msgctxt "#30006" -msgid "Connection timeout in seconds" -msgstr "Prisijungimo laukimo laikas sekundėmis" +msgid "Connect timeout in seconds" +msgstr "Prisijungimo užlaikymas sek." msgctxt "#30007" msgid "Response timeout in seconds" msgstr "Atsakymo laikas sek." msgctxt "#30100" -msgid "Data Transfer" -msgstr "Duomenų perkėlimas" +msgid "Tvheadend transcoding settings" +msgstr "Tvheadend transkodavimo nustatymai" msgctxt "#30101" -msgid "Asynchronous EPG transfer" -msgstr "Asinchroninis EPG perdavimas" +msgid "Transcoding settings" +msgstr "Transkodavimo nustatymai" -msgctxt "#30200" -msgid "Debugging" -msgstr "Derinimas" - -msgctxt "#30201" -msgid "Trace (detailed)" -msgstr "Sekti (išsamiai)" +msgctxt "#30102" +msgid "Enable transcoding" +msgstr "Įjungti transkodavimą" + +msgctxt "#30103" +msgid "Audio codec" +msgstr "Audio kodekai" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Vaizdo kodekai" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Rezoliucija" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "Atsijungta nuo '%s'" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "Prisijungta prie '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Macedonian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Macedonian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Macedonian/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Macedonian/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -16,30 +16,62 @@ "Language: mk\n" "Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n" -msgctxt "#30001" +msgctxt "#30000" msgid "Tvheadend hostname or IP address" msgstr "Tvheadend хост или IP адреса" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "HTTP порта" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "HTSP порта" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "Корисничко име" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Лозинка" +msgctxt "#30006" +msgid "Connect timeout in seconds" +msgstr "Тајмаут за поврзување во секунди" + msgctxt "#30007" msgid "Response timeout in seconds" msgstr "Тајмаут на реакција во секунди" -msgctxt "#30200" -msgid "Debugging" -msgstr "Барање грешки" +msgctxt "#30100" +msgid "Tvheadend transcoding settings" +msgstr "Поставки за транскодирање на Tvheadend" + +msgctxt "#30101" +msgid "Transcoding settings" +msgstr "Поставки за транскодирање" + +msgctxt "#30102" +msgid "Enable transcoding" +msgstr "Активирај транскодирање" + +msgctxt "#30103" +msgid "Audio codec" +msgstr "Аудио кодек" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Видео кодек" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Резолуција" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "Дисконектиран од '%s'" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "Повторно поврзан со '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Malay/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Malay/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Malay/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Malay/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -16,26 +16,62 @@ "Language: ms\n" "Plural-Forms: nplurals=1; plural=0;\n" -msgctxt "#30001" +msgctxt "#30000" msgid "Tvheadend hostname or IP address" msgstr "Nama hos atau alamat IP Tvheadend" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "Port HTTP" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "Port HTSP" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "Nama Pengguna" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Kata Laluan" +msgctxt "#30006" +msgid "Connect timeout in seconds" +msgstr "Had masa tamat sambung dalam saat" + msgctxt "#30007" msgid "Response timeout in seconds" msgstr "Had masa tamat respons dalam saat" + +msgctxt "#30100" +msgid "Tvheadend transcoding settings" +msgstr "Tetapan transkod " + +msgctxt "#30101" +msgid "Transcoding settings" +msgstr "Tetapan transkod" + +msgctxt "#30102" +msgid "Enable transcoding" +msgstr "Benarkan transkod" + +msgctxt "#30103" +msgid "Audio codec" +msgstr "Kodeks audio" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Kodeks video" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Resolusi" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "Terputus dari '%s'" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "Bersambung semula dengan '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Malayalam/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Malayalam/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Malayalam/strings.po 1970-01-01 00:00:00.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Malayalam/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -0,0 +1,21 @@ +# Kodi Media Center language file +# Addon Name: Tvheadend HTSP Client +# Addon id: pvr.hts +# Addon Provider: Lars Op den Kamp, Team XBMC +msgid "" +msgstr "" +"Project-Id-Version: XBMC Main\n" +"Report-Msgid-Bugs-To: http://trac.xbmc.org/\n" +"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Kodi Translation Team\n" +"Language-Team: Malayalam (http://www.transifex.com/projects/p/xbmc-main/language/ml/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ml\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgctxt "#30105" +msgid "Resolution" +msgstr "വ്യക്തത" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Maltese/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Maltese/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Maltese/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Maltese/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -16,10 +16,14 @@ "Language: mt\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : n==0 || ( n%100>1 && n%100<11) ? 1 : (n%100>10 && n%100<20 ) ? 2 : 3);\n" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "Username" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Sigriet" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Resolution:" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Maori/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Maori/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Maori/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Maori/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -16,14 +16,22 @@ "Language: mi\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "Ingoa kaiwhakamahi" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Kupuhipa" -msgctxt "#30200" -msgid "Debugging" -msgstr "Patuiro" +msgctxt "#30103" +msgid "Audio codec" +msgstr "Kōtēke Ororongo" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Kōtēke Ataata" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Taumira" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Mongolian (Mongolia)/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Mongolian (Mongolia)/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Mongolian (Mongolia)/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Mongolian (Mongolia)/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -16,26 +16,62 @@ "Language: mn_MN\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -msgctxt "#30001" +msgctxt "#30000" msgid "Tvheadend hostname or IP address" msgstr "Tvheadend нэр эсвэл IP хаяг" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "HTTP порт" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "HTSP порт" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "Хэрэглэгчийн нэр" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Нууц үг" +msgctxt "#30006" +msgid "Connect timeout in seconds" +msgstr "Холболтын хугацаа хэтрэлт, секундээр" + msgctxt "#30007" msgid "Response timeout in seconds" msgstr "Хариу хугацаа хэтрэлт, секундээр" + +msgctxt "#30100" +msgid "Tvheadend transcoding settings" +msgstr "Tvheadend код хөрвүүлэлтийн тохиргоо" + +msgctxt "#30101" +msgid "Transcoding settings" +msgstr "Код хөрвүүлэлтийн тохиргоо" + +msgctxt "#30102" +msgid "Enable transcoding" +msgstr "Код хөрвүүлэлтийг идэвхижүүлэх" + +msgctxt "#30103" +msgid "Audio codec" +msgstr "Аудио кодек" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Видео кодек" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Нягтаршил" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "'%s'-с салгагдлаа" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "'%s'-д дахин холбогдлоо" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Norwegian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Norwegian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Norwegian/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Norwegian/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -16,30 +16,62 @@ "Language: no\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -msgctxt "#30001" +msgctxt "#30000" msgid "Tvheadend hostname or IP address" msgstr "Tvheadend vertsnavn eller IP-adresse" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "HTTP-port" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "HTSP-port" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "Brukernavn" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Passord" +msgctxt "#30006" +msgid "Connect timeout in seconds" +msgstr "Tidsavbrudd ved tilkobling" + msgctxt "#30007" msgid "Response timeout in seconds" msgstr "Tidsavbrudd ved venting på respons" -msgctxt "#30200" -msgid "Debugging" -msgstr "Feilsøking" +msgctxt "#30100" +msgid "Tvheadend transcoding settings" +msgstr "Innstillinger for Tvheadend-transkoding" + +msgctxt "#30101" +msgid "Transcoding settings" +msgstr "Innstillinger for transkoding" + +msgctxt "#30102" +msgid "Enable transcoding" +msgstr "Aktiver transkoding" + +msgctxt "#30103" +msgid "Audio codec" +msgstr "Lydkodek" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Videokodek" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Oppløsning" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "Koblet fra '%s'" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "Koblet til på nytt til '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Persian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Persian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Persian/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Persian/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -16,10 +16,10 @@ "Language: fa\n" "Plural-Forms: nplurals=1; plural=0;\n" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "نام کاربری" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "کلمه عبور" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Persian (Iran)/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Persian (Iran)/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Persian (Iran)/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Persian (Iran)/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -16,14 +16,14 @@ "Language: fa_IR\n" "Plural-Forms: nplurals=1; plural=0;\n" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "نام کاربری" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "رمز عبور" -msgctxt "#30200" -msgid "Debugging" -msgstr "دیباگ" +msgctxt "#30105" +msgid "Resolution" +msgstr "رزولیشن" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Polish/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Polish/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Polish/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Polish/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -17,31 +17,27 @@ "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" msgctxt "#30000" -msgid "Connection Settings" -msgstr "Ustawienia połączenia" - -msgctxt "#30001" msgid "Tvheadend hostname or IP address" msgstr "Nazwa hosta lub adres IP" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "Port HTTP" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "Port HTSP" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "Użytkownik" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Hasło" msgctxt "#30006" -msgid "Connection timeout in seconds" +msgid "Connect timeout in seconds" msgstr "Limit czasu połączenia w sekundach" msgctxt "#30007" @@ -49,17 +45,33 @@ msgstr "Limit czasu odpowiedzi w sekundach" msgctxt "#30100" -msgid "Data Transfer" -msgstr "Transfer danych" +msgid "Tvheadend transcoding settings" +msgstr "Ustawienia transkodowania Tvheadend" msgctxt "#30101" -msgid "Asynchronous EPG transfer" -msgstr "Asynchroniczny transfer danych przewodnika" +msgid "Transcoding settings" +msgstr "Ustawienia transkodowania" -msgctxt "#30200" -msgid "Debugging" -msgstr "Diagnostyka" - -msgctxt "#30201" -msgid "Trace (detailed)" -msgstr "Rejestracja (szczegółowa)" +msgctxt "#30102" +msgid "Enable transcoding" +msgstr "Aktywuj transkodowanie" + +msgctxt "#30103" +msgid "Audio codec" +msgstr "Kodek audio" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Kodek wideo" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Rozdzielczość" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "Rozłączono z '%s'" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "Połączono ponownie z '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Portuguese/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Portuguese/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Portuguese/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Portuguese/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -17,49 +17,61 @@ "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgctxt "#30000" -msgid "Connection Settings" -msgstr "Configurações de conexão" - -msgctxt "#30001" msgid "Tvheadend hostname or IP address" msgstr "Nome do servidor Tvheadend ou endereço IP" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "Porta HTTP" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "Porta HTSP" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "Nome de utilizador" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Palavra-passe" msgctxt "#30006" -msgid "Connection timeout in seconds" -msgstr "Tempo limite de conexão em segundos" +msgid "Connect timeout in seconds" +msgstr "Tempo limite para ligação em segundos" msgctxt "#30007" msgid "Response timeout in seconds" msgstr "Tempo limite para resposta em segundos" msgctxt "#30100" -msgid "Data Transfer" -msgstr "Transferência de dados" +msgid "Tvheadend transcoding settings" +msgstr "Definições de transcodificação Tvheadend" msgctxt "#30101" -msgid "Asynchronous EPG transfer" -msgstr "EPG transferência assíncrona" +msgid "Transcoding settings" +msgstr "Definições de transcodificação" -msgctxt "#30200" -msgid "Debugging" -msgstr "Depuração" - -msgctxt "#30201" -msgid "Trace (detailed)" -msgstr "Localizar (detalhada)" +msgctxt "#30102" +msgid "Enable transcoding" +msgstr "Activar transcodificação" + +msgctxt "#30103" +msgid "Audio codec" +msgstr "Codec de áudio" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Codec de vídeo" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Resolução" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "Desligado de '%s'" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "Ligado novamente a '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Portuguese (Brazil)/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Portuguese (Brazil)/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Portuguese (Brazil)/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Portuguese (Brazil)/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -17,31 +17,27 @@ "Plural-Forms: nplurals=2; plural=(n > 1);\n" msgctxt "#30000" -msgid "Connection Settings" -msgstr "Ajustes de Conexão" - -msgctxt "#30001" msgid "Tvheadend hostname or IP address" msgstr "Tvheadend: Hostname ou endereço IP" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "Porta HTTP" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "Porta HTSP" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" -msgstr "Nome de utilizador" +msgstr "Nome do usuário" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Senha" msgctxt "#30006" -msgid "Connection timeout in seconds" +msgid "Connect timeout in seconds" msgstr "Tempo limite para conexão em segundos" msgctxt "#30007" @@ -49,17 +45,33 @@ msgstr "Tempo limite para resposta em segundos" msgctxt "#30100" -msgid "Data Transfer" -msgstr "Transferência de Dados" +msgid "Tvheadend transcoding settings" +msgstr "Ajustes de transcodificação Tvheadend " msgctxt "#30101" -msgid "Asynchronous EPG transfer" -msgstr "Transferência de EPG Assincrônica" +msgid "Transcoding settings" +msgstr "Ajustes de transcodificação" -msgctxt "#30200" -msgid "Debugging" -msgstr "Depurando" - -msgctxt "#30201" -msgid "Trace (detailed)" -msgstr "Trace (detalhado)" +msgctxt "#30102" +msgid "Enable transcoding" +msgstr "Ativar transcodificação" + +msgctxt "#30103" +msgid "Audio codec" +msgstr "Codec de áudio" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Codec de vídeo" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Resolução" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "Desconectado de '%s' " + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "Reconectado a '%s' " diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Romanian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Romanian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Romanian/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Romanian/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -16,30 +16,62 @@ "Language: ro\n" "Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" -msgctxt "#30001" +msgctxt "#30000" msgid "Tvheadend hostname or IP address" msgstr "Nume gazdă sau adresă IP pentru Tvheadend" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "Port HTTP" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "Port HTSP" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "Utilizator" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Parolă" +msgctxt "#30006" +msgid "Connect timeout in seconds" +msgstr "Așteptare conectare în secunde" + msgctxt "#30007" msgid "Response timeout in seconds" msgstr "Așteptare răspuns în secunde" -msgctxt "#30200" -msgid "Debugging" -msgstr "Depanare" +msgctxt "#30100" +msgid "Tvheadend transcoding settings" +msgstr "Setări transcodare Tvheadend" + +msgctxt "#30101" +msgid "Transcoding settings" +msgstr "Setări transcodare" + +msgctxt "#30102" +msgid "Enable transcoding" +msgstr "Activare transcodare" + +msgctxt "#30103" +msgid "Audio codec" +msgstr "Codec audio" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Codec video" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Rezoluție" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "Deconectat de la '%s'" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "Reconectat la '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Russian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Russian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Russian/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Russian/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -17,37 +17,61 @@ "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" msgctxt "#30000" -msgid "Connection Settings" -msgstr "Настройки подключения" - -msgctxt "#30001" msgid "Tvheadend hostname or IP address" msgstr "Имя пользователя или IP-адрес Tvheadend" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "Порт HTTP" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "Порт HTSP" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "Имя пользователя" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Пароль" msgctxt "#30006" -msgid "Connection timeout in seconds" +msgid "Connect timeout in seconds" msgstr "Ожидание подключения (сек.)" msgctxt "#30007" msgid "Response timeout in seconds" msgstr "Ожидание ответа (сек.)" -msgctxt "#30200" -msgid "Debugging" -msgstr "Отладка" +msgctxt "#30100" +msgid "Tvheadend transcoding settings" +msgstr "Настройки транскодинга Tvheadend" + +msgctxt "#30101" +msgid "Transcoding settings" +msgstr "Настройки транскодирования" + +msgctxt "#30102" +msgid "Enable transcoding" +msgstr "Включить транскодинг" + +msgctxt "#30103" +msgid "Audio codec" +msgstr "Кодек аудио" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Кодек видео" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Разрешение" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "Отключен от \"%s\"" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "Переподключен к \"%s\"" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Serbian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Serbian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Serbian/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Serbian/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -16,14 +16,22 @@ "Language: sr\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "Korisničko ime" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Lozinka" -msgctxt "#30200" -msgid "Debugging" -msgstr "Traženje grešaka" +msgctxt "#30103" +msgid "Audio codec" +msgstr "Kodek zvuka" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Video kodek" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Rezolucija" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Serbian (Cyrillic)/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Serbian (Cyrillic)/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Serbian (Cyrillic)/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Serbian (Cyrillic)/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -16,30 +16,50 @@ "Language: sr_RS\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -msgctxt "#30001" +msgctxt "#30000" msgid "Tvheadend hostname or IP address" msgstr "Име хоста или ИП адреса Tvheadend-а" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "HTTP прикључак" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "HTSP прикључак" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "Корисничко име" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Лозинка" +msgctxt "#30006" +msgid "Connect timeout in seconds" +msgstr "Чекање повезивања у секундама" + msgctxt "#30007" msgid "Response timeout in seconds" msgstr "Чекање одговора у секундама" -msgctxt "#30200" -msgid "Debugging" -msgstr "Тражење грешака" +msgctxt "#30103" +msgid "Audio codec" +msgstr "Кодек звука" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Видео кодек" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Резолуција" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "Искључен из '%s'" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "Повово прикључен на '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Sinhala/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Sinhala/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Sinhala/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Sinhala/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -16,22 +16,22 @@ "Language: si\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "HTTP තිර්ථය" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "HTSP තිර්ථය" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "පරිශීලක නම" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "මුරපදය" -msgctxt "#30200" -msgid "Debugging" -msgstr "නිදොස්කරමින් " +msgctxt "#30105" +msgid "Resolution" +msgstr "සම්මතකරනය" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Slovak/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Slovak/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Slovak/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Slovak/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -16,30 +16,62 @@ "Language: sk\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -msgctxt "#30001" +msgctxt "#30000" msgid "Tvheadend hostname or IP address" msgstr "Názov hostiteľa Tvheadend alebo IP adresa" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "HTTP port" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "HTSP port" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" -msgstr "Používateľské meno" +msgstr "Užívateľské meno" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Heslo" +msgctxt "#30006" +msgid "Connect timeout in seconds" +msgstr "Časový limit pre spojenie v sekundách" + msgctxt "#30007" msgid "Response timeout in seconds" msgstr "Časový limit pre odpoveď v sekundách" -msgctxt "#30200" -msgid "Debugging" -msgstr "Ladenie / Debug" +msgctxt "#30100" +msgid "Tvheadend transcoding settings" +msgstr "Nastavenie Tvheadend prekódovania" + +msgctxt "#30101" +msgid "Transcoding settings" +msgstr "Nastavenie prekódovania" + +msgctxt "#30102" +msgid "Enable transcoding" +msgstr "Povoliť prekódovanie" + +msgctxt "#30103" +msgid "Audio codec" +msgstr "Koded audia" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Kodek videa" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Rozlíšenie" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "Odpojené od '%s'" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "Opätovne pripojené k '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Slovenian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Slovenian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Slovenian/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Slovenian/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -17,31 +17,27 @@ "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" msgctxt "#30000" -msgid "Connection Settings" -msgstr "Nastavitve povezave" - -msgctxt "#30001" msgid "Tvheadend hostname or IP address" msgstr "Ime gostitelja ali IP strežnika Tvheadend" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "Vrata HTTP" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "Vrata HTSP" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "Uporabniško ime" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Geslo" msgctxt "#30006" -msgid "Connection timeout in seconds" +msgid "Connect timeout in seconds" msgstr "Časovni pretek povezave v sekundah" msgctxt "#30007" @@ -49,17 +45,33 @@ msgstr "Časovni pretek odgovora v sekundah" msgctxt "#30100" -msgid "Data Transfer" -msgstr "Prenos podatkov" +msgid "Tvheadend transcoding settings" +msgstr "Nastavitve pretvarjanja za Tvheadend" msgctxt "#30101" -msgid "Asynchronous EPG transfer" -msgstr "Asinhroni prenos EPG" +msgid "Transcoding settings" +msgstr "Nastavitve pretvarjanja" -msgctxt "#30200" -msgid "Debugging" -msgstr "Razhroščevanje" - -msgctxt "#30201" -msgid "Trace (detailed)" -msgstr "Sledi (podrobno)" +msgctxt "#30102" +msgid "Enable transcoding" +msgstr "Vključi pretvarjanje" + +msgctxt "#30103" +msgid "Audio codec" +msgstr "Zvočni kodek" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Slikovni kodek" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Ločljivost" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "Povezava prekinjena z '%s'" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "Povezava vzpostavljena z '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Spanish/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Spanish/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Spanish/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Spanish/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -17,31 +17,27 @@ "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgctxt "#30000" -msgid "Connection Settings" -msgstr "Ajustes de Conexión" - -msgctxt "#30001" msgid "Tvheadend hostname or IP address" msgstr "Tvheadend nombre o dirección IP" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "Puerto HTTP" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "Puerto HTSP" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "Usuario" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Contraseña" msgctxt "#30006" -msgid "Connection timeout in seconds" +msgid "Connect timeout in seconds" msgstr "Tiempo de espera de conexión en segundos" msgctxt "#30007" @@ -49,17 +45,33 @@ msgstr "Tiempo de espera de respuesta en segundos" msgctxt "#30100" -msgid "Data Transfer" -msgstr "Transferencia de Datos" +msgid "Tvheadend transcoding settings" +msgstr "Ajustes de transcodificación de Tvheadend" msgctxt "#30101" -msgid "Asynchronous EPG transfer" -msgstr "Transferencia asíncrona de EPG" +msgid "Transcoding settings" +msgstr "Ajustes de transcodificación" -msgctxt "#30200" -msgid "Debugging" -msgstr "Depuración" - -msgctxt "#30201" -msgid "Trace (detailed)" -msgstr "Traza (detallada)" +msgctxt "#30102" +msgid "Enable transcoding" +msgstr "Habilitar la transcodificación" + +msgctxt "#30103" +msgid "Audio codec" +msgstr "Códec de audio" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Códec de vídeo" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Resolución" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "Desconectado de '%s'" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "Reconectado a '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Spanish (Argentina)/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Spanish (Argentina)/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Spanish (Argentina)/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Spanish (Argentina)/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -17,49 +17,61 @@ "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgctxt "#30000" -msgid "Connection Settings" -msgstr "Ajuste de conexión" - -msgctxt "#30001" msgid "Tvheadend hostname or IP address" msgstr "Tvheadend nombre o dirección IP" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "Puerto HTTP" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "Puerto HTSP" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "Usuario" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Contraseña" msgctxt "#30006" -msgid "Connection timeout in seconds" -msgstr "Tiempo de espera máxima de conexión en segundos" +msgid "Connect timeout in seconds" +msgstr "Tiempo de espera de conexión en segundos" msgctxt "#30007" msgid "Response timeout in seconds" msgstr "Tiempo de espera de respuesta en segundos" msgctxt "#30100" -msgid "Data Transfer" -msgstr "Transferencia de datos" +msgid "Tvheadend transcoding settings" +msgstr "Ajuste de transcodificación de TVheadend" msgctxt "#30101" -msgid "Asynchronous EPG transfer" -msgstr "Transferencia de EPG asíncrona" +msgid "Transcoding settings" +msgstr "Ajuste de transcodificación" -msgctxt "#30200" -msgid "Debugging" -msgstr "Depuración" - -msgctxt "#30201" -msgid "Trace (detailed)" -msgstr "Traza (detallada)" +msgctxt "#30102" +msgid "Enable transcoding" +msgstr "ctivar transcodificación" + +msgctxt "#30103" +msgid "Audio codec" +msgstr "Códec de audio" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Códec de video" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Resolución" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "Desconectado de '%s'" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "Reconectado a '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Spanish (Mexico)/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Spanish (Mexico)/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Spanish (Mexico)/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Spanish (Mexico)/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -16,22 +16,38 @@ "Language: es_MX\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "Puerto HTTP" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "Puerto HTSP" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "Usuario" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Contraseña" -msgctxt "#30200" -msgid "Debugging" -msgstr "Debugging" +msgctxt "#30103" +msgid "Audio codec" +msgstr "Códec de audio" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Códec de video" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Resolución" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "Desconectado desde '%s'" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "Reconectado a '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Swedish/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Swedish/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Swedish/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Swedish/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -17,31 +17,27 @@ "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgctxt "#30000" -msgid "Connection Settings" -msgstr "Anslutningsinställningar" - -msgctxt "#30001" msgid "Tvheadend hostname or IP address" msgstr "Tvheadend värdnamn eller IP-adress" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "HTTP-port" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "HTSP-port" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "Användarnamn" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Lösenord" msgctxt "#30006" -msgid "Connection timeout in seconds" +msgid "Connect timeout in seconds" msgstr "Anslutningstimeout i sekunder" msgctxt "#30007" @@ -49,17 +45,33 @@ msgstr "Responstimeout i sekunder" msgctxt "#30100" -msgid "Data Transfer" -msgstr "Dataöverföring" +msgid "Tvheadend transcoding settings" +msgstr "Tvheadend omkodningsinställningar" msgctxt "#30101" -msgid "Asynchronous EPG transfer" -msgstr "Asynkron EPG-överföring" +msgid "Transcoding settings" +msgstr "Omkodningsinställningar" -msgctxt "#30200" -msgid "Debugging" -msgstr "Debuggning" - -msgctxt "#30201" -msgid "Trace (detailed)" -msgstr "Trace (detaljerad)" +msgctxt "#30102" +msgid "Enable transcoding" +msgstr "Aktivera omkodning" + +msgctxt "#30103" +msgid "Audio codec" +msgstr "Ljudcodec" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Videocodec" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Upplösning" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "Koppa från '%s'" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "Återanslut till '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Tajik/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Tajik/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Tajik/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Tajik/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -16,30 +16,62 @@ "Language: tg\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -msgctxt "#30001" +msgctxt "#30000" msgid "Tvheadend hostname or IP address" msgstr "Суроғаи IP ва номи мизбони Tvheadend" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "Порти HTTP" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "Порти HTSP" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "Номи корбар" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Парол" +msgctxt "#30006" +msgid "Connect timeout in seconds" +msgstr "Хотимаи вақти пайваст дар сонияҳо" + msgctxt "#30007" msgid "Response timeout in seconds" msgstr "Хотимаи вақти посух дар сонияҳо" -msgctxt "#30200" -msgid "Debugging" -msgstr "Ислоҳи хатоҳо" +msgctxt "#30100" +msgid "Tvheadend transcoding settings" +msgstr "Танзимоти рамзгузории Tvheadend" + +msgctxt "#30101" +msgid "Transcoding settings" +msgstr "Танзимоти рамзгузорӣ" + +msgctxt "#30102" +msgid "Enable transcoding" +msgstr "Фаъол кардани рамзгузорӣ" + +msgctxt "#30103" +msgid "Audio codec" +msgstr "Кодеки аудио" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Кодеки видео" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Возеҳӣ" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "Пайваст бо '%s' қатъ шудааст" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "Пайваст бо '%s' барқарор шудааст" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Tamil (India)/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Tamil (India)/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Tamil (India)/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Tamil (India)/strings.po 1970-01-01 00:00:00.000000000 +0000 @@ -1,41 +0,0 @@ -# Kodi Media Center language file -# Addon Name: Tvheadend HTSP Client -# Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp -msgid "" -msgstr "" -"Project-Id-Version: XBMC Main\n" -"Report-Msgid-Bugs-To: http://trac.xbmc.org/\n" -"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Kodi Translation Team\n" -"Language-Team: Tamil (India) (http://www.transifex.com/projects/p/xbmc-main/language/ta_IN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ta_IN\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgctxt "#30001" -msgid "Tvheadend hostname or IP address" -msgstr "Tvheadend பின்தள புரவலன் பெயர் அல்லது ஐபி" - -msgctxt "#30002" -msgid "HTTP port" -msgstr "HTTP துறை" - -msgctxt "#30003" -msgid "HTSP port" -msgstr "HTSP துறை" - -msgctxt "#30004" -msgid "Username" -msgstr "பயனர்பெயர்" - -msgctxt "#30005" -msgid "Password" -msgstr "அடையாளச் சொல்" - -msgctxt "#30200" -msgid "Debugging" -msgstr "வழுநீக்கு" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Telugu/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Telugu/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Telugu/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Telugu/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -16,10 +16,10 @@ "Language: te\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "వాడుకరి పేరు" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "సంకేతపదం" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Thai/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Thai/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Thai/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Thai/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -16,14 +16,22 @@ "Language: th\n" "Plural-Forms: nplurals=1; plural=0;\n" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "ชื่อผู้ใช้" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "รหัสผ่าน" -msgctxt "#30200" -msgid "Debugging" -msgstr "แก้จุดบกพร่อง" +msgctxt "#30103" +msgid "Audio codec" +msgstr "ตัวแปลงสัญญาณเสียง" + +msgctxt "#30104" +msgid "Video codec" +msgstr "ตัวแปลงสัญญาณวิดีโอ" + +msgctxt "#30105" +msgid "Resolution" +msgstr "ความละเอียดจอ" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Turkish/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Turkish/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Turkish/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Turkish/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -16,30 +16,62 @@ "Language: tr\n" "Plural-Forms: nplurals=1; plural=0;\n" -msgctxt "#30001" +msgctxt "#30000" msgid "Tvheadend hostname or IP address" msgstr "Tvheadend ana bilgisayar adı veya IP adresi" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "HTTP portu" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "HTSP portu" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "Kullanıcı adı" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Parola" +msgctxt "#30006" +msgid "Connect timeout in seconds" +msgstr "Saniye cinsinden bağlantı zaman aşımı" + msgctxt "#30007" msgid "Response timeout in seconds" msgstr "Saniye cinsinden yanıt zaman aşımı süresi" -msgctxt "#30200" -msgid "Debugging" -msgstr "Hata ayıklama" +msgctxt "#30100" +msgid "Tvheadend transcoding settings" +msgstr "Tvheadend dönüştürme ayarları" + +msgctxt "#30101" +msgid "Transcoding settings" +msgstr "Dönüştürme ayarları" + +msgctxt "#30102" +msgid "Enable transcoding" +msgstr "Dönüştürmeyi etkinleştir" + +msgctxt "#30103" +msgid "Audio codec" +msgstr "Ses codec" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Video codec" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Çözünürlük" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "'%s' Bağlantı kesilecek" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "Tekrar bağlanmaya '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Ukrainian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Ukrainian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Ukrainian/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Ukrainian/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -16,30 +16,62 @@ "Language: uk\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -msgctxt "#30001" +msgctxt "#30000" msgid "Tvheadend hostname or IP address" msgstr "Ім'я серверу Tvheadend або його IP адреса" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "Порт HTTP" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "Порт HTSP" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "Ім'я користувача" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Пароль" +msgctxt "#30006" +msgid "Connect timeout in seconds" +msgstr "Перерва у зв’язку в секундах" + msgctxt "#30007" msgid "Response timeout in seconds" msgstr "Затримка відклику в секундах" -msgctxt "#30200" -msgid "Debugging" -msgstr "Налагодження" +msgctxt "#30100" +msgid "Tvheadend transcoding settings" +msgstr "Налаштування конвертування з Tvheadend" + +msgctxt "#30101" +msgid "Transcoding settings" +msgstr "Налаштування конвертування" + +msgctxt "#30102" +msgid "Enable transcoding" +msgstr "Включити конвертування" + +msgctxt "#30103" +msgid "Audio codec" +msgstr "Кодування аудіо" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Кодування відео" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Роздільна здатність" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "Від’єднано від '%s'" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "Знову з’єднано з '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Uzbek/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Uzbek/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Uzbek/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Uzbek/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -16,10 +16,14 @@ "Language: uz\n" "Plural-Forms: nplurals=1; plural=0;\n" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "Foydalanuvchi nomi" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Maxfiy so'z" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Ekran o'lchamlari" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Vietnamese/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Vietnamese/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Vietnamese/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Vietnamese/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -16,30 +16,62 @@ "Language: vi\n" "Plural-Forms: nplurals=1; plural=0;\n" -msgctxt "#30001" +msgctxt "#30000" msgid "Tvheadend hostname or IP address" msgstr "Tên miền hoặc địa chỉ IP của Tvheadend" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "Cổng HTTP" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "Cổng HTSP" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" -msgstr "Tên truy nhập" +msgstr "Tên truy cập" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Mật khẩu" +msgctxt "#30006" +msgid "Connect timeout in seconds" +msgstr "Số giây tự ngắt kết nối" + msgctxt "#30007" msgid "Response timeout in seconds" msgstr "Số giây tự ngắt chờ" -msgctxt "#30200" -msgid "Debugging" -msgstr "Tìm sửa lỗi" +msgctxt "#30100" +msgid "Tvheadend transcoding settings" +msgstr "Thiết lập bộ chuyển mã của Tvheadend" + +msgctxt "#30101" +msgid "Transcoding settings" +msgstr "Thiết lập bộ chuyển mã" + +msgctxt "#30102" +msgid "Enable transcoding" +msgstr "Sử dụng bộ chuyển mã" + +msgctxt "#30103" +msgid "Audio codec" +msgstr "Bộ giải mã Audio" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Bộ giải mã Video" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Độ phân giải" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "Đã ngắt kết nối từ '%s'" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "Đã kết nối lại tới '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Welsh/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Welsh/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/language/Welsh/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/language/Welsh/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Tvheadend HTSP Client # Addon id: pvr.hts -# Addon Provider: Adam Sutton, Sam Stenvall, Lars Op den Kamp +# Addon Provider: Lars Op den Kamp, Team XBMC msgid "" msgstr "" "Project-Id-Version: XBMC Main\n" @@ -16,30 +16,62 @@ "Language: cy\n" "Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;\n" -msgctxt "#30001" +msgctxt "#30000" msgid "Tvheadend hostname or IP address" msgstr "Enw gwesteiwr neu gyfeiriad IP Tvheadend" -msgctxt "#30002" +msgctxt "#30001" msgid "HTTP port" msgstr "Porth HTTP" -msgctxt "#30003" +msgctxt "#30002" msgid "HTSP port" msgstr "Porth HTSP" -msgctxt "#30004" +msgctxt "#30003" msgid "Username" msgstr "Enw defnyddiwr" -msgctxt "#30005" +msgctxt "#30004" msgid "Password" msgstr "Cyfrinair" +msgctxt "#30006" +msgid "Connect timeout in seconds" +msgstr "Amser allan cysylltu mewn eiliadau" + msgctxt "#30007" msgid "Response timeout in seconds" msgstr "Ymateb amser allan mewn eiliadau" -msgctxt "#30200" -msgid "Debugging" -msgstr "Dadfygio" +msgctxt "#30100" +msgid "Tvheadend transcoding settings" +msgstr "Gosodiadau trawscodio Tvheadend" + +msgctxt "#30101" +msgid "Transcoding settings" +msgstr "Gosodiadau trawscodio" + +msgctxt "#30102" +msgid "Enable transcoding" +msgstr "Galluogi trawscodio" + +msgctxt "#30103" +msgid "Audio codec" +msgstr "Codec sain" + +msgctxt "#30104" +msgid "Video codec" +msgstr "Codec fideo" + +msgctxt "#30105" +msgid "Resolution" +msgstr "Cydraniad" + +msgctxt "#30500" +msgid "Disconnected from '%s'" +msgstr "Datgysylltwyd o '%s'" + +msgctxt "#30501" +msgid "Reconnected to '%s'" +msgstr "Ail gysylltwyd â '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/settings.xml kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/settings.xml --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/settings.xml 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/settings.xml 2015-04-01 08:50:10.000000000 +0000 @@ -1,20 +1,15 @@ - - - - - - - - - - - - - - - - - + + + + + + + + + + + + diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/skins/Confluence/720p/DialogTranscode.xml kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/skins/Confluence/720p/DialogTranscode.xml --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/addon/resources/skins/Confluence/720p/DialogTranscode.xml 1970-01-01 00:00:00.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/addon/resources/skins/Confluence/720p/DialogTranscode.xml 2015-04-01 08:50:10.000000000 +0000 @@ -0,0 +1,170 @@ + + 10 + + 1 + 240 + 100 + + dialogeffect + + + background image + 0 + 0 + 800 + 500 + DialogBack.png + + + Dialog Header image + 40 + 16 + 720 + 40 + dialogheader.png + + + header label + 40 + 20 + 720 + 30 + font13_title + + center + center + selected + black + + + Close Window button + 710 + 15 + 64 + 32 + + - + PreviousMenu + DialogCloseButton-focus.png + DialogCloseButton.png + 10 + 10 + 10 + 10 + system.getbool(input.enablemouse) + + + + Enable transcoding + 40 + 50 + 40 + 720 + + font13 + grey2 + white + button-nofocus.png + button-focus2.png + 10 + 10 + 1 + 11 + + + + Audio codec + 40 + 100 + 720 + 40 + font13 + grey2 + white + button-nofocus.png + button-focus2.png + + 11 + 11 + 10 + 12 + + + + Video codec + 40 + 150 + 720 + 40 + font13 + grey2 + white + button-nofocus.png + button-focus2.png + center + + 12 + 12 + 11 + 13 + + + + Resolution + 40 + 200 + 720 + 40 + font13 + grey2 + white + button-nofocus.png + button-focus2.png + center + + 13 + 13 + 12 + 1 + + + + 190 + 435 + + Ok Button + 0 + 0 + 200 + 40 + center + center + button-nofocus.png + button-focus.png + + font12_title + 13 + 2 + 2 + 10 + + + Cancel Button + 210 + 0 + 200 + 40 + center + center + button-nofocus.png + button-focus.png + + font12_title + 13 + 1 + 1 + 10 + + + + diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/Makefile.am kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/Makefile.am --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/Makefile.am 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/Makefile.am 2015-04-01 08:50:10.000000000 +0000 @@ -15,11 +15,10 @@ include ../Makefile.include.am libtvheadend_addon_la_SOURCES = src/client.cpp \ - src/AsyncState.cpp \ - src/Tvheadend.cpp \ - src/HTSPConnection.cpp \ - src/HTSPDemuxer.cpp \ - src/HTSPVFS.cpp \ - src/CircBuffer.cpp + src/HTSPConnection.cpp \ + src/HTSPData.cpp \ + src/HTSPDemux.cpp \ + src/CircBuffer.cpp \ + src/GUIDialogTranscode.cpp libtvheadend_addon_la_LDFLAGS = @TARGET_LDFLAGS@ diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/project/VS2010Express/pvrclient_tvheadend.vcxproj kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/project/VS2010Express/pvrclient_tvheadend.vcxproj --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/project/VS2010Express/pvrclient_tvheadend.vcxproj 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/project/VS2010Express/pvrclient_tvheadend.vcxproj 2015-04-01 08:50:10.000000000 +0000 @@ -86,35 +86,29 @@ - - {00700e12-a63b-4e54-b962-4011a90584bd} - - - {fe4573f6-a794-4ad3-b37f-49e51f1140e6} - - - - + - - - + + - + + + + - - - - - - + + {00700e12-a63b-4e54-b962-4011a90584bd} + + + {fe4573f6-a794-4ad3-b37f-49e51f1140e6} + diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/project/VS2010Express/pvrclient_tvheadend.vcxproj.filters kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/project/VS2010Express/pvrclient_tvheadend.vcxproj.filters --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/project/VS2010Express/pvrclient_tvheadend.vcxproj.filters 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/project/VS2010Express/pvrclient_tvheadend.vcxproj.filters 2015-04-01 08:50:10.000000000 +0000 @@ -15,52 +15,46 @@ - - Source Files - - - Source Files - Source Files Source Files - + Source Files - + Source Files - + + Source Files + + Source Files - + Header Files - + Header Files - + + Header Files + + Header Files Header Files - + Header Files - + Header Files - - - - - - \ No newline at end of file diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/src/AsyncState.cpp kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/src/AsyncState.cpp --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/src/AsyncState.cpp 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/src/AsyncState.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,59 +0,0 @@ -/* - * Copyright (C) 2005-2014 Team XBMC - * http://www.xbmc.org - * - * 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 - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This Program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * 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, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * http://www.gnu.org/copyleft/gpl.html - * - */ - -#include "AsyncState.h" -#include "client.h" - -struct Param { - eAsyncState state; - AsyncState *self; -}; - -using namespace PLATFORM; - -AsyncState::AsyncState(int timeout) -{ - m_state = ASYNC_NONE; - m_timeout = timeout; -} - -void AsyncState::SetState(eAsyncState state) -{ - CLockObject lock(m_mutex); - m_state = state; - m_condition.Broadcast(); -} - -bool AsyncState::PredicateCallback ( void *p ) -{ - Param *param = (Param*)p; - return param->self->m_state >= param->state; -} - -bool AsyncState::WaitForState(eAsyncState state) -{ - Param p; - p.state = state; - p.self = this; - - CLockObject lock(m_mutex); - return m_condition.Wait(m_mutex, AsyncState::PredicateCallback, (void*)&p, m_timeout); -} diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/src/AsyncState.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/src/AsyncState.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/src/AsyncState.h 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/src/AsyncState.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,86 +0,0 @@ -/* - * Copyright (C) 2005-2014 Team XBMC - * http://www.xbmc.org - * - * 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 - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This Program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * 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, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * http://www.gnu.org/copyleft/gpl.html - * - */ - -#ifndef ASYNCSTATE_H -#define ASYNCSTATE_H - -#include "platform/threads/mutex.h" - -/** - * Represents the possible states - */ -enum eAsyncState -{ - ASYNC_NONE = 0, - ASYNC_CHN = 1, - ASYNC_DVR = 2, - ASYNC_EPG = 3, - ASYNC_DONE = 4 -}; - -/** - * State tracker for the initial sync process. This class is thread-safe. - */ -class AsyncState -{ -public: - AsyncState(int timeout); - - virtual ~AsyncState() - { - }; - - /** - * @return the current state - */ - inline eAsyncState GetState() - { - PLATFORM::CLockObject lock(m_mutex); - return m_state; - } - - /** - * Changes the current state to "state" - * @param state the new state - */ - void SetState(eAsyncState state); - - /** - * Waits for the current state to change into "state" or higher - * before the timeout is reached - * @param state the minimum state desired - * @return whether the state changed or not - */ - bool WaitForState(eAsyncState state); - -private: - - static bool PredicateCallback ( void *param ); - - eAsyncState m_state; - PLATFORM::CMutex m_mutex; - PLATFORM::CCondition m_condition; - int m_timeout; - -}; - -#endif /* ASYNCSTATE_H */ - diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/src/CircBuffer.cpp kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/src/CircBuffer.cpp --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/src/CircBuffer.cpp 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/src/CircBuffer.cpp 2015-04-01 08:50:10.000000000 +0000 @@ -14,7 +14,8 @@ * * You should have received a copy of the GNU General Public License * along with XBMC; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + * the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA * http://www.gnu.org/copyleft/gpl.html * */ @@ -24,8 +25,6 @@ #include #include -using namespace PLATFORM; - CCircBuffer::CCircBuffer(void) : m_buffer(NULL), m_alloc(0), m_size(0), m_count(0), m_pin(0), m_pout(0) { @@ -40,14 +39,7 @@ { if (size > m_alloc) { m_alloc = size; - - // don't allow memory to leak on realloc failure - unsigned char * buffer = (unsigned char*) realloc(m_buffer, size); - - if (!buffer) - ::free(m_buffer); - else - m_buffer = buffer; + m_buffer = (unsigned char*) realloc(m_buffer, size); } m_size = size; reset(); @@ -66,7 +58,6 @@ void CCircBuffer::reset(void) { - CLockObject lock(m_mutex); m_pin = 0; m_pout = 0; m_count = 0; @@ -74,25 +65,22 @@ size_t CCircBuffer::size(void) const { - CLockObject lock(m_mutex); return m_size; } size_t CCircBuffer::avail(void) const { - CLockObject lock(m_mutex); return m_count; } size_t CCircBuffer::free(void) const { - CLockObject lock(m_mutex); return m_size - m_count - 1; } ssize_t CCircBuffer::write(const unsigned char* data, size_t len) { - CLockObject lock(m_mutex); + size_t pt1, pt2; if (m_size < 2) return -1; if (len > free()) @@ -100,7 +88,6 @@ if (m_pin < m_pout) memcpy(m_buffer+m_pin, data, len); else { - size_t pt1, pt2; pt1 = m_size - m_pin; if (len < pt1) { pt1 = len; @@ -118,7 +105,7 @@ ssize_t CCircBuffer::read(unsigned char* data, size_t len) { - CLockObject lock(m_mutex); + size_t pt1, pt2; if (m_size < 2) return -1; if (len > avail()) @@ -126,7 +113,6 @@ if (m_pout < m_pin) memcpy(data, m_buffer+m_pout, len); else { - size_t pt1, pt2; pt1 = m_size - m_pout; if (len < pt1) { pt1 = len; diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/src/CircBuffer.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/src/CircBuffer.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/src/CircBuffer.h 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/src/CircBuffer.h 2015-04-01 08:50:10.000000000 +0000 @@ -16,13 +16,13 @@ * * You should have received a copy of the GNU General Public License * along with XBMC; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + * the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA * http://www.gnu.org/copyleft/gpl.html * */ #include "platform/os.h" -#include "platform/threads/mutex.h" class CCircBuffer { @@ -49,7 +49,4 @@ size_t m_pin; size_t m_pout; -private: - mutable PLATFORM::CMutex m_mutex; - }; diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/src/client.cpp kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/src/client.cpp --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/src/client.cpp 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/src/client.cpp 2015-04-01 08:50:10.000000000 +0000 @@ -14,110 +14,172 @@ * * You should have received a copy of the GNU General Public License * along with XBMC; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + * the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA * http://www.gnu.org/copyleft/gpl.html * */ #include "client.h" #include "xbmc_pvr_dll.h" +#include "HTSPData.h" +#include "HTSPDemux.h" +#include "GUIDialogTranscode.h" #include "platform/threads/mutex.h" #include "platform/util/atomic.h" #include "platform/util/util.h" -#include "Settings.h" -#include "Tvheadend.h" using namespace std; using namespace ADDON; using namespace PLATFORM; -/* ************************************************************************** - * Global variables - * *************************************************************************/ - -/* - * Client state - */ +bool m_bCreated = false; ADDON_STATUS m_CurStatus = ADDON_STATUS_UNKNOWN; +int g_iClientId = -1; +long g_iPacketSequence = 0; -/* - * Global configuration - */ -CMutex g_mutex; -string g_strHostname = DEFAULT_HOST; -int g_iPortHTSP = DEFAULT_HTSP_PORT; -int g_iPortHTTP = DEFAULT_HTTP_PORT; -int g_iConnectTimeout = DEFAULT_CONNECT_TIMEOUT; -int g_iResponseTimeout = DEFAULT_RESPONSE_TIMEOUT; -string g_strUsername = ""; -string g_strPassword = ""; -bool g_bTraceDebug = false; -bool g_bAsyncEpg = false; - -/* - * Global state +/* User adjustable settings are saved here. + * Default values are defined inside client.h + * and exported to the other source files. */ -CHelper_libXBMC_addon *XBMC = NULL; -CHelper_libXBMC_pvr *PVR = NULL; -CHelper_libXBMC_gui *GUI = NULL; -CHelper_libXBMC_codec *CODEC = NULL; -PVR_MENUHOOK *menuHook = NULL; -CTvheadend *tvh = NULL; - -/* ************************************************************************** - * ADDON setup - * *************************************************************************/ +std::string g_strHostname = DEFAULT_HOST; +int g_iPortHTSP = DEFAULT_HTSP_PORT; +int g_iPortHTTP = DEFAULT_HTTP_PORT; +int g_iConnectTimeout = DEFAULT_CONNECT_TIMEOUT; +int g_iResponseTimeout = DEFAULT_RESPONSE_TIMEOUT; +bool g_bTranscode = DEFAULT_TRANSCODE; +CodecDescriptor g_audioCodec; +CodecDescriptor g_videoCodec; +int g_iResolution = DEFAULT_RESOLUTION; +std::string g_strUsername = ""; +std::string g_strPassword = ""; +std::string g_strUserPath = ""; +std::string g_strClientPath = ""; + +CHelper_libXBMC_addon *XBMC = NULL; +CHelper_libXBMC_codec *CODEC = NULL; +CHelper_libXBMC_pvr *PVR = NULL; +CHelper_libXBMC_gui *GUI = NULL; +PVR_MENUHOOK *menuHook = NULL; +CHTSPData * HTSPData = NULL; +CMutex g_seqMutex; -extern "C" { - -void ADDON_ReadSettings(void) +uint32_t HTSPNextSequenceNumber(void) { -#define UPDATE_INT(var, key, def)\ - if (!XBMC->GetSetting(key, &var))\ - var = def; + long lSequence = atomic_inc(&g_iPacketSequence); -#define UPDATE_STR(var, key, tmp, def)\ - if (XBMC->GetSetting(key, tmp))\ - var = tmp;\ - else\ - var = def; + if ((uint32_t)lSequence != lSequence) + { + CLockObject lock(g_seqMutex); + if ((uint32_t)g_iPacketSequence != g_iPacketSequence) + g_iPacketSequence = 0; - char buffer[1024]; + lSequence = atomic_inc(&g_iPacketSequence); + } - /* Connection */ - UPDATE_STR(g_strHostname, "host", buffer, DEFAULT_HOST); - UPDATE_STR(g_strUsername, "user", buffer, ""); - UPDATE_STR(g_strPassword, "pass", buffer, ""); - UPDATE_INT(g_iPortHTSP, "htsp_port", DEFAULT_HTSP_PORT); - UPDATE_INT(g_iPortHTTP, "http_port", DEFAULT_HTTP_PORT); - UPDATE_INT(g_iConnectTimeout, "connect_timeout", DEFAULT_CONNECT_TIMEOUT); - UPDATE_INT(g_iResponseTimeout, "response_timeout", DEFAULT_RESPONSE_TIMEOUT); + return (uint32_t)lSequence; +} - /* Data Transfer */ - UPDATE_INT(g_bAsyncEpg, "epg_async", false); +extern "C" { - /* Debug */ - UPDATE_INT(g_bTraceDebug, "trace_debug", false); +void ADDON_ReadSettings(void) +{ + /* read setting "host" from settings.xml */ + char * buffer; + buffer = (char*) malloc (1024); + buffer[0] = 0; /* Set the end of string */ + + if (XBMC->GetSetting("host", buffer)) + g_strHostname = buffer; + else + g_strHostname = DEFAULT_HOST; + buffer[0] = 0; /* Set the end of string */ + + /* read setting "user" from settings.xml */ + if (XBMC->GetSetting("user", buffer)) + g_strUsername = buffer; + else + g_strUsername = ""; + buffer[0] = 0; /* Set the end of string */ + + /* read setting "pass" from settings.xml */ + if (XBMC->GetSetting("pass", buffer)) + g_strPassword = buffer; + else + g_strPassword = ""; + + /* read setting "htsp_port" from settings.xml */ + if (!XBMC->GetSetting("htsp_port", &g_iPortHTSP)) + g_iPortHTSP = DEFAULT_HTSP_PORT; + + /* read setting "http_port" from settings.xml */ + if (!XBMC->GetSetting("http_port", &g_iPortHTTP)) + g_iPortHTTP = DEFAULT_HTTP_PORT; + + /* read setting "connect_timeout" from settings.xml */ + if (!XBMC->GetSetting("connect_timeout", &g_iConnectTimeout)) + g_iConnectTimeout = DEFAULT_CONNECT_TIMEOUT; + + /* read setting "read_timeout" from settings.xml */ + if (!XBMC->GetSetting("response_timeout", &g_iResponseTimeout)) + g_iResponseTimeout = DEFAULT_RESPONSE_TIMEOUT; + + /* read setting "transcode" from settings.xml */ + if (!XBMC->GetSetting("transcode", &g_bTranscode)) + g_bTranscode = DEFAULT_TRANSCODE; + + /* read setting "audio_codec_name" from settings.xml */ + if (XBMC->GetSetting("audio_codec_name", buffer)) + g_audioCodec = CodecDescriptor::GetCodecByName(buffer); + else + g_audioCodec = CodecDescriptor::GetCodecByName(DEFAULT_AUDIO_CODEC); + + /* read setting "video_codec_name" from settings.xml */ + if (XBMC->GetSetting("video_codec_name", buffer)) + g_videoCodec = CodecDescriptor::GetCodecByName(buffer); + else + g_videoCodec = CodecDescriptor::GetCodecByName(DEFAULT_VIDEO_CODEC); + + /* read setting "resolution" from settings.xml */ + if (!XBMC->GetSetting("resolution", &g_iResolution)) + g_iResolution = DEFAULT_RESOLUTION; + + free(buffer); +} + +ADDON_STATUS ADDON_Create(void* hdl, void* props) +{ + if (!hdl || !props) + return ADDON_STATUS_UNKNOWN; - /* TODO: Transcoding */ + PVR_PROPERTIES* pvrprops = (PVR_PROPERTIES*)props; -#undef UPDATE_INT -#undef UPDATE_STR -} + XBMC = new CHelper_libXBMC_addon; + if (!XBMC->RegisterMe(hdl)) + { + SAFE_DELETE(XBMC); + return ADDON_STATUS_PERMANENT_FAILURE; + } + + GUI = new CHelper_libXBMC_gui; + if (!GUI->RegisterMe(hdl)) + { + SAFE_DELETE(GUI); + SAFE_DELETE(XBMC); + return ADDON_STATUS_PERMANENT_FAILURE; + } -ADDON_STATUS ADDON_Create(void* hdl, void* _unused(props)) -{ - if (!hdl) - return m_CurStatus; - - /* Instantiate helpers */ - XBMC = new CHelper_libXBMC_addon; - GUI = new CHelper_libXBMC_gui; CODEC = new CHelper_libXBMC_codec; - PVR = new CHelper_libXBMC_pvr; - - if (!XBMC->RegisterMe(hdl) || !GUI->RegisterMe(hdl) || - !CODEC->RegisterMe(hdl) || !PVR->RegisterMe(hdl)) + if (!CODEC->RegisterMe(hdl)) + { + SAFE_DELETE(CODEC); + SAFE_DELETE(GUI); + SAFE_DELETE(XBMC); + return ADDON_STATUS_PERMANENT_FAILURE; + } + + PVR = new CHelper_libXBMC_pvr; + if (!PVR->RegisterMe(hdl)) { SAFE_DELETE(PVR); SAFE_DELETE(CODEC); @@ -126,49 +188,44 @@ return ADDON_STATUS_PERMANENT_FAILURE; } - tvhinfo("starting PVR client"); + XBMC->Log(LOG_DEBUG, "%s - Creating Tvheadend PVR-Client", __FUNCTION__); + + m_CurStatus = ADDON_STATUS_UNKNOWN; + g_strUserPath = pvrprops->strUserPath; + g_strClientPath = pvrprops->strClientPath; ADDON_ReadSettings(); - - /* Create a settings object that can be used without locks */ - tvheadend::Settings settings; - settings.strHostname = g_strHostname; - settings.iPortHTSP = g_iPortHTSP; - settings.iPortHTTP = g_iPortHTTP; - settings.strUsername = g_strUsername; - settings.strPassword = g_strPassword; - settings.bTraceDebug = g_bTraceDebug; - settings.bAsyncEpg = g_bAsyncEpg; - - /* Timeouts are defined in seconds but we expect them to be in milliseconds. - Furthermore, the value from the settings is actually the index of the - selected value, which is zero-based, so we need to increment by one. */ - settings.iConnectTimeout = (g_iConnectTimeout + 1) * 1000; - settings.iResponseTimeout = (g_iResponseTimeout + 1) * 1000; - - tvh = new CTvheadend(settings); - tvh->Start(); - - /* Wait for connection */ - if (!tvh->WaitForConnection()) { - SAFE_DELETE(tvh); - SAFE_DELETE(PVR); + + HTSPData = new CHTSPData; + if (!HTSPData->Open()) + { + SAFE_DELETE(HTSPData); SAFE_DELETE(CODEC); + SAFE_DELETE(PVR); SAFE_DELETE(GUI); SAFE_DELETE(XBMC); - return ADDON_STATUS_LOST_CONNECTION; + m_CurStatus = ADDON_STATUS_LOST_CONNECTION; + return m_CurStatus; } - m_CurStatus = ADDON_STATUS_OK; + if(HTSPData->CanTranscode()) + { + menuHook = new PVR_MENUHOOK(); + menuHook->category = PVR_MENUHOOK_ALL; + menuHook->iHookId = 1; + menuHook->iLocalizedStringId = 30100; + PVR->AddMenuHook(menuHook); + } + + m_CurStatus = ADDON_STATUS_OK; + m_bCreated = true; return m_CurStatus; } ADDON_STATUS ADDON_GetStatus() { - CLockObject lock(g_mutex); - - // Check that we're still connected - if (m_CurStatus == ADDON_STATUS_OK && !tvh->IsConnected()) + /* check whether we're still connected */ + if (m_CurStatus == ADDON_STATUS_OK && !HTSPData->IsConnected()) m_CurStatus = ADDON_STATUS_LOST_CONNECTION; return m_CurStatus; @@ -176,13 +233,14 @@ void ADDON_Destroy() { - CLockObject lock(g_mutex); - SAFE_DELETE(tvh); - SAFE_DELETE(PVR); + m_bCreated = false; + SAFE_DELETE(HTSPData); SAFE_DELETE(CODEC); + SAFE_DELETE(PVR); SAFE_DELETE(GUI); SAFE_DELETE(XBMC); SAFE_DELETE(menuHook); + m_CurStatus = ADDON_STATUS_UNKNOWN; } @@ -191,58 +249,119 @@ return true; } -unsigned int ADDON_GetSettings - (ADDON_StructSetting ***_unused(sSet)) +unsigned int ADDON_GetSettings(ADDON_StructSetting ***sSet) { return 0; } -ADDON_STATUS ADDON_SetSetting - (const char *settingName, const void *settingValue) +ADDON_STATUS ADDON_SetSetting(const char *settingName, const void *settingValue) { -#define UPDATE_STR(key, var)\ - if (!strcmp(settingName, key))\ - {\ - if (!strcmp(var.c_str(), (const char*)settingValue))\ - {\ - tvhdebug("update %s from '%s' to '%s'",\ - settingName, var.c_str(), settingValue);\ - return ADDON_STATUS_NEED_RESTART;\ - }\ - return ADDON_STATUS_OK;\ - } - -#define UPDATE_INT(key, type, var)\ - if (!strcmp(settingName, key))\ - {\ - if (var != *(type*)settingValue)\ - {\ - tvhdebug("update %s from '%d' to '%d'",\ - settingName, var, (int)*(type*)settingValue);\ - return ADDON_STATUS_NEED_RESTART;\ - }\ - return ADDON_STATUS_OK;\ - } - - /* Connection */ - UPDATE_STR("host", g_strHostname); - UPDATE_STR("user", g_strUsername); - UPDATE_STR("pass", g_strPassword); - UPDATE_INT("htsp_port", int, g_iPortHTSP); - UPDATE_INT("http_port", int, g_iPortHTTP); - UPDATE_INT("connect_timeout", int, g_iConnectTimeout); - UPDATE_INT("response_timeout", int, g_iResponseTimeout); - - /* Data transfer */ - UPDATE_INT("epg_async", bool, g_bAsyncEpg); - - /* Debug */ - UPDATE_INT("trace_debug", bool, g_bTraceDebug); + string str = settingName; + if (str == "host") + { + string tmp_sHostname; + XBMC->Log(LOG_INFO, "%s - Changed Setting 'host' from %s to %s", __FUNCTION__, g_strHostname.c_str(), (const char*) settingValue); + tmp_sHostname = g_strHostname; + g_strHostname = (const char*) settingValue; + if (tmp_sHostname != g_strHostname) + return ADDON_STATUS_NEED_RESTART; + } + else if (str == "user") + { + string tmp_sUsername = g_strUsername; + g_strUsername = (const char*) settingValue; + if (tmp_sUsername != g_strUsername) + { + XBMC->Log(LOG_INFO, "%s - Changed Setting 'user'", __FUNCTION__); + return ADDON_STATUS_NEED_RESTART; + } + } + else if (str == "pass") + { + string tmp_sPassword = g_strPassword; + g_strPassword = (const char*) settingValue; + if (tmp_sPassword != g_strPassword) + { + XBMC->Log(LOG_INFO, "%s - Changed Setting 'pass'", __FUNCTION__); + return ADDON_STATUS_NEED_RESTART; + } + } + else if (str == "htsp_port") + { + if (g_iPortHTSP != *(int*) settingValue) + { + XBMC->Log(LOG_INFO, "%s - Changed Setting 'htsp_port' from %u to %u", __FUNCTION__, g_iPortHTSP, *(int*) settingValue); + g_iPortHTSP = *(int*) settingValue; + return ADDON_STATUS_NEED_RESTART; + } + } + else if (str == "http_port") + { + if (g_iPortHTTP != *(int*) settingValue) + { + XBMC->Log(LOG_INFO, "%s - Changed Setting 'port' from %u to %u", __FUNCTION__, g_iPortHTTP, *(int*) settingValue); + g_iPortHTTP = *(int*) settingValue; + return ADDON_STATUS_NEED_RESTART; + } + } + else if (str == "connect_timeout") + { + int iNewValue = *(int*) settingValue + 1; + if (g_iConnectTimeout != iNewValue) + { + XBMC->Log(LOG_INFO, "%s - Changed Setting 'connect_timeout' from %u to %u", __FUNCTION__, g_iConnectTimeout, iNewValue); + g_iConnectTimeout = iNewValue; + return ADDON_STATUS_OK; + } + } + else if (str == "response_timeout") + { + int iNewValue = *(int*) settingValue + 1; + if (g_iResponseTimeout != iNewValue) + { + XBMC->Log(LOG_INFO, "%s - Changed Setting 'response_timeout' from %u to %u", __FUNCTION__, g_iResponseTimeout, iNewValue); + g_iResponseTimeout = iNewValue; + return ADDON_STATUS_OK; + } + } + else if (str == "transcode") + { + int bNewValue = *(bool*) settingValue; + XBMC->Log(LOG_INFO, "%s - Changed Setting 'transcode' from %u to %u", __FUNCTION__, g_bTranscode, bNewValue); + g_bTranscode = (bNewValue == 1); + } + else if (str == "resolution") + { + int iNewValue = *(int*) settingValue + 1; + if (g_iResolution != iNewValue) + { + XBMC->Log(LOG_INFO, "%s - Changed Setting 'resolution' from %u to %u", __FUNCTION__, g_iResolution, iNewValue); + g_iResolution = iNewValue; + return ADDON_STATUS_OK; + } + } + else if (str == "video_codec_name") + { + string tmp_strCodecname = g_videoCodec.Name(); + if (tmp_strCodecname != (const char*) settingValue) + { + XBMC->Log(LOG_INFO, "%s - Changed Setting 'video_codec' from %s to %s", __FUNCTION__, tmp_strCodecname.c_str(), (const char*) settingValue); + g_videoCodec = CodecDescriptor::GetCodecByName((const char*) settingValue); + return ADDON_STATUS_OK; + } + } + else if (str == "audio_codec_name") + { + string tmp_strCodecname = g_audioCodec.Name(); + if (tmp_strCodecname != (const char*) settingValue) + { + XBMC->Log(LOG_INFO, "%s - Changed Setting 'audio_codec' from %s to %s", __FUNCTION__, tmp_strCodecname.c_str(), (const char*) settingValue); + g_audioCodec = CodecDescriptor::GetCodecByName((const char*) settingValue); + return ADDON_STATUS_OK; + } + } return ADDON_STATUS_OK; - -#undef UPDATE_INT -#undef UPDATE_STR } void ADDON_Stop() @@ -253,24 +372,13 @@ { } -void ADDON_Announce - (const char *flag, const char *sender, const char *message, - const void *_unused(data)) +void ADDON_Announce(const char *flag, const char *sender, const char *message, const void *data) { - tvhdebug("Announce(flag=%s, sender=%s, message=%s)", flag, sender, message); - - /* XBMC/System */ - if (!strcmp(sender, "xbmc") && !strcmp(flag, "System")) - { - /* Wake - close connection (it'll most likely need remaking) */ - if (!strcmp("OnWake", message)) - tvh->Disconnect(); - } } -/* ************************************************************************** - * Versioning - * *************************************************************************/ +/*********************************************************** + * PVR Client AddOn specific public library functions + ***********************************************************/ const char* GetPVRAPIVersion(void) { @@ -284,25 +392,17 @@ return strMinApiVersion; } -#ifdef XBMC_GUI_API_VERSION const char* GetGUIAPIVersion(void) { static const char *strGuiApiVersion = XBMC_GUI_API_VERSION; return strGuiApiVersion; } -#endif -#ifdef XBMC_GUI_MIN_API_VERSION const char* GetMininumGUIAPIVersion(void) { static const char *strMinGuiApiVersion = XBMC_GUI_MIN_API_VERSION; return strMinGuiApiVersion; } -#endif - -/* ************************************************************************** - * Capabilities / Info - * *************************************************************************/ PVR_ERROR GetAddonCapabilities(PVR_ADDON_CAPABILITIES* pCapabilities) { @@ -310,358 +410,361 @@ pCapabilities->bSupportsTV = true; pCapabilities->bSupportsRadio = true; pCapabilities->bSupportsRecordings = true; - pCapabilities->bSupportsRecordingsUndelete = false; pCapabilities->bSupportsTimers = true; pCapabilities->bSupportsChannelGroups = true; pCapabilities->bHandlesInputStream = true; pCapabilities->bHandlesDemuxing = true; pCapabilities->bSupportsRecordingFolders = true; pCapabilities->bSupportsRecordingEdl = true; - return PVR_ERROR_NO_ERROR; } const char *GetBackendName(void) { - return tvh->GetServerName(); + static const char *strBackendName = HTSPData ? HTSPData->GetServerName() : "unknown"; + return strBackendName; } const char *GetBackendVersion(void) { - return tvh->GetServerVersion(); + static CStdString strBackendVersion; + if (HTSPData) + strBackendVersion.Format("%s (Protocol: %i)", HTSPData->GetVersion(), HTSPData->GetProtocol()); + return strBackendVersion.c_str(); } const char *GetConnectionString(void) { - return tvh->GetServerString(); -} - -const char *GetBackendHostname(void) -{ - return g_strHostname.c_str(); + static CStdString strConnectionString; + if (HTSPData) + strConnectionString.Format("%s:%i%s", g_strHostname.c_str(), g_iPortHTSP, HTSPData->IsConnected() ? "" : " (Not connected!)"); + else + strConnectionString.Format("%s:%i (addon error!)", g_strHostname.c_str(), g_iPortHTSP); + return strConnectionString.c_str(); } PVR_ERROR GetDriveSpace(long long *iTotal, long long *iUsed) { - return tvh->GetDriveSpace(iTotal, iUsed); -} + if (!HTSPData || !HTSPData->IsConnected()) + return PVR_ERROR_SERVER_ERROR; -/* ************************************************************************** - * GUI hooks - * *************************************************************************/ + if (HTSPData->GetDriveSpace(iTotal, iUsed)) + return PVR_ERROR_NO_ERROR; -PVR_ERROR CallMenuHook - (const PVR_MENUHOOK &_unused(menuhook), - const PVR_MENUHOOK_DATA &_unused(data)) -{ - return PVR_ERROR_NO_ERROR; + return PVR_ERROR_SERVER_ERROR; } -/* ************************************************************************** - * Demuxer - * *************************************************************************/ - -bool CanPauseStream(void) +PVR_ERROR GetEPGForChannel(ADDON_HANDLE handle, const PVR_CHANNEL &channel, time_t iStart, time_t iEnd) { - return tvh->HasCapability("timeshift"); -} + if (!HTSPData || !HTSPData->IsConnected()) + return PVR_ERROR_SERVER_ERROR; -bool CanSeekStream(void) -{ - return tvh->HasCapability("timeshift"); + return HTSPData->GetEpg(handle, channel, iStart, iEnd); } -bool OpenLiveStream(const PVR_CHANNEL &channel) +int GetChannelsAmount(void) { - return tvh->DemuxOpen(channel); -} + if (!HTSPData || !HTSPData->IsConnected()) + return 0; -void CloseLiveStream(void) -{ - tvh->DemuxClose(); + return HTSPData->GetNumChannels(); } -bool SeekTime(int time,bool backward,double *startpts) +PVR_ERROR GetChannels(ADDON_HANDLE handle, bool bRadio) { - return tvh->DemuxSeek(time, backward, startpts); -} + if (!HTSPData || !HTSPData->IsConnected()) + return PVR_ERROR_SERVER_ERROR; -void SetSpeed(int speed) -{ - tvh->DemuxSpeed(speed); + return HTSPData->GetChannels(handle, bRadio); } -int GetCurrentClientChannel(void) +int GetRecordingsAmount(void) { - return -1; // XBMC doesn't even use this -} + if (!HTSPData || !HTSPData->IsConnected()) + return 0; -bool SwitchChannel(const PVR_CHANNEL &channel) -{ - return tvh->DemuxOpen(channel); + return HTSPData->GetNumRecordings(); } -PVR_ERROR GetStreamProperties(PVR_STREAM_PROPERTIES* pProperties) +PVR_ERROR GetRecordings(ADDON_HANDLE handle) { - return tvh->DemuxCurrentStreams(pProperties); -} + if (!HTSPData || !HTSPData->IsConnected()) + return PVR_ERROR_SERVER_ERROR; -PVR_ERROR SignalStatus(PVR_SIGNAL_STATUS &signalStatus) -{ - return tvh->DemuxCurrentSignal(signalStatus); + return HTSPData->GetRecordings(handle); } -DemuxPacket* DemuxRead(void) +PVR_ERROR DeleteRecording(const PVR_RECORDING &recording) { - return tvh->DemuxRead(); -} + if (!HTSPData || !HTSPData->IsConnected()) + return PVR_ERROR_SERVER_ERROR; -void DemuxAbort(void) -{ - tvh->DemuxAbort(); + return HTSPData->DeleteRecording(recording); } -void DemuxReset(void) +PVR_ERROR RenameRecording(const PVR_RECORDING &recording) { -} + if (!HTSPData || !HTSPData->IsConnected()) + return PVR_ERROR_SERVER_ERROR; -void DemuxFlush(void) -{ - tvh->DemuxFlush(); + return HTSPData->RenameRecording(recording, recording.strTitle); } -/* ************************************************************************** - * Channel Management - * *************************************************************************/ - -int GetChannelGroupsAmount(void) +int GetTimersAmount(void) { - return tvh->GetTagCount(); -} + if (!HTSPData || !HTSPData->IsConnected()) + return 0; -PVR_ERROR GetChannelGroups(ADDON_HANDLE handle, bool bRadio) -{ - // tvheadend doesn't support separate groups for radio and TV - if (bRadio) - return PVR_ERROR_NO_ERROR; - - return tvh->GetTags(handle); + return HTSPData->GetNumTimers(); } -PVR_ERROR GetChannelGroupMembers(ADDON_HANDLE handle, const PVR_CHANNEL_GROUP &group) +PVR_ERROR GetTimers(ADDON_HANDLE handle) { - return tvh->GetTagMembers(handle, group); + if (!HTSPData || !HTSPData->IsConnected()) + return PVR_ERROR_SERVER_ERROR; + + return HTSPData->GetTimers(handle); } -int GetChannelsAmount(void) +PVR_ERROR AddTimer(const PVR_TIMER &timer) { - return tvh->GetChannelCount(); + if (!HTSPData || !HTSPData->IsConnected()) + return PVR_ERROR_SERVER_ERROR; + + return HTSPData->AddTimer(timer); } -PVR_ERROR GetChannels(ADDON_HANDLE handle, bool bRadio) +PVR_ERROR DeleteTimer(const PVR_TIMER &timer, bool bForceDelete) { - return tvh->GetChannels(handle, bRadio); -} + if (!HTSPData || !HTSPData->IsConnected()) + return PVR_ERROR_SERVER_ERROR; -/* ************************************************************************** - * EPG - * *************************************************************************/ + return HTSPData->DeleteTimer(timer, bForceDelete); +} -PVR_ERROR GetEPGForChannel - (ADDON_HANDLE handle, const PVR_CHANNEL &channel, time_t iStart, time_t iEnd) +PVR_ERROR UpdateTimer(const PVR_TIMER &timer) { - return tvh->GetEpg(handle, channel, iStart, iEnd); -} + if (!HTSPData || !HTSPData->IsConnected()) + return PVR_ERROR_SERVER_ERROR; -/* ************************************************************************** - * Recording Management - * *************************************************************************/ + return timer.state == PVR_TIMER_STATE_CANCELLED || timer.state == PVR_TIMER_STATE_ABORTED ? + HTSPData->DeleteTimer(timer, false) : + HTSPData->UpdateTimer(timer); +} -int GetRecordingsAmount(bool deleted) +bool OpenLiveStream(const PVR_CHANNEL &channel) { - return tvh->GetRecordingCount(); + return HTSPData ? + HTSPData->OpenLiveStream(channel) : + false; } -PVR_ERROR GetRecordings(ADDON_HANDLE handle, bool deleted) +void CloseLiveStream(void) { - return tvh->GetRecordings(handle); + if (HTSPData) + HTSPData->CloseLiveStream(); } -PVR_ERROR GetRecordingEdl - (const PVR_RECORDING &rec, PVR_EDL_ENTRY edl[], int *num) +int GetCurrentClientChannel(void) { - return tvh->GetRecordingEdl(rec, edl, num); + return HTSPData ? + HTSPData->GetCurrentClientChannel(): + -1; } -PVR_ERROR DeleteRecording(const PVR_RECORDING &rec) +bool SwitchChannel(const PVR_CHANNEL &channel) { - return tvh->DeleteRecording(rec); + return HTSPData ? + HTSPData->SwitchChannel(channel) : + false; } -PVR_ERROR RenameRecording(const PVR_RECORDING &rec) +PVR_ERROR GetStreamProperties(PVR_STREAM_PROPERTIES* pProperties) { - return tvh->RenameRecording(rec); + return HTSPData ? + HTSPData->GetStreamProperties(pProperties) : + PVR_ERROR_SERVER_ERROR; } -PVR_ERROR UndeleteRecording(const PVR_RECORDING& recording) +PVR_ERROR SignalStatus(PVR_SIGNAL_STATUS &signalStatus) { - return PVR_ERROR_NOT_IMPLEMENTED; + return HTSPData ? + HTSPData->SignalStatus(signalStatus) : + PVR_ERROR_SERVER_ERROR; } -PVR_ERROR DeleteAllRecordingsFromTrash() +void DemuxAbort(void) { - return PVR_ERROR_NOT_IMPLEMENTED; + if (HTSPData) + HTSPData->DemuxAbort(); } -int GetTimersAmount(void) +DemuxPacket* DemuxRead(void) { - return tvh->GetTimerCount(); + return HTSPData ? + HTSPData->DemuxRead() : + NULL; } -PVR_ERROR GetTimers(ADDON_HANDLE handle) +int GetChannelGroupsAmount(void) { - return tvh->GetTimers(handle); + if (!HTSPData || !HTSPData->IsConnected()) + return PVR_ERROR_SERVER_ERROR; + + return HTSPData->GetNumChannelGroups(); } -PVR_ERROR AddTimer(const PVR_TIMER &timer) +PVR_ERROR GetChannelGroups(ADDON_HANDLE handle, bool bRadio) { - return tvh->AddTimer(timer); + /* tvheadend doesn't support separated groups, so we only support TV groups */ + if (bRadio) + return PVR_ERROR_NO_ERROR; + + if (!HTSPData || !HTSPData->IsConnected()) + return PVR_ERROR_SERVER_ERROR; + + return HTSPData->GetChannelGroups(handle); } -PVR_ERROR DeleteTimer(const PVR_TIMER &timer, bool bForceDelete) +PVR_ERROR GetChannelGroupMembers(ADDON_HANDLE handle, const PVR_CHANNEL_GROUP &group) { - return tvh->DeleteTimer(timer, bForceDelete); + /* tvheadend doesn't support separated groups, so we only support TV groups */ + if (group.bIsRadio) + return PVR_ERROR_NO_ERROR; + + if (!HTSPData || !HTSPData->IsConnected()) + return PVR_ERROR_SERVER_ERROR; + + return HTSPData->GetChannelGroupMembers(handle, group); } -PVR_ERROR UpdateTimer(const PVR_TIMER &timer) +PVR_ERROR CallMenuHook(const PVR_MENUHOOK &menuhook, const PVR_MENUHOOK_DATA &item) { - return tvh->UpdateTimer(timer); + if (!HTSPData || !HTSPData->IsConnected()) + return PVR_ERROR_SERVER_ERROR; + + if (!HTSPData->CanTranscode()) + return PVR_ERROR_REJECTED; + + CodecVector v = HTSPData->GetTranscodingCodecs(); + CGUIDialogTranscode settings(v); + + settings.DoModal(); + + return PVR_ERROR_NO_ERROR; } - -/* ************************************************************************** - * Recording VFS - * *************************************************************************/ bool OpenRecordedStream(const PVR_RECORDING &recording) { - return tvh->VfsOpen(recording); + if (!HTSPData || !HTSPData->IsConnected()) + return false; + return HTSPData->OpenRecordedStream(recording); } void CloseRecordedStream(void) { - tvh->VfsClose(); + if (!HTSPData || !HTSPData->IsConnected()) + return; + HTSPData->CloseRecordedStream(); } int ReadRecordedStream(unsigned char *pBuffer, unsigned int iBufferSize) { - return tvh->VfsRead(pBuffer, iBufferSize); + if (!HTSPData || !HTSPData->IsConnected()) + return -1; + return HTSPData->ReadRecordedStream(pBuffer, iBufferSize); } long long SeekRecordedStream(long long iPosition, int iWhence /* = SEEK_SET */) { - return tvh->VfsSeek(iPosition, iWhence); + if (!HTSPData || !HTSPData->IsConnected()) + return -1; + return HTSPData->SeekRecordedStream(iPosition, iWhence); } long long PositionRecordedStream(void) { - return tvh->VfsTell(); + if (!HTSPData || !HTSPData->IsConnected()) + return -1; + return HTSPData->PositionRecordedStream(); } long long LengthRecordedStream(void) { - return tvh->VfsSize(); + if (!HTSPData || !HTSPData->IsConnected()) + return -1; + return HTSPData->LengthRecordedStream(); } -/* ************************************************************************** - * Unused Functions - * *************************************************************************/ - -unsigned int GetChannelSwitchDelay(void) { return 0; } - -/* Recording History */ -PVR_ERROR SetRecordingPlayCount - (const PVR_RECORDING &_unused(recording), int _unused(count)) -{ - return PVR_ERROR_NOT_IMPLEMENTED; -} -PVR_ERROR SetRecordingLastPlayedPosition - (const PVR_RECORDING &_unused(recording), int _unused(lastplayedposition)) -{ - return PVR_ERROR_NOT_IMPLEMENTED; -} -int GetRecordingLastPlayedPosition(const PVR_RECORDING &_unused(recording)) +bool CanPauseStream(void) { - return -1; + if (HTSPData) + return HTSPData->CanTimeshift(); + return false; } -/* Channel Management */ -PVR_ERROR OpenDialogChannelScan(void) -{ - return PVR_ERROR_NOT_IMPLEMENTED; -} -PVR_ERROR DeleteChannel(const PVR_CHANNEL &_unused(channel)) -{ - return PVR_ERROR_NOT_IMPLEMENTED; -} -PVR_ERROR RenameChannel(const PVR_CHANNEL &_unused(channel)) +bool CanSeekStream(void) { - return PVR_ERROR_NOT_IMPLEMENTED; + if (HTSPData) + return HTSPData->CanSeekLiveStream(); + return false; } -PVR_ERROR MoveChannel(const PVR_CHANNEL &_unused(channel)) + +bool SeekTime(int time,bool backward,double *startpts) { - return PVR_ERROR_NOT_IMPLEMENTED; + return HTSPData ? + HTSPData->SeekTime(time, backward, startpts) : + false; } -PVR_ERROR OpenDialogChannelSettings(const PVR_CHANNEL &_unused(channel)) + +void SetSpeed(int speed) { - return PVR_ERROR_NOT_IMPLEMENTED; + if(HTSPData) + HTSPData->SetSpeed(speed); } -PVR_ERROR OpenDialogChannelAdd(const PVR_CHANNEL &_unused(channel)) + +void DemuxFlush(void) { - return PVR_ERROR_NOT_IMPLEMENTED; + if (HTSPData) + HTSPData->DemuxFlush(); } -/* Timeshift?? - not sure if we can use these? */ -void PauseStream(bool _unused(bPaused)) -{ +PVR_ERROR GetRecordingEdl(const PVR_RECORDING &recording, PVR_EDL_ENTRY entries[], int *size) +{ + if (!HTSPData || !HTSPData->IsConnected()) + return PVR_ERROR_SERVER_ERROR; + + return HTSPData->GetEdl(recording, &*entries, size); } + time_t GetPlayingTime() { - // tvheadend reports the number of microseconds the live stream is shifted but - // XBMC expects it to be an absolute UNIX timestamp - int seconds = (double) tvh->DemuxGetTimeshiftTime() / 1000000; - return (time_t) (time(NULL) - seconds); -} -time_t GetBufferTimeStart() -{ - return 0; -} -time_t GetBufferTimeEnd() -{ - return 0; -} + int seconds = 0; -/* Live stream (VFS interface - not relevant) */ -int ReadLiveStream - (unsigned char *_unused(pBuffer), unsigned int _unused(iBufferSize)) -{ - return 0; -} -long long SeekLiveStream - (long long _unused(iPosition), int _unused(iWhence)) -{ - return -1; -} -long long PositionLiveStream(void) -{ - return -1; -} -long long LengthLiveStream(void) -{ - return -1; -} -const char * GetLiveStreamURL(const PVR_CHANNEL &_unused(channel)) -{ - return ""; + if (HTSPData) + seconds = HTSPData->DemuxGetTimeshiftTime() / 1000000; + + return (time(NULL) - seconds); } -} /* extern "C" */ +/** UNUSED API FUNCTIONS */ +PVR_ERROR DialogChannelScan(void) { 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 DialogChannelSettings(const PVR_CHANNEL &channel) { return PVR_ERROR_NOT_IMPLEMENTED; } +PVR_ERROR DialogAddChannel(const PVR_CHANNEL &channel) { return PVR_ERROR_NOT_IMPLEMENTED; } +void DemuxReset(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; } +const char * GetLiveStreamURL(const PVR_CHANNEL &channel) { return ""; } +PVR_ERROR SetRecordingPlayCount(const PVR_RECORDING &recording, int count) { return PVR_ERROR_NOT_IMPLEMENTED; } +PVR_ERROR SetRecordingLastPlayedPosition(const PVR_RECORDING &recording, int lastplayedposition) { return PVR_ERROR_NOT_IMPLEMENTED; } +int GetRecordingLastPlayedPosition(const PVR_RECORDING &recording) { return -1; } +unsigned int GetChannelSwitchDelay(void) { return 0; } +void PauseStream(bool bPaused) {} +time_t GetBufferTimeStart() { return 0; } +time_t GetBufferTimeEnd() { return 0; } +} diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/src/client.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/src/client.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/src/client.h 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/src/client.h 2015-04-01 08:50:10.000000000 +0000 @@ -15,28 +15,50 @@ * * You should have received a copy of the GNU General Public License * along with XBMC; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + * the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA * http://www.gnu.org/copyleft/gpl.html * */ #include "platform/os.h" -#include "platform/threads/mutex.h" #include "libXBMC_addon.h" +#include "libXBMC_codec.h" #include "libXBMC_pvr.h" #include "libXBMC_gui.h" -#include "libXBMC_codec.h" -extern ADDON::CHelper_libXBMC_addon* XBMC; -extern CHelper_libXBMC_pvr* PVR; -extern CHelper_libXBMC_gui* GUI; -extern CHelper_libXBMC_codec* CODEC; +extern ADDON::CHelper_libXBMC_addon* XBMC; +extern CHelper_libXBMC_codec* CODEC; +extern CHelper_libXBMC_pvr* PVR; +extern CHelper_libXBMC_gui* GUI; + +#include "HTSPTypes.h" #define DEFAULT_HOST "127.0.0.1" #define DEFAULT_HTTP_PORT 9981 #define DEFAULT_HTSP_PORT 9982 -#define DEFAULT_CONNECT_TIMEOUT 10 -#define DEFAULT_RESPONSE_TIMEOUT 5 +#define DEFAULT_CONNECT_TIMEOUT 6 +#define DEFAULT_RESPONSE_TIMEOUT 4 +#define DEFAULT_VIDEO_CODEC "H264" +#define DEFAULT_AUDIO_CODEC "UNKNOWN" +#define DEFAULT_RESOLUTION 480 +#define DEFAULT_TRANSCODE false +#define HTSP_DEBUGGING 0 + +extern bool m_bCreated; +extern std::string g_strHostname; +extern int g_iPortHTSP; +extern int g_iPortHTTP; +extern std::string g_strUsername; +extern std::string g_strPassword; +extern int g_iConnectTimeout; +extern int g_iResponseTimeout; +extern bool g_bShowTimerNotifications; +extern std::string g_szUserPath; +extern std::string g_szClientPath; +extern bool g_bTranscode; +extern CodecDescriptor g_audioCodec; +extern CodecDescriptor g_videoCodec; +extern int g_iResolution; -class CTvheadend; -extern CTvheadend *tvh; +uint32_t HTSPNextSequenceNumber(void); diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/src/GUIDialogTranscode.cpp kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/src/GUIDialogTranscode.cpp --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/src/GUIDialogTranscode.cpp 1970-01-01 00:00:00.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/src/GUIDialogTranscode.cpp 2015-04-01 08:50:10.000000000 +0000 @@ -0,0 +1,197 @@ +/* + * Copyright (C) 2005-2011 Team XBMC + * http://xbmc.org + * + * 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 + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This Program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * 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, write to + * the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + * http://www.gnu.org/copyleft/gpl.html + * + */ + +#include "GUIDialogTranscode.h" +#include "libXBMC_gui.h" + +#define BUTTON_OK 1 +#define BUTTON_CANCEL 2 + +#define CONTROL_RADIO_BUTTON_TRANSCODE 10 +#define SPIN_CONTROL_AUDIO_CODEC 11 +#define SPIN_CONTROL_VIDEO_CODEC 12 +#define SPIN_CONTROL_RESOLUTION 13 + +CGUIDialogTranscode::CGUIDialogTranscode(const CodecVector &v) : + m_window(0), m_spinAudioCodec(0), m_spinVideoCodec(0), m_spinResolution(0), + m_radioTranscode(0), m_codecs(v) +{ + m_window = GUI->Window_create("DialogTranscode.xml", "Confluence", false, true); + m_window->m_cbhdl = this; + m_window->CBOnInit = OnInitCB; + m_window->CBOnFocus = OnFocusCB; + m_window->CBOnClick = OnClickCB; + m_window->CBOnAction = OnActionCB; +} + +CGUIDialogTranscode::~CGUIDialogTranscode() +{ + GUI->Window_destroy(m_window); +} + +bool CGUIDialogTranscode::OnInitCB(GUIHANDLE cbhdl) +{ + CGUIDialogTranscode* dialog = static_cast(cbhdl); + return dialog->OnInit(); +} + +bool CGUIDialogTranscode::OnClickCB(GUIHANDLE cbhdl, int controlId) +{ + CGUIDialogTranscode* dialog = static_cast(cbhdl); + return dialog->OnClick(controlId); +} + +bool CGUIDialogTranscode::OnFocusCB(GUIHANDLE cbhdl, int controlId) +{ + CGUIDialogTranscode* dialog = static_cast(cbhdl); + return dialog->OnFocus(controlId); +} + +bool CGUIDialogTranscode::OnActionCB(GUIHANDLE cbhdl, int actionId) +{ + CGUIDialogTranscode* dialog = static_cast(cbhdl); + return dialog->OnAction(actionId); +} + +bool CGUIDialogTranscode::Show() +{ + if (m_window) + return m_window->Show(); + + return false; +} + +void CGUIDialogTranscode::Close() +{ + if (m_window) + m_window->Close(); +} + +void CGUIDialogTranscode::DoModal() +{ + if (m_window) + m_window->DoModal(); +} + +bool CGUIDialogTranscode::OnInit() +{ + m_spinAudioCodec = GUI->Control_getSpin(m_window, SPIN_CONTROL_AUDIO_CODEC); + m_spinVideoCodec = GUI->Control_getSpin(m_window, SPIN_CONTROL_VIDEO_CODEC); + m_spinResolution = GUI->Control_getSpin(m_window, SPIN_CONTROL_RESOLUTION); + + m_radioTranscode = GUI->Control_getRadioButton(m_window, CONTROL_RADIO_BUTTON_TRANSCODE); + + m_spinAudioCodec->Clear(); + m_spinVideoCodec->Clear(); + m_spinResolution->Clear(); + + m_spinAudioCodec->AddLabel("Passthrough", XBMC_INVALID_CODEC_ID); + m_spinVideoCodec->AddLabel("Passthrough", XBMC_INVALID_CODEC_ID); + + int iSelectedAudio(0), iSelectedVideo(0); + for (unsigned int iPtr = 0; iPtr < m_codecs.size(); iPtr++) + { + if (m_codecs.at(iPtr).Codec().codec_type == XBMC_CODEC_TYPE_AUDIO) + { + m_spinAudioCodec->AddLabel(m_codecs.at(iPtr).Name().c_str(), iPtr); + if (m_codecs.at(iPtr).Codec().codec_id == g_audioCodec.Codec().codec_id) + iSelectedAudio = iPtr; + } + else if (m_codecs.at(iPtr).Codec().codec_type == XBMC_CODEC_TYPE_VIDEO) + { + m_spinVideoCodec->AddLabel(m_codecs.at(iPtr).Name().c_str(), iPtr); + if (m_codecs.at(iPtr).Codec().codec_id == g_videoCodec.Codec().codec_id) + iSelectedVideo = iPtr; + } + } + + m_spinResolution->AddLabel("192p", 192); + m_spinResolution->AddLabel("288p", 288); + m_spinResolution->AddLabel("384p", 384); + m_spinResolution->AddLabel("480p", 480); + m_spinResolution->AddLabel("576p", 576); + m_spinResolution->AddLabel("720p", 720); + + if (g_iResolution <= 192) + m_spinResolution->SetValue(192); + else if (g_iResolution <= 288) + m_spinResolution->SetValue(288); + else if (g_iResolution <= 384) + m_spinResolution->SetValue(384); + else if (g_iResolution <= 480) + m_spinResolution->SetValue(480); + else if (g_iResolution <= 576) + m_spinResolution->SetValue(576); + else + m_spinResolution->SetValue(720); + + m_radioTranscode->SetSelected(g_bTranscode); + m_spinAudioCodec->SetValue(iSelectedAudio); + m_spinVideoCodec->SetValue(iSelectedVideo); + + return true; +} + +bool CGUIDialogTranscode::OnClick(int controlId) +{ + if (controlId == BUTTON_CANCEL) + { + m_window->Close(); + GUI->Control_releaseSpin(m_spinAudioCodec); + GUI->Control_releaseSpin(m_spinVideoCodec); + GUI->Control_releaseSpin(m_spinResolution); + + GUI->Control_releaseRadioButton(m_radioTranscode); + } + else if (controlId == BUTTON_OK) + { + g_bTranscode = m_radioTranscode->IsSelected(); + g_iResolution = m_spinResolution->GetValue(); + g_audioCodec = m_codecs.at(m_spinAudioCodec->GetValue()); + g_videoCodec = m_codecs.at(m_spinVideoCodec->GetValue()); + + m_window->Close(); + + GUI->Control_releaseSpin(m_spinAudioCodec); + GUI->Control_releaseSpin(m_spinVideoCodec); + GUI->Control_releaseSpin(m_spinResolution); + + GUI->Control_releaseRadioButton(m_radioTranscode); + } + + return true; +} + +bool CGUIDialogTranscode::OnFocus(int controlId) +{ + return true; +} + +bool CGUIDialogTranscode::OnAction(int actionId) +{ + if (actionId == ADDON_ACTION_CLOSE_DIALOG + || actionId == ADDON_ACTION_PREVIOUS_MENU) + return OnClick(BUTTON_CANCEL); + else + return false; +} + diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/src/GUIDialogTranscode.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/src/GUIDialogTranscode.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/src/GUIDialogTranscode.h 1970-01-01 00:00:00.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/src/GUIDialogTranscode.h 2015-04-01 08:50:10.000000000 +0000 @@ -0,0 +1,59 @@ +#pragma once + +/* + * Copyright (C) 2005-2012 Team XBMC + * http://www.xbmc.org + * + * 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 + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This Program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * 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, write to + * the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + * http://www.gnu.org/copyleft/gpl.html + * + */ + +#include "client.h" +#include "HTSPTypes.h" + +class CGUIDialogTranscode +{ + +public: + CGUIDialogTranscode(const CodecVector&); + virtual ~CGUIDialogTranscode(); + + bool Show(); + void Close(); + void DoModal(); + +private: + bool OnClick(int controlId); + bool OnFocus(int controlId); + bool OnInit(); + bool OnAction(int actionId); + + static bool OnClickCB(GUIHANDLE cbhdl, int controlId); + static bool OnFocusCB(GUIHANDLE cbhdl, int controlId); + static bool OnInitCB(GUIHANDLE cbhdl); + static bool OnActionCB(GUIHANDLE cbhdl, int actionId); + + CAddonGUIWindow *m_window; + + CAddonGUISpinControl *m_spinAudioCodec; + CAddonGUISpinControl *m_spinVideoCodec; + CAddonGUISpinControl *m_spinResolution; + CAddonGUIRadioButton *m_radioTranscode; + + CodecVector m_codecs; +}; + diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/src/HTSPConnection.cpp kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/src/HTSPConnection.cpp --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/src/HTSPConnection.cpp 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/src/HTSPConnection.cpp 2015-04-01 08:50:10.000000000 +0000 @@ -14,14 +14,17 @@ * * You should have received a copy of the GNU General Public License * along with XBMC; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + * the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA * http://www.gnu.org/copyleft/gpl.html * */ +#include "HTSPConnection.h" #include "platform/threads/mutex.h" #include "platform/util/timeutils.h" #include "platform/sockets/tcp.h" +#include "client.h" extern "C" { #include "platform/util/atomic.h" @@ -29,539 +32,708 @@ #include "libhts/sha1.h" } -#include "Tvheadend.h" -#include "client.h" - using namespace std; using namespace ADDON; using namespace PLATFORM; -/* - * HTSP Response objct - */ -CHTSPResponse::CHTSPResponse () - : m_flag(false), m_msg(NULL) +CHTSResult::CHTSResult(void) : + message(NULL), + status(PVR_ERROR_NO_ERROR) { } -CHTSPResponse::~CHTSPResponse () +CHTSResult::~CHTSResult(void) { - if (m_msg) htsmsg_destroy(m_msg); - Set(NULL); // ensure signal is sent + if (message != NULL) + htsmsg_destroy(message); } -void CHTSPResponse::Set ( htsmsg_t *msg ) +string CHTSResult::GetErrorMessage(void) { - m_msg = msg; - m_flag = true; - m_cond.Broadcast(); + if (m_strError.empty()) + { + if (!message) + { + m_strError = "No response received"; + } + else + { + const char* error; + if((error = htsmsg_get_str(message, "error"))) + m_strError = error; + } + } + return m_strError; } -htsmsg_t *CHTSPResponse::Get ( CMutex &mutex, uint32_t timeout ) +bool CHTSResult::IsError(void) { - m_cond.Wait(mutex, m_flag, timeout); - htsmsg_t *r = m_msg; - m_msg = NULL; - m_flag = false; - return r; + return !GetErrorMessage().empty(); } -/* - * Registration thread - */ -CHTSPRegister::CHTSPRegister ( CHTSPConnection *conn ) - : m_conn(conn) +bool CHTSResult::NoAccess(void) { + uint32_t noaccess; + return (message && !htsmsg_get_u32(message, "noaccess", &noaccess) && noaccess); } -CHTSPRegister::~CHTSPRegister () +CHTSPConnection::CHTSPConnection(CHTSPConnectionCallback* callback) : + m_socket(new CTcpConnection(g_strHostname, g_iPortHTSP)), + m_challenge(NULL), + m_iChallengeLength(0), + m_iProtocol(0), + m_iPortnumber(g_iPortHTSP), + m_iConnectTimeout(g_iConnectTimeout * 1000), + m_strUsername(g_strUsername), + m_strPassword(g_strPassword), + m_strHostname(g_strHostname), + m_bIsConnected(false), + m_bTimeshiftSupport(false), + m_bTimeshiftSeekSupport(false), + m_bTranscodingSupport(false), + m_iQueueSize(1000), + m_callback(callback), + m_iReadTimeout(-1) { - StopThread(0); + m_reconnect = new CHTSPReconnect(this); } -void *CHTSPRegister::Process ( void ) +CHTSPConnection::~CHTSPConnection() { - m_conn->Register(); - return NULL; -} + // close the connection and stop the thread + Close(); -/* - * HTSP Connection handler - */ - -CHTSPConnection::CHTSPConnection () - : m_socket(NULL), m_regThread(this), m_ready(false), m_seq(0), - m_serverName(""), m_serverVersion(""), m_htspVersion(0), - m_webRoot(""), m_challenge(NULL), m_challengeLen(0) -{ + delete m_socket; + delete m_reconnect; } -CHTSPConnection::~CHTSPConnection() +const CStdString CHTSPConnection::GetWebURL (const char *fmt, ...) const { - StopThread(-1); - Disconnect(); - StopThread(0); -} - -/* - * Info - */ + CStdString url; + CStdString auth; -CStdString CHTSPConnection::GetWebURL ( const char *fmt, ... ) -{ - va_list va; - CStdString auth, url; - tvheadend::Settings settings = tvh->GetSettings(); - - auth = settings.strUsername; - if (auth != "" && settings.strPassword != "") - auth += ":" + settings.strPassword; - if (auth != "") + /* Authentication */ + if (!g_strUsername.empty()) { + auth = g_strUsername; + if (!g_strPassword.empty()) + auth.AppendFormat(":%s", g_strPassword.c_str()); auth += "@"; - url.Format("http://%s%s:%d", auth.c_str(), settings.strHostname.c_str(), settings.iPortHTTP); + } else { + auth = ""; + } - CLockObject lock(m_mutex); - va_start(va, fmt); - url += m_webRoot; - url.AppendFormatV(fmt, va); - va_end(va); + /* URL root */ + url.Format("http://%s%s:%i%s", auth.c_str(), g_strHostname.c_str(), g_iPortHTTP, m_strWebroot.c_str()); - return url; -} + va_list args; + va_start(args, fmt); + url.AppendFormatV(fmt, args); + va_end(args); -bool CHTSPConnection::WaitForConnection ( void ) -{ - if (!m_ready) { - tvhtrace("waiting for registration..."); - m_regCond.Wait(m_mutex, m_ready, tvh->GetSettings().iConnectTimeout); - } - return m_ready; + return url; } -const char *CHTSPConnection::GetServerName ( void ) +void CHTSPConnection::SetReadTimeout(int iTimeout) { - static CStdString str; CLockObject lock(m_mutex); - str = m_serverName; - return str.c_str(); + m_iReadTimeout = iTimeout; + m_readTimeout.Init(iTimeout); } -const char *CHTSPConnection::GetServerVersion ( void ) +bool CHTSPConnection::OpenSocket(void) { - static CStdString str; CLockObject lock(m_mutex); - str.Format("%s (HTSPv%d)", m_serverVersion.c_str(), m_htspVersion); - return str.c_str(); + // already open + if (m_socket && m_socket->IsOpen()) + return true; + + // check if the socket could be created + if (!m_socket) + { + XBMC->Log(LOG_ERROR, "%s - failed to connect to the backend (couldn't create a socket)", __FUNCTION__); + return false; + } + + XBMC->Log(LOG_DEBUG, "%s - connecting to '%s', port '%d'", __FUNCTION__, m_strHostname.c_str(), m_iPortnumber); + + // try to open the socket + CTimeout timeout(m_iConnectTimeout); + while (!m_socket->IsOpen() && timeout.TimeLeft() > 0) + { + if (!m_socket->Open(timeout.TimeLeft())) + CEvent::Sleep(100); + } + + // check if the socket is open + if (!m_socket->IsOpen()) + { + XBMC->Log(LOG_ERROR, "%s - failed to connect to the backend (%s)", __FUNCTION__, m_socket->GetError().c_str()); + return false; + } + + // socket opened + m_bIsConnected = true; + XBMC->Log(LOG_DEBUG, "%s - connected to '%s', port '%d'", __FUNCTION__, m_strHostname.c_str(), m_iPortnumber); + return true; } -const char *CHTSPConnection::GetServerString ( void ) +bool CHTSPConnection::Connect(void) { - static CStdString str; - tvheadend::Settings settings = tvh->GetSettings(); + bool bFailed(false); + { + CLockObject lock(m_mutex); + + // already connected + if (m_bIsConnected) + return true; + // open a socket + if (!OpenSocket()) + return false; + + // send the greeting, get the protocol version and capabilities + if (!SendGreeting()) + { + XBMC->Log(LOG_ERROR, "%s - failed to read greeting from the backend", __FUNCTION__); + m_socket->Close(); + return false; + } + + // check whether the proto is v2+ + if(m_iProtocol < 2) + { + XBMC->Log(LOG_ERROR, "%s - incompatible protocol version %d", __FUNCTION__, m_iProtocol); + m_socket->Close(); + return false; + } + + // create reader thread + if (!IsRunning() && !CreateThread(true)) + { + XBMC->Log(LOG_ERROR, "%s - failed to create data processing thread", __FUNCTION__); + bFailed = true; + } + + // send authentication + if (!bFailed && !Auth()) + { + XBMC->Log(LOG_ERROR, "%s - failed to authenticate", __FUNCTION__); + bFailed = true; + } + } + + if (bFailed) + Close(); + + // connected CLockObject lock(m_mutex); - str.Format("%s:%d [%s]", settings.strHostname.c_str(), settings.iPortHTSP, - m_ready ? "connected" : "disconnected"); - return str.c_str(); + m_connectEvent.Broadcast(); + return true; } -bool CHTSPConnection::HasCapability(const std::string &capability) const +void CHTSPConnection::TriggerReconnect(void) { - return std::find(m_capabilities.begin(), m_capabilities.end(), capability) - != m_capabilities.end(); + XBMC->Log(LOG_DEBUG, "reconnect triggered"); + CLockObject lock(m_mutex); + m_socket->Close(); + m_bIsConnected = false; } -/* - * Close the connection - */ -void CHTSPConnection::Disconnect ( void ) +void CHTSPConnection::Close() { + // stop the reader thread + StopThread(); + + // close the socket CLockObject lock(m_mutex); + m_bIsConnected = false; - /* Close socket */ - if (m_socket) { - m_socket->Shutdown(); + if(m_socket && m_socket->IsOpen()) m_socket->Close(); + + // cleanup + if(m_challenge) + { + free(m_challenge); + m_challenge = NULL; + m_iChallengeLength = 0; } - /* Signal all waiters and erase messages */ - m_messages.clear(); + for (deque::iterator it = m_queue.begin(); it != m_queue.end();) + delete *(it++); + m_queue.clear(); + + m_connectEvent.Broadcast(); } -/* - * Read message from socket - * - * Return false if an error occurs and the connection should be terminated - */ -bool CHTSPConnection::ReadMessage ( void ) +htsmsg_t* CHTSPConnection::ReadMessage(int iInitialTimeout /* = 10000 */, int iDatapacketTimeout /* = 10000 */) { - uint8_t *buf; + void* buf; + uint32_t l; uint8_t lb[4]; - size_t len, cnt; - ssize_t r; - uint32_t seq; - htsmsg_t *msg; - const char *method; - - /* Read 4 byte len */ - len = m_socket->Read(&lb, sizeof(lb)); - if (len != sizeof(lb)) - return false; - len = (lb[0] << 24) + (lb[1] << 16) + (lb[2] << 8) + lb[3]; - - /* Read rest of packet */ - buf = (uint8_t*)malloc(len); - cnt = 0; - while (cnt < len) - { - r = m_socket->Read((char*)buf + cnt, len - cnt, tvh->GetSettings().iResponseTimeout); - if (r < 0) - { - tvherror("failed to read packet (%s)", - m_socket->GetError().c_str()); - free(buf); - return false; - } - cnt += r; - if (cnt < len) - printf("partial read\n"); - } + size_t bytes_read; - /* Deserialize */ - if (!(msg = htsmsg_binary_deserialize(buf, len, buf))) + // get the first queued message if any + if(m_queue.size()) { - /* Do not free buf here. Already done by htsmsg_binary_deserialize. */ - tvherror("failed to decode message"); - return false; + htsmsg_t* m = m_queue.front(); + m_queue.pop_front(); + return m; } - /* Sequence number - response */ - if (htsmsg_get_u32(msg, "seq", &seq) == 0) { - tvhtrace("received response [%d]", seq); CLockObject lock(m_mutex); - CHTSPResponseList::iterator it; - if ((it = m_messages.find(seq)) != m_messages.end()) + // check whether the socket is open + if (!m_socket || !m_socket->IsOpen()) { - it->second->Set(msg); - return true; + XBMC->Log(LOG_ERROR, "%s - not connected", __FUNCTION__); + return NULL; } - } - /* Get method */ - if (!(method = htsmsg_get_str(msg, "method"))) - { - tvherror("message without a method"); - htsmsg_destroy(msg); - return true; - } - tvhtrace("receive message [%s]", method); + // read the size + if ((bytes_read = m_socket->Read(&lb, 4, iInitialTimeout)) != 4) + { + // timed out + if(m_socket->GetErrorNumber() == ETIMEDOUT) + { + // we did read something. try to finish the read + if (bytes_read > 0) + bytes_read += m_socket->Read(&lb + bytes_read, 4 - bytes_read, iDatapacketTimeout); + else + return NULL; + } - /* Pass (if return is true, message is finished) */ - if (tvh->ProcessMessage(method, msg)) - htsmsg_destroy(msg); - // TODO: maybe a copy should be made if it needs to be kept? + // read error, close the connection + if (bytes_read != 4) + { + XBMC->Log(LOG_ERROR, "%s - failed to read packet size (%s)", __FUNCTION__, m_socket->GetError().c_str()); + TriggerReconnect(); + return NULL; + } + } - return true; + l = (lb[0] << 24) + (lb[1] << 16) + (lb[2] << 8) + lb[3]; + + // empty message + if(l == 0) + return htsmsg_create_map(); + + // read the data + buf = malloc(l); + if(m_socket->Read(buf, l, iDatapacketTimeout) != (ssize_t)l) + { + // failed to read (wrong size), close the connection + XBMC->Log(LOG_ERROR, "%s - failed to read packet (%s)", __FUNCTION__, m_socket->GetError().c_str()); + free(buf); + TriggerReconnect(); + return NULL; + } + } + + // return the data + return htsmsg_binary_deserialize(buf, l, buf); /* consumes 'buf' */ } -/* - * Send message to server - */ -bool CHTSPConnection::SendMessage0 ( const char *method, htsmsg_t *msg ) +bool CHTSPConnection::TransmitMessage(htsmsg_t* m) { - int e; - void *buf; - size_t len; - ssize_t c = -1; - uint32_t seq; - - if (!htsmsg_get_u32(msg, "seq", &seq)) - tvhtrace("sending message [%s : %d]", method, seq); - else - tvhtrace("sending message [%s]", method); - htsmsg_add_str(msg, "method", method); + void* buf; + size_t len; - /* Serialise */ - e = htsmsg_binary_serialize(msg, &buf, &len, -1); - htsmsg_destroy(msg); - if (e < 0) + // check whether the socket is open + if (!m_socket || !m_socket->IsOpen()) + { + XBMC->Log(LOG_ERROR, "%s - not connected", __FUNCTION__); + htsmsg_destroy(m); return false; + } - /* Send data */ - c = m_socket->Write(buf, len); - free(buf); - if (c != (ssize_t)len) + // serialise the data + if(htsmsg_binary_serialize(m, &buf, &len, -1) < 0) { - tvherror("failed to write (%s)", - m_socket->GetError().c_str()); - Disconnect(); + htsmsg_destroy(m); return false; } + htsmsg_destroy(m); + // write the data + CLockObject lock(m_mutex); + ssize_t iWriteResult = m_socket->Write(buf, len); + if (iWriteResult != (ssize_t)len) + { + // failed to write, close the connection + XBMC->Log(LOG_ERROR, "%s - failed to write packet (%s)", __FUNCTION__, m_socket->GetError().c_str()); + free(buf); + TriggerReconnect(); + return false; + } + free(buf); return true; } -/* - * Send a message and wait for response - */ -htsmsg_t *CHTSPConnection::SendAndWait0 ( const char *method, htsmsg_t *msg, int iResponseTimeout ) +void CHTSPConnection::ReadResult(htsmsg_t *m, CHTSResult &result, const char* strAction /* = NULL */) { - if (iResponseTimeout == -1) - iResponseTimeout = tvh->GetSettings().iResponseTimeout; - - uint32_t seq; - - /* Add Sequence number */ - CHTSPResponse resp; - seq = ++m_seq; - htsmsg_add_u32(msg, "seq", seq); - m_messages[seq] = &resp; - - /* Send Message (bypass TX check) */ - if (!SendMessage0(method, msg)) - { - m_messages.erase(seq); - tvherror("failed to transmit"); - return NULL; - } - - /* Wait for response */ - msg = resp.Get(m_mutex, iResponseTimeout); - m_messages.erase(seq); - if (!msg) + // check whether we're connected + if (!IsConnected()) { - //XBMC->QueueNotification(QUEUE_ERROR, "Command %s failed: No response received", method); - tvherror("Command %s failed: No response received", method); - Disconnect(); - return NULL; + htsmsg_destroy(m); + result.status = PVR_ERROR_SERVER_ERROR; + if (strAction) + XBMC->Log(LOG_ERROR, "%s - '%s' failed - not connected", __FUNCTION__, strAction); + return; } - /* Check result for errors and announce. */ - uint32_t noaccess; - if (!htsmsg_get_u32(msg, "noaccess", &noaccess) && noaccess) - { - // access denied - //XBMC->QueueNotification(QUEUE_ERROR, "Command %s failed: Access denied", method); - tvherror("Command %s failed: Access denied", method); - htsmsg_destroy(msg); - return NULL; + // store in the message queue + result.status = PVR_ERROR_NO_ERROR; + uint32_t seq = HTSPNextSequenceNumber(); + + SMessage &message(m_messageQueue[seq]); + message.event = new CEvent; + message.msg = NULL; + + // transmit the message + htsmsg_add_u32(m, "seq", seq); + if(!TransmitMessage(m)) + { + // command couldn't be sent + if (strAction) + XBMC->Log(LOG_ERROR, "%s - '%s' failed - failed to send command", __FUNCTION__, strAction); + else + XBMC->Log(LOG_ERROR, "%s - failed to send command", __FUNCTION__); + result.status = PVR_ERROR_SERVER_ERROR; + } + else if(!message.event->Wait(g_iResponseTimeout * 1000)) + { + // no response + if (strAction) + XBMC->Log(LOG_ERROR, "%s - '%s' failed - request timed out after %d seconds", __FUNCTION__, strAction, g_iResponseTimeout); + else + XBMC->Log(LOG_ERROR, "%s - request timed out after %d seconds", __FUNCTION__, g_iResponseTimeout); + result.status = PVR_ERROR_SERVER_TIMEOUT; } else { - const char* strError; - if(strError = htsmsg_get_str(msg, "error")) + // response received + result.message = message.msg; + + if (result.NoAccess()) { - //XBMC->QueueNotification(QUEUE_ERROR, "Command %s failed: %s", method, strError); - tvherror("Command %s failed: %s", method, strError); - htsmsg_destroy(msg); - return NULL; + // access denied + if (strAction) + XBMC->Log(LOG_ERROR, "%s - '%s' failed - access denied", __FUNCTION__, strAction); + else + XBMC->Log(LOG_ERROR, "%s - command failed - access denied", __FUNCTION__); + XBMC->QueueNotification(QUEUE_ERROR, "Access denied"); + result.status = PVR_ERROR_REJECTED; } + + if (result.IsError()) + { + // server reported an error + string strError = result.GetErrorMessage(); + if (strAction) + XBMC->Log(LOG_ERROR, "%s - '%s' failed - %s", __FUNCTION__, strAction, strError.c_str()); + else + XBMC->Log(LOG_ERROR, "%s - command failed - %s", __FUNCTION__, strError.c_str()); + XBMC->QueueNotification(QUEUE_ERROR, "Command failed: %s", strError.c_str()); + result.status = PVR_ERROR_REJECTED; + } + } + + // delete from the queue + { + CLockObject lock(m_mutex); + delete message.event; + m_messageQueue.erase(seq); } +} - return msg; +bool CHTSPConnection::ReadSuccess(htsmsg_t* m, const char* strAction /* = NULL */) +{ + CHTSResult result; + ReadResult(m, result, strAction); + return result.status == PVR_ERROR_NO_ERROR; } -/* - * Send and wait for response - */ -htsmsg_t *CHTSPConnection::SendAndWait ( const char *method, htsmsg_t *msg, int iResponseTimeout ) +bool CHTSPConnection::SendGreeting(void) { - if (iResponseTimeout == -1) - iResponseTimeout = tvh->GetSettings().iResponseTimeout; - - if (!WaitForConnection()) - return NULL; - return SendAndWait0(method, msg, iResponseTimeout); -} - -bool CHTSPConnection::SendHello ( void ) -{ - /* Build message */ - htsmsg_t *msg = htsmsg_create_map(); - htsmsg_add_str(msg, "clientname", "Kodi Media Center"); - htsmsg_add_u32(msg, "htspversion", HTSP_API_VERSION); - - /* Send and Wait */ - if (!(msg = SendAndWait0("hello", msg))) - return false; - - /* Process */ - const char *webroot; - const void *chal; - size_t chal_len; - htsmsg_t *cap; - - /* Basic Info */ - webroot = htsmsg_get_str(msg, "webroot"); - m_serverName = htsmsg_get_str(msg, "servername"); - m_serverVersion = htsmsg_get_str(msg, "serverversion"); - m_htspVersion = htsmsg_get_u32_or_default(msg, "htspversion", 0); - m_webRoot = webroot ? webroot : ""; - tvhdebug("connected to %s / %s (HTSPv%d)", - m_serverName.c_str(), m_serverVersion.c_str(), m_htspVersion); + htsmsg_t *m, *cap; + htsmsg_field_t *f; + const char *server, *version, *webroot; + const void * chall = NULL; + size_t chall_len = 0; + int32_t proto = 0; + + // send hello + m = htsmsg_create_map(); + htsmsg_add_str(m, "method", "hello"); + htsmsg_add_str(m, "clientname", "XBMC Media Center"); + htsmsg_add_u32(m, "htspversion", 8); + + CLockObject lock(m_mutex); + + // read welcome + if (!TransmitMessage(m)) + { + XBMC->Log(LOG_ERROR, "CHTSPConnection - %s - failed to transmit greeting", __FUNCTION__); + return false; + } + + m = ReadMessage(g_iConnectTimeout * 1000, g_iConnectTimeout * 1000); + if (m == NULL || m->hm_data == NULL) + { + if (m) + htsmsg_destroy(m); + // no welcome received + XBMC->Log(LOG_ERROR, "CHTSPConnection - %s - failed get a reply after the greeting", __FUNCTION__); + return false; + } - /* Capabilities */ - if ((cap = htsmsg_get_list(msg, "servercapability"))) + htsmsg_get_str(m, "method"); + htsmsg_get_s32(m, "htspversion", &proto); + server = htsmsg_get_str(m, "servername"); + version = htsmsg_get_str(m, "serverversion"); + htsmsg_get_bin(m, "challenge", &chall, &chall_len); + cap = htsmsg_get_list(m, "servercapability"); + webroot = htsmsg_get_str(m, "webroot"); + + // process capabilities + m_bTimeshiftSupport = false; + m_bTimeshiftSeekSupport = false; + m_bTranscodingSupport = false; + if (cap) { - htsmsg_field_t *f; HTSMSG_FOREACH(f, cap) { if (f->hmf_type == HMF_STR) - m_capabilities.push_back(f->hmf_str); + { + if (!strcmp("timeshift", f->hmf_str)) + { + m_bTimeshiftSupport = true; + m_bTimeshiftSeekSupport = true; + } + else if (!strcmp("transcoding", f->hmf_str)) + m_bTranscodingSupport = true; + } } } - - /* Authentication */ - htsmsg_get_bin(msg, "challenge", &chal, &chal_len); - if (chal && chal_len) + + m_strServerName = server; + m_strVersion = version; + m_iProtocol = proto; + m_strWebroot = webroot ? webroot : ""; + + if(chall && chall_len) { - m_challenge = malloc(chal_len); - m_challengeLen = chal_len; - memcpy(m_challenge, chal, chal_len); + m_challenge = malloc(chall_len); + m_iChallengeLength = chall_len; + memcpy(m_challenge, chall, chall_len); } + htsmsg_destroy(m); - htsmsg_destroy(msg); - + XBMC->Log(LOG_NOTICE, "CHTSPConnection - %s - connection opened to '%s %s', protocol v%d%s", __FUNCTION__, m_strServerName.c_str(), m_strVersion.c_str(), m_iProtocol, m_bTimeshiftSupport ? " (timeshift enabled)" : ""); return true; } -bool CHTSPConnection::SendAuth - ( const CStdString &user, const CStdString &pass ) +bool CHTSPConnection::Auth(void) { - htsmsg_t *msg = htsmsg_create_map(); - htsmsg_add_str(msg, "username", user.c_str()); + CLockObject lock(m_mutex); + // no username set, don't authenticate + if (m_strUsername.empty()) + { + XBMC->Log(LOG_DEBUG, "CHTSPConnection - %s - no username set. not authenticating", __FUNCTION__); + return true; + } + + htsmsg_t *m = htsmsg_create_map(); + htsmsg_add_str(m, "method" , "authenticate"); + htsmsg_add_str(m, "username", m_strUsername.c_str()); + + if(!m_strPassword.empty() && m_challenge) + { + XBMC->Log(LOG_DEBUG, "CHTSPConnection - %s - authenticating as user '%s' with a password", __FUNCTION__, m_strUsername.c_str()); + + struct HTSSHA1* shactx = (struct HTSSHA1*) malloc(hts_sha1_size); + uint8_t d[20]; + hts_sha1_init(shactx); + hts_sha1_update(shactx, (const uint8_t *) m_strPassword.c_str(), m_strPassword.length()); + hts_sha1_update(shactx, (const uint8_t *) m_challenge, m_iChallengeLength); + hts_sha1_final(shactx, d); + htsmsg_add_bin(m, "digest", d, 20); + free(shactx); + } + else + { + XBMC->Log(LOG_DEBUG, "CHTSPConnection - %s - authenticating as user '%s' without a password", __FUNCTION__, m_strUsername.c_str()); + } - /* Add Password */ - // Note: we MUST send a digest or TVH will not evaluate the - struct HTSSHA1* sha = (struct HTSSHA1*)malloc(hts_sha1_size); - uint8_t d[20]; - hts_sha1_init(sha); - hts_sha1_update(sha, (const uint8_t*)pass.c_str(), pass.length()); - if (m_challenge) - hts_sha1_update(sha, (const uint8_t*)m_challenge, m_challengeLen); - hts_sha1_final(sha, d); - htsmsg_add_bin(msg, "digest", d, sizeof(d)); - free(sha); + if (!TransmitMessage(m)) + { + XBMC->Log(LOG_ERROR, "CHTSPConnection - %s - failed to transmit auth command", __FUNCTION__); + XBMC->QueueNotification(QUEUE_ERROR, "Access denied"); + return false; + } - /* Send and Wait */ - msg = SendAndWait0("authenticate", msg); + CHTSResult result; + result.message = ReadMessage(g_iConnectTimeout * 1000, g_iConnectTimeout * 1000); + if (result.message == NULL) + { + XBMC->Log(LOG_ERROR, "CHTSPConnection - %s - failed to get a reply from the auth command", __FUNCTION__); + XBMC->QueueNotification(QUEUE_ERROR, "Access denied"); + return false; + } + else if (result.NoAccess()) + { + // access denied + XBMC->Log(LOG_ERROR, "%s - auth failed - access denied", __FUNCTION__); + XBMC->QueueNotification(QUEUE_ERROR, "Access denied"); + return false; + } + else if (result.IsError()) + { + // server reported an error + string strError = result.GetErrorMessage(); + XBMC->Log(LOG_ERROR, "%s - auth failed - %s", __FUNCTION__, strError.c_str()); + XBMC->QueueNotification(QUEUE_ERROR, "Access denied"); + return false; + } - return (msg != NULL); + return true; } -/** - * Register the connection, hello+auth - */ -void CHTSPConnection::Register ( void ) +bool CHTSPConnection::CheckConnection(uint32_t iTimeout) { - CStdString user, pass; - user = tvh->GetSettings().strUsername; - pass = tvh->GetSettings().strPassword; + CLockObject lock(m_mutex); + if (IsConnected()) + return true; - { - CLockObject lock(m_mutex); + return m_connectEvent.Wait(m_mutex, m_bIsConnected, iTimeout); +} - /* Send Greeting */ - tvhdebug("sending hello"); - if (!SendHello()) { - tvherror("failed to send hello"); - goto fail; - } - - /* Send Auth */ - tvhdebug("sending auth"); - - if (!SendAuth(user, pass)) - goto fail; - - /* Rebuild state */ - tvhdebug("rebuilding state"); - if (!tvh->Connected()) - goto fail; - - tvhdebug("registered"); - m_ready = true; - m_regCond.Broadcast(); - return; - } +bool CHTSPConnection::IsConnected(void) +{ + CLockObject lock(m_mutex); + return m_bIsConnected && m_socket && m_socket->IsOpen(); +} - /* Rate limit retry */ -fail: - Sleep(5000); - Disconnect(); +bool CHTSPConnection::CanTimeshift(void) +{ + return m_bTimeshiftSupport; } -/* - * Main thread loop for connection and rx handling - */ -void* CHTSPConnection::Process ( void ) +bool CHTSPConnection::CanSeekLiveStream(void) { - static bool log = false; - static unsigned int retryAttempt = 0; - tvheadend::Settings settings = tvh->GetSettings(); + return m_bTimeshiftSeekSupport; +} +void* CHTSPConnection::Process(void) +{ + htsmsg_t* msg(NULL); while (!IsStopped()) { - CStdString host = settings.strHostname; - int port, timeout; - port = settings.iPortHTSP; - timeout = settings.iConnectTimeout; - - /* Create socket (ensure mutex protection) */ - { - CLockObject lock(m_mutex); - if (m_socket) - delete m_socket; - tvh->Disconnected(); - if (!log) - tvhdebug("connecting to %s:%d", host.c_str(), port); - else - tvhtrace("connecting to %s:%d", host.c_str(), port); - log = true; - m_socket = new CTcpSocket(host.c_str(), port); - m_ready = false; - m_seq = 0; - if (m_challenge) { - free(m_challenge); - m_challenge = NULL; - } + if (!IsConnected() && !m_reconnect->IsRunning()) + { + XBMC->Log(LOG_ERROR, "connection dropped, trying to restore"); + m_reconnect->CreateThread(true); } + else + { + // if there's anything in the buffer, read it + { + { + CLockObject lock(m_mutex); + msg = ReadMessage(5, g_iResponseTimeout * 1000); + } + if(msg == NULL || msg->hm_data == NULL) + { + if (msg) + htsmsg_destroy(msg); + + { + CLockObject lock(m_mutex); + if (!m_reconnect->IsRunning() && m_iReadTimeout > 0 && m_readTimeout.TimeLeft() == 0) + { + TriggerReconnect(); + continue; + } + } + + Sleep(5); + continue; + } + } - /* Connect */ - tvhtrace("waiting for connection..."); - if (!m_socket->Open(timeout)) - { - /* Unable to connect, inform the user */ - tvherror("unable to connect to %s:%d", host.c_str(), port); - - // Retry a few times with a short interval, after that with the default timeout - if (++retryAttempt <= FAST_RECONNECT_ATTEMPTS) - Sleep(FAST_RECONNECT_INTERVAL); - else - Sleep(timeout); - - continue; + { + CLockObject lock(m_mutex); + if (!m_reconnect->IsRunning() && m_iReadTimeout > 0) + m_readTimeout.Init(m_iReadTimeout); + } + + // signal if 'seq' is set + uint32_t seq; + if(htsmsg_get_u32(msg, "seq", &seq) == 0) + { + CLockObject lock(m_mutex); + SMessages::iterator it = m_messageQueue.find(seq); + if(it != m_messageQueue.end()) + { + it->second.msg = msg; + it->second.event->Broadcast(); + continue; + } + } + + // process the message + m_callback->ProcessMessage(msg); + htsmsg_destroy(msg); } - tvhdebug("connected"); - log = false; - retryAttempt = 0; + } + + m_reconnect->StopThread(); + + return NULL; +} - /* Start connect thread */ - m_regThread.CreateThread(true); +void* CHTSPReconnect::Process(void) +{ + if (m_connection->m_callback) + m_connection->m_callback->OnConnectionDropped(); - /* Receive loop */ - while (!IsStopped()) + while (!m_connection->IsConnected() && !IsStopped()) + { { - if (!ReadMessage()) + CLockObject lock(m_connection->m_mutex); + for (SMessages::iterator it = m_connection->m_messageQueue.begin(); it != m_connection->m_messageQueue.end(); it++) + it->second.event->Broadcast(); + + m_connection->m_bIsConnected = false; + if(m_connection->m_challenge) { - break; + free(m_connection->m_challenge); + m_connection->m_challenge = NULL; + m_connection->m_iChallengeLength = 0; } } - /* Stop connect thread (if not already) */ - m_regThread.StopThread(0); + if (m_connection->Connect()) + { + if (m_connection->m_callback && m_connection->m_callback->OnConnectionRestored()) + { + m_connection->m_bIsConnected = true; + if (m_connection->m_iReadTimeout > 0) + m_connection->m_readTimeout.Init(m_connection->m_iReadTimeout); + XBMC->Log(LOG_DEBUG, "connection restored"); + } + else + { + m_connection->TriggerReconnect(); + Sleep(1000); + } + } + else + { + if (m_connection->m_callback) + m_connection->m_callback->OnConnectionDropped(); + } } - return NULL; } diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/src/HTSPConnection.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/src/HTSPConnection.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/src/HTSPConnection.h 1970-01-01 00:00:00.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/src/HTSPConnection.h 2015-04-01 08:50:10.000000000 +0000 @@ -0,0 +1,151 @@ +#pragma once + +/* + * Copyright (C) 2005-2011 Team XBMC + * http://www.xbmc.org + * + * 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 + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This Program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * 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, write to + * the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + * http://www.gnu.org/copyleft/gpl.html + * + */ + +#include "client.h" +#include "HTSPTypes.h" +#include "platform/threads/threads.h" + +extern "C" { +#include "libhts/net.h" +#include "libhts/htsmsg.h" +} + +namespace PLATFORM +{ + class CTcpConnection; +} + +class CHTSPConnectionCallback +{ +public: + CHTSPConnectionCallback(void) {} + virtual ~CHTSPConnectionCallback(void) {} + + virtual bool OnConnectionDropped(void) { return true; } + virtual bool OnConnectionRestored(void) { return true; } + virtual bool ProcessMessage(htsmsg* msg) = 0; +}; + +struct SMessage +{ + PLATFORM::CEvent* event; + htsmsg_t* msg; +}; +typedef std::map SMessages; + +class CHTSResult +{ +public: + CHTSResult(void); + ~CHTSResult(void); + + std::string GetErrorMessage(void); + bool IsError(void); + bool NoAccess(void); + + htsmsg* message; /*!< the response message */ + PVR_ERROR status; /*!< the return code */ + +private: + std::string m_strError; /*!< the error response */ +}; + +class CHTSPConnection; + +class CHTSPReconnect : public PLATFORM::CThread +{ +public: + CHTSPReconnect(CHTSPConnection* connection) : + m_connection(connection) {} + virtual ~CHTSPReconnect(void) {} + + void* Process(void); + +private: + CHTSPConnection* m_connection; +}; + +class CHTSPConnection : private PLATFORM::CThread +{ + friend class CHTSPReconnect; + +public: + CHTSPConnection(CHTSPConnectionCallback* callback); + ~CHTSPConnection(); + + bool Connect(void); + void Close(); + bool IsConnected(void); + bool CheckConnection(uint32_t iTimeout); + int GetProtocol() const { return m_iProtocol; } + const char *GetServerName() const { return m_strServerName.c_str(); } + const char *GetVersion() const { return m_strVersion.c_str(); } + const char *GetWebroot() const { return m_strWebroot.c_str(); } + const CStdString GetWebURL(const char *fmt, ...) const; + + bool TransmitMessage(htsmsg_t* m); + void ReadResult(htsmsg_t *m, CHTSResult &result, const char* strAction = NULL); + bool ReadSuccess(htsmsg_t* m, const char* strAction = NULL); + + bool CanTimeshift(void); + bool CanSeekLiveStream(void); + + bool CanTranscode(void) const { return m_bTranscodingSupport; } + void SetReadTimeout(int iTimeout); + void TriggerReconnect(void); + +private: + bool OpenSocket(void); + void* Process(void); + bool SendGreeting(void); + bool Auth(void); + htsmsg_t* ReadMessage(int iInitialTimeout = 1000, int iDatapacketTimeout = 1000); + + PLATFORM::CMutex m_mutex; + PLATFORM::CTcpConnection* m_socket; + void* m_challenge; + int m_iChallengeLength; + int m_iProtocol; + int m_iPortnumber; + int m_iConnectTimeout; + std::string m_strServerName; + std::string m_strUsername; + std::string m_strPassword; + std::string m_strVersion; + std::string m_strHostname; + std::string m_strWebroot; + bool m_bIsConnected; + bool m_bTimeshiftSupport; + bool m_bTimeshiftSeekSupport; + bool m_bTranscodingSupport; + + std::deque m_queue; + const unsigned int m_iQueueSize; + CHTSPConnectionCallback* m_callback; + PLATFORM::CCondition m_connectEvent; + SMessages m_messageQueue; + PLATFORM::CTimeout m_readTimeout; + int m_iReadTimeout; + CHTSPReconnect* m_reconnect; +}; diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/src/HTSPData.cpp kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/src/HTSPData.cpp --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/src/HTSPData.cpp 1970-01-01 00:00:00.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/src/HTSPData.cpp 2015-04-01 08:50:10.000000000 +0000 @@ -0,0 +1,1640 @@ +/* + * Copyright (C) 2005-2011 Team XBMC + * http://www.xbmc.org + * + * 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 + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This Program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * 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, write to + * the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + * http://www.gnu.org/copyleft/gpl.html + * + */ + +#include "HTSPData.h" +#include "HTSPDemux.h" +#include "platform/util/util.h" + +extern "C" { +#include "platform/util/atomic.h" +#include "libhts/htsmsg.h" +#include "libhts/htsmsg_binary.h" +} + +typedef enum { + DVR_PRIO_IMPORTANT, + DVR_PRIO_HIGH, + DVR_PRIO_NORMAL, + DVR_PRIO_LOW, + DVR_PRIO_UNIMPORTANT, +} dvr_prio_t; + +typedef enum { + DVR_ACTION_TYPE_CUT, + DVR_ACTION_TYPE_MUTE, + DVR_ACTION_TYPE_SCENE, + DVR_ACTION_TYPE_COMBREAK, + +} dvr_action_type_t; + +using namespace std; +using namespace ADDON; +using namespace PLATFORM; + +CHTSPData::CHTSPData() +{ + m_session = NULL; + m_bDisconnectWarningDisplayed = false; + m_bIsStarted = false; + m_recordingId = 0; + m_demux = NULL; + m_recordingBuf.alloc(1000000); +} + +CHTSPData::~CHTSPData() +{ + Close(); + delete m_session; +} + +bool CHTSPData::Open() +{ + if (!m_session) + m_session = new CHTSPConnection(this); + + CLockObject lock(m_mutex); + if(!m_session->Connect()) + { + /* failed to connect */ + return false; + } + + if (!m_demux) + m_demux = new CHTSPDemux(m_session); + + if(!SendEnableAsync()) + { + XBMC->Log(LOG_ERROR, "%s - couldn't send EnableAsync().", __FUNCTION__); + return false; + } + + return m_started.Wait(m_mutex, m_bIsStarted, g_iConnectTimeout * 1000); +} + +void CHTSPData::Close() +{ + CLockObject lock(m_mutex); + m_bIsStarted = false; + m_started.Broadcast(); + SAFE_DELETE(m_demux); + SAFE_DELETE(m_session); +} + +void CHTSPData::ReadResult(htsmsg_t *m, CHTSResult &result) +{ + if (!m_session || !m_session->IsConnected()) + { + htsmsg_destroy(m); + result.status = PVR_ERROR_SERVER_ERROR; + return; + } + + return m_session->ReadResult(m, result); +} + +bool CHTSPData::GetDriveSpace(long long *total, long long *used) +{ + htsmsg_t *msg = htsmsg_create_map(); + htsmsg_add_str(msg, "method", "getDiskSpace"); + + CHTSResult result; + ReadResult(msg, result); + if (result.status != PVR_ERROR_NO_ERROR) + { + XBMC->Log(LOG_DEBUG, "%s - failed to get getDiskSpace", __FUNCTION__); + return false; + } + + int64_t freespace; + if (htsmsg_get_s64(result.message, "freediskspace", &freespace) != 0) + return false; + + int64_t totalspace; + if (htsmsg_get_s64(result.message, "totaldiskspace", &totalspace) != 0) + return false; + + *total = totalspace / 1024; + *used = (totalspace - freespace) / 1024; + return true; +} + +bool CHTSPData::GetBackendTime(time_t *utcTime, int *gmtOffset) +{ + htsmsg_t *msg = htsmsg_create_map(); + htsmsg_add_str(msg, "method", "getSysTime"); + + CHTSResult result; + ReadResult(msg, result); + if (result.status != PVR_ERROR_NO_ERROR) + { + XBMC->Log(LOG_ERROR, "%s - failed to get sysTime", __FUNCTION__); + return false; + } + + unsigned int secs; + if (htsmsg_get_u32(result.message, "time", &secs) != 0) + return false; + + int offset; + if (htsmsg_get_s32(result.message, "timezone", &offset) != 0) + return false; + + XBMC->Log(LOG_DEBUG, "%s - tvheadend reported time=%u, timezone=%d, correction=%d" + , __FUNCTION__, secs, offset); + + *utcTime = secs; + *gmtOffset = offset; + + return true; +} + + +CodecVector CHTSPData::GetTranscodingCodecs(void) +{ + htsmsg_t *msg; + htsmsg_field_t *f; + CodecVector v; + CHTSResult result; + + msg = htsmsg_create_map(); + htsmsg_add_str(msg, "method", "getCodecs"); + + ReadResult(msg, result); + if (result.status != PVR_ERROR_NO_ERROR) + { + XBMC->Log(LOG_DEBUG, "%s - failed to getCodecs", __FUNCTION__); + return v; + } + + msg = htsmsg_get_list(result.message, "encoders"); + if(!msg) + { + XBMC->Log(LOG_DEBUG, "%s - failed to get encoders", __FUNCTION__); + return v; + } + + HTSMSG_FOREACH(f, msg) { + if (f->hmf_type != HMF_STR) + continue; + + CodecDescriptor codec = CodecDescriptor::GetCodecByName(f->hmf_str); + if (codec.Codec().codec_type != XBMC_CODEC_TYPE_UNKNOWN) + v.push_back(codec); + } + + return v; +} + +unsigned int CHTSPData::GetNumChannels() +{ + return GetChannels().size(); +} + +PVR_ERROR CHTSPData::GetChannels(ADDON_HANDLE handle, bool bRadio) +{ + SChannels channels = GetChannels(); + for(SChannels::iterator it = channels.begin(); it != channels.end(); ++it) + { + SChannel& channel = it->second; + if(bRadio != channel.radio) + continue; + + PVR_CHANNEL tag; + memset(&tag, 0 , sizeof(PVR_CHANNEL)); + + tag.iUniqueId = channel.id; + tag.bIsRadio = channel.radio; + tag.iChannelNumber = channel.num; + tag.iSubChannelNumber = channel.numMinor; + strncpy(tag.strChannelName, channel.name.c_str(), sizeof(tag.strChannelName) - 1); + tag.iEncryptionSystem = channel.caid; + strncpy(tag.strIconPath, channel.icon.c_str(), sizeof(tag.strIconPath) - 1); + tag.bIsHidden = false; + + PVR->TransferChannelEntry(handle, &tag); + } + + return PVR_ERROR_NO_ERROR; +} + +PVR_ERROR CHTSPData::GetEpg(ADDON_HANDLE handle, const PVR_CHANNEL &channel, time_t iStart, time_t iEnd) +{ + PVR_ERROR retVal = PVR_ERROR_NO_ERROR; + SChannels channels = GetChannels(); + + if (channels.find(channel.iUniqueId) != channels.end()) + { + + /* Full channel update */ + if (GetProtocol() >= 6) + { + retVal = GetEvents(handle, channel.iUniqueId, iEnd); + } + /* Event at a time */ + else + { + uint32_t eventId = channels[channel.iUniqueId].event; + if (eventId != 0) + { + do + { + retVal = GetEvent(handle, &eventId, iEnd); + } while(eventId && retVal == PVR_ERROR_NO_ERROR); + } + } + } + + return retVal; +} + +SRecordings CHTSPData::GetDVREntries(bool recorded, bool scheduled) +{ + CLockObject lock(m_mutex); + SRecordings recordings; + + for(SRecordings::const_iterator it = m_recordings.begin(); it != m_recordings.end(); ++it) + { + SRecording recording = it->second; + + if ((recorded && (recording.state == ST_COMPLETED || recording.state == ST_ABORTED || recording.state == ST_RECORDING)) || + (scheduled && (recording.state == ST_SCHEDULED || recording.state == ST_RECORDING))) + recordings[recording.id] = recording; + } + + return recordings; +} + +unsigned int CHTSPData::GetNumRecordings() +{ + SRecordings recordings = GetDVREntries(true, false); + return recordings.size(); +} + +PVR_ERROR CHTSPData::GetRecordings(ADDON_HANDLE handle) +{ + SRecordings recordings = GetDVREntries(true, false); + + for(SRecordings::const_iterator it = recordings.begin(); it != recordings.end(); ++it) + { + SRecording recording = it->second; + CStdString strStreamURL; + CStdString strRecordingId; + CStdString strDirectory = "/"; + std::string strChannelName = ""; + std::string strIconPath = ""; + + /* lock */ + { + CLockObject lock(m_mutex); + + /* determine channel name and icon */ + SChannels::const_iterator itr = m_channels.find(recording.channel); + if (itr != m_channels.end()) + { + strChannelName = itr->second.name; + strIconPath = itr->second.icon; + } + + /* HTSPv7+ - use HTSP */ + if (GetProtocol() >= 7) + strStreamURL = ""; + + /* HTSPv6- - use HTTP */ + else + strStreamURL = m_session->GetWebURL("/dvrfile/%i", recording.id); + } + + strRecordingId.Format("%i", recording.id); + + if (recording.path != "") + { + size_t idx = recording.path.rfind("/"); + if (idx == 0 || idx == std::string::npos) { + strDirectory = "/"; + } else { + strDirectory = recording.path.substr(0, idx); + if (strDirectory[0] != '/') + strDirectory = "/" + strDirectory; + } + } + + PVR_RECORDING tag; + memset(&tag, 0, sizeof(PVR_RECORDING)); + + strncpy(tag.strRecordingId, strRecordingId.c_str(), sizeof(tag.strRecordingId) - 1); + strncpy(tag.strTitle, recording.title.c_str(), sizeof(tag.strTitle) - 1); + strncpy(tag.strStreamURL, strStreamURL.c_str(), sizeof(tag.strStreamURL) - 1); + strncpy(tag.strDirectory, strDirectory.c_str(), sizeof(tag.strDirectory) - 1); + strncpy(tag.strPlot, recording.description.c_str(), sizeof(tag.strPlot) - 1); + strncpy(tag.strChannelName, strChannelName.c_str(), sizeof(tag.strChannelName) - 1); + strncpy(tag.strIconPath, strIconPath.c_str(), sizeof(tag.strIconPath) - 1); + tag.recordingTime = recording.start; + tag.iDuration = recording.stop - recording.start; + tag.iPriority = recording.priority; + tag.iLifetime = recording.retention; + + PVR->TransferRecordingEntry(handle, &tag); + } + + return PVR_ERROR_NO_ERROR; +} + +PVR_ERROR CHTSPData::DeleteRecording(const PVR_RECORDING &recording) +{ + XBMC->Log(LOG_DEBUG, "%s", __FUNCTION__); + + htsmsg_t *msg = htsmsg_create_map(); + htsmsg_add_str(msg, "method", "deleteDvrEntry"); + htsmsg_add_u32(msg, "id", atoi(recording.strRecordingId)); + + CHTSResult result; + ReadResult(msg, result); + if (result.status != PVR_ERROR_NO_ERROR) + { + XBMC->Log(LOG_DEBUG, "%s - Failed to get deleteDvrEntry", __FUNCTION__); + return result.status; + } + + unsigned int success; + if (htsmsg_get_u32(result.message, "success", &success) != 0) + { + XBMC->Log(LOG_DEBUG, "%s - Failed to parse param", __FUNCTION__); + return PVR_ERROR_SERVER_ERROR; + } + + return success > 0 ? PVR_ERROR_NO_ERROR : PVR_ERROR_FAILED; +} + +unsigned int CHTSPData::GetNumTimers() +{ + SRecordings recordings = GetDVREntries(false, true); + return recordings.size(); +} + +unsigned int CHTSPData::GetNumChannelGroups(void) +{ + return m_tags.size(); +} + +PVR_ERROR CHTSPData::GetChannelGroups(ADDON_HANDLE handle) +{ + for(unsigned int iTagPtr = 0; iTagPtr < m_tags.size(); iTagPtr++) + { + if (!m_tags[iTagPtr].name.empty()) + { + PVR_CHANNEL_GROUP tag; + memset(&tag, 0 , sizeof(PVR_CHANNEL_GROUP)); + + tag.bIsRadio = false; + strncpy(tag.strGroupName, m_tags[iTagPtr].name.c_str(), sizeof(tag.strGroupName) - 1); + + PVR->TransferChannelGroup(handle, &tag); + } + } + + return PVR_ERROR_NO_ERROR; +} + +PVR_ERROR CHTSPData::GetChannelGroupMembers(ADDON_HANDLE handle, const PVR_CHANNEL_GROUP &group) +{ + XBMC->Log(LOG_DEBUG, "%s - group '%s'", __FUNCTION__, group.strGroupName); + + for(unsigned int iTagPtr = 0; iTagPtr < m_tags.size(); iTagPtr++) + { + if (m_tags[iTagPtr].name != group.strGroupName) + continue; + + SChannels channels = GetChannels(m_tags[iTagPtr].id); + + for(SChannels::iterator it = channels.begin(); it != channels.end(); ++it) + { + SChannel& channel = it->second; + if (channel.radio != group.bIsRadio) + continue; + + PVR_CHANNEL_GROUP_MEMBER tag; + memset(&tag,0 , sizeof(PVR_CHANNEL_GROUP_MEMBER)); + + strncpy(tag.strGroupName, group.strGroupName, sizeof(tag.strGroupName) - 1); + tag.iChannelUniqueId = channel.id; + tag.iChannelNumber = channel.num; + +#if HTSP_DEBUGGING + XBMC->Log(LOG_DEBUG, "%s - add channel %s (%d) to group '%s' channel number %d", + __FUNCTION__, channel.name.c_str(), tag.iChannelUniqueId, group.strGroupName, channel.num); +#endif + + PVR->TransferChannelGroupMember(handle, &tag); + } + } + + return PVR_ERROR_NO_ERROR; +} + +PVR_ERROR CHTSPData::GetTimers(ADDON_HANDLE handle) +{ + SRecordings recordings = GetDVREntries(false, true); + + for(SRecordings::const_iterator it = recordings.begin(); it != recordings.end(); ++it) + { + SRecording recording = it->second; + + PVR_TIMER tag; + memset(&tag, 0, sizeof(PVR_TIMER)); + + tag.iClientIndex = recording.id; + tag.iClientChannelUid = recording.channel; + tag.startTime = recording.start; + tag.endTime = recording.stop; + strncpy(tag.strTitle, recording.title.c_str(), sizeof(tag.strTitle) - 1); + strncpy(tag.strSummary, recording.description.c_str(), sizeof(tag.strSummary) - 1); + tag.state = (PVR_TIMER_STATE) recording.state; + tag.iPriority = recording.priority; + tag.iLifetime = recording.retention; + tag.bIsRepeating = false; // unused + tag.firstDay = 0; // unused + tag.iWeekdays = 0; // unused + tag.iEpgUid = 0; // unused + tag.iMarginStart = recording.startExtra; + tag.iMarginEnd = recording.stopExtra; + tag.iGenreType = 0; // unused + tag.iGenreSubType = 0; // unused + + PVR->TransferTimerEntry(handle, &tag); + } + + return PVR_ERROR_NO_ERROR; +} + +PVR_ERROR CHTSPData::DeleteTimer(const PVR_TIMER &timer, bool bForce) +{ + XBMC->Log(LOG_DEBUG, "%s", __FUNCTION__); + + htsmsg_t *msg = htsmsg_create_map(); + htsmsg_add_str(msg, "method", "cancelDvrEntry"); + htsmsg_add_u32(msg, "id", timer.iClientIndex); + + CHTSResult result; + ReadResult(msg, result); + if (result.status != PVR_ERROR_NO_ERROR) + { + XBMC->Log(LOG_DEBUG, "%s - Failed to get cancelDvrEntry", __FUNCTION__); + return result.status; + } + + const char *strError = NULL; + if ((strError = htsmsg_get_str(result.message, "error"))) + { + XBMC->Log(LOG_DEBUG, "%s - Error deleting timer: '%s'", __FUNCTION__, strError); + return PVR_ERROR_SERVER_ERROR; + } + + unsigned int success; + if (htsmsg_get_u32(result.message, "success", &success) != 0) + { + XBMC->Log(LOG_DEBUG, "%s - Failed to parse param", __FUNCTION__); + return PVR_ERROR_SERVER_ERROR; + } + + return success > 0 ? PVR_ERROR_NO_ERROR : PVR_ERROR_FAILED; +} + +PVR_ERROR CHTSPData::AddTimer(const PVR_TIMER &timer) +{ + XBMC->Log(LOG_DEBUG, "%s - channelUid=%d title=%s epgid=%d", __FUNCTION__, timer.iClientChannelUid, timer.strTitle, timer.iEpgUid); + + time_t startTime = timer.startTime; + if (startTime <= 0) + { + int iGmtOffset; + GetBackendTime(&startTime, &iGmtOffset); + } + + dvr_prio_t prio = DVR_PRIO_UNIMPORTANT; + if (timer.iPriority <= 20) + prio = DVR_PRIO_UNIMPORTANT; + else if (timer.iPriority <= 40) + prio = DVR_PRIO_LOW; + else if (timer.iPriority <= 60) + prio = DVR_PRIO_NORMAL; + else if (timer.iPriority <= 80) + prio = DVR_PRIO_HIGH; + else + prio = DVR_PRIO_IMPORTANT; + + htsmsg_t *msg = htsmsg_create_map(); + htsmsg_add_str(msg, "method", "addDvrEntry"); + if ((GetProtocol() >= 6) && timer.iEpgUid > 0) + { + htsmsg_add_u32(msg, "eventId", timer.iEpgUid); + } + else + { + htsmsg_add_str(msg, "title", timer.strTitle); + htsmsg_add_u32(msg, "start", startTime); + htsmsg_add_u32(msg, "stop", timer.endTime); + htsmsg_add_u32(msg, "channelId", timer.iClientChannelUid); + htsmsg_add_str(msg, "description", timer.strSummary); + htsmsg_add_u32(msg, "eventId", -1); + } + + htsmsg_add_s64(msg, "startExtra", timer.iMarginStart); + htsmsg_add_s64(msg, "stopExtra", timer.iMarginEnd); + + if (GetProtocol() > 12) + htsmsg_add_u32(msg, "retention", timer.iLifetime); + + htsmsg_add_u32(msg, "priority", prio); + htsmsg_add_str(msg, "creator", "XBMC"); + + CHTSResult result; + ReadResult(msg, result); + if (result.status != PVR_ERROR_NO_ERROR) + { + XBMC->Log(LOG_DEBUG, "%s - Failed to get addDvrEntry", __FUNCTION__); + return result.status; + } + + const char *strError = NULL; + if ((strError = htsmsg_get_str(result.message, "error"))) + { + XBMC->Log(LOG_DEBUG, "%s - Error adding timer: '%s'", __FUNCTION__, strError); + return PVR_ERROR_SERVER_ERROR; + } + + unsigned int success; + if (htsmsg_get_u32(result.message, "success", &success) != 0) + { + XBMC->Log(LOG_DEBUG, "%s - Failed to parse param", __FUNCTION__); + return PVR_ERROR_SERVER_ERROR; + } + + return success > 0 ? PVR_ERROR_NO_ERROR : PVR_ERROR_FAILED; +} + +PVR_ERROR CHTSPData::UpdateTimer(const PVR_TIMER &timer) +{ + XBMC->Log(LOG_DEBUG, "%s - channelUid=%d title=%s epgid=%d", __FUNCTION__, timer.iClientChannelUid, timer.strTitle, timer.iEpgUid); + + htsmsg_t *msg = htsmsg_create_map(); + htsmsg_add_str(msg, "method", "updateDvrEntry"); + htsmsg_add_u32(msg, "id", timer.iClientIndex); + htsmsg_add_str(msg, "title", timer.strTitle); + htsmsg_add_u32(msg, "start", timer.startTime); + htsmsg_add_u32(msg, "stop", timer.endTime); + htsmsg_add_s64(msg, "startExtra", timer.iMarginStart); + htsmsg_add_s64(msg, "stopExtra", timer.iMarginEnd); + + if (GetProtocol() > 12) + { + htsmsg_add_u32(msg, "retention", timer.iLifetime); + + /* Priority */ + dvr_prio_t prio = DVR_PRIO_UNIMPORTANT; + if (timer.iPriority <= 20) + prio = DVR_PRIO_UNIMPORTANT; + else if (timer.iPriority <= 40) + prio = DVR_PRIO_LOW; + else if (timer.iPriority <= 60) + prio = DVR_PRIO_NORMAL; + else if (timer.iPriority <= 80) + prio = DVR_PRIO_HIGH; + else + prio = DVR_PRIO_IMPORTANT; + + htsmsg_add_u32(msg, "priority", (int)prio); + } + + CHTSResult result; + ReadResult(msg, result); + if (result.status != PVR_ERROR_NO_ERROR) + { + XBMC->Log(LOG_DEBUG, "%s - Failed to get updateDvrEntry", __FUNCTION__); + return result.status; + } + + unsigned int success; + if (htsmsg_get_u32(result.message, "success", &success) != 0) + { + XBMC->Log(LOG_DEBUG, "%s - Failed to parse param", __FUNCTION__); + return PVR_ERROR_SERVER_ERROR; + } + + return success > 0 ? PVR_ERROR_NO_ERROR : PVR_ERROR_FAILED; +} + +PVR_ERROR CHTSPData::RenameRecording(const PVR_RECORDING &recording, const char *strNewName) +{ + XBMC->Log(LOG_DEBUG, "%s - id=%s", __FUNCTION__, recording.strRecordingId); + + htsmsg_t *msg = htsmsg_create_map(); + htsmsg_add_str(msg, "method", "updateDvrEntry"); + htsmsg_add_u32(msg, "id", atoi(recording.strRecordingId)); + htsmsg_add_str(msg, "title", recording.strTitle); + + CHTSResult result; + ReadResult(msg, result); + if (result.status != PVR_ERROR_NO_ERROR) + { + XBMC->Log(LOG_DEBUG, "%s - Failed to get updateDvrEntry", __FUNCTION__); + return result.status; + } + + unsigned int success; + if (htsmsg_get_u32(result.message, "success", &success) != 0) + { + XBMC->Log(LOG_DEBUG, "%s - Failed to parse param", __FUNCTION__); + return PVR_ERROR_SERVER_ERROR; + } + + if (success > 0 && m_bIsStarted) + PVR->TriggerRecordingUpdate(); + + return success > 0 ? PVR_ERROR_NO_ERROR : PVR_ERROR_FAILED; +} + + +bool CHTSPData::ProcessMessage(htsmsg* msg) +{ + const char* method; + if((method = htsmsg_get_str(msg, "method")) == NULL) + return true; + + CLockObject lock(m_mutex); + if (m_demux && m_demux->ProcessMessage(msg)) + { + // demux packet + } + else if(strstr(method, "channelAdd")) + ParseChannelUpdate(msg); + else if(strstr(method, "channelUpdate")) + ParseChannelUpdate(msg); + else if(strstr(method, "channelDelete")) + ParseChannelRemove(msg); + else if(strstr(method, "tagAdd")) + ParseTagUpdate(msg); + else if(strstr(method, "tagUpdate")) + ParseTagUpdate(msg); + else if(strstr(method, "tagDelete")) + ParseTagRemove(msg); + else if(strstr(method, "initialSyncCompleted")) + { + m_bIsStarted = true; + m_started.Broadcast(); + } + else if(strstr(method, "dvrEntryAdd")) + ParseDVREntryUpdate(msg); + else if(strstr(method, "dvrEntryUpdate")) + ParseDVREntryUpdate(msg); + else if(strstr(method, "dvrEntryDelete")) + ParseDVREntryDelete(msg); + else + XBMC->Log(LOG_DEBUG, "%s - Unmapped action recieved '%s'", __FUNCTION__, method); + return true; +} + +SChannels CHTSPData::GetChannels() +{ + return GetChannels(0); +} + +SChannels CHTSPData::GetChannels(int tag) +{ + CLockObject lock(m_mutex); + if(tag == 0) + return m_channels; + + STags::iterator it = m_tags.find(tag); + if(it == m_tags.end()) + { + SChannels channels; + return channels; + } + return GetChannels(it->second); +} + +SChannels CHTSPData::GetChannels(STag& tag) +{ + CLockObject lock(m_mutex); + SChannels channels; + + std::vector::iterator it; + for(it = tag.channels.begin(); it != tag.channels.end(); it++) + { + SChannels::iterator it2 = m_channels.find(*it); + if(it2 == m_channels.end()) + { + XBMC->Log(LOG_ERROR, "%s - tag points to unknown channel %d", __FUNCTION__, *it); + continue; + } + channels[*it] = it2->second; + } + return channels; +} + +STags CHTSPData::GetTags() +{ + CLockObject lock(m_mutex); + return m_tags; +} + +PVR_ERROR CHTSPData::GetEvent(ADDON_HANDLE handle, uint32_t *id, time_t stop) +{ + if(*id == 0) + { + return PVR_ERROR_UNKNOWN; + } + + htsmsg_t *msg = htsmsg_create_map(); + htsmsg_add_str(msg, "method", "getEvent"); + htsmsg_add_u32(msg, "eventId", *id); + + CHTSResult result; + ReadResult(msg, result); + if(result.status != PVR_ERROR_NO_ERROR) + { + XBMC->Log(LOG_DEBUG, "%s - failed to get event %d", __FUNCTION__, id); + return result.status; + } + + if (ParseEvent(handle, result.message, id, stop)) + { + return PVR_ERROR_NO_ERROR; + } + + return PVR_ERROR_SERVER_ERROR; +} + +PVR_ERROR CHTSPData::GetEvents(ADDON_HANDLE handle, uint32_t cid, time_t stop) +{ + PVR_ERROR retVal = PVR_ERROR_NO_ERROR; + + if (cid == 0) + { + return PVR_ERROR_UNKNOWN; + } + + htsmsg_t *msg = htsmsg_create_map(); + htsmsg_add_str(msg, "method", "getEvents"); + htsmsg_add_u32(msg, "channelId", cid); + htsmsg_add_s64(msg, "maxTime", stop); + + CHTSResult result; + ReadResult(msg, result); + if(result.status != PVR_ERROR_NO_ERROR) + { + XBMC->Log(LOG_DEBUG, "%s - failed to get events for %d", __FUNCTION__, cid); + return result.status; + } + + if (!(msg = htsmsg_get_list(result.message, "events"))) { + XBMC->Log(LOG_DEBUG, "%s - failed to get events for %d", __FUNCTION__, cid); + return PVR_ERROR_UNKNOWN; + } + + htsmsg_t *e; + htsmsg_field_t *f; + + unsigned int failedEvents = 0; + unsigned int goodEvents = 0; + + HTSMSG_FOREACH(f, msg) + { + if ((e = htsmsg_get_map_by_field(f))) + { + if (ParseEvent(handle, e, NULL, stop)) + goodEvents++; + else + failedEvents++; + } + } + + if (goodEvents == 0 && failedEvents > 0) + retVal = PVR_ERROR_SERVER_ERROR; + + return retVal; +} + +bool CHTSPData::SendEnableAsync() +{ + htsmsg_t *m = htsmsg_create_map(); + htsmsg_add_str(m, "method", "enableAsyncMetadata"); + return m_session->ReadSuccess(m, "enableAsyncMetadata"); +} + +void CHTSPData::ParseChannelRemove(htsmsg_t* msg) +{ + uint32_t id; + if(htsmsg_get_u32(msg, "channelId", &id)) + { + XBMC->Log(LOG_ERROR, "%s - malformed message received", __FUNCTION__); + htsmsg_print(msg); + return; + } + XBMC->Log(LOG_DEBUG, "%s - id:%u", __FUNCTION__, id); + + m_channels.erase(id); + + if (m_bIsStarted) + PVR->TriggerChannelUpdate(); +} + +void CHTSPData::ParseChannelUpdate(htsmsg_t* msg) +{ + bool bChannelChanged(false), bTagsChanged(false); + uint32_t iChannelId, iEventId = 0, iChannelNumber = 0, iSubChannelNumber = 0, iCaid = 0; + const char *strName, *strIconPath; + if(htsmsg_get_u32(msg, "channelId", &iChannelId)) + { + XBMC->Log(LOG_ERROR, "%s - malformed message received", __FUNCTION__); + htsmsg_print(msg); + return; + } + + SChannel &channel = m_channels[iChannelId]; + channel.id = iChannelId; + + if(htsmsg_get_u32(msg, "eventId", &iEventId) == 0) + channel.event = iEventId; + + if((strName = htsmsg_get_str(msg, "channelName"))) + { + if (channel.name != strName) + { + bChannelChanged = true; + channel.name = strName; + } + } + + if((strIconPath = htsmsg_get_str(msg, "channelIcon"))) + { + CStdString strIconURL; + + if (strIconPath[0] != '/' || strIconPath[0] == '\0') + strIconURL = strIconPath; + else + strIconURL = m_session->GetWebURL("%s", strIconPath); + + if (channel.icon != strIconURL) + { + bChannelChanged = true; + channel.icon = strIconURL; + } + } + + if(htsmsg_get_u32(msg, "channelNumber", &iChannelNumber) == 0) + { + int iNewChannelNumber = (iChannelNumber == 0) ? iChannelId + 1000 : iChannelNumber; + if (channel.num != iNewChannelNumber) + { + bChannelChanged = true; + channel.num = iNewChannelNumber; + } + } + + /* ATSC subchannel number */ + if (!htsmsg_get_u32(msg, "channelNumberMinor", &iSubChannelNumber)) + { + if (channel.numMinor != iSubChannelNumber) + { + bChannelChanged = true; + channel.numMinor = iSubChannelNumber; + } + } + + htsmsg_t *tags; + + if((tags = htsmsg_get_list(msg, "tags"))) + { + std::vector newTags; + htsmsg_field_t *f; + HTSMSG_FOREACH(f, tags) + { + if(f->hmf_type != HMF_S64) + continue; + newTags.push_back((int)f->hmf_s64); + } + + for (std::vector::const_iterator it = newTags.begin(); it != newTags.end(); it++) + { + if (std::find(channel.tags.begin(), channel.tags.end(), *it) == channel.tags.end()) + bTagsChanged = true; + } + for (std::vector::const_iterator it = channel.tags.begin(); it != channel.tags.end(); it++) + { + if (std::find(newTags.begin(), newTags.end(), *it) == newTags.end()) + bTagsChanged = true; + } + if (bTagsChanged) + channel.tags = newTags; + } + + htsmsg_t *services; + bool bIsRadio = channel.radio; + if((services = htsmsg_get_list(msg, "services"))) + { + htsmsg_field_t *f; + HTSMSG_FOREACH(f, services) + { + if(f->hmf_type != HMF_MAP) + continue; + + htsmsg_t *service = &f->hmf_msg; + const char *service_type = htsmsg_get_str(service, "type"); + if(service_type != NULL) + bIsRadio = !strcmp(service_type, "Radio"); + + if(!htsmsg_get_u32(service, "caid", &iCaid)) + { + if ((channel.caid != (int)iCaid)) + { + bChannelChanged = true; + channel.caid = (int) iCaid; + } + } + } + } + if (channel.radio != bIsRadio) + { + bChannelChanged = true; + channel.radio = bIsRadio; + } + +#if HTSP_DEBUGGING + XBMC->Log(LOG_DEBUG, "%s - id:%u, name:'%s', icon:'%s', event:%u", + __FUNCTION__, iChannelId, strName ? strName : "(null)", strIconPath ? strIconPath : "(null)", iEventId); +#endif + + if (m_bIsStarted) + { + if (bChannelChanged) + PVR->TriggerChannelUpdate(); + if (bTagsChanged) + PVR->TriggerChannelGroupsUpdate(); + } +} + +void CHTSPData::ParseDVREntryDelete(htsmsg_t* msg) +{ + uint32_t id; + + if(htsmsg_get_u32(msg, "id", &id)) + { + XBMC->Log(LOG_ERROR, "%s - malformed message received", __FUNCTION__); + htsmsg_print(msg); + return; + } + + XBMC->Log(LOG_DEBUG, "%s - Recording %i was deleted", __FUNCTION__, id); + + m_recordings.erase(id); + + if (m_bIsStarted) + { + PVR->TriggerTimerUpdate(); + PVR->TriggerRecordingUpdate(); + } +} + +void CHTSPData::ParseDVREntryUpdate(htsmsg_t* msg) +{ + SRecording recording; + const char *state; + int64_t startExtra, stopExtra; + uint32_t retention, priority; + + /* Required fields */ + if(htsmsg_get_u32(msg, "id", &recording.id) + || htsmsg_get_u32(msg, "channel", &recording.channel) + || htsmsg_get_u32(msg, "start", &recording.start) + || htsmsg_get_u32(msg, "stop", &recording.stop) + || (state = htsmsg_get_str(msg, "state")) == NULL) + { + XBMC->Log(LOG_ERROR, "%s - malformed message received", __FUNCTION__); + htsmsg_print(msg); + return; + } + + /* parse the dvr entry's state */ + if (strstr(state, "scheduled")) + recording.state = ST_SCHEDULED; + else if(strstr(state, "recording")) + recording.state = ST_RECORDING; + else if(strstr(state, "completed")) + recording.state = ST_COMPLETED; + else if(strstr(state, "invalid")) + recording.state = ST_INVALID; + + /* Optional fields */ + if(!htsmsg_get_s64(msg, "startExtra", &startExtra)) + recording.startExtra = startExtra; + + if(!htsmsg_get_s64(msg, "stopExtra", &stopExtra)) + recording.stopExtra = stopExtra; + + if(!htsmsg_get_u32(msg, "retention", &retention)) + recording.retention = retention; + + if(!htsmsg_get_u32(msg, "priority", &priority)) + { + switch (priority) + { + case DVR_PRIO_IMPORTANT: + recording.priority = 100; + break; + case DVR_PRIO_HIGH: + recording.priority = 75; + break; + case DVR_PRIO_NORMAL: + recording.priority = 50; + break; + case DVR_PRIO_LOW: + recording.priority = 25; + break; + case DVR_PRIO_UNIMPORTANT: + recording.priority = 0; + break; + default: + XBMC->Log(LOG_ERROR, "%s - malformed message received", __FUNCTION__); + htsmsg_print(msg); + return; + } + } + + const char* str; + if((str = htsmsg_get_str(msg, "title")) == NULL) + recording.title = ""; + else + recording.title = str; + + if((str = htsmsg_get_str(msg, "path")) == NULL) + recording.path = ""; + else + recording.path = str; + + if((str = htsmsg_get_str(msg, "description")) == NULL) + recording.description = ""; + else + recording.description = str; + + if((str = htsmsg_get_str(msg, "error")) == NULL) + recording.error = ""; + else + recording.error = str; + + // if the user has aborted the recording then the recording.error will be set to 300 by tvheadend + if (recording.error == "300") + { + recording.state = ST_ABORTED; + recording.error.clear(); + } + + // Missing file (hide) + else if (recording.error == "File missing") + { + recording.state = ST_INVALID; + recording.error.clear(); + } + + +#if HTSP_DEBUGGING + XBMC->Log(LOG_DEBUG, "%s - id:%u, state:'%s', title:'%s', description: '%s', error:'%s'" + , __FUNCTION__, recording.id, state, recording.title.c_str() + , recording.description.c_str(), recording.error.c_str()); +#endif + + m_recordings[recording.id] = recording; + + if (m_bIsStarted) + { + PVR->TriggerTimerUpdate(); + + if (recording.state == ST_RECORDING) + PVR->TriggerRecordingUpdate(); + } +} + +bool CHTSPData::ParseEvent(ADDON_HANDLE handle, htsmsg_t* msg, uint32_t *id, time_t end) +{ + uint32_t eventId, channelId, content, nextId, stars, age, start, stop; + int64_t aired; + const char *title, *subtitle, *desc, *summary, *image; + + /* Required fields */ + if( htsmsg_get_u32(msg, "eventId", &eventId) + || htsmsg_get_u32(msg, "channelId", &channelId) + || htsmsg_get_u32(msg, "start", &start) + || htsmsg_get_u32(msg, "stop" , &stop) + || (title = htsmsg_get_str(msg, "title")) == NULL + || (id && (*id != eventId))) + { + XBMC->Log(LOG_DEBUG, "%s - malformed event", __FUNCTION__); + htsmsg_print(msg); + return false; + } + + /* Optional fields */ + summary = htsmsg_get_str(msg, "summary"); + subtitle = htsmsg_get_str(msg, "subtitle"); + desc = htsmsg_get_str(msg, "description"); + image = htsmsg_get_str(msg, "image"); + content = htsmsg_get_u32_or_default(msg, "contentType", 0); + nextId = htsmsg_get_u32_or_default(msg, "nextEventId", 0); + stars = htsmsg_get_u32_or_default(msg, "starRating", 0); + age = htsmsg_get_u32_or_default(msg, "ageRating", 0); + htsmsg_get_s64(msg, "firstAired", &aired); + + /* Fix old genre spec */ + if (GetProtocol() < 6) + content = content << 4; + +#if HTSP_DEBUGGING + XBMC->Log(LOG_DEBUG, "%s - id:%u, chan_id:%u, title:'%s', genre_type:%u, genre_sub_type:%u, desc:'%s', start:%u, stop:%u, next:%u" + , __FUNCTION__ + , eventId + , channelId + , title + , content & 0xF0 + , content & 0x0F + , desc + , start + , stop + , nextId); +#endif + + /* Broadcast */ + EPG_TAG broadcast; + memset(&broadcast, 0, sizeof(EPG_TAG)); + + broadcast.iUniqueBroadcastId = eventId; + broadcast.strTitle = title; + broadcast.iChannelNumber = channelId; + broadcast.startTime = start; + broadcast.endTime = stop; + broadcast.strPlotOutline = summary ? summary : ""; + broadcast.strPlot = desc ? desc : ""; + broadcast.strIconPath = image ? image : ""; + broadcast.iGenreType = content & 0xF0; + broadcast.iGenreSubType = content & 0x0F; + broadcast.strGenreDescription = ""; // unused + broadcast.firstAired = (time_t) aired; + broadcast.iParentalRating = age; + broadcast.iStarRating = stars; + broadcast.bNotify = false; + broadcast.iSeriesNumber = htsmsg_get_u32_or_default(msg, "seasonNumber", 0); + broadcast.iEpisodeNumber = htsmsg_get_u32_or_default(msg, "episodeNumber", 0); + broadcast.iEpisodePartNumber = htsmsg_get_u32_or_default(msg, "partNumber", 0); + broadcast.strEpisodeName = subtitle ? subtitle : ""; + + /* Post to PVR */ + PVR->TransferEpgEntry(handle, &broadcast); + + /* Update next */ + if (id && ((time_t)stop < end)) + *id = nextId; + else if (id) + *id = 0; + + return true; +} + +void CHTSPData::ParseTagRemove(htsmsg_t* msg) +{ + uint32_t id; + if(htsmsg_get_u32(msg, "tagId", &id)) + { + XBMC->Log(LOG_ERROR, "%s - malformed message received", __FUNCTION__); + htsmsg_print(msg); + return; + } + XBMC->Log(LOG_DEBUG, "%s - id:%u", __FUNCTION__, id); + + m_tags.erase(id); + + if (m_bIsStarted) + PVR->TriggerChannelGroupsUpdate(); +} + +void CHTSPData::ParseTagUpdate(htsmsg_t* msg) +{ + uint32_t id; + const char *name, *icon; + if(htsmsg_get_u32(msg, "tagId", &id)) + { + XBMC->Log(LOG_ERROR, "%s - malformed message received", __FUNCTION__); + htsmsg_print(msg); + return; + } + STag &tag = m_tags[id]; + tag.id = id; + + if((icon = htsmsg_get_str(msg, "tagIcon"))) + tag.icon = icon; + + if((name = htsmsg_get_str(msg, "tagName"))) + tag.name = name; + + htsmsg_t *channels; + + if((channels = htsmsg_get_list(msg, "members"))) + { + tag.channels.clear(); + + htsmsg_field_t *f; + HTSMSG_FOREACH(f, channels) + { + if(f->hmf_type != HMF_S64) + continue; + tag.channels.push_back((int)f->hmf_s64); + } + } + +#if HTSP_DEBUGGING + XBMC->Log(LOG_DEBUG, "%s - id:%u, name:'%s', icon:'%s'" + , __FUNCTION__, id, name ? name : "(null)", icon ? icon : "(null)"); +#endif + + if (m_bIsStarted) + PVR->TriggerChannelGroupsUpdate(); +} + +bool CHTSPData::OpenRecordedStream(const PVR_RECORDING &recording) +{ + if (GetProtocol() < 7) return false; + + htsmsg_t *msg = htsmsg_create_map(); + htsmsg_add_str(msg, "method", "fileOpen"); + + CStdString strDvrPath; + strDvrPath.Format("dvr/%s", recording.strRecordingId); + htsmsg_add_str(msg, "file", strDvrPath.c_str()); + + CHTSResult result; + ReadResult(msg, result); + if (result.status != PVR_ERROR_NO_ERROR) + { + XBMC->Log(LOG_DEBUG, "%s - failed to fileOpen", __FUNCTION__); + return false; + } + + uint32_t id; + if (htsmsg_get_u32(result.message, "id", &id)) + return false; + m_recordingId = id; + m_recordingOff = 0; + m_recordingBuf.reset(); + + return true; +} + +void CHTSPData::CloseRecordedStream(void) +{ + if (GetProtocol() < 7) return; + if (!m_recordingId) return; + + htsmsg_t *msg = htsmsg_create_map(); + htsmsg_add_str(msg, "method", "fileClose"); + htsmsg_add_u32(msg, "id", m_recordingId); + CHTSResult result; + ReadResult(msg, result); + if (result.status != PVR_ERROR_NO_ERROR) + { + XBMC->Log(LOG_DEBUG, "%s - failed to fileClose", __FUNCTION__); + } + m_recordingId = 0; +} + +int CHTSPData::ReadRecordedStream(unsigned char *pBuffer, unsigned int iBufferSize) +{ + ssize_t ret; + if (GetProtocol() < 7) return 0; + if (!m_recordingId) return -1; + + /* Fetch data */ + if (m_recordingBuf.avail() <= iBufferSize) + { + const void *buf; + size_t len; + htsmsg_t *msg = htsmsg_create_map(); + htsmsg_add_str(msg, "method", "fileRead"); + htsmsg_add_u32(msg, "id", m_recordingId); + htsmsg_add_s64(msg, "size", m_recordingBuf.free()); + CHTSResult result; + ReadResult(msg, result); + if (result.status != PVR_ERROR_NO_ERROR) + { + XBMC->Log(LOG_DEBUG, "%s - failed to fileRead", __FUNCTION__); + return -1; + } + if (htsmsg_get_bin(result.message, "data", &buf, &len)) { + XBMC->Log(LOG_DEBUG, "%s - failed fileRead no buffer", __FUNCTION__); + return -1; + } + ret = m_recordingBuf.write((unsigned char*)buf, len); + if (ret != (ssize_t)len) + { + XBMC->Log(LOG_ERROR, "%s - CircBuffer::write() partial %ld != %ld", __FUNCTION__, ret, len); + return -1; + } + } + + /* Read */ + ret = m_recordingBuf.read(pBuffer, iBufferSize); + m_recordingOff += ret; + return (int)ret; +} + +long long CHTSPData::SeekRecordedStream(long long iPosition, int iWhence /* = SEEK_SET */) +{ + if (GetProtocol() < 7) return 0; + if (!m_recordingId) return -1; + htsmsg_t *msg = htsmsg_create_map(); + htsmsg_add_str(msg, "method", "fileSeek"); + htsmsg_add_u32(msg, "id", m_recordingId); + htsmsg_add_s64(msg, "offset", iPosition); + if (iWhence == SEEK_CUR) + htsmsg_add_str(msg, "whence", "SEEK_CUR"); + else if (iWhence == SEEK_END) + htsmsg_add_str(msg, "whence", "SEEK_END"); + //else + // htsmsg_add_str(msg, "whence", SEEK_SET"); + // Note: last is default so no need to send + CHTSResult result; + ReadResult(msg, result); + if (result.status != PVR_ERROR_NO_ERROR) + { + XBMC->Log(LOG_DEBUG, "%s - failed to fileSeek", __FUNCTION__); + return -1; + } + int64_t off; + if (htsmsg_get_s64(result.message, "offset", &off)) { + XBMC->Log(LOG_DEBUG, "%s - failed to fileSeek no offset", __FUNCTION__); + return -1; + } + m_recordingOff = off; + m_recordingBuf.reset(); + return m_recordingOff; +} + +long long CHTSPData::PositionRecordedStream(void) +{ + if (GetProtocol() < 7) return 0; + return m_recordingOff; +} + +long long CHTSPData::LengthRecordedStream(void) +{ + if (GetProtocol() < 7) return 0; + if (!m_recordingOff) return -1; + htsmsg_t *msg = htsmsg_create_map(); + htsmsg_add_str(msg, "method", "fileStat"); + htsmsg_add_u32(msg, "id", m_recordingId); + CHTSResult result; + ReadResult(msg, result); + if (result.status != PVR_ERROR_NO_ERROR) + { + XBMC->Log(LOG_DEBUG, "%s - failed to fileStat", __FUNCTION__); + return -1; + } + int64_t size; + if (htsmsg_get_s64(result.message, "size", &size)) + { + XBMC->Log(LOG_DEBUG, "%s - failed to fileStat no size", __FUNCTION__); + return -1; + } + return size; +} + +bool CHTSPData::OnConnectionDropped(void) +{ + if (m_demux) + m_demux->OnConnectionDropped(); + m_bIsStarted = false; + if (m_connectionWarningTimeout.TimeLeft() == 0) + { + // don't show the warning more than once every 5 seconds + m_connectionWarningTimeout.Init(5000); + + CStdString strNotification(XBMC->GetLocalizedString(30500)); + XBMC->QueueNotification(QUEUE_ERROR, strNotification, GetServerName()); + } + return true; +} + +bool CHTSPData::OnConnectionRestored(void) +{ + // Clear cached data. They may be invalid due to changes on tvh side + // while connection was down (e.g. deleted timers). + m_channels.clear(); + m_tags.clear(); + m_recordings.clear(); + + if(!SendEnableAsync()) + return false; + + { + CLockObject lock(m_mutex); + if (!m_started.Wait(m_mutex, m_bIsStarted, g_iConnectTimeout * 1000)) + return false; + } + + PVR->TriggerChannelUpdate(); + PVR->TriggerChannelGroupsUpdate(); + PVR->TriggerRecordingUpdate(); + PVR->TriggerTimerUpdate(); + + if (m_demux) + m_demux->OnConnectionRestored(); + + CStdString strNotification(XBMC->GetLocalizedString(30501)); + XBMC->QueueNotification(QUEUE_INFO, strNotification, GetServerName()); + return true; +} + +bool CHTSPData::OpenLiveStream(const PVR_CHANNEL &channel) +{ + CloseLiveStream(); + + if (!IsConnected() || !m_demux) + return false; + + return m_demux->Open(channel); +} + +void CHTSPData::CloseLiveStream(void) +{ + if (m_demux) + m_demux->Close(); +} + +int CHTSPData::GetCurrentClientChannel(void) +{ + return m_demux ? + m_demux->CurrentChannel() : + -1; +} + +bool CHTSPData::SwitchChannel(const PVR_CHANNEL &channel) +{ + return m_demux ? + m_demux->SwitchChannel(channel) : + false; +} + +PVR_ERROR CHTSPData::GetStreamProperties(PVR_STREAM_PROPERTIES* pProperties) +{ + return m_demux && m_demux->GetStreamProperties(pProperties) ? + PVR_ERROR_NO_ERROR : + PVR_ERROR_SERVER_ERROR; +} + +PVR_ERROR CHTSPData::SignalStatus(PVR_SIGNAL_STATUS &signalStatus) +{ + return m_demux && m_demux->GetSignalStatus(signalStatus) ? + PVR_ERROR_NO_ERROR : + PVR_ERROR_SERVER_ERROR; +} + +void CHTSPData::DemuxAbort(void) +{ + if (m_demux) + m_demux->Abort(); +} + +void CHTSPData::DemuxFlush(void) +{ + if (m_demux) + m_demux->Flush(); +} + +DemuxPacket* CHTSPData::DemuxRead(void) +{ + return m_demux ? + m_demux->Read() : + NULL; +} + +bool CHTSPData::SeekTime(int time,bool backward,double *startpts) +{ + return m_demux && CanSeekLiveStream() ? + m_demux->SeekTime(time, backward, startpts) : + false; +} + +void CHTSPData::SetSpeed(int speed) +{ + if (m_demux && CanTimeshift()) + m_demux->SetSpeed(speed); +} + +PVR_ERROR CHTSPData::GetEdl(const PVR_RECORDING &recording, PVR_EDL_ENTRY entries[], int *size) +{ + if (GetProtocol() < 12) return PVR_ERROR_NOT_IMPLEMENTED; + + XBMC->Log(LOG_DEBUG, "%s - dvrEntryId:%s", __FUNCTION__, recording.strRecordingId); + + htsmsg_t *msg = htsmsg_create_map(); + htsmsg_add_str(msg, "method", "getDvrCutpoints"); + htsmsg_add_u32(msg, "id", atoi(recording.strRecordingId)); + + CHTSResult result; + ReadResult(msg, result); + if (result.status != PVR_ERROR_NO_ERROR) + { + XBMC->Log(LOG_ERROR, "%s - Failed to get EDL data.", __FUNCTION__); + return result.status; + } + + htsmsg_t *edlList = htsmsg_get_list(result.message, "cutpoints"); + if(!edlList) + { + XBMC->Log(LOG_DEBUG, "%s - No EDL list found.", __FUNCTION__); + *size = 0; + return PVR_ERROR_NO_ERROR; + } + + htsmsg_field_t *field; + int index = 0; + HTSMSG_FOREACH(field, edlList) + { + if(field->hmf_type != HMF_MAP) + continue; + + if(index < *size) + { + htsmsg_t *edl = &field->hmf_msg; + + // start and end are in milliseconds + unsigned int start, end, type; + + if (htsmsg_get_u32(edl, "start", &start) != 0 || + htsmsg_get_u32(edl, "end", &end) != 0 || + htsmsg_get_u32(edl, "type", &type) != 0) + { + continue; + } + + PVR_EDL_ENTRY entry; + entry.start = start; + entry.end = end; + + switch(type) + { + case DVR_ACTION_TYPE_CUT: + entry.type = PVR_EDL_TYPE_CUT; + break; + case DVR_ACTION_TYPE_MUTE: + entry.type = PVR_EDL_TYPE_MUTE; + break; + case DVR_ACTION_TYPE_SCENE: + entry.type = PVR_EDL_TYPE_SCENE; + break; + case DVR_ACTION_TYPE_COMBREAK: + entry.type = PVR_EDL_TYPE_COMBREAK; + break; + default: + entry.type = PVR_EDL_TYPE_COMBREAK; + break; + } + + XBMC->Log(LOG_DEBUG, "%s - EDL: start: %d, end: %d, action: %d", __FUNCTION__, entry.start, entry.end, entry.type); + + entries[index] = entry; + index++; + } + else + { + XBMC->Log(LOG_ERROR, "%s - Maximum number of EDL entries reached for recordingId: %s", __FUNCTION__, recording.strRecordingId); + break; + } + } + *size = index; + + return PVR_ERROR_NO_ERROR; +} + +double CHTSPData::DemuxGetTimeshiftTime(void) +{ + return m_demux ? + m_demux->GetTimeshiftTime() : + 0; +} diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/src/HTSPData.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/src/HTSPData.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/src/HTSPData.h 1970-01-01 00:00:00.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/src/HTSPData.h 2015-04-01 08:50:10.000000000 +0000 @@ -0,0 +1,132 @@ +#pragma once + +/* + * Copyright (C) 2005-2011 Team XBMC + * http://www.xbmc.org + * + * 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 + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This Program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * 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, write to + * the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + * http://www.gnu.org/copyleft/gpl.html + * + */ + +#include "client.h" +#include "platform/threads/threads.h" +#include "HTSPConnection.h" +#include "CircBuffer.h" + +class CHTSPDemux; + +class CHTSPData : CHTSPConnectionCallback +{ +public: + CHTSPData(); + ~CHTSPData(); + + bool Open(); + void Close(); + bool IsConnected(void) const { return m_session->IsConnected(); } + + /*! + * @brief Send a message to the backend and read the result. + * @param message The message to send. + * @return The returned message or NULL if an error occured or nothing was received. + */ + void ReadResult(htsmsg_t *message, CHTSResult &result); + int GetProtocol(void) const { return m_session->GetProtocol(); } + const char * GetServerName(void) const { return m_session->GetServerName(); } + const char * GetVersion(void) const { return m_session->GetVersion(); } + bool CanTimeshift(void) const { return m_session->CanTimeshift(); } + bool CanSeekLiveStream(void) const { return m_session->CanSeekLiveStream(); } + + bool CanTranscode(void) const { return m_session->CanTranscode(); } + CodecVector GetTranscodingCodecs(void); + + bool GetDriveSpace(long long *total, long long *used); + bool GetBackendTime(time_t *utcTime, int *gmtOffset); + unsigned int GetNumChannels(void); + PVR_ERROR GetChannels(ADDON_HANDLE handle, bool bRadio); + PVR_ERROR GetEpg(ADDON_HANDLE handle, const PVR_CHANNEL &channel, time_t iStart, time_t iEnd); + unsigned int GetNumRecordings(); + PVR_ERROR GetRecordings(ADDON_HANDLE handle); + PVR_ERROR DeleteRecording(const PVR_RECORDING &recinfo); + PVR_ERROR AddTimer(const PVR_TIMER &timerinfo); + PVR_ERROR UpdateTimer(const PVR_TIMER &timerinfo); + PVR_ERROR RenameRecording(const PVR_RECORDING &recinfo, const char* newname); + unsigned int GetNumTimers(); + PVR_ERROR GetTimers(ADDON_HANDLE handle); + PVR_ERROR DeleteTimer(const PVR_TIMER &timerinfo, bool force); + unsigned int GetNumChannelGroups(void); + PVR_ERROR GetChannelGroups(ADDON_HANDLE handle); + PVR_ERROR GetChannelGroupMembers(ADDON_HANDLE handle, const PVR_CHANNEL_GROUP &group); + bool OpenRecordedStream(const PVR_RECORDING &recording); + void CloseRecordedStream(void); + int ReadRecordedStream(unsigned char *pBuffer, unsigned int iBufferSize); + long long SeekRecordedStream(long long iPosition, int iWhence /* = SEEK_SET */); + long long PositionRecordedStream(void); + long long LengthRecordedStream(void); + + bool OnConnectionDropped(void); + bool OnConnectionRestored(void); + bool ProcessMessage(htsmsg* msg); + + bool OpenLiveStream(const PVR_CHANNEL &channel); + void CloseLiveStream(void); + int GetCurrentClientChannel(void); + bool SwitchChannel(const PVR_CHANNEL &channel); + PVR_ERROR GetStreamProperties(PVR_STREAM_PROPERTIES* pProperties); + PVR_ERROR SignalStatus(PVR_SIGNAL_STATUS &signalStatus); + void DemuxAbort(void); + void DemuxFlush(void); + DemuxPacket* DemuxRead(void); + bool SeekTime(int time,bool backward,double *startpts); + void SetSpeed(int speed); + PVR_ERROR GetEdl(const PVR_RECORDING &recinfo, PVR_EDL_ENTRY entries[], int *size); + double DemuxGetTimeshiftTime(void); + +private: + SChannels GetChannels(); + SChannels GetChannels(int tag); + SChannels GetChannels(STag &tag); + STags GetTags(); + PVR_ERROR GetEvent(ADDON_HANDLE handle, uint32_t *id, time_t stop); + PVR_ERROR GetEvents(ADDON_HANDLE handle, uint32_t cid, time_t stop); + bool SendEnableAsync(); + SRecordings GetDVREntries(bool recorded, bool scheduled); + + void ParseChannelRemove(htsmsg_t* msg); + void ParseChannelUpdate(htsmsg_t* msg); + void ParseDVREntryDelete(htsmsg_t* msg); + void ParseDVREntryUpdate(htsmsg_t* msg); + bool ParseEvent(ADDON_HANDLE handle, htsmsg_t* msg, uint32_t *id, time_t end); + void ParseTagRemove(htsmsg_t* msg); + void ParseTagUpdate(htsmsg_t* msg); + + CHTSPConnection * m_session; + bool m_bIsStarted; + PLATFORM::CCondition m_started; + PLATFORM::CMutex m_mutex; + SChannels m_channels; + STags m_tags; + SRecordings m_recordings; + int m_iReconnectRetries; + bool m_bDisconnectWarningDisplayed; + uint32_t m_recordingId; + int64_t m_recordingOff; + CCircBuffer m_recordingBuf; + CHTSPDemux* m_demux; + PLATFORM::CTimeout m_connectionWarningTimeout; +}; + diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/src/HTSPDemux.cpp kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/src/HTSPDemux.cpp --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/src/HTSPDemux.cpp 1970-01-01 00:00:00.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/src/HTSPDemux.cpp 2015-04-01 08:50:10.000000000 +0000 @@ -0,0 +1,669 @@ +/* + * Copyright (C) 2005-2011 Team XBMC + * http://www.xbmc.org + * + * 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 + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This Program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * 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, write to + * the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + * http://www.gnu.org/copyleft/gpl.html + * + */ + +#include "client.h" +#include "HTSPConnection.h" +#include "HTSPDemux.h" +#include + +#define READ_TIMEOUT_MS 20000 +#define STREAM_PROPS_TIMEOUT_MS 500 + +using namespace std; +using namespace ADDON; +using namespace PLATFORM; + +CHTSPDemux::CHTSPDemux(CHTSPConnection* connection) : + m_session(connection), + m_bIsRadio(false), + m_subs(0), + m_channel(0), + m_tag(0), + m_bIsOpen(false) +{ + m_seekEvent = new CEvent; + m_seekTime = -1; +} + +CHTSPDemux::~CHTSPDemux() +{ + Close(); +} + +bool CHTSPDemux::Open(const PVR_CHANNEL &channelinfo) +{ + m_channel = channelinfo.iUniqueId; + m_bIsRadio = channelinfo.bIsRadio; + m_bIsOpen = false; + + if(!m_session->CheckConnection(g_iConnectTimeout * 1000)) + return false; + + if(!SendSubscribe(++m_subs, m_channel)) + return false; + + return true; +} + +void CHTSPDemux::Close() +{ + if (m_session->IsConnected() && m_subs > 0) + SendUnsubscribe(m_subs); + m_subs = 0; +} + +void CHTSPDemux::SetSpeed(int speed) +{ + SendSpeed(m_subs, speed/10); +} + +bool CHTSPDemux::SeekTime(int time, bool backward, double *startpts) +{ + return SendSeek(m_subs, time, backward, startpts); +} + +bool CHTSPDemux::GetStreamProperties(PVR_STREAM_PROPERTIES* props) +{ + CLockObject lock(m_mutex); + if (!m_startedCondition.Wait(m_mutex, m_bIsOpen, STREAM_PROPS_TIMEOUT_MS)) + return false; + return m_streams.GetProperties(props); +} + +void CHTSPDemux::Abort() +{ + CLockObject lock(m_mutex); + m_streams.Clear(); +} + +void CHTSPDemux::Flush(void) +{ + DemuxPacket* pkt(NULL); + while (m_demuxPacketBuffer.Pop(pkt)) + PVR->FreeDemuxPacket(pkt); +} + +bool CHTSPDemux::ProcessMessage(htsmsg* msg) +{ + uint32_t subs; + const char *method = htsmsg_get_str(msg, "method"); + if (!method) + return true; + + if ( strcmp("subscriptionStart", method) == 0) + { + ParseSubscriptionStart(msg); + } + else if(htsmsg_get_u32(msg, "subscriptionId", &subs)) + { + // no subscription id set, ignore + return false; + } + else if (subs != m_subs) + { + // switching channels + return true; + } + else if(strcmp("subscriptionStop", method) == 0) + ParseSubscriptionStop(msg); + else if(strcmp("subscriptionStatus", method) == 0) + ParseSubscriptionStatus(msg); + else if(strcmp("subscriptionSkip" , method) == 0) + ParseSubscriptionSkip(msg); + else if(strcmp("subscriptionSpeed" , method) == 0) + ParseSubscriptionSpeed(msg); + else if(strcmp("queueStatus" , method) == 0) + ParseQueueStatus(msg); + else if(strcmp("signalStatus" , method) == 0) + ParseSignalStatus(msg); + else if(strcmp("timeshiftStatus" , method) == 0) + ParseTimeshiftStatus(msg); + else if(strcmp("muxpkt" , method) == 0) + ParseMuxPacket(msg); + else + { + // not a demux message + return false; + } + + return true; +} + +DemuxPacket* CHTSPDemux::Read() +{ + if (!m_session->CheckConnection(1000)) + return PVR->AllocateDemuxPacket(0); + + DemuxPacket* packet(NULL); + if (m_demuxPacketBuffer.Pop(packet, 100)) + return packet; + + return PVR->AllocateDemuxPacket(0); +} + +void CHTSPDemux::ParseMuxPacket(htsmsg_t *msg) +{ + uint32_t index, duration; + const void* bin; + size_t binlen; + int64_t ts; + + if(htsmsg_get_u32(msg, "stream" , &index) || + htsmsg_get_bin(msg, "payload", &bin, &binlen)) + { + XBMC->Log(LOG_ERROR, "%s - malformed message", __FUNCTION__); + return; + } + + DemuxPacket* pkt = PVR->AllocateDemuxPacket(binlen); + if (!pkt) + return; + memcpy(pkt->pData, bin, binlen); + + pkt->iSize = binlen; + + if(!htsmsg_get_u32(msg, "duration", &duration)) + pkt->duration = (double)duration * DVD_TIME_BASE / 1000000; + + if(!htsmsg_get_s64(msg, "dts", &ts)) + pkt->dts = (double)ts * DVD_TIME_BASE / 1000000; + else + pkt->dts = DVD_NOPTS_VALUE; + + if(!htsmsg_get_s64(msg, "pts", &ts)) + pkt->pts = (double)ts * DVD_TIME_BASE / 1000000; + else + pkt->pts = DVD_NOPTS_VALUE; + + pkt->iStreamId = m_streams.GetStreamId((unsigned int)index); + + // drop packets with an invalid stream id + if (pkt->iStreamId < 0) + { + PVR->FreeDemuxPacket(pkt); + return; + } + + m_demuxPacketBuffer.Push(pkt); +} + +bool CHTSPDemux::SwitchChannel(const PVR_CHANNEL &channelinfo) +{ + XBMC->Log(LOG_INFO, "%s - changing to channel '%s'", __FUNCTION__, channelinfo.strChannelName); + + if (!SendUnsubscribe(m_subs)) + XBMC->Log(LOG_ERROR, "%s - failed to unsubscribe from previous channel", __FUNCTION__); + + if (!SendSubscribe(++m_subs, channelinfo.iUniqueId)) + { + XBMC->Log(LOG_ERROR, "%s - failed to set channel", __FUNCTION__); + m_subs = 0; + } + else + { + m_channel = channelinfo.iUniqueId; + m_streams.Clear(); + + return true; + } + return false; +} + +bool CHTSPDemux::GetSignalStatus(PVR_SIGNAL_STATUS &qualityinfo) +{ + memset(&qualityinfo, 0, sizeof(qualityinfo)); + if (m_SourceInfo.si_adapter.empty() || m_Quality.fe_status.empty()) + return false; + + strncpy(qualityinfo.strAdapterName, m_SourceInfo.si_adapter.c_str(), sizeof(qualityinfo.strAdapterName)); + strncpy(qualityinfo.strAdapterStatus, m_Quality.fe_status.c_str(), sizeof(qualityinfo.strAdapterStatus)); + strncpy(qualityinfo.strServiceName, m_SourceInfo.si_service.c_str(), sizeof(qualityinfo.strServiceName)); + strncpy(qualityinfo.strProviderName, m_SourceInfo.si_provider.c_str(), sizeof(qualityinfo.strProviderName)); + strncpy(qualityinfo.strMuxName, m_SourceInfo.si_mux.c_str(), sizeof(qualityinfo.strMuxName)); + + qualityinfo.iSignal = (uint16_t)m_Quality.fe_signal; + qualityinfo.iSNR = (uint16_t)m_Quality.fe_snr; + qualityinfo.iBER = (uint32_t)m_Quality.fe_ber; + qualityinfo.iUNC = (uint32_t)m_Quality.fe_unc; + + return true; +} + +inline void HTSPResetDemuxStreamInfo(PVR_STREAM_PROPERTIES::PVR_STREAM &stream) +{ + memset(&stream, 0, sizeof(stream)); + stream.iIdentifier = -1; + stream.iCodecType = XBMC_CODEC_TYPE_UNKNOWN; + stream.iCodecId = XBMC_INVALID_CODEC_ID; +} + +inline void HTSPSetDemuxStreamInfoAudio(PVR_STREAM_PROPERTIES::PVR_STREAM &stream, htsmsg_t *msg) +{ + stream.iChannels = htsmsg_get_u32_or_default(msg, "channels" , 0); + stream.iSampleRate = htsmsg_get_u32_or_default(msg, "rate" , 0); +} + +inline void HTSPSetDemuxStreamInfoVideo(PVR_STREAM_PROPERTIES::PVR_STREAM &stream, htsmsg_t *msg) +{ + stream.iWidth = htsmsg_get_u32_or_default(msg, "width" , 0); + stream.iHeight = htsmsg_get_u32_or_default(msg, "height" , 0); + uint32_t den = htsmsg_get_u32_or_default(msg, "aspect_den", 1); + if(den) + stream.fAspect = (float)htsmsg_get_u32_or_default(msg, "aspect_num", 1) / den; + else + stream.fAspect = 0.0f; + uint32_t iDuration = htsmsg_get_u32_or_default(msg, "duration" , 0); + if (iDuration > 0) + { + stream.iFPSScale = iDuration; + stream.iFPSRate = DVD_TIME_BASE; + } +} + +inline void HTSPSetDemuxStreamInfoLanguage(PVR_STREAM_PROPERTIES::PVR_STREAM &stream, htsmsg_t *msg) +{ + if (const char *strLanguage = htsmsg_get_str(msg, "language")) + { + stream.strLanguage[0] = strLanguage[0]; + stream.strLanguage[1] = strLanguage[1]; + stream.strLanguage[2] = strLanguage[2]; + stream.strLanguage[3] = 0; + } +} + +void CHTSPDemux::ParseSubscriptionStart(htsmsg_t *m) +{ + vector newStreams; + + htsmsg_t *streams; + htsmsg_field_t *f; + uint32_t subs; + + if(htsmsg_get_u32(m, "subscriptionId", &subs)) + { + XBMC->Log(LOG_ERROR, "%s - invalid subscription id", __FUNCTION__); + return; + } + m_subs = subs; + + if((streams = htsmsg_get_list(m, "streams")) == NULL) + { + XBMC->Log(LOG_ERROR, "%s - malformed message", __FUNCTION__); + return; + } + + HTSMSG_FOREACH(f, streams) + { + uint32_t index; + const char* type; + htsmsg_t* sub; + + if (f->hmf_type != HMF_MAP) + continue; + + sub = &f->hmf_msg; + + if ((type = htsmsg_get_str(sub, "type")) == NULL) + continue; + + if (htsmsg_get_u32(sub, "index", &index)) + continue; + + bool bValidStream(true); + XbmcPvrStream newStream; + m_streams.GetStreamData(index, &newStream); + + CodecDescriptor codecId = CodecDescriptor::GetCodecByName(type); + if (codecId.Codec().codec_type != XBMC_CODEC_TYPE_UNKNOWN) + { + newStream.iCodecType = codecId.Codec().codec_type; + newStream.iCodecId = codecId.Codec().codec_id; + + if (codecId.Codec().codec_type == XBMC_CODEC_TYPE_SUBTITLE) + { + if (!strcmp(type, "DVBSUB")) + { + uint32_t composition_id = 0, ancillary_id = 0; + htsmsg_get_u32(sub, "composition_id", &composition_id); + htsmsg_get_u32(sub, "ancillary_id" , &ancillary_id); + newStream.iIdentifier = (composition_id & 0xffff) | ((ancillary_id & 0xffff) << 16); + } + HTSPSetDemuxStreamInfoLanguage(newStream, sub); + } + } + else + { + bValidStream = false; + } + + if (bValidStream) + { + XBMC->Log(LOG_DEBUG, "%s - id: %d, type: %s, codec: %u", __FUNCTION__, index, codecId.Name().c_str(), codecId.Codec().codec_id); + + newStream.iPhysicalId = index; + if (codecId.Codec().codec_type == XBMC_CODEC_TYPE_AUDIO) + { + HTSPSetDemuxStreamInfoAudio(newStream, sub); + HTSPSetDemuxStreamInfoLanguage(newStream, sub); + } + else if (codecId.Codec().codec_type == XBMC_CODEC_TYPE_VIDEO) + HTSPSetDemuxStreamInfoVideo(newStream, sub); + + newStreams.push_back(newStream); + } + else + { + XBMC->Log(LOG_DEBUG, "%s - id: %d, type: %s, ignored", __FUNCTION__, index, type); + } + } + + CLockObject lock(m_mutex); + m_streams.UpdateStreams(newStreams); + + DemuxPacket* pkt = PVR->AllocateDemuxPacket(0); + pkt->iStreamId = DMX_SPECIALID_STREAMCHANGE; + m_demuxPacketBuffer.Push(pkt); + + if (ParseSourceInfo(m)) + { + XBMC->Log(LOG_INFO, "%s - subscription started on adapter %s, mux %s, network %s, provider %s, service %s" + , __FUNCTION__, m_SourceInfo.si_adapter.c_str(), m_SourceInfo.si_mux.c_str(), + m_SourceInfo.si_network.c_str(), m_SourceInfo.si_provider.c_str(), + m_SourceInfo.si_service.c_str()); + } + else + { + XBMC->Log(LOG_INFO, "%s - subscription started on an unknown device", __FUNCTION__); + } + + m_bIsOpen = true; + m_startedCondition.Signal(); +} + +void CHTSPDemux::ParseSubscriptionStop(htsmsg_t *m) +{ + XBMC->Log(LOG_INFO, "%s - subscription ended on adapter %s", __FUNCTION__, m_SourceInfo.si_adapter.c_str()); + CLockObject lock(m_mutex); + m_streams.Clear(); + + /* reset the signal status */ + m_Quality.fe_status = ""; + m_Quality.fe_ber = -2; + m_Quality.fe_signal = -2; + m_Quality.fe_snr = -2; + m_Quality.fe_unc = -2; + + /* reset the source info */ + m_SourceInfo.si_adapter = ""; + m_SourceInfo.si_mux = ""; + m_SourceInfo.si_network = ""; + m_SourceInfo.si_provider = ""; + m_SourceInfo.si_service = ""; +} + +void CHTSPDemux::ParseSubscriptionStatus(htsmsg_t *m) +{ + const char* status; + status = htsmsg_get_str(m, "status"); + if(status == NULL) + m_Status = ""; + else + { + m_Status = status; + XBMC->Log(LOG_INFO, "%s - status = '%s'", __FUNCTION__, status); + XBMC->QueueNotification(QUEUE_INFO, status); + } +} + +void CHTSPDemux::ParseSubscriptionSkip(htsmsg_t *m) +{ + int64_t s64; + uint32_t u32; + if (!htsmsg_get_u32(m, "error", &u32) || + htsmsg_get_u32(m, "absolute", &u32) || + htsmsg_get_s64(m, "time", &s64)) { + m_seekTime = -1; + } else { + m_seekTime = (double)s64; + } + XBMC->Log(LOG_DEBUG, "HTSP::ParseSubscriptionSkip - skip = %lf\n", m_seekTime); + m_seekEvent->Broadcast(); +} + +void CHTSPDemux::ParseSubscriptionSpeed(htsmsg_t *m) +{ + uint32_t u32; + if (!htsmsg_get_u32(m, "speed", &u32)) { + XBMC->Log(LOG_INFO, "%s - speed = %u", __FUNCTION__, u32); + // TODO: need a way to pass this to player core + } +} + +bool CHTSPDemux::SendUnsubscribe(int subscription) +{ + XBMC->Log(LOG_INFO, "%s - unsubscribe from subscription %d", __FUNCTION__, subscription); + + htsmsg_t *m = htsmsg_create_map(); + htsmsg_add_str(m, "method" , "unsubscribe"); + htsmsg_add_s32(m, "subscriptionId", subscription); + bool bReturn = m_session->ReadSuccess(m, "unsubscribe from channel"); + m_session->SetReadTimeout(-1); + Flush(); + m_bIsOpen = false; + return bReturn; +} + +bool CHTSPDemux::SendSubscribe(int subscription, int channel) +{ + const char* audioCodec(NULL); + const char* videoCodec(NULL); + + XBMC->Log(LOG_INFO, "%s - subscribe to channel '%d', subscription %d", __FUNCTION__, channel, subscription); + + htsmsg_t *m = htsmsg_create_map(); + htsmsg_add_str(m, "method" , "subscribe"); + htsmsg_add_s32(m, "channelId" , channel); + htsmsg_add_s32(m, "subscriptionId" , subscription); + htsmsg_add_u32(m, "timeshiftPeriod", (uint32_t)~0); + + if(g_bTranscode) + { + audioCodec = g_audioCodec.Name().c_str() ? g_audioCodec.Name().c_str() : "UNKNOWN"; + videoCodec = g_videoCodec.Name().c_str() ? g_videoCodec.Name().c_str() : "UNKNOWN"; + htsmsg_add_u32(m, "maxResolution", g_iResolution); + htsmsg_add_str(m, "audioCodec" , audioCodec); + htsmsg_add_str(m, "videoCodec" , videoCodec); + } + + if (!m_session->ReadSuccess(m, "subscribe to channel")) + { + XBMC->Log(LOG_ERROR, "%s - failed to subscribe to channel %d, consider the connection dropped", __FUNCTION__, m_channel); + m_session->TriggerReconnect(); + return false; + } + + // TODO get this from the pvr api. hardcoded to 10 seconds now + m_session->SetReadTimeout(READ_TIMEOUT_MS); + Flush(); + + XBMC->Log(LOG_DEBUG, "%s - new subscription for channel %d (%d)", __FUNCTION__, m_channel, m_subs); + return true; +} + +bool CHTSPDemux::SendSpeed(int subscription, int speed) +{ + XBMC->Log(LOG_DEBUG, "%s(%d, %d)", __FUNCTION__, subscription, speed); + htsmsg_t *m = htsmsg_create_map(); + htsmsg_add_str(m, "method" , "subscriptionSpeed"); + htsmsg_add_s32(m, "subscriptionId", subscription); + htsmsg_add_s32(m, "speed" , speed); + if (m_session->ReadSuccess(m, "pause subscription")) + { + m_session->SetReadTimeout(speed == 0 ? -1 : READ_TIMEOUT_MS); + return true; + } + return false; +} + +bool CHTSPDemux::SendSeek(int subscription, int time, bool backward, double *startpts) +{ + htsmsg_t *m = htsmsg_create_map(); + int64_t seek; + + // Note: time is in MSEC not DVD_TIME_BASE, TVH requires 1MHz (us) input + seek = time * 1000; + XBMC->Log(LOG_DEBUG, "%s(time=%d, seek=%ld)", __FUNCTION__, time, seek); + + htsmsg_add_str(m, "method" , "subscriptionSkip"); + htsmsg_add_s32(m, "subscriptionId", subscription); + htsmsg_add_s64(m, "time" , seek); + htsmsg_add_u32(m, "absolute" , 1); + + if (!m_session->ReadSuccess(m, "seek subscription")) + return false; + + if (!m_seekEvent->Wait(g_iResponseTimeout * 1000)) + return false; + + if (m_seekTime < 0) + return false; + + // Note: return value is in DVD_TIME_BASE not MSEC + *startpts = m_seekTime * DVD_TIME_BASE / 1000000; + XBMC->Log(LOG_DEBUG, "%s(%ld) = %lf", __FUNCTION__, seek, *startpts); + return true; +} + +bool CHTSPDemux::ParseQueueStatus(htsmsg_t* msg) +{ + if(htsmsg_get_u32(msg, "packets", &m_QueueStatus.packets) + || htsmsg_get_u32(msg, "bytes", &m_QueueStatus.bytes) + || htsmsg_get_u32(msg, "Bdrops", &m_QueueStatus.bdrops) + || htsmsg_get_u32(msg, "Pdrops", &m_QueueStatus.pdrops) + || htsmsg_get_u32(msg, "Idrops", &m_QueueStatus.idrops)) + { + XBMC->Log(LOG_ERROR, "%s - malformed message received", __FUNCTION__); + htsmsg_print(msg); + return false; + } + + /* delay isn't always transmitted */ + if(htsmsg_get_u32(msg, "delay", &m_QueueStatus.delay)) + m_QueueStatus.delay = 0; + + return true; +} + +bool CHTSPDemux::ParseSignalStatus(htsmsg_t* msg) +{ + if(htsmsg_get_u32(msg, "feSNR", &m_Quality.fe_snr)) + m_Quality.fe_snr = -2; + + if(htsmsg_get_u32(msg, "feSignal", &m_Quality.fe_signal)) + m_Quality.fe_signal = -2; + + if(htsmsg_get_u32(msg, "feBER", &m_Quality.fe_ber)) + m_Quality.fe_ber = -2; + + if(htsmsg_get_u32(msg, "feUNC", &m_Quality.fe_unc)) + m_Quality.fe_unc = -2; + + const char* status; + if((status = htsmsg_get_str(msg, "feStatus"))) + m_Quality.fe_status = status; + else + m_Quality.fe_status = "(unknown)"; + + return true; +} + +bool CHTSPDemux::ParseTimeshiftStatus(htsmsg_t *msg) +{ + uint32_t u32; + int64_t s64; + + if (!htsmsg_get_u32(msg, "full", &u32)) + m_timeshiftStatus.full = (bool)u32; + if (!htsmsg_get_s64(msg, "shift", &s64)) + m_timeshiftStatus.shift = s64; + if (!htsmsg_get_s64(msg, "start", &s64)) + m_timeshiftStatus.start = s64; + if (!htsmsg_get_s64(msg, "end", &s64)) + m_timeshiftStatus.end = s64; + + return true; +} + +bool CHTSPDemux::ParseSourceInfo(htsmsg_t* msg) +{ + htsmsg_t *sourceinfo; + if((sourceinfo = htsmsg_get_map(msg, "sourceinfo")) == NULL) + { + XBMC->Log(LOG_ERROR, "%s - malformed message", __FUNCTION__); + return false; + } + + const char* str; + if((str = htsmsg_get_str(sourceinfo, "adapter")) == NULL) + m_SourceInfo.si_adapter = ""; + else + m_SourceInfo.si_adapter = str; + + if((str = htsmsg_get_str(sourceinfo, "mux")) == NULL) + m_SourceInfo.si_mux = ""; + else + m_SourceInfo.si_mux = str; + + if((str = htsmsg_get_str(sourceinfo, "network")) == NULL) + m_SourceInfo.si_network = ""; + else + m_SourceInfo.si_network = str; + + if((str = htsmsg_get_str(sourceinfo, "provider")) == NULL) + m_SourceInfo.si_provider = ""; + else + m_SourceInfo.si_provider = str; + + if((str = htsmsg_get_str(sourceinfo, "service")) == NULL) + m_SourceInfo.si_service = ""; + else + m_SourceInfo.si_service = str; + + return true; +} + +bool CHTSPDemux::OnConnectionRestored(void) +{ + if (m_subs == 0) + return true; + + SendUnsubscribe(m_subs); + + if (!SendSubscribe(++m_subs, m_channel)) + { + m_subs = 0; + XBMC->Log(LOG_ERROR, "%s - failed to subscribe to channel %d", __FUNCTION__, m_channel); + return false; + } + + return true; +} diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/src/HTSPDemuxer.cpp kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/src/HTSPDemuxer.cpp --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/src/HTSPDemuxer.cpp 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/src/HTSPDemuxer.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,677 +0,0 @@ -/* - * Copyright (C) 2014 Adam Sutton - * http://www.xbmc.org - * - * 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 - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This Program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * 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, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * http://www.gnu.org/copyleft/gpl.html - * - */ - -#include "Tvheadend.h" -#include "client.h" - -#include "platform/threads/mutex.h" -#include "platform/util/timeutils.h" -#include "platform/sockets/tcp.h" - -extern "C" { -#include "platform/util/atomic.h" -#include "libhts/htsmsg_binary.h" -#include "libhts/sha1.h" -} - -#include "xbmc_codec_descriptor.hpp" - -#define TVH_TO_DVD_TIME(x) ((double)x * DVD_TIME_BASE / 1000000.0) - -using namespace std; -using namespace ADDON; -using namespace PLATFORM; - -CHTSPDemuxer::CHTSPDemuxer ( CHTSPConnection &conn ) - : m_conn(conn), m_pktBuffer((size_t)-1), - m_seekTime(INVALID_SEEKTIME) -{ -} - -CHTSPDemuxer::~CHTSPDemuxer ( void ) -{ -} - -void CHTSPDemuxer::Connected ( void ) -{ - /* Re-subscribe */ - if (m_subscription.active) - { - tvhdebug("demux re-starting stream"); - SendSubscribe(true); - SendSpeed(true); - } -} - -/* ************************************************************************** - * Demuxer API - * *************************************************************************/ - -void CHTSPDemuxer::Close0 ( void ) -{ - /* Send unsubscribe */ - if (m_subscription.active) - SendUnsubscribe(); - - /* Clear */ - Flush(); - Abort0(); -} - -void CHTSPDemuxer::Abort0 ( void ) -{ - CLockObject lock(m_mutex); - m_streams.Clear(); - m_streamStat.clear(); -} - - -bool CHTSPDemuxer::Open ( const PVR_CHANNEL &chn ) -{ - CLockObject lock(m_conn.Mutex()); - tvhdebug("demux open"); - - /* Close current stream */ - Close0(); - - /* Create new subscription */ - m_subscription = SSubscription(); - m_subscription.channelId = chn.iUniqueId; - - /* Open */ - SendSubscribe(); - - /* Send unsubscribe if subscribing failed */ - if (!m_subscription.active) - SendUnsubscribe(); - - return m_subscription.active; -} - -void CHTSPDemuxer::Close ( void ) -{ - CLockObject lock(m_conn.Mutex()); - Close0(); - tvhdebug("demux close"); -} - -DemuxPacket *CHTSPDemuxer::Read ( void ) -{ - DemuxPacket *pkt = NULL; - if (m_pktBuffer.Pop(pkt, 1000)) { - tvhtrace("demux read idx :%d pts %lf len %lld", - pkt->iStreamId, pkt->pts, (long long)pkt->iSize); - return pkt; - } - tvhtrace("demux read nothing"); - - return PVR->AllocateDemuxPacket(0); -} - -void CHTSPDemuxer::Flush ( void ) -{ - DemuxPacket *pkt; - tvhtrace("demux flush"); - while (m_pktBuffer.Pop(pkt)) - PVR->FreeDemuxPacket(pkt); -} - -void CHTSPDemuxer::Abort ( void ) -{ - tvhtrace("demux abort"); - CLockObject lock(m_conn.Mutex()); - Abort0(); -} - -bool CHTSPDemuxer::Seek - ( int time, bool _unused(backwards), double *startpts ) -{ - htsmsg_t *m; - - CLockObject lock(m_conn.Mutex()); - if (!m_subscription.active) - return false; - - tvhdebug("demux seek %d", time); - - /* Build message */ - m = htsmsg_create_map(); - htsmsg_add_u32(m, "subscriptionId", m_subscription.subscriptionId); - htsmsg_add_s64(m, "time", (int64_t)time * 1000LL); - htsmsg_add_u32(m, "absolute", 1); - - /* Send and Wait */ - m = m_conn.SendAndWait("subscriptionSeek", m); - if (!m) - return false; - - htsmsg_destroy(m); - - /* Wait for time */ - if (!m_seekCond.Wait(m_conn.Mutex(), m_seekTime, tvh->GetSettings().iResponseTimeout)) - { - tvherror("failed to get subscriptionSeek response"); - return false; - } - - if (m_seekTime == INVALID_SEEKTIME) - return false; - - /* Store */ - *startpts = TVH_TO_DVD_TIME(m_seekTime); - tvhtrace("demux seek startpts = %lf", *startpts); - - return true; -} - -void CHTSPDemuxer::Speed ( int speed ) -{ - CLockObject lock(m_conn.Mutex()); - if (!m_subscription.active) - return; - m_subscription.speed = speed; - SendSpeed(); -} - -PVR_ERROR CHTSPDemuxer::CurrentStreams ( PVR_STREAM_PROPERTIES *streams ) -{ - CLockObject lock(m_mutex); - return m_streams.GetProperties(streams) ? PVR_ERROR_NO_ERROR - : PVR_ERROR_SERVER_ERROR; -} - -PVR_ERROR CHTSPDemuxer::CurrentSignal ( PVR_SIGNAL_STATUS &sig ) -{ - CLockObject lock(m_mutex); - - strncpy(sig.strAdapterName, m_sourceInfo.si_adapter.c_str(), - sizeof(sig.strAdapterName)); - strncpy(sig.strAdapterStatus, m_signalInfo.fe_status.c_str(), - sizeof(sig.strAdapterStatus)); - strncpy(sig.strServiceName, m_sourceInfo.si_service.c_str(), - sizeof(sig.strServiceName)); - strncpy(sig.strProviderName, m_sourceInfo.si_provider.c_str(), - sizeof(sig.strProviderName)); - strncpy(sig.strMuxName, m_sourceInfo.si_mux.c_str(), - sizeof(sig.strMuxName)); - - sig.iSNR = m_signalInfo.fe_snr; - sig.iSignal = m_signalInfo.fe_signal; - sig.iBER = m_signalInfo.fe_ber; - sig.iUNC = m_signalInfo.fe_unc; - - return PVR_ERROR_NO_ERROR; -} - -/* ************************************************************************** - * Send Messages - * *************************************************************************/ - -void CHTSPDemuxer::SendSubscribe ( bool force ) -{ - htsmsg_t *m; - - /* Reset status */ - m_signalInfo.Clear(); - m_sourceInfo.Clear(); - - /* Build message */ - m = htsmsg_create_map(); - htsmsg_add_s32(m, "channelId", m_subscription.channelId); - htsmsg_add_u32(m, "subscriptionId", m_subscription.subscriptionId); - htsmsg_add_u32(m, "timeshiftPeriod", (uint32_t)~0); - htsmsg_add_u32(m, "normts", 1); - htsmsg_add_u32(m, "queueDepth", 2000000); - - /* Send and Wait for response */ - tvhdebug("demux subscribe to %d", m_subscription.channelId); - if (force) - m = m_conn.SendAndWait0("subscribe", m); - else - m = m_conn.SendAndWait("subscribe", m); - if (m == NULL) - return; - - htsmsg_destroy(m); - - m_subscription.active = true; - tvhdebug("demux successfully subscribed to %d", m_subscription.channelId); -} - -void CHTSPDemuxer::SendUnsubscribe ( void ) -{ - htsmsg_t *m; - - /* Build message */ - m = htsmsg_create_map(); - htsmsg_add_u32(m, "subscriptionId", m_subscription.subscriptionId); - - /* Mark subscription as inactive immediately in case this command fails */ - m_subscription.active = false; - - /* Send and Wait */ - tvhdebug("demux unsubscribe from %d", m_subscription.channelId); - if ((m = m_conn.SendAndWait("unsubscribe", m)) == NULL) - return; - - htsmsg_destroy(m); - tvhdebug("demux successfully unsubscribed %d", m_subscription.channelId); -} - -void CHTSPDemuxer::SendSpeed ( bool force ) -{ - htsmsg_t *m; - int speed = m_subscription.speed / 10; // XBMC uses values an order of magnitude larger than tvheadend - - /* Build message */ - m = htsmsg_create_map(); - htsmsg_add_u32(m, "subscriptionId", m_subscription.subscriptionId); - htsmsg_add_s32(m, "speed", speed); - tvhdebug("demux send speed %d", speed); - - /* Send and Wait */ - if (force) - m = m_conn.SendAndWait0("subscriptionSpeed", m); - else - m = m_conn.SendAndWait("subscriptionSpeed", m); - if (m) - htsmsg_destroy(m); -} - -/* ************************************************************************** - * Parse incoming data - * *************************************************************************/ - -bool CHTSPDemuxer::ProcessMessage ( const char *method, htsmsg_t *m ) -{ - uint32_t subId; - - CLockObject lock(m_mutex); - - /* No subscriptionId - not for demuxer */ - if (htsmsg_get_u32(m, "subscriptionId", &subId)) - return false; - - /* Not current subscription - ignore */ - else if (subId != m_subscription.subscriptionId) - return true; - - /* Subscription messages */ - else if (!strcmp("muxpkt", method)) - ParseMuxPacket(m); - else if (!strcmp("subscriptionStatus", method)) - ParseSubscriptionStatus(m); - else if (!strcmp("queueStatus", method)) - ParseQueueStatus(m); - else if (!strcmp("signalStatus", method)) - ParseSignalStatus(m); - else if (!strcmp("timeshiftStatus", method)) - ParseTimeshiftStatus(m); - else if (!strcmp("subscriptionStart", method)) - ParseSubscriptionStart(m); - else if (!strcmp("subscriptionStop", method)) - ParseSubscriptionStop(m); - else if (!strcmp("subscriptionSkip", method)) - ParseSubscriptionSkip(m); - else if (!strcmp("subscriptionSpeed", method)) - ParseSubscriptionSpeed(m); - else - tvhdebug("demux unhandled subscription message [%s]", - method); - - return true; -} - -void CHTSPDemuxer::ParseMuxPacket ( htsmsg_t *m ) -{ - uint32_t idx, u32; - int64_t s64; - const void *bin; - size_t binlen; - DemuxPacket *pkt; - char _unused(type) = 0; - int iStreamId; - - /* Ignore packets while switching channels */ - if (!m_subscription.active) - { - tvhdebug("Ignored mux packet due to channel switch"); - return; - } - - /* Validate fields */ - if (htsmsg_get_u32(m, "stream", &idx) || - htsmsg_get_bin(m, "payload", &bin, &binlen)) - { - tvherror("malformed muxpkt"); - return; - } - - /* Record */ - m_streamStat[idx]++; - - /* Drop packets for unknown streams */ - if (-1 == (iStreamId = m_streams.GetStreamId(idx))) - { - tvhdebug("Dropped packet with unknown stream index %i", idx); - return; - } - - /* Allocate buffer */ - if (!(pkt = PVR->AllocateDemuxPacket(binlen))) - return; - memcpy(pkt->pData, bin, binlen); - pkt->iSize = binlen; - pkt->iStreamId = iStreamId; - - /* Duration */ - if (!htsmsg_get_u32(m, "duration", &u32)) - pkt->duration = TVH_TO_DVD_TIME(u32); - - /* Timestamps */ - if (!htsmsg_get_s64(m, "dts", &s64)) - pkt->dts = TVH_TO_DVD_TIME(s64); - else - pkt->dts = DVD_NOPTS_VALUE; - - if (!htsmsg_get_s64(m, "pts", &s64)) - pkt->pts = TVH_TO_DVD_TIME(s64); - else - pkt->pts = DVD_NOPTS_VALUE; - - /* Type (for debug only) */ - if (!htsmsg_get_u32(m, "frametype", &u32)) - type = (char)u32; - if (!type) - type = '_'; - - tvhtrace("demux pkt idx %d:%d type %c pts %lf len %lld", - idx, pkt->iStreamId, type, pkt->pts, (long long)binlen); - - /* Store */ - m_pktBuffer.Push(pkt); -} - -void CHTSPDemuxer::ParseSubscriptionStart ( htsmsg_t *m ) -{ - vector streams; - htsmsg_t *l; - htsmsg_field_t *f; - DemuxPacket *pkt; - - /* Validate */ - if ((l = htsmsg_get_list(m, "streams")) == NULL) - { - tvherror("malformed subscriptionStart"); - return; - } - m_streamStat.clear(); - - /* Process each */ - HTSMSG_FOREACH(f, l) - { - uint32_t idx, u32; - const char *type; - XbmcPvrStream stream; - - if (f->hmf_type != HMF_MAP) - continue; - if ((type = htsmsg_get_str(&f->hmf_msg, "type")) == NULL) - continue; - if (htsmsg_get_u32(&f->hmf_msg, "index", &idx)) - continue; - - /* Find stream */ - m_streamStat[idx] = 0; - m_streams.GetStreamData(idx, &stream); - tvhdebug("demux subscription start"); - - CodecDescriptor codecDescriptor = CodecDescriptor::GetCodecByName(type); - xbmc_codec_t codec = codecDescriptor.Codec(); - - if (codec.codec_type != XBMC_CODEC_TYPE_UNKNOWN) - { - stream.iCodecType = codec.codec_type; - stream.iCodecId = codec.codec_id; - stream.iPhysicalId = idx; - - /* Subtitle ID */ - if ((stream.iCodecType == XBMC_CODEC_TYPE_SUBTITLE) && - !strcmp("DVBSUB", type)) - { - uint32_t composition_id = 0, ancillary_id = 0; - htsmsg_get_u32(&f->hmf_msg, "composition_id", &composition_id); - htsmsg_get_u32(&f->hmf_msg, "ancillary_id" , &ancillary_id); - stream.iIdentifier = (composition_id & 0xffff) - | ((ancillary_id & 0xffff) << 16); - } - - /* Language */ - if (stream.iCodecType == XBMC_CODEC_TYPE_SUBTITLE || - stream.iCodecType == XBMC_CODEC_TYPE_AUDIO) - { - const char *language; - - if ((language = htsmsg_get_str(&f->hmf_msg, "language")) != NULL) - strncpy(stream.strLanguage, language, sizeof(stream.strLanguage)); - } - - /* Audio data */ - if (stream.iCodecType == XBMC_CODEC_TYPE_AUDIO) - { - stream.iChannels - = htsmsg_get_u32_or_default(&f->hmf_msg, "channels", 2); - stream.iSampleRate - = htsmsg_get_u32_or_default(&f->hmf_msg, "rate", 48000); - } - - /* Video */ - if (stream.iCodecType == XBMC_CODEC_TYPE_VIDEO) - { - stream.iWidth = htsmsg_get_u32_or_default(&f->hmf_msg, "width", 0); - stream.iHeight = htsmsg_get_u32_or_default(&f->hmf_msg, "height", 0); - - /* Ignore this message if the stream details haven't been determined - yet, a new message will be sent once they have. This is fixed in - some versions of tvheadend and is here for backward compatibility. */ - if (stream.iWidth == 0 || stream.iHeight == 0) - { - tvhinfo("Ignoring subscriptionStart, stream details missing"); - return; - } - - /* Setting aspect ratio to zero will cause XBMC to handle changes in it */ - stream.fAspect = 0.0f; - - if ((u32 = htsmsg_get_u32_or_default(&f->hmf_msg, "duration", 0)) > 0) - { - stream.iFPSScale = u32; - stream.iFPSRate = DVD_TIME_BASE; - } - } - - streams.push_back(stream); - tvhdebug(" id: %d, type %s, codec: %u", idx, type, stream.iCodecId); - } - } - - /* Update streams */ - tvhdebug("demux stream change"); - m_streams.UpdateStreams(streams); - pkt = PVR->AllocateDemuxPacket(0); - pkt->iStreamId = DMX_SPECIALID_STREAMCHANGE; - m_pktBuffer.Push(pkt); - - /* Source data */ - ParseSourceInfo(htsmsg_get_map(m, "sourceinfo")); -} - -void CHTSPDemuxer::ParseSourceInfo ( htsmsg_t *m ) -{ - const char *str; - - /* Ignore */ - if (!m) return; - - tvhtrace("demux sourceInfo:"); - if ((str = htsmsg_get_str(m, "adapter")) != NULL) - { - tvhtrace(" adapter : %s", str); - m_sourceInfo.si_adapter = str; - } - if ((str = htsmsg_get_str(m, "network")) != NULL) - { - tvhtrace(" network : %s", str); - m_sourceInfo.si_network = str; - } - if ((str = htsmsg_get_str(m, "mux")) != NULL) - { - tvhtrace(" mux : %s", str); - m_sourceInfo.si_mux = str; - } - if ((str = htsmsg_get_str(m, "provider")) != NULL) - { - tvhtrace(" provider : %s", str); - m_sourceInfo.si_provider = str; - } - if ((str = htsmsg_get_str(m, "service")) != NULL) - { - tvhtrace(" service : %s", str); - m_sourceInfo.si_service = str; - } -} - -void CHTSPDemuxer::ParseSubscriptionStop ( htsmsg_t *_unused(m) ) -{ -} - -void CHTSPDemuxer::ParseSubscriptionSkip ( htsmsg_t *m ) -{ - CLockObject lock(m_conn.Mutex()); - int64_t s64; - if (htsmsg_get_s64(m, "time", &s64)) { - m_seekTime = INVALID_SEEKTIME; - } else { - m_seekTime = s64; - } - m_seekCond.Broadcast(); -} - -void CHTSPDemuxer::ParseSubscriptionSpeed ( htsmsg_t *m ) -{ - uint32_t u32; - if (!htsmsg_get_u32(m, "speed", &u32)) - tvhtrace("recv speed %d", u32); -} - -void CHTSPDemuxer::ParseSubscriptionStatus ( htsmsg_t *m ) -{ - const char *status; - status = htsmsg_get_str(m, "status"); - - // this field is absent when everything is fine - if (status != NULL) - { - tvhinfo("Bad subscription status: %s", status); - XBMC->QueueNotification(QUEUE_INFO, status); - } -} - -void CHTSPDemuxer::ParseQueueStatus ( htsmsg_t *_unused(m) ) -{ - uint32_t u32; - map::const_iterator it; - tvhtrace("stream stats:"); - for (it = m_streamStat.begin(); it != m_streamStat.end(); ++it) - tvhtrace(" idx:%d num:%d", it->first, it->second); - - tvhtrace("queue stats:"); - if (!htsmsg_get_u32(m, "packets", &u32)) - tvhtrace(" pkts %d", u32); - if (!htsmsg_get_u32(m, "bytes", &u32)) - tvhtrace(" bytes %d", u32); - if (!htsmsg_get_u32(m, "delay", &u32)) - tvhtrace(" delay %d", u32); - if (!htsmsg_get_u32(m, "Idrops", &u32)) - tvhtrace(" Idrop %d", u32); - if (!htsmsg_get_u32(m, "Pdrops", &u32)) - tvhtrace(" Pdrop %d", u32); - if (!htsmsg_get_u32(m, "Bdrops", &u32)) - tvhtrace(" Bdrop %d", u32); -} - -void CHTSPDemuxer::ParseSignalStatus ( htsmsg_t *m ) -{ - uint32_t u32; - const char *str; - - /* Reset */ - m_signalInfo.Clear(); - - /* Parse */ - tvhtrace("signalStatus:"); - if ((str = htsmsg_get_str(m, "feStatus")) != NULL) - { - tvhtrace(" status : %s", str); - m_signalInfo.fe_status = str; - } - if (!htsmsg_get_u32(m, "feSNR", &u32)) - { - tvhtrace(" snr : %d", u32); - m_signalInfo.fe_snr = u32; - } - if (!htsmsg_get_u32(m, "feBER", &u32)) - { - tvhtrace(" ber : %d", u32); - m_signalInfo.fe_ber = u32; - } - if (!htsmsg_get_u32(m, "feUNC", &u32)) - { - tvhtrace(" unc : %d", u32); - m_signalInfo.fe_unc = u32; - } - if (!htsmsg_get_u32(m, "feSignal", &u32)) - { - tvhtrace(" signal : %d", u32); - m_signalInfo.fe_signal = u32; - } -} - -void CHTSPDemuxer::ParseTimeshiftStatus ( htsmsg_t *m ) -{ - uint32_t u32; - int64_t s64; - - if (!htsmsg_get_u32(m, "full", &u32)) - m_timeshiftStatus.full = (bool)u32; - if (!htsmsg_get_s64(m, "shift", &s64)) - m_timeshiftStatus.shift = s64; - if (!htsmsg_get_s64(m, "start", &s64)) - m_timeshiftStatus.start = s64; - if (!htsmsg_get_s64(m, "end", &s64)) - m_timeshiftStatus.end = s64; - - tvhtrace("timeshiftStatus:"); - tvhtrace(" full : %d", m_timeshiftStatus.full); - tvhtrace(" shift : %lld", m_timeshiftStatus.shift); - tvhtrace(" start : %lld", m_timeshiftStatus.start); - tvhtrace(" end : %lld", m_timeshiftStatus.end); -} diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/src/HTSPDemux.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/src/HTSPDemux.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/src/HTSPDemux.h 1970-01-01 00:00:00.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/src/HTSPDemux.h 2015-04-01 08:50:10.000000000 +0000 @@ -0,0 +1,86 @@ +#pragma once + +/* + * Copyright (C) 2005-2011 Team XBMC + * http://www.xbmc.org + * + * 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 + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This Program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * 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, write to + * the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + * http://www.gnu.org/copyleft/gpl.html + * + */ + +#include "client.h" +#include "HTSPConnection.h" +#include "platform/util/buffer.h" +#include "platform/threads/mutex.h" +#include "xbmc_stream_utils.hpp" + +class CHTSPDemux : public CHTSPConnectionCallback +{ +public: + CHTSPDemux(CHTSPConnection* connection); + ~CHTSPDemux(); + + bool Open(const PVR_CHANNEL &channelinfo); + void Close(); + bool GetStreamProperties(PVR_STREAM_PROPERTIES* props); + void Abort(); + DemuxPacket* Read(); + bool SwitchChannel(const PVR_CHANNEL &channelinfo); + int CurrentChannel() { return m_channel; } + double GetTimeshiftTime() const { return m_timeshiftStatus.shift; } + bool GetSignalStatus(PVR_SIGNAL_STATUS &qualityinfo); + bool SeekTime(int time, bool backward, double *startpts); + void SetSpeed(int speed); + bool OnConnectionRestored(void); + bool ProcessMessage(htsmsg* msg); + void Flush(void); + +private: + void ParseSubscriptionStart (htsmsg_t *m); + void ParseSubscriptionStop (htsmsg_t *m); + void ParseSubscriptionStatus(htsmsg_t *m); + void ParseSubscriptionSkip (htsmsg_t *m); + void ParseSubscriptionSpeed (htsmsg_t *m); + bool SendSubscribe (int subscription, int channel); + bool SendUnsubscribe(int subscription); + bool SendSpeed (int subscription, int speed); + bool SendSeek (int subscription, int time, bool backward, double *startpts); + void ParseMuxPacket(htsmsg_t *m); + bool ParseQueueStatus(htsmsg_t* msg); + bool ParseSignalStatus(htsmsg_t* msg); + bool ParseTimeshiftStatus(htsmsg_t* msg); + bool ParseSourceInfo(htsmsg_t* msg); + + CHTSPConnection* m_session; + bool m_bIsRadio; + unsigned m_subs; + int m_channel; + int m_tag; + std::string m_Status; + ADDON::XbmcStreamProperties m_streams; + SChannels m_channels; + SQueueStatus m_QueueStatus; + SQuality m_Quality; + STimeshiftStatus m_timeshiftStatus; + SSourceInfo m_SourceInfo; + PLATFORM::SyncedBuffer m_demuxPacketBuffer; + bool m_bIsOpen; + PLATFORM::CEvent* m_seekEvent; + double m_seekTime; + PLATFORM::CMutex m_mutex; + PLATFORM::CCondition m_startedCondition; +}; diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/src/HTSPTypes.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/src/HTSPTypes.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/src/HTSPTypes.h 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/src/HTSPTypes.h 2015-04-01 08:50:10.000000000 +0000 @@ -16,7 +16,8 @@ * * You should have received a copy of the GNU General Public License * along with XBMC; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + * the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA * http://www.gnu.org/copyleft/gpl.html * */ @@ -26,85 +27,62 @@ #include #include #include "platform/util/StdString.h" +#include "libXBMC_codec.h" #include "client.h" +#include "xbmc_codec_descriptor.hpp" -typedef enum { - DVR_PRIO_IMPORTANT, - DVR_PRIO_HIGH, - DVR_PRIO_NORMAL, - DVR_PRIO_LOW, - DVR_PRIO_UNIMPORTANT -} dvr_prio_t; - -typedef enum { - DVR_ACTION_TYPE_CUT, - DVR_ACTION_TYPE_MUTE, - DVR_ACTION_TYPE_SCENE, - DVR_ACTION_TYPE_COMBREAK, - -} dvr_action_type_t; - -enum eHTSPEventType -{ - HTSP_EVENT_NONE = 0, - HTSP_EVENT_CHN_UPDATE = 1, - HTSP_EVENT_TAG_UPDATE = 2, - HTSP_EVENT_EPG_UPDATE = 3, - HTSP_EVENT_REC_UPDATE = 4, -}; +typedef std::vector CodecVector; struct STag { - bool del; - uint32_t id; - std::string name; - std::string icon; - std::vector channels; + int id; + std::string name; + std::string icon; + std::vector channels; STag() { Clear(); } void Clear() { - del = false; id = 0; name.clear(); icon.clear(); channels.clear(); } - - inline bool operator==(const STag &right) + bool BelongsTo(int channel) const { - return id == right.id && name == right.name && - icon == right.icon && channels == right.channels; + return std::find(channels.begin(), channels.end(), channel) != channels.end(); } - inline bool operator!=(const STag &right) - { - return !(*this == right); - } }; struct SChannel { - bool del; - uint32_t id; - uint32_t num; - uint32_t numMinor; - bool radio; - uint32_t caid; + int id; std::string name; std::string icon; + int event; + int num; + int numMinor; + bool radio; + int caid; + std::vector tags; SChannel() { Clear(); } void Clear() { - del = false; id = 0; + event = 0; num = 0; numMinor = 0; radio = false; caid = 0; name.clear(); icon.clear(); + tags.clear(); + } + bool MemberOf(int tag) const + { + return std::find(tags.begin(), tags.end(), tag) != tags.end(); } bool operator<(const SChannel &right) const { @@ -112,20 +90,50 @@ } }; +struct SEvent +{ + int id; + int next; + int chan_id; + + int content; + int start; + int stop; + std::string title; + std::string descs; + + SEvent() { Clear(); } + void Clear() + { + id = 0; + next = 0; + start = 0; + stop = 0; + title.clear(); + descs.clear(); + } +}; + +typedef enum recording_state { + ST_INVALID = 0, + ST_SCHEDULED = 1, + ST_RECORDING = 2, + ST_COMPLETED = 3, + ST_ABORTED = 4 +} ERecordingState; + struct SRecording { - bool del; uint32_t id; uint32_t channel; - uint32_t eventId; - int64_t start; - int64_t stop; + uint32_t start; + uint32_t stop; int64_t startExtra; int64_t stopExtra; std::string title; std::string path; std::string description; - PVR_TIMER_STATE state; + ERecordingState state; std::string error; uint32_t retention; uint32_t priority; @@ -133,105 +141,16 @@ SRecording() { Clear(); } void Clear() { - del = false; - id = 0; - channel = 0; - eventId = 0; - start = 0; - stop = 0; - startExtra = 0; - stopExtra = 0; - - state = PVR_TIMER_STATE_ERROR; + id = channel = start = stop = startExtra = stopExtra = 0; title.clear(); description.clear(); + state = ST_INVALID; error.clear(); - - retention = 99; // kodi default - "99 days" - priority = 50; // kodi default - "normal" - } - - bool IsRecording () const - { - return state == PVR_TIMER_STATE_COMPLETED || - state == PVR_TIMER_STATE_ABORTED || - state == PVR_TIMER_STATE_RECORDING; - } - - bool IsTimer () const - { - return state == PVR_TIMER_STATE_SCHEDULED || - state == PVR_TIMER_STATE_RECORDING; + retention = 99; // xbmc default - 99 days + priority = 50; // xbmc default - "normal" } }; -struct SEvent -{ - bool del; - uint32_t id; - uint32_t next; - uint32_t channel; - uint32_t content; - time_t start; - time_t stop; - uint32_t stars; - uint32_t age; - time_t aired; - uint32_t season; - uint32_t episode; - uint32_t part; - std::string title; - std::string desc; - std::string summary; - std::string image; - uint32_t recordingId; - - SEvent() { Clear(); } - void Clear() - { - del = false; - id = 0; - next = 0; - channel = 0; - content = 0; - start = 0; - stop = 0; - stars = 0; - age = 0; - aired = 0; - season = 0; - episode = 0; - part = 0; - title.clear(); - desc.clear(); - summary.clear(); - image.clear(); - recordingId = 0; - } -}; - -typedef std::map SChannels; -typedef std::map STags; -typedef std::map SEvents; -typedef std::map SRecordings; - -struct SSchedule -{ - bool del; - uint32_t channel; - SEvents events; - - SSchedule() { Clear(); } - void Clear () - { - del = false; - channel = 0; - events.clear(); - } -}; - -typedef std::map SSchedules; - struct SQueueStatus { uint32_t packets; // Number of data packets in queue. @@ -259,7 +178,7 @@ int64_t shift; int64_t start; int64_t end; - + STimeshiftStatus() { Clear(); } void Clear() { @@ -277,16 +196,6 @@ uint32_t fe_signal; uint32_t fe_ber; uint32_t fe_unc; - - SQuality() { Clear(); } - void Clear () - { - fe_status.clear(); - fe_snr = 0; - fe_signal = 0; - fe_ber = 0; - fe_unc = 0; - } }; struct SSourceInfo @@ -296,56 +205,9 @@ std::string si_mux; std::string si_provider; std::string si_service; - - SSourceInfo() { Clear(); } - void Clear () - { - si_adapter.clear(); - si_network.clear(); - si_mux.clear(); - si_provider.clear(); - si_service.clear(); - } -}; - -struct SHTSPEvent -{ - eHTSPEventType m_type; - uint32_t m_idx; - - SHTSPEvent ( eHTSPEventType type = HTSP_EVENT_NONE, uint32_t idx = 0 ) - { - m_type = type; - m_idx = idx; - } - - bool operator==(const SHTSPEvent &right) const - { - return m_type == right.m_type && m_idx == right.m_idx; - } - - bool operator!=(const SHTSPEvent &right) const - { - return !(*this == right); - } }; -typedef std::vector SHTSPEventList; - -class SSubscription -{ -public: - uint32_t subscriptionId; - uint32_t channelId; - int speed; - bool active; - - SSubscription() - { - speed = 1000; - active = false; - - static int previousId = 0; - subscriptionId = ++previousId; - } -}; +typedef std::map SChannels; +typedef std::map STags; +typedef std::map SEvents; +typedef std::map SRecordings; diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/src/HTSPVFS.cpp kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/src/HTSPVFS.cpp --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/src/HTSPVFS.cpp 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/src/HTSPVFS.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,362 +0,0 @@ -/* - * Copyright (C) 2014 Adam Sutton - * http://www.xbmc.org - * - * 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 - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This Program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * 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, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * http://www.gnu.org/copyleft/gpl.html - * - */ - -#include "platform/threads/mutex.h" -#include "platform/util/timeutils.h" -#include "platform/sockets/tcp.h" - -extern "C" { -#include "platform/util/atomic.h" -#include "libhts/htsmsg_binary.h" -#include "libhts/sha1.h" -} - -#include "Tvheadend.h" -#include "client.h" - -using namespace std; -using namespace ADDON; -using namespace PLATFORM; - -/* -* The buffer thread -*/ -void *CHTSPVFS::Process(void) -{ - while (!IsStopped()) - { - while (m_fileId && m_buffer.free() > 0) - { - if (!SendFileRead()) - continue; - - CLockObject lock(m_mutex); - m_bHasData = true; - m_condition.Broadcast(); - } - - // Take a break, we're either stopped or full - CLockObject lock(m_mutex); - m_condition.Wait(m_mutex, 1000); - } - - return NULL; -} - -/* -* VFS handler -*/ -CHTSPVFS::CHTSPVFS ( CHTSPConnection &conn ) - : m_conn(conn), m_path(""), m_fileId(0), m_offset(0), - m_currentReadLength(INITAL_READ_LENGTH) -{ - m_buffer.alloc(MAX_BUFFER_SIZE); - - // Start the buffer thread - CreateThread(); -} - -CHTSPVFS::~CHTSPVFS ( void ) -{ - // Stop the buffer thread - StopThread(); -} - -void CHTSPVFS::Connected ( void ) -{ - /* Re-open */ - if (m_fileId != 0) - { - tvhdebug("vfs re-open file"); - if (!SendFileOpen(true) || !SendFileSeek(m_offset, SEEK_SET, true)) - { - tvherror("vfs failed to re-open file"); - Close(); - } - } -} - -/* ************************************************************************** - * VFS API - * *************************************************************************/ - -bool CHTSPVFS::Open ( const PVR_RECORDING &rec ) -{ - CLockObject lock(m_conn.Mutex()); - - /* Close existing */ - Close(); - - /* Cache details */ - m_path.Format("dvr/%s", rec.strRecordingId); - - /* Send open */ - if (!SendFileOpen()) - { - tvherror("vfs failed to open file"); - return false; - } - - /* Done */ - return true; -} - -void CHTSPVFS::Close ( void ) -{ - if (m_fileId != 0) - SendFileClose(); - - m_offset = 0; - m_fileId = 0; - m_path = ""; - - Reset(); -} - -void CHTSPVFS::Reset() -{ - CLockObject lock(m_mutex); - m_buffer.reset(); - m_bHasData = false; - m_currentReadLength = INITAL_READ_LENGTH; -} - -int CHTSPVFS::Read ( unsigned char *buf, unsigned int len ) -{ - ssize_t ret; - - /* Not opened */ - if (!m_fileId) - return -1; - - /* Signal that we need more data in the buffer. Reset the read length to the - requested length so we don't wait unnecessarily long */ - if (m_buffer.avail() < len) - { - CLockObject lock(m_mutex); - m_bHasData = false; - m_currentReadLength = len; - m_condition.Broadcast(); - } - - /* Wait for data */ - CLockObject lock(m_mutex); - m_condition.Wait(m_mutex, m_bHasData, 5000); - - /* Read */ - ret = m_buffer.read(buf, len); - m_offset += ret; - return (int)ret; -} - -long long CHTSPVFS::Seek ( long long pos, int whence ) -{ - CLockObject lock(m_conn.Mutex()); - if (m_fileId == 0) - return -1; - return SendFileSeek(pos, whence); -} - -long long CHTSPVFS::Tell ( void ) -{ - CLockObject lock(m_conn.Mutex()); - if (m_fileId == 0) - return -1; - return m_offset; -} - -long long CHTSPVFS::Size ( void ) -{ - int64_t ret = -1; - CLockObject lock(m_conn.Mutex()); - htsmsg_t *m; - - /* Build */ - m = htsmsg_create_map(); - htsmsg_add_u32(m, "id", m_fileId); - - tvhtrace("vfs stat id=%d", m_fileId); - - /* Send */ - if ((m = m_conn.SendAndWait("fileStat", m)) == NULL) - return -1; - - /* Process */ - if (htsmsg_get_s64(m, "size", &ret)) - tvherror("vfs fileStat malformed response"); - else - tvhtrace("vfs stat size=%lld", (long long)ret); - htsmsg_destroy(m); - - return ret; -} - -/* ************************************************************************** - * HTSP Messages - * *************************************************************************/ - -bool CHTSPVFS::SendFileOpen ( bool force ) -{ - htsmsg_t *m; - - /* Build Message */ - m = htsmsg_create_map(); - htsmsg_add_str(m, "file", m_path.c_str()); - - tvhdebug("vfs open file=%s", m_path.c_str()); - - /* Send */ - if (force) - m = m_conn.SendAndWait0("fileOpen", m); - else - m = m_conn.SendAndWait("fileOpen", m); - if (m == NULL) - return false; - - /* Get ID */ - htsmsg_get_u32(m, "id", &m_fileId); - htsmsg_destroy(m); - tvhtrace("vfs opened id=%d", m_fileId); - - /* Log */ - return m_fileId > 0; -} - -void CHTSPVFS::SendFileClose ( void ) -{ - htsmsg_t *m; - - /* Build */ - m = htsmsg_create_map(); - htsmsg_add_u32(m, "id", m_fileId); - - tvhdebug("vfs close id=%d", m_fileId); - - /* Send */ - m = m_conn.SendAndWait("fileClose", m); - if (m) - htsmsg_destroy(m); - // Note: ignore the return; -} - -long long CHTSPVFS::SendFileSeek ( int64_t pos, int whence, bool force ) -{ - htsmsg_t *m; - int64_t ret = -1; - - /* Build Message */ - m = htsmsg_create_map(); - htsmsg_add_u32(m, "id", m_fileId); - htsmsg_add_s64(m, "offset", pos); - if (whence == SEEK_CUR) - htsmsg_add_str(m, "whence", "SEEK_CUR"); - else if (whence == SEEK_END) - htsmsg_add_str(m, "whence", "SEEK_END"); - - tvhtrace("vfs seek id=%d whence=%d pos=%lld", - m_fileId, whence, (long long)pos); - - /* Send */ - if (force) - m = m_conn.SendAndWait0("fileSeek", m); - else - m = m_conn.SendAndWait("fileSeek", m); - if (m == NULL) - return false; - - /* Get new offset */ - if (htsmsg_get_s64(m, "offset", &ret)) - tvherror("vfs malformed fileSeek response"); - htsmsg_destroy(m); - - /* Update */ - if (ret >= 0) - { - tvhtrace("vfs seek offset=%lld", (long long)ret); - m_offset = ret; - - Reset(); - } - else - tvherror("vfs fileSeek failed"); - - return ret; -} - -bool CHTSPVFS::SendFileRead() -{ - htsmsg_t *m; - const void *buf; - size_t len; - size_t readLength; - - { - CLockObject lock(m_mutex); - - /* Determine read length */ - if (m_currentReadLength > m_buffer.free()) - readLength = m_buffer.free(); - else - readLength = m_currentReadLength; - } - - /* Build */ - m = htsmsg_create_map(); - htsmsg_add_u32(m, "id", m_fileId); - htsmsg_add_s64(m, "size", readLength); - - tvhtrace("vfs read id=%d size=%d", - m_fileId, readLength); - - /* Send */ - { - CLockObject lock(m_conn.Mutex()); - m = m_conn.SendAndWait("fileRead", m); - } - - if (m == NULL) - return false; - - /* Process */ - if (htsmsg_get_bin(m, "data", &buf, &len)) - { - htsmsg_destroy(m); - tvherror("vfs fileRead malformed response"); - return false; - } - - /* Store */ - if (m_buffer.write((unsigned char*)buf, len) != (ssize_t)len) - { - htsmsg_destroy(m); - tvherror("vfs partial buffer write"); - return false; - } - - /* Gradually increase read length */ - CLockObject lock(m_mutex); - - if (m_currentReadLength * 2 < MAX_READ_LENGTH) - m_currentReadLength *= 2; - - htsmsg_destroy(m); - return true; -} diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/src/Settings.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/src/Settings.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/src/Settings.h 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/src/Settings.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,40 +0,0 @@ -#pragma once - -/* -* Copyright (C) 2005-2014 Team XBMC -* http://www.xbmc.org -* -* 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 -* the Free Software Foundation; either version 2, or (at your option) -* any later version. -* -* This Program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* 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, write to -* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -* http://www.gnu.org/copyleft/gpl.html -* -*/ - -#include - -namespace tvheadend { - - struct Settings { - std::string strHostname; - int iPortHTSP; - int iPortHTTP; - std::string strUsername; - std::string strPassword; - int iConnectTimeout; - int iResponseTimeout; - bool bTraceDebug; - bool bAsyncEpg; - }; - -} \ No newline at end of file diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/src/Tvheadend.cpp kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/src/Tvheadend.cpp --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/src/Tvheadend.cpp 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/src/Tvheadend.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,1543 +0,0 @@ -/* - * Copyright (C) 2005-2014 Team XBMC - * http://www.xbmc.org - * - * 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 - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This Program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * 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, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * http://www.gnu.org/copyleft/gpl.html - * - */ - -#include -#include -#include "Tvheadend.h" - -#include "platform/util/util.h" - -extern "C" { -#include "platform/util/atomic.h" -#include "libhts/htsmsg_binary.h" -} - -#define UPDATE(x, y)\ -if ((x) != (y))\ -{\ - (x) = (y);\ - update = true;\ -} - -using namespace std; -using namespace ADDON; -using namespace PLATFORM; - -CTvheadend::CTvheadend(tvheadend::Settings settings) - : m_settings(settings), m_dmx(m_conn), m_vfs(m_conn), - m_queue((size_t)-1), m_asyncState(settings.iResponseTimeout) -{ -} - -CTvheadend::~CTvheadend() -{ - m_conn.StopThread(); - StopThread(); -} - -void CTvheadend::Start ( void ) -{ - CreateThread(); - m_conn.CreateThread(); -} - -/* ************************************************************************** - * Miscellaneous - * *************************************************************************/ - -PVR_ERROR CTvheadend::GetDriveSpace ( long long *total, long long *used ) -{ - int64_t s64; - CLockObject lock(m_conn.Mutex()); - - htsmsg_t *m = htsmsg_create_map(); - m = m_conn.SendAndWait("getDiskSpace", m); - if (m == NULL) - return PVR_ERROR_SERVER_ERROR; - - if (htsmsg_get_s64(m, "totaldiskspace", &s64)) - goto error; - *total = s64 / 1024; - - if (htsmsg_get_s64(m, "freediskspace", &s64)) - goto error; - *used = *total - (s64 / 1024); - - htsmsg_destroy(m); - return PVR_ERROR_NO_ERROR; - -error: - htsmsg_destroy(m); - tvherror("malformed getDiskSpace response"); - return PVR_ERROR_SERVER_ERROR; -} - -CStdString CTvheadend::GetImageURL ( const char *str ) -{ - if (*str != '/') - return str; - else - { - return m_conn.GetWebURL("%s", str); - } -} - -/* ************************************************************************** - * Tags - * *************************************************************************/ - -int CTvheadend::GetTagCount ( void ) -{ - if (!m_asyncState.WaitForState(ASYNC_DVR)) - return 0; - - CLockObject lock(m_mutex); - return m_tags.size(); -} - -PVR_ERROR CTvheadend::GetTags ( ADDON_HANDLE handle ) -{ - if (!m_asyncState.WaitForState(ASYNC_DVR)) - return PVR_ERROR_FAILED; - - std::vector tags; - { - CLockObject lock(m_mutex); - STags::const_iterator it; - for (it = m_tags.begin(); it != m_tags.end(); ++it) - { - PVR_CHANNEL_GROUP tag; - memset(&tag, 0, sizeof(tag)); - - tag.bIsRadio = false; - strncpy(tag.strGroupName, it->second.name.c_str(), - sizeof(tag.strGroupName)); - tags.push_back(tag); - } - } - - std::vector::const_iterator it; - for (it = tags.begin(); it != tags.end(); ++it) - { - /* Callback. */ - PVR->TransferChannelGroup(handle, &(*it)); - } - - return PVR_ERROR_NO_ERROR; -} - -PVR_ERROR CTvheadend::GetTagMembers - ( ADDON_HANDLE handle, const PVR_CHANNEL_GROUP &group ) -{ - if (!m_asyncState.WaitForState(ASYNC_DVR)) - return PVR_ERROR_FAILED; - - std::vector gms; - { - CLockObject lock(m_mutex); - vector::const_iterator it; - SChannels::const_iterator cit; - STags::const_iterator tit = m_tags.begin(); - while (tit != m_tags.end()) - { - if (tit->second.name == group.strGroupName) - { - for (it = tit->second.channels.begin(); - it != tit->second.channels.end(); ++it) - { - if ((cit = m_channels.find(*it)) != m_channels.end()) - { - PVR_CHANNEL_GROUP_MEMBER gm; - memset(&gm, 0, sizeof(PVR_CHANNEL_GROUP_MEMBER)); - strncpy( - gm.strGroupName, group.strGroupName, sizeof(gm.strGroupName) - 1); - gm.iChannelUniqueId = cit->second.id; - gm.iChannelNumber = cit->second.num; - gms.push_back(gm); - } - } - break; - } - ++tit; - } - } - - std::vector::const_iterator it; - for (it = gms.begin(); it != gms.end(); ++it) - { - /* Callback. */ - PVR->TransferChannelGroupMember(handle, &(*it)); - } - - return PVR_ERROR_NO_ERROR; -} - -/* ************************************************************************** - * Channels - * *************************************************************************/ - -int CTvheadend::GetChannelCount ( void ) -{ - if (!m_asyncState.WaitForState(ASYNC_DVR)) - return 0; - - CLockObject lock(m_mutex); - return m_channels.size(); -} - -PVR_ERROR CTvheadend::GetChannels ( ADDON_HANDLE handle, bool radio ) -{ - if (!m_asyncState.WaitForState(ASYNC_DVR)) - return PVR_ERROR_FAILED; - - std::vector channels; - { - CLockObject lock(m_mutex); - SChannels::const_iterator it; - for (it = m_channels.begin(); it != m_channels.end(); ++it) - { - if (radio != it->second.radio) - continue; - - PVR_CHANNEL chn; - memset(&chn, 0 , sizeof(PVR_CHANNEL)); - - chn.iUniqueId = it->second.id; - chn.bIsRadio = it->second.radio; - chn.iChannelNumber = it->second.num; - chn.iSubChannelNumber = it->second.numMinor; - chn.iEncryptionSystem = it->second.caid; - chn.bIsHidden = false; - strncpy(chn.strChannelName, it->second.name.c_str(), - sizeof(chn.strChannelName) - 1); - strncpy(chn.strIconPath, it->second.icon.c_str(), - sizeof(chn.strIconPath) - 1); - channels.push_back(chn); - } - } - - std::vector::const_iterator it; - for (it = channels.begin(); it != channels.end(); ++it) - { - /* Callback. */ - PVR->TransferChannelEntry(handle, &(*it)); - } - - return PVR_ERROR_NO_ERROR; -} - -/* ************************************************************************** - * Recordings - * *************************************************************************/ - -PVR_ERROR CTvheadend::SendDvrDelete ( uint32_t id, const char *method ) -{ - uint32_t u32; - - CLockObject lock(m_conn.Mutex()); - - /* Build message */ - htsmsg_t *m = htsmsg_create_map(); - htsmsg_add_u32(m, "id", id); - - /* Send and wait a bit longer than usual */ - if ((m = m_conn.SendAndWait(method, m, - std::max(30000, tvh->GetSettings().iResponseTimeout))) == NULL) - return PVR_ERROR_SERVER_ERROR; - - /* Check for error */ - if (htsmsg_get_u32(m, "success", &u32)) - { - tvherror("failed to parse cancelDvrEntry response"); - } - htsmsg_destroy(m); - - return u32 > 0 ? PVR_ERROR_NO_ERROR : PVR_ERROR_FAILED; -} - -PVR_ERROR CTvheadend::SendDvrUpdate( htsmsg_t* m ) -{ - uint32_t u32; - - /* Send and Wait */ - { - CLockObject lock(m_conn.Mutex()); - m = m_conn.SendAndWait("updateDvrEntry", m); - } - - if (m == NULL) - return PVR_ERROR_SERVER_ERROR; - - /* Check for error */ - if (htsmsg_get_u32(m, "success", &u32)) - { - tvherror("failed to parse updateDvrEntry response"); - } - - return u32 > 0 ? PVR_ERROR_NO_ERROR : PVR_ERROR_FAILED; -} - -int CTvheadend::GetRecordingCount ( void ) -{ - if (!m_asyncState.WaitForState(ASYNC_EPG)) - return 0; - - int ret = 0; - SRecordings::const_iterator rit; - CLockObject lock(m_mutex); - for (rit = m_recordings.begin(); rit != m_recordings.end(); ++rit) - if (rit->second.IsRecording()) - ret++; - return ret; -} - -PVR_ERROR CTvheadend::GetRecordings ( ADDON_HANDLE handle ) -{ - if (!m_asyncState.WaitForState(ASYNC_EPG)) - return PVR_ERROR_FAILED; - - std::vector recs; - { - CLockObject lock(m_mutex); - SRecordings::const_iterator rit; - SChannels::const_iterator cit; - char buf[128]; - - for (rit = m_recordings.begin(); rit != m_recordings.end(); ++rit) - { - if (!rit->second.IsRecording()) continue; - - /* Setup entry */ - PVR_RECORDING rec; - memset(&rec, 0, sizeof(rec)); - - /* Channel name and icon */ - if ((cit = m_channels.find(rit->second.channel)) != m_channels.end()) - { - strncpy(rec.strChannelName, cit->second.name.c_str(), - sizeof(rec.strChannelName)); - - strncpy(rec.strIconPath, cit->second.icon.c_str(), - sizeof(rec.strIconPath)); - } - - /* URL ( HTSP < v7 ) */ - // TODO: do I care! - - /* ID */ - snprintf(buf, sizeof(buf), "%i", rit->second.id); - strncpy(rec.strRecordingId, buf, sizeof(rec.strRecordingId)); - - /* Title */ - strncpy(rec.strTitle, rit->second.title.c_str(), sizeof(rec.strTitle)); - - /* Description */ - strncpy(rec.strPlot, rit->second.description.c_str(), sizeof(rec.strPlot)); - - /* Time/Duration */ - rec.recordingTime = (time_t)rit->second.start; - rec.iDuration = (time_t)(rit->second.stop - rit->second.start); - - /* Priority */ - rec.iPriority = rit->second.priority; - - /* Retention */ - rec.iLifetime = rit->second.retention; - - /* Directory */ - if (rit->second.path != "") - { - size_t idx = rit->second.path.rfind("/"); - if (idx == 0 || idx == string::npos) - strncpy(rec.strDirectory, "/", sizeof(rec.strDirectory)); - else - { - CStdString d = rit->second.path.substr(0, idx); - if (d[0] != '/') - d = "/" + d; - strncpy(rec.strDirectory, d.c_str(), sizeof(rec.strDirectory)); - } - } - - recs.push_back(rec); - } - } - - std::vector::const_iterator it; - for (it = recs.begin(); it != recs.end(); ++it) - { - /* Callback. */ - PVR->TransferRecordingEntry(handle, &(*it)); - } - - return PVR_ERROR_NO_ERROR; -} - -PVR_ERROR CTvheadend::GetRecordingEdl - ( const PVR_RECORDING &rec, PVR_EDL_ENTRY edl[], int *num ) -{ - /* Not supported */ - if (m_conn.GetProtocol() < 12) - return PVR_ERROR_NOT_IMPLEMENTED; - - htsmsg_t *list; - htsmsg_field_t *f; - int idx; - - /* Build request */ - htsmsg_t *m = htsmsg_create_map(); - htsmsg_add_u32(m, "id", atoi(rec.strRecordingId)); - - tvhdebug("dvr get cutpoints id=%s", rec.strRecordingId); - - /* Send and Wait */ - { - CLockObject lock(m_conn.Mutex()); - - if ((m = m_conn.SendAndWait("getDvrCutpoints", m)) == NULL) - return PVR_ERROR_SERVER_ERROR; - } - - /* Validate */ - if (!(list = htsmsg_get_list(m, "cutpoints"))) - { - tvherror("malformed getDvrCutpoints response"); - htsmsg_destroy(m); - return PVR_ERROR_FAILED; - } - - /* Process */ - idx = 0; - HTSMSG_FOREACH(f, list) - { - uint32_t start, end, type; - - if (f->hmf_type != HMF_MAP) - continue; - - /* Full */ - if (idx >= *num) - break; - - /* Get fields */ - if (htsmsg_get_u32(&f->hmf_msg, "start", &start) || - htsmsg_get_u32(&f->hmf_msg, "end", &end) || - htsmsg_get_u32(&f->hmf_msg, "type", &type)) - { - tvherror("malformed EDL entry, will ignore"); - continue; - } - - /* Build entry */ - edl[idx].start = start; - edl[idx].end = end; - switch (type) - { - case DVR_ACTION_TYPE_CUT: - edl[idx].type = PVR_EDL_TYPE_CUT; - break; - case DVR_ACTION_TYPE_MUTE: - edl[idx].type = PVR_EDL_TYPE_MUTE; - break; - case DVR_ACTION_TYPE_SCENE: - edl[idx].type = PVR_EDL_TYPE_SCENE; - break; - case DVR_ACTION_TYPE_COMBREAK: - default: - edl[idx].type = PVR_EDL_TYPE_COMBREAK; - break; - } - idx++; - - tvhdebug("edl start:%d end:%d action:%d", start, end, type); - } - - *num = idx; - htsmsg_destroy(m); - return PVR_ERROR_NO_ERROR; -} - -PVR_ERROR CTvheadend::DeleteRecording ( const PVR_RECORDING &rec ) -{ - return SendDvrDelete(atoi(rec.strRecordingId), "deleteDvrEntry"); -} - -PVR_ERROR CTvheadend::RenameRecording ( const PVR_RECORDING &rec ) -{ - /* Build message */ - htsmsg_t *m = htsmsg_create_map(); - htsmsg_add_u32(m, "id", atoi(rec.strRecordingId)); - htsmsg_add_str(m, "title", rec.strTitle); - - PVR_ERROR e = SendDvrUpdate(m); - htsmsg_destroy(m); - return e; -} - -int CTvheadend::GetTimerCount ( void ) -{ - if (!m_asyncState.WaitForState(ASYNC_EPG)) - return 0; - - int ret = 0; - SRecordings::const_iterator rit; - CLockObject lock(m_mutex); - for (rit = m_recordings.begin(); rit != m_recordings.end(); ++rit) - if (rit->second.IsTimer()) - ret++; - return ret; -} - -PVR_ERROR CTvheadend::GetTimers ( ADDON_HANDLE handle ) -{ - if (!m_asyncState.WaitForState(ASYNC_EPG)) - return PVR_ERROR_FAILED; - - std::vector timers; - { - CLockObject lock(m_mutex); - SRecordings::const_iterator rit; - - for (rit = m_recordings.begin(); rit != m_recordings.end(); ++rit) - { - if (!rit->second.IsTimer()) continue; - - /* Setup entry */ - PVR_TIMER tmr; - memset(&tmr, 0, sizeof(tmr)); - - tmr.iClientIndex = rit->second.id; - tmr.iClientChannelUid = rit->second.channel; - tmr.startTime = (time_t)rit->second.start; - tmr.endTime = (time_t)rit->second.stop; - strncpy(tmr.strTitle, rit->second.title.c_str(), - sizeof(tmr.strTitle) - 1); - strncpy(tmr.strSummary, rit->second.description.c_str(), - sizeof(tmr.strSummary) - 1); - tmr.state = rit->second.state; - tmr.iPriority = rit->second.priority; - tmr.iLifetime = rit->second.retention; - tmr.bIsRepeating = false; // unused - tmr.firstDay = 0; // unused - tmr.iWeekdays = 0; // unused - tmr.iEpgUid = 0; // unused - tmr.iMarginStart = rit->second.startExtra; - tmr.iMarginEnd = rit->second.stopExtra; - tmr.iGenreType = 0; // unused - tmr.iGenreSubType = 0; // unused - - timers.push_back(tmr); - } - } - - std::vector::const_iterator it; - for (it = timers.begin(); it != timers.end(); ++it) - { - /* Callback. */ - PVR->TransferTimerEntry(handle, &(*it)); - } - - return PVR_ERROR_NO_ERROR; -} - -PVR_ERROR CTvheadend::AddTimer ( const PVR_TIMER &timer ) -{ - uint32_t u32; - dvr_prio_t prio; - - /* Build message */ - htsmsg_t *m = htsmsg_create_map(); - if (timer.iEpgUid > 0) - { - htsmsg_add_u32(m, "eventId", timer.iEpgUid); - } - else - { - htsmsg_add_str(m, "title", timer.strTitle); - htsmsg_add_s64(m, "start", timer.startTime); - htsmsg_add_s64(m, "stop", timer.endTime); - htsmsg_add_u32(m, "channelId", timer.iClientChannelUid); - htsmsg_add_str(m, "description", timer.strSummary); - } - - htsmsg_add_s64(m, "startExtra", timer.iMarginStart); - htsmsg_add_s64(m, "stopExtra", timer.iMarginEnd); - - if (m_conn.GetProtocol() > 12) - htsmsg_add_u32(m, "retention", timer.iLifetime); - - /* Priority */ - if (timer.iPriority > 80) - prio = DVR_PRIO_IMPORTANT; - else if (timer.iPriority > 60) - prio = DVR_PRIO_HIGH; - else if (timer.iPriority > 40) - prio = DVR_PRIO_NORMAL; - else if (timer.iPriority > 20) - prio = DVR_PRIO_LOW; - else - prio = DVR_PRIO_UNIMPORTANT; - - htsmsg_add_u32(m, "priority", (int)prio); - - /* Send and Wait */ - { - CLockObject lock(m_conn.Mutex()); - m = m_conn.SendAndWait("addDvrEntry", m); - } - - if (m == NULL) - return PVR_ERROR_SERVER_ERROR; - - /* Check for error */ - if (htsmsg_get_u32(m, "success", &u32)) - { - tvherror("failed to parse addDvrEntry response"); - } - htsmsg_destroy(m); - - return u32 > 0 ? PVR_ERROR_NO_ERROR : PVR_ERROR_FAILED; -} - -PVR_ERROR CTvheadend::DeleteTimer - ( const PVR_TIMER &timer, bool _unused(force) ) -{ - return SendDvrDelete(timer.iClientIndex, "cancelDvrEntry"); -} - -PVR_ERROR CTvheadend::UpdateTimer ( const PVR_TIMER &timer ) -{ - /* Build message */ - htsmsg_t *m = htsmsg_create_map(); - htsmsg_add_u32(m, "id", timer.iClientIndex); - htsmsg_add_str(m, "title", timer.strTitle); - htsmsg_add_s64(m, "start", timer.startTime); - htsmsg_add_s64(m, "stop", timer.endTime); - htsmsg_add_str(m, "description", timer.strSummary); - htsmsg_add_s64(m, "startExtra", timer.iMarginStart); - htsmsg_add_s64(m, "stopExtra", timer.iMarginEnd); - - if (m_conn.GetProtocol() > 12) - { - dvr_prio_t prio; - - htsmsg_add_u32(m, "retention", timer.iLifetime); - - /* Priority */ - if (timer.iPriority > 80) - prio = DVR_PRIO_IMPORTANT; - else if (timer.iPriority > 60) - prio = DVR_PRIO_HIGH; - else if (timer.iPriority > 40) - prio = DVR_PRIO_NORMAL; - else if (timer.iPriority > 20) - prio = DVR_PRIO_LOW; - else - prio = DVR_PRIO_UNIMPORTANT; - - htsmsg_add_u32(m, "priority", (int)prio); - } - - PVR_ERROR e = SendDvrUpdate(m); - htsmsg_destroy(m); - return e; -} - -/* ************************************************************************** - * EPG - * *************************************************************************/ - -/* Transfer schedule to XBMC */ -void CTvheadend::TransferEvent - ( ADDON_HANDLE handle, const SEvent &event ) -{ - /* Build */ - EPG_TAG epg; - memset(&epg, 0, sizeof(EPG_TAG)); - epg.iUniqueBroadcastId = event.id; - epg.strTitle = event.title.c_str(); - epg.iChannelNumber = event.channel; - epg.startTime = event.start; - epg.endTime = event.stop; - epg.strPlotOutline = event.summary.c_str(); - epg.strPlot = event.desc.c_str(); - epg.strIconPath = event.image.c_str(); - epg.iGenreType = event.content & 0xF0; - epg.iGenreSubType = event.content & 0x0F; - epg.firstAired = event.aired; - epg.iSeriesNumber = event.season; - epg.iEpisodeNumber = event.episode; - epg.iEpisodePartNumber = event.part; - - std::stringstream ss; - ss << event.recordingId; - const std::string recordingId = ss.str(); - epg.strRecordingId = recordingId.c_str(); - - /* Callback. */ - PVR->TransferEpgEntry(handle, &epg); -} - -PVR_ERROR CTvheadend::GetEpg - ( ADDON_HANDLE handle, const PVR_CHANNEL &chn, time_t start, time_t end ) -{ - SSchedules::const_iterator sit; - SEvents::const_iterator eit; - htsmsg_field_t *f; - int n = 0; - - tvhtrace("get epg channel %d start %ld stop %ld", chn.iUniqueId, - (long long)start, (long long)end); - - /* Async transfer */ - if (m_settings.bAsyncEpg) - { - if (!m_asyncState.WaitForState(ASYNC_DONE)) - return PVR_ERROR_FAILED; - - std::vector events; - { - CLockObject lock(m_mutex); - sit = m_schedules.find(chn.iUniqueId); - if (sit != m_schedules.end()) - { - for (eit = sit->second.events.begin(); - eit != sit->second.events.end(); ++eit) - { - if (eit->second.start > end) continue; - if (eit->second.stop < start) continue; - - events.push_back(eit->second); - ++n; - } - } - } - - std::vector::const_iterator it; - for (it = events.begin(); it != events.end(); ++it) - { - /* Callback. */ - TransferEvent(handle, *it); - } - - /* Synchronous transfer */ - } - else - { - /* Build message */ - htsmsg_t *msg = htsmsg_create_map(); - htsmsg_add_u32(msg, "channelId", chn.iUniqueId); - htsmsg_add_s64(msg, "maxTime", end); - - /* Send and Wait */ - { - CLockObject lock(m_conn.Mutex()); - - if ((msg = m_conn.SendAndWait0("getEvents", msg)) == NULL) - return PVR_ERROR_SERVER_ERROR; - } - - /* Process */ - htsmsg_t *l; - - if (!(l = htsmsg_get_list(msg, "events"))) - { - htsmsg_destroy(msg); - tvherror("malformed getEvents response"); - return PVR_ERROR_SERVER_ERROR; - } - HTSMSG_FOREACH(f, l) - { - SEvent event; - if (f->hmf_type == HMF_MAP) - { - if (ParseEvent(&f->hmf_msg, event)) - { - /* Callback. */ - TransferEvent(handle, event); - ++n; - } - } - } - htsmsg_destroy(msg); - } - - tvhtrace("get epg channel %d events %d", chn.iUniqueId, n); - - return PVR_ERROR_NO_ERROR; -} - -/* ************************************************************************** - * Connection - * *************************************************************************/ - -void CTvheadend::Disconnected ( void ) -{ - m_asyncState.SetState(ASYNC_NONE); -} - -bool CTvheadend::Connected ( void ) -{ - htsmsg_t *msg; - STags::iterator tit; - SChannels::iterator cit; - SRecordings::iterator rit; - SSchedules::iterator sit; - SEvents::iterator eit; - - /* Rebuild state */ - m_dmx.Connected(); - m_vfs.Connected(); - - /* Flag all async fields in case they've been deleted */ - for (cit = m_channels.begin(); cit != m_channels.end(); ++cit) - cit->second.del = true; - for (tit = m_tags.begin(); tit != m_tags.end(); ++tit) - tit->second.del = true; - for (rit = m_recordings.begin(); rit != m_recordings.end(); ++rit) - rit->second.del = true; - for (sit = m_schedules.begin(); sit != m_schedules.end(); ++sit) - { - sit->second.del = true; - - for (eit = sit->second.events.begin(); eit != sit->second.events.end(); ++eit) - eit->second.del = true; - } - - /* Request Async data */ - m_asyncState.SetState(ASYNC_NONE); - - msg = htsmsg_create_map(); - htsmsg_add_u32(msg, "epg", m_settings.bAsyncEpg); - //htsmsg_add_u32(msg, "epgMaxTime", 0); - //htsmsg_add_s64(msg, "lastUpdate", 0); - if ((msg = m_conn.SendAndWait0("enableAsyncMetadata", msg)) == NULL) - return false; - - htsmsg_destroy(msg); - tvhdebug("async updates requested"); - - return true; -} - -/* ************************************************************************** - * Message handling - * *************************************************************************/ - -bool CTvheadend::ProcessMessage ( const char *method, htsmsg_t *msg ) -{ - /* Demuxer */ - if (m_dmx.ProcessMessage(method, msg)) - return true; - - /* Store */ - m_queue.Push(CHTSPMessage(method, msg)); - return false; -} - -void* CTvheadend::Process ( void ) -{ - CHTSPMessage msg; - const char *method; - - while (!IsStopped()) - { - /* Check Q */ - // this is a bit horrible, but meh - if (!m_queue.Pop(msg, 2000)) - continue; - if (!msg.m_msg) - continue; - method = msg.m_method.c_str(); - - /* Scope lock for processing */ - { - CLockObject lock(m_mutex); - - /* Channels */ - if (!strcmp("channelAdd", method) || - !strcmp("channelUpdate", method)) - ParseChannelUpdate(msg.m_msg); - else if (!strcmp("channelDelete", method)) - ParseChannelDelete(msg.m_msg); - - /* Tags */ - else if (!strcmp("tagAdd", method) || - !strcmp("tagUpdate", method)) - ParseTagUpdate(msg.m_msg); - else if (!strcmp("tagDelete", method)) - ParseTagDelete(msg.m_msg); - - /* Recordings */ - else if (!strcmp("dvrEntryAdd", method) || - !strcmp("dvrEntryUpdate", method)) - ParseRecordingUpdate(msg.m_msg); - else if (!strcmp("dvrEntryDelete", method)) - ParseRecordingDelete(msg.m_msg); - - /* EPG */ - else if (!strcmp("eventAdd", method) || - !strcmp("eventUpdate", method)) - ParseEventUpdate(msg.m_msg); - else if (!strcmp("eventDelete", method)) - ParseEventDelete(msg.m_msg); - - /* ASync complete */ - else if (!strcmp("initialSyncCompleted", method)) - SyncCompleted(); - - /* Unknown */ - else - tvhdebug("unhandled message [%s]", method); - } - - /* Manual delete rather than waiting */ - htsmsg_destroy(msg.m_msg); - msg.m_msg = NULL; - - /* Process events - * Note: due to potential deadly embrace this must be done without the - * m_mutex held! - */ - SHTSPEventList::const_iterator it; - for (it = m_events.begin(); it != m_events.end(); ++it) - { - switch (it->m_type) - { - case HTSP_EVENT_TAG_UPDATE: - PVR->TriggerChannelGroupsUpdate(); - break; - case HTSP_EVENT_CHN_UPDATE: - PVR->TriggerChannelUpdate(); - break; - case HTSP_EVENT_REC_UPDATE: - PVR->TriggerTimerUpdate(); - PVR->TriggerRecordingUpdate(); - break; - case HTSP_EVENT_EPG_UPDATE: - PVR->TriggerEpgUpdate(it->m_idx); - break; - case HTSP_EVENT_NONE: - break; - } - } - m_events.clear(); - } - - /* Local */ - return NULL; -} - -void CTvheadend::SyncCompleted ( void ) -{ - /* The complete calls are probably redundant, but its a safety feature */ - SyncChannelsCompleted(); - SyncDvrCompleted(); - SyncEpgCompleted(); - m_asyncState.SetState(ASYNC_DONE); -} - -void CTvheadend::SyncChannelsCompleted ( void ) -{ - /* Already done */ - if (m_asyncState.GetState() > ASYNC_CHN) - return; - - bool update; - SChannels::iterator cit = m_channels.begin(); - STags::iterator tit = m_tags.begin(); - - /* Tags */ - update = false; - while (tit != m_tags.end()) - { - if (tit->second.del) - { - update = true; - m_tags.erase(tit++); - } - else - ++tit; - } - TriggerChannelGroupsUpdate(); - if (update) - tvhinfo("tags updated"); - - /* Channels */ - update = false; - while (cit != m_channels.end()) - { - if (cit->second.del) - { - update = true; - m_channels.erase(cit++); - } - else - ++cit; - } - TriggerChannelUpdate(); - if (update) - tvhinfo("channels updated"); - - /* Next */ - m_asyncState.SetState(ASYNC_DVR); -} - -void CTvheadend::SyncDvrCompleted ( void ) -{ - /* Done */ - if (m_asyncState.GetState() > ASYNC_DVR) - return; - - bool update; - SRecordings::iterator rit = m_recordings.begin(); - - /* Recordings */ - update = false; - while (rit != m_recordings.end()) - { - if (rit->second.del) - { - update = true; - m_recordings.erase(rit++); - } - else - ++rit; - } - TriggerRecordingUpdate(); - TriggerTimerUpdate(); - if (update) - tvhinfo("recordings updated"); - - /* Next */ - m_asyncState.SetState(ASYNC_EPG); -} - -void CTvheadend::SyncEpgCompleted ( void ) -{ - /* Done */ - if (!m_settings.bAsyncEpg || m_asyncState.GetState() > ASYNC_EPG) - return; - - bool update; - SSchedules::iterator sit = m_schedules.begin(); - SEvents::iterator eit; - - /* Events */ - update = false; - while (sit != m_schedules.end()) - { - uint32_t channelId = sit->second.channel; - - if (sit->second.del) - { - update = true; - m_schedules.erase(sit++); - } - else - { - eit = sit->second.events.begin(); - while (eit != sit->second.events.end()) - { - if (eit->second.del) - { - update = true; - sit->second.events.erase(eit++); - } - else - ++eit; - } - ++sit; - } - - TriggerEpgUpdate(channelId); - } - - if (update) - tvhinfo("epg updated"); -} - -void CTvheadend::ParseTagUpdate ( htsmsg_t *msg ) -{ - uint32_t u32; - const char *str; - htsmsg_t *list; - - /* Validate */ - if (htsmsg_get_u32(msg, "tagId", &u32)) - { - tvherror("malformed tagUpdate"); - return; - } - - /* Locate object */ - STag &existingTag = m_tags[u32]; - existingTag.del = false; - - /* Create new object */ - STag tag; - tag.id = u32; - - /* Name */ - if ((str = htsmsg_get_str(msg, "tagName")) != NULL) - tag.name = str; - - /* Icon */ - if ((str = htsmsg_get_str(msg, "tagIcon")) != NULL) - tag.icon = GetImageURL(str); - - /* Members */ - if ((list = htsmsg_get_list(msg, "members")) != NULL) - { - htsmsg_field_t *f; - HTSMSG_FOREACH(f, list) - { - if (f->hmf_type != HMF_S64) continue; - tag.channels.push_back((int)f->hmf_s64); - } - } - - /* Update */ - if (existingTag != tag) - { - existingTag = tag; - tvhdebug("tag updated id:%u, name:%s", - existingTag.id, existingTag.name.c_str()); - if (m_asyncState.GetState() > ASYNC_CHN) - TriggerChannelGroupsUpdate(); - } -} - -void CTvheadend::ParseTagDelete ( htsmsg_t *msg ) -{ - uint32_t u32; - - /* Validate */ - if (htsmsg_get_u32(msg, "tagId", &u32)) - { - tvherror("malformed tagDelete"); - return; - } - tvhdebug("delete tag %u", u32); - - /* Erase */ - m_tags.erase(u32); - TriggerChannelGroupsUpdate(); -} - -void CTvheadend::ParseChannelUpdate ( htsmsg_t *msg ) -{ - bool update = false; - uint32_t u32; - const char *str; - htsmsg_t *list; - - /* Validate */ - if (htsmsg_get_u32(msg, "channelId", &u32)) - { - tvherror("malformed channelUpdate"); - return; - } - - /* Locate channel object */ - SChannel &channel = m_channels[u32]; - channel.id = u32; - channel.del = false; - - /* Channel name */ - if ((str = htsmsg_get_str(msg, "channelName")) != NULL) - UPDATE(channel.name, str); - - /* Channel number */ - if (!htsmsg_get_u32(msg, "channelNumber", &u32)) - { - if (!u32) u32 = GetNextUnnumberedChannelNumber(); - UPDATE(channel.num, u32); - } - else if (!channel.num) - { - UPDATE(channel.num, GetNextUnnumberedChannelNumber()); - } - - /* ATSC subchannel number */ - if (!htsmsg_get_u32(msg, "channelNumberMinor", &u32)) - { - UPDATE(channel.numMinor, u32); - } - - /* Channel icon */ - if ((str = htsmsg_get_str(msg, "channelIcon")) != NULL) - { - CStdString url = GetImageURL(str); - UPDATE(channel.icon, url); - } - - /* Services */ - if ((list = htsmsg_get_list(msg, "services")) != NULL) - { - htsmsg_field_t *f; - uint32_t caid = 0; - bool radio = false; - HTSMSG_FOREACH(f, list) - { - if (f->hmf_type != HMF_MAP) - continue; - - /* Radio? */ - if ((str = htsmsg_get_str(&f->hmf_msg, "type")) != NULL) - { - if (!strcmp(str, "Radio")) - radio = true; - } - - /* CAID */ - if (caid == 0) - htsmsg_get_u32(&f->hmf_msg, "caid", &caid); - } - UPDATE(channel.radio, radio); - UPDATE(channel.caid, caid); - } - - - /* Update XBMC */ - if (update) { - tvhdebug("channel update id:%u, name:%s", - channel.id, channel.name.c_str()); - if (m_asyncState.GetState() > ASYNC_CHN) - TriggerChannelUpdate(); - } -} - -void CTvheadend::ParseChannelDelete ( htsmsg_t *msg ) -{ - uint32_t u32; - - /* Validate */ - if (htsmsg_get_u32(msg, "channelId", &u32)) - { - tvherror("malformed channelUpdate"); - return; - } - tvhdebug("delete channel %u", u32); - - /* Erase */ - m_channels.erase(u32); - TriggerChannelUpdate(); -} - -void CTvheadend::ParseRecordingUpdate ( htsmsg_t *msg ) -{ - bool update = false; - const char *state, *str; - uint32_t id, channel, eventId, retention, priority; - int64_t start, stop, startExtra, stopExtra; - - /* Channels must be complete */ - SyncChannelsCompleted(); - - /* Validate */ - if (htsmsg_get_u32(msg, "id", &id) || - htsmsg_get_u32(msg, "channel", &channel) || - htsmsg_get_s64(msg, "start", &start) || - htsmsg_get_s64(msg, "stop", &stop) || - ((state = htsmsg_get_str(msg, "state")) == NULL)) - { - tvherror("malformed dvrEntryAdd/dvrEntryUpdate"); - return; - } - - /* Get entry */ - SRecording &rec = m_recordings[id]; - rec.id = id; - rec.del = false; - UPDATE(rec.channel, channel); - UPDATE(rec.start, start); - UPDATE(rec.stop, stop); - - /* Add optional fields */ - if (!htsmsg_get_u32(msg, "eventId", &eventId)) - { - UPDATE(rec.eventId, eventId); - } - - if (!htsmsg_get_s64(msg, "startExtra", &startExtra)) - { - UPDATE(rec.startExtra, startExtra); - } - - if (!htsmsg_get_s64(msg, "stopExtra", &stopExtra)) - { - UPDATE(rec.stopExtra, stopExtra); - } - - if (!htsmsg_get_u32(msg, "retention", &retention)) - { - UPDATE(rec.retention, retention); - } - - if (!htsmsg_get_u32(msg, "priority", &priority)) - { - switch (priority) - { - case DVR_PRIO_IMPORTANT: - UPDATE(rec.priority, 100); - break; - case DVR_PRIO_HIGH: - UPDATE(rec.priority, 75); - break; - case DVR_PRIO_NORMAL: - UPDATE(rec.priority, 50); - break; - case DVR_PRIO_LOW: - UPDATE(rec.priority, 25); - break; - case DVR_PRIO_UNIMPORTANT: - UPDATE(rec.priority, 0); - break; - default: - tvherror("malformed dvrEntryAdd/dvrEntryUpdate"); - return; - } - } - - /* Parse state */ - if (strstr(state, "scheduled") != NULL) - { - UPDATE(rec.state, PVR_TIMER_STATE_SCHEDULED); - } - else if (strstr(state, "recording") != NULL) - { - UPDATE(rec.state, PVR_TIMER_STATE_RECORDING); - } - else if (strstr(state, "completed") != NULL) - { - UPDATE(rec.state, PVR_TIMER_STATE_COMPLETED); - } - else if (strstr(state, "missed") != NULL) - { - UPDATE(rec.state, PVR_TIMER_STATE_ERROR); - } - else if (strstr(state, "invalid") != NULL) - { - UPDATE(rec.state, PVR_TIMER_STATE_ERROR); - } - - /* Info */ - if ((str = htsmsg_get_str(msg, "title")) != NULL) - UPDATE(rec.title, str); - if ((str = htsmsg_get_str(msg, "path")) != NULL) - UPDATE(rec.path, str); - if ((str = htsmsg_get_str(msg, "description")) != NULL) - { - UPDATE(rec.description, str); - } - else if ((str = htsmsg_get_str(msg, "summary")) != NULL) - { - UPDATE(rec.description, str); - } - - /* Error */ - if ((str = htsmsg_get_str(msg, "error")) != NULL) - { - if (!strcmp(str, "300")) - { - UPDATE(rec.state, PVR_TIMER_STATE_ABORTED); - } - else if (strstr(str, "missing") != NULL) - { - UPDATE(rec.state, PVR_TIMER_STATE_ERROR); - } - else - { - UPDATE(rec.error, str); - } - } - - /* Update */ - if (update) - { - std::string error = rec.error.empty() ? "none" : rec.error; - - tvhdebug("recording id:%d, state:%s, title:%s, desc:%s, error:%s", - rec.id, state, rec.title.c_str(), rec.description.c_str(), - error.c_str()); - - if (m_asyncState.GetState() > ASYNC_DVR) - { - TriggerTimerUpdate(); - if (rec.state == PVR_TIMER_STATE_RECORDING) - TriggerRecordingUpdate(); - } - } -} - -void CTvheadend::ParseRecordingDelete ( htsmsg_t *msg ) -{ - uint32_t u32; - - /* Validate */ - if (htsmsg_get_u32(msg, "id", &u32)) - { - tvherror("malformed dvrEntryDelete"); - return; - } - tvhdebug("delete recording %u", u32); - - /* Erase */ - m_recordings.erase(u32); - - /* Update */ - TriggerTimerUpdate(); - TriggerRecordingUpdate(); -} - -bool CTvheadend::ParseEvent ( htsmsg_t *msg, SEvent &evt ) -{ - const char *str; - uint32_t u32, id, channel; - int64_t s64, start, stop; - - /* Recordings complete */ - SyncDvrCompleted(); - - /* Validate */ - if (htsmsg_get_u32(msg, "eventId", &id) || - htsmsg_get_u32(msg, "channelId", &channel) || - htsmsg_get_s64(msg, "start", &start) || - htsmsg_get_s64(msg, "stop", &stop) || - (str = htsmsg_get_str(msg, "title")) == NULL) - { - tvherror("malformed eventUpdate message"); - return false; - } - - evt.id = id; - evt.channel = channel; - evt.start = (time_t)start; - evt.stop = (time_t)stop; - evt.title = str; - - if ((str = htsmsg_get_str(msg, "summary")) != NULL) - evt.summary = str; - if ((str = htsmsg_get_str(msg, "description")) != NULL) - evt.desc = str; - if ((str = htsmsg_get_str(msg, "image")) != NULL) - evt.image = str; - if (!htsmsg_get_u32(msg, "nextEventId", &u32)) - evt.next = u32; - if (!htsmsg_get_u32(msg, "contentType", &u32)) - evt.content = u32; - if (!htsmsg_get_u32(msg, "starRating", &u32)) - evt.stars = u32; - if (!htsmsg_get_u32(msg, "ageRating", &u32)) - evt.age = u32; - if (!htsmsg_get_s64(msg, "firstAired", &s64)) - evt.aired = (time_t)s64; - - /* Add optional recording link */ - for (SRecordings::const_iterator it = m_recordings.begin(); it != m_recordings.end(); ++it) - { - if (it->second.eventId == evt.id) - { - evt.recordingId = evt.id; - break; - } - } - - return true; -} - -void CTvheadend::ParseEventUpdate ( htsmsg_t *msg ) -{ - bool update = false; - SEvent tmp; - - /* Parse */ - if (!ParseEvent(msg, tmp)) - return; - - /* Get event handle */ - SSchedule &sched = m_schedules[tmp.channel]; - SEvent &evt = sched.events[tmp.id]; - sched.channel = tmp.channel; - evt.id = tmp.id; - evt.del = false; - - /* Store */ - UPDATE(evt.title, tmp.title); - UPDATE(evt.start, tmp.start); - UPDATE(evt.stop, tmp.stop); - UPDATE(evt.channel, tmp.channel); - UPDATE(evt.summary, tmp.summary); - UPDATE(evt.desc, tmp.desc); - UPDATE(evt.image, tmp.image); - UPDATE(evt.next, tmp.next); - UPDATE(evt.content, tmp.content); - UPDATE(evt.stars, tmp.stars); - UPDATE(evt.age, tmp.age); - UPDATE(evt.aired, tmp.aired); - - /* Update */ - if (update) - { - tvhtrace("event id:%d channel:%d start:%d stop:%d title:%s desc:%s", - evt.id, evt.channel, (int)evt.start, (int)evt.stop, - evt.title.c_str(), evt.desc.c_str()); - - if (m_asyncState.GetState() > ASYNC_EPG) - TriggerEpgUpdate(tmp.channel); - } -} - -void CTvheadend::ParseEventDelete ( htsmsg_t *msg ) -{ - uint32_t u32; - - /* Validate */ - if (htsmsg_get_u32(msg, "eventId", &u32)) - { - tvherror("malformed eventDelete"); - return; - } - tvhtrace("delete event %u", u32); - - /* Erase */ - SSchedules::iterator sit; - for (sit = m_schedules.begin(); sit != m_schedules.end(); ++sit) - { - // Find the event so we can get the channel number - SEvents::iterator eit = sit->second.events.find(u32); - - if (eit != sit->second.events.end()) - { - tvhtrace("deleted event %d from channel %d", u32, sit->second.channel); - sit->second.events.erase(eit); - TriggerEpgUpdate(sit->second.channel); - return; - } - } -} - -uint32_t CTvheadend::GetNextUnnumberedChannelNumber() -{ - static uint32_t number = UNNUMBERED_CHANNEL; - return number++; -} diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/src/Tvheadend.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/src/Tvheadend.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.hts/src/Tvheadend.h 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.hts/src/Tvheadend.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,563 +0,0 @@ -#pragma once - -/* - * Copyright (C) 2005-2014 Team XBMC - * http://www.xbmc.org - * - * 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 - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This Program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * 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, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * http://www.gnu.org/copyleft/gpl.html - * - */ - -#include "client.h" -#include "platform/sockets/tcp.h" -#include "platform/threads/threads.h" -#include "platform/threads/mutex.h" -#include "platform/util/buffer.h" -#include "xbmc_codec_types.h" -#include "xbmc_stream_utils.hpp" -#include "libXBMC_addon.h" -#include "CircBuffer.h" -#include "Settings.h" -#include "HTSPTypes.h" -#include "AsyncState.h" -#include -#include -#include -#include - -extern "C" { -#include -#include "libhts/htsmsg.h" -} - -/* - * Miscellaneous - */ -#if defined(__GNUC__) -#define _unused(x) x __attribute__((unused)) -#else -#define _unused(x) x -#endif - -/* - * Configuration defines - */ -#define HTSP_API_VERSION (12) -#define FAST_RECONNECT_ATTEMPTS (5) -#define FAST_RECONNECT_INTERVAL (500) // ms -#define UNNUMBERED_CHANNEL (10000) -#define INVALID_SEEKTIME (-1) - -/* - * Log wrappers - */ -#define tvhdebug(...) tvhlog(ADDON::LOG_DEBUG, ##__VA_ARGS__) -#define tvhinfo(...) tvhlog(ADDON::LOG_INFO, ##__VA_ARGS__) -#define tvherror(...) tvhlog(ADDON::LOG_ERROR, ##__VA_ARGS__) -#define tvhtrace(...) if (tvh->GetSettings().bTraceDebug) tvhlog(ADDON::LOG_DEBUG, ##__VA_ARGS__) -static inline void tvhlog ( ADDON::addon_log_t lvl, const char *fmt, ... ) -{ - char buf[16384]; - size_t c = sprintf(buf, "pvr.hts - "); - va_list va; - va_start(va, fmt); - vsnprintf(buf + c, sizeof(buf) - c, fmt, va); - va_end(va); - XBMC->Log(lvl, "%s", buf); -} - -/* - * Forward decleration of classes - */ -class CHTSPConnection; -class CHTSPDemuxer; -class CHTSPVFS; -class CHTSPResponse; -class CHTSPMessage; - -/* Typedefs */ -typedef std::map CHTSPResponseList; -typedef PLATFORM::SyncedBuffer CHTSPMessageQueue; - -/* - * HTSP Response handler - */ -class CHTSPResponse -{ -public: - CHTSPResponse(void); - ~CHTSPResponse(); - htsmsg_t *Get ( PLATFORM::CMutex &mutex, uint32_t timeout ); - void Set ( htsmsg_t *m ); -private: - PLATFORM::CCondition m_cond; - bool m_flag; - htsmsg_t *m_msg; -}; - -/* - * HTSP Message - */ -class CHTSPMessage -{ -public: - CHTSPMessage(std::string method = "", htsmsg_t *msg = NULL) - : m_method(method), m_msg(msg) - { - } - CHTSPMessage(const CHTSPMessage& msg) - : m_method(msg.m_method), m_msg(msg.m_msg) - { - msg.m_msg = NULL; - } - ~CHTSPMessage() - { - if (m_msg) - htsmsg_destroy(m_msg); - } - CHTSPMessage& operator=(const CHTSPMessage &msg) - { - if (this != &msg) - { - if (m_msg) - htsmsg_destroy(m_msg); - m_method = msg.m_method; - m_msg = msg.m_msg; - msg.m_msg = NULL; // ownership is passed - } - return *this; - } - std::string m_method; - mutable htsmsg_t *m_msg; -}; - -/* - * HTSP Connection registration thread - */ -class CHTSPRegister - : public PLATFORM::CThread -{ - friend class CHTSPConnection; - -public: - CHTSPRegister ( CHTSPConnection *conn ); - ~CHTSPRegister ( void ); - -private: - CHTSPConnection *m_conn; - void *Process ( void ); -}; - -/* - * HTSP Connection - */ -class CHTSPConnection - : public PLATFORM::CThread -{ - friend class CHTSPRegister; - -public: - CHTSPConnection(); - ~CHTSPConnection(); - - void Disconnect ( void ); - - bool SendMessage0 ( const char *method, htsmsg_t *m ); - htsmsg_t *SendAndWait0 ( const char *method, htsmsg_t *m, int iResponseTimeout = -1); - htsmsg_t *SendAndWait ( const char *method, htsmsg_t *m, int iResponseTimeout = -1 ); - - inline int GetProtocol ( void ) const { return m_htspVersion; } - - CStdString GetWebURL ( const char *fmt, ... ); - - const char *GetServerName ( void ); - const char *GetServerVersion ( void ); - const char *GetServerString ( void ); - - bool HasCapability(const std::string &capability) const; - - inline bool IsConnected ( void ) const { return m_ready; } - bool WaitForConnection ( void ); - - inline PLATFORM::CMutex& Mutex ( void ) { return m_mutex; } - -private: - void* Process ( void ); - void Register ( void ); - bool ReadMessage ( void ); - bool SendHello ( void ); - bool SendAuth ( const CStdString &u, const CStdString &p ); - - PLATFORM::CTcpSocket *m_socket; - PLATFORM::CMutex m_mutex; - CHTSPRegister m_regThread; - PLATFORM::CCondition m_regCond; - bool m_ready; - uint32_t m_seq; - CStdString m_serverName; - CStdString m_serverVersion; - int m_htspVersion; - CStdString m_webRoot; - void* m_challenge; - int m_challengeLen; - - CHTSPResponseList m_messages; - std::vector m_capabilities; -}; - -/* - * HTSP Demuxer - live streams - */ -class CHTSPDemuxer -{ - friend class CTvheadend; - -public: - CHTSPDemuxer( CHTSPConnection &conn ); - ~CHTSPDemuxer(); - - bool ProcessMessage ( const char *method, htsmsg_t *m ); - void Connected ( void ); - - inline time_t GetTimeshiftTime() const - { - return (time_t)m_timeshiftStatus.shift; - } - -private: - PLATFORM::CMutex m_mutex; - CHTSPConnection &m_conn; - PLATFORM::SyncedBuffer m_pktBuffer; - ADDON::XbmcStreamProperties m_streams; - std::map m_streamStat; - int64_t m_seekTime; - PLATFORM::CCondition m_seekCond; - SSourceInfo m_sourceInfo; - SQuality m_signalInfo; - STimeshiftStatus m_timeshiftStatus; - SSubscription m_subscription; - - void Close0 ( void ); - void Abort0 ( void ); - bool Open ( const PVR_CHANNEL &chn ); - void Close ( void ); - DemuxPacket *Read ( void ); - void Flush ( void ); - void Abort ( void ); - bool Seek ( int time, bool backwards, double *startpts ); - void Speed ( int speed ); - int CurrentId ( void ); - PVR_ERROR CurrentStreams ( PVR_STREAM_PROPERTIES *streams ); - PVR_ERROR CurrentSignal ( PVR_SIGNAL_STATUS &sig ); - - void SendSubscribe ( bool force = false ); - void SendUnsubscribe ( void ); - void SendSpeed ( bool force = false ); - - void ParseMuxPacket ( htsmsg_t *m ); - void ParseSourceInfo ( htsmsg_t *m ); - void ParseSubscriptionStart ( htsmsg_t *m ); - void ParseSubscriptionStop ( htsmsg_t *m ); - void ParseSubscriptionSkip ( htsmsg_t *m ); - void ParseSubscriptionSpeed ( htsmsg_t *m ); - void ParseSubscriptionStatus ( htsmsg_t *m ); - void ParseQueueStatus ( htsmsg_t *m ); - void ParseSignalStatus ( htsmsg_t *m ); - void ParseTimeshiftStatus ( htsmsg_t *m ); -}; - -/* - * HTSP VFS - recordings - */ -class CHTSPVFS - : public PLATFORM::CThread -{ - friend class CTvheadend; - -public: - CHTSPVFS ( CHTSPConnection &conn ); - ~CHTSPVFS (); - - void Connected ( void ); - -private: - CHTSPConnection &m_conn; - CStdString m_path; - uint32_t m_fileId; - int64_t m_offset; - - CCircBuffer m_buffer; - PLATFORM::CMutex m_mutex; - bool m_bHasData; - PLATFORM::CCondition m_condition; - size_t m_currentReadLength; - - bool Open ( const PVR_RECORDING &rec ); - void Close ( void ); - int Read ( unsigned char *buf, unsigned int len ); - long long Seek ( long long pos, int whence ); - long long Tell ( void ); - long long Size ( void ); - void Reset ( void ); - - void *Process(); - - bool SendFileOpen ( bool force = false ); - void SendFileClose ( void ); - bool SendFileRead ( void ); - long long SendFileSeek ( int64_t pos, int whence, bool force = false ); - - static const int MAX_BUFFER_SIZE = 5242880; // 5 MB - static const int INITAL_READ_LENGTH = 131072; // 128 KB - static const int MAX_READ_LENGTH = 1048576; // 1 MB - -}; - -/* - * Root object for Tvheadend connection - */ -class CTvheadend - : public PLATFORM::CThread -{ -public: - CTvheadend(tvheadend::Settings settings); - ~CTvheadend(); - - void Start ( void ); - - void Disconnected ( void ); - bool Connected ( void ); - bool ProcessMessage ( const char *method, htsmsg_t *msg ); - - inline const tvheadend::Settings& GetSettings() { - return m_settings; - }; - - PVR_ERROR GetDriveSpace ( long long *total, long long *used ); - - int GetTagCount ( void ); - PVR_ERROR GetTags ( ADDON_HANDLE handle ); - PVR_ERROR GetTagMembers ( ADDON_HANDLE handle, - const PVR_CHANNEL_GROUP &group ); - - int GetChannelCount ( void ); - PVR_ERROR GetChannels ( ADDON_HANDLE handle, bool radio ); - - int GetRecordingCount ( void ); - PVR_ERROR GetRecordings ( ADDON_HANDLE handle ); - PVR_ERROR GetRecordingEdl ( const PVR_RECORDING &rec, PVR_EDL_ENTRY edl[], - int *num ); - PVR_ERROR DeleteRecording ( const PVR_RECORDING &rec ); - PVR_ERROR RenameRecording ( const PVR_RECORDING &rec ); - int GetTimerCount ( void ); - PVR_ERROR GetTimers ( ADDON_HANDLE handle ); - PVR_ERROR AddTimer ( const PVR_TIMER &tmr ); - PVR_ERROR DeleteTimer ( const PVR_TIMER &tmr, bool force ); - PVR_ERROR UpdateTimer ( const PVR_TIMER &tmr ); - - PVR_ERROR GetEpg ( ADDON_HANDLE handle, const PVR_CHANNEL &chn, - time_t start, time_t end ); - -private: - uint32_t GetNextUnnumberedChannelNumber(); - - PLATFORM::CMutex m_mutex; - const tvheadend::Settings m_settings; - - CHTSPConnection m_conn; - CHTSPDemuxer m_dmx; - CHTSPVFS m_vfs; - - CHTSPMessageQueue m_queue; - - SChannels m_channels; - STags m_tags; - SRecordings m_recordings; - SSchedules m_schedules; - - SHTSPEventList m_events; - - AsyncState m_asyncState; - - CStdString GetImageURL ( const char *str ); - - /* - * Message processing - */ - void *Process ( void ); - - /* - * Event handling - */ - inline void TriggerChannelGroupsUpdate ( void ) - { - m_events.push_back(SHTSPEvent(HTSP_EVENT_TAG_UPDATE)); - } - inline void TriggerChannelUpdate ( void ) - { - m_events.push_back(SHTSPEvent(HTSP_EVENT_CHN_UPDATE)); - } - inline void TriggerRecordingUpdate ( void ) - { - m_events.push_back(SHTSPEvent(HTSP_EVENT_REC_UPDATE)); - } - inline void TriggerTimerUpdate ( void ) - { - m_events.push_back(SHTSPEvent(HTSP_EVENT_REC_UPDATE)); - } - inline void TriggerEpgUpdate ( uint32_t idx ) - { - SHTSPEvent event = SHTSPEvent(HTSP_EVENT_EPG_UPDATE, idx); - - if (std::find(m_events.begin(), m_events.end(), event) == m_events.end()) - m_events.push_back(event); - } - - /* - * Epg Handling - */ - void TransferEvent ( ADDON_HANDLE handle, const SEvent &event ); - - /* - * Message sending - */ - PVR_ERROR SendDvrDelete ( uint32_t id, const char *method ); - PVR_ERROR SendDvrUpdate ( htsmsg_t *m ); - - /* - * Channel/Tags/Recordings/Events - */ - void SyncChannelsCompleted ( void ); - void SyncDvrCompleted ( void ); - void SyncEpgCompleted ( void ); - void SyncCompleted ( void ); - void ParseTagUpdate ( htsmsg_t *m ); - void ParseTagDelete ( htsmsg_t *m ); - void ParseChannelUpdate ( htsmsg_t *m ); - void ParseChannelDelete ( htsmsg_t *m ); - void ParseRecordingUpdate ( htsmsg_t *m ); - void ParseRecordingDelete ( htsmsg_t *m ); - void ParseEventUpdate ( htsmsg_t *m ); - void ParseEventDelete ( htsmsg_t *m ); - bool ParseEvent ( htsmsg_t *msg, SEvent &evt ); - -public: - /* - * Connection (pass-thru) - */ - bool WaitForConnection ( void ) - { - PLATFORM::CLockObject lock(m_conn.Mutex()); - return m_conn.WaitForConnection(); - } - inline const char *GetServerName ( void ) - { - return m_conn.GetServerName(); - } - inline const char *GetServerVersion ( void ) - { - return m_conn.GetServerVersion(); - } - inline const char *GetServerString ( void ) - { - return m_conn.GetServerString(); - } - inline bool HasCapability(const std::string &capability) const - { - return m_conn.HasCapability(capability); - } - inline bool IsConnected ( void ) const - { - return m_conn.IsConnected(); - } - inline void Disconnect ( void ) - { - m_conn.Disconnect(); - } - - /* - * Demuxer (pass-thru) - */ - inline bool DemuxOpen ( const PVR_CHANNEL &chn ) - { - return m_dmx.Open(chn); - } - inline void DemuxClose ( void ) - { - m_dmx.Close(); - } - inline DemuxPacket *DemuxRead ( void ) - { - return m_dmx.Read(); - } - inline void DemuxFlush ( void ) - { - m_dmx.Flush(); - } - inline void DemuxAbort ( void ) - { - m_dmx.Abort(); - } - inline bool DemuxSeek ( int time, bool backward, double *startpts ) - { - return m_dmx.Seek(time, backward, startpts); - } - inline void DemuxSpeed ( int speed ) - { - return m_dmx.Speed(speed); - } - inline PVR_ERROR DemuxCurrentStreams ( PVR_STREAM_PROPERTIES *streams ) - { - return m_dmx.CurrentStreams(streams); - } - inline PVR_ERROR DemuxCurrentSignal ( PVR_SIGNAL_STATUS &sig ) - { - return m_dmx.CurrentSignal(sig); - } - inline time_t DemuxGetTimeshiftTime() const - { - return m_dmx.GetTimeshiftTime(); - } - - /* - * VFS (pass-thru) - */ - inline bool VfsOpen ( const PVR_RECORDING &rec ) - { - return m_vfs.Open(rec); - } - inline void VfsClose ( void ) - { - PLATFORM::CLockObject lock(m_conn.Mutex()); - m_vfs.Close(); - } - inline int VfsRead ( unsigned char *buf, unsigned int len ) - { - return m_vfs.Read(buf, len); - } - inline long long VfsSeek ( long long position, int whence ) - { - return m_vfs.Seek(position, whence); - } - inline long long VfsTell ( void ) - { - return m_vfs.Tell(); - } - inline long long VfsSize ( void ) - { - return m_vfs.Size(); - } -}; diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.iptvsimple/addon/addon.xml.in kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.iptvsimple/addon/addon.xml.in --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.iptvsimple/addon/addon.xml.in 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.iptvsimple/addon/addon.xml.in 2015-04-01 08:50:10.000000000 +0000 @@ -1,12 +1,12 @@ - + Kodi ПВР добавка за поддръжка на IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home - Complement PVR de Kodi per a al suport d'IPTV https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home + Complement d'Kodi PVR amb suport per IPTV https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Kodi PVR addon for IPTV support. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Ychwanegyn recordydd Kodi ar gyfer cefnogi IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Kodi PVR addon til IPTV support. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home @@ -47,13 +47,13 @@ Pasang-tambah PVR Kodi untuk sokongan IPTV https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Kodi PVR add-on voor IPTV ondersteuning. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Kodi PVR tillegg for IPTV støtte. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home - Klient TV dla IPTV. Więcej informacji o wtyczce: https://github.com/afedchin/xbmc-addon-iptvsimple/wiki/IPTV-Simple-Home + Klient TV dla IPTV. Więcej informacji o wtyczce: https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Addon PVR do Kodi para suporte IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Addon de PVR no Kodi com suporte a IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Modulul Kodi PVR pentru suport IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Kodi PVR аддон для поддержки IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Kodi PVR doplnok umožňujúci IPTV podporu. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home - Kodijev dodatek PVR s podporo za IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home + Kodi-jev dodatek PVR s podporo za IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home PVR-tillägg med IPTV-support för Kodi. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home IPTV desteği için Kodi PVR eklentisi. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Kodi PVR 插件需要 IPTV 支持。https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home @@ -87,7 +87,7 @@ IPTV Simple PVR Client menyokong senarai audio visual m3u, penstriman Live TV untuk IPTV simpele PVR cliënt ondersteunt m3u afspeellijsten, streaming van live TV voor multicast/unicast bronnen, luisteren naar radiozenders en EPG. IPTV Simple PVR klient støtter m3u spillelister, strømming av Live TV, lytting til radiokanaler og programguider. - Klient IPTV Simple obsługuje listy odtwarzania m3u, strumieniowanie kanałów radiowych i telewizyjnych ze źródeł pojedynczych i grupowych oraz funkcje przewodnika programów. + Klient IPTV Simple wspiera listy odtwarzania m3u, strumieniowanie kanałów radiowych i telewizyjnych ze źródeł pojedynczych i grupowych oraz funkcje przewodnika programów. Cliente PVR IPTV com suporte para listas de reprodução m3u, transmissão de TV em directo de fontes multidifusão/unidifusão, ouvir estações de rádio e EPG. O cliente de PVR IPTV Simple possuí suporte para listas m3u, streaming de tv ao vivo de fontes multicast/unicast, ouvir rádios e ainda possuí suporte a guia de programação eletrônica - EPG. PVR Client IPTV suporta liste m3u, redare TV în direct pentru surse de multicast/unicast, ascultare canale radio si EPG. diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.iptvsimple/addon/changelog.txt kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.iptvsimple/addon/changelog.txt --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.iptvsimple/addon/changelog.txt 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.iptvsimple/addon/changelog.txt 2015-04-01 08:50:10.000000000 +0000 @@ -1,10 +1,5 @@ -v1.10.1 -- language files from Transifex -- minor changes to conform with C++11 -- Updated to API v1.9.4 - v1.9.12 -- added getBackendHostname function +- platform fixes v1.9.10 - change library name to Kodi diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.iptvsimple/addon/resources/language/Tamil (India)/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.iptvsimple/addon/resources/language/Tamil (India)/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.iptvsimple/addon/resources/language/Tamil (India)/strings.po 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.iptvsimple/addon/resources/language/Tamil (India)/strings.po 1970-01-01 00:00:00.000000000 +0000 @@ -1,25 +0,0 @@ -# Kodi Media Center language file -# Addon Name: PVR IPTV Simple Client -# Addon id: pvr.iptvsimple -# Addon Provider: nightik -msgid "" -msgstr "" -"Project-Id-Version: XBMC Main\n" -"Report-Msgid-Bugs-To: http://trac.xbmc.org/\n" -"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Kodi Translation Team\n" -"Language-Team: Tamil (India) (http://www.transifex.com/projects/p/xbmc-main/language/ta_IN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ta_IN\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgctxt "#30000" -msgid "Location" -msgstr "இருப்பிடம்" - -msgctxt "#30010" -msgid "General" -msgstr "பொதுவானது" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.iptvsimple/project/VS2010Express/pvr.iptvsimple.vcxproj kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.iptvsimple/project/VS2010Express/pvr.iptvsimple.vcxproj --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.iptvsimple/project/VS2010Express/pvr.iptvsimple.vcxproj 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.iptvsimple/project/VS2010Express/pvr.iptvsimple.vcxproj 2015-04-01 08:50:10.000000000 +0000 @@ -104,12 +104,6 @@ {fe4573f6-a794-4ad3-b37f-49e51f1140e6} - - - - - - diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.iptvsimple/project/VS2010Express/pvr.iptvsimple.vcxproj.filters kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.iptvsimple/project/VS2010Express/pvr.iptvsimple.vcxproj.filters --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.iptvsimple/project/VS2010Express/pvr.iptvsimple.vcxproj.filters 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.iptvsimple/project/VS2010Express/pvr.iptvsimple.vcxproj.filters 2015-04-01 08:50:10.000000000 +0000 @@ -30,10 +30,4 @@ Header Files - - - - - - \ No newline at end of file diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.iptvsimple/src/client.cpp kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.iptvsimple/src/client.cpp --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.iptvsimple/src/client.cpp 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.iptvsimple/src/client.cpp 2015-04-01 08:50:10.000000000 +0000 @@ -336,11 +336,6 @@ return strConnectionString.c_str(); } -const char *GetBackendHostname(void) -{ - return ""; -} - PVR_ERROR GetDriveSpace(long long *iTotal, long long *iUsed) { *iTotal = 0; @@ -445,15 +440,15 @@ /** UNUSED API FUNCTIONS */ const char * GetLiveStreamURL(const PVR_CHANNEL &channel) { return ""; } bool CanPauseStream(void) { return false; } -int GetRecordingsAmount(bool deleted) { return -1; } -PVR_ERROR GetRecordings(ADDON_HANDLE handle, bool deleted) { return PVR_ERROR_NOT_IMPLEMENTED; } -PVR_ERROR OpenDialogChannelScan(void) { return PVR_ERROR_NOT_IMPLEMENTED; } +int GetRecordingsAmount(void) { return -1; } +PVR_ERROR GetRecordings(ADDON_HANDLE handle) { return PVR_ERROR_NOT_IMPLEMENTED; } +PVR_ERROR DialogChannelScan(void) { return PVR_ERROR_NOT_IMPLEMENTED; } 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 OpenDialogChannelSettings(const PVR_CHANNEL &channel) { return PVR_ERROR_NOT_IMPLEMENTED; } -PVR_ERROR OpenDialogChannelAdd(const PVR_CHANNEL &channel) { return PVR_ERROR_NOT_IMPLEMENTED; } +PVR_ERROR DialogChannelSettings(const PVR_CHANNEL &channel) { return PVR_ERROR_NOT_IMPLEMENTED; } +PVR_ERROR DialogAddChannel(const PVR_CHANNEL &channel) { return PVR_ERROR_NOT_IMPLEMENTED; } bool OpenRecordedStream(const PVR_RECORDING &recording) { return false; } void CloseRecordedStream(void) {} int ReadRecordedStream(unsigned char *pBuffer, unsigned int iBufferSize) { return 0; } @@ -487,6 +482,4 @@ time_t GetPlayingTime() { return 0; } time_t GetBufferTimeStart() { return 0; } time_t GetBufferTimeEnd() { return 0; } -PVR_ERROR UndeleteRecording(const PVR_RECORDING& recording) { return PVR_ERROR_NOT_IMPLEMENTED; } -PVR_ERROR DeleteAllRecordingsFromTrash() { return PVR_ERROR_NOT_IMPLEMENTED; } } diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/addon/addon.xml.in kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/addon/addon.xml.in --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/addon/addon.xml.in 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/addon/addon.xml.in 2015-04-01 08:50:10.000000000 +0000 @@ -1,13 +1,13 @@ - - + + Interfața Kodi pentru MediaPortal TV Server (versiunea ffmpeg + tsreader) Интерфейс Kodi для ТВ-сервера MediaPortal (версия ffmpeg + tsreader) Kodi rozhranie pre MediaPortal TV server (verzia ffmpeg + tsreader) - Kodijev vmesnik za strežnik MediaPortal TV (ffmpeg + tsreader) + Kodi-jev vmesnik za MediaPortal TV strežnik (ffmpeg + tsreader) Kodi frontend för MediaPortal TV-server (ffmpeg + tsreader versionen) MediaPortal TV Sunucusu için Kodi ön ucu (ffmpeg + tsreader sürümü) Накладка Kodi для сервера ТВ MediaPortal'у (версія ffmpeg + tsreader) @@ -102,7 +102,7 @@ Bahagian hadapan Pelayan TV MediaPortal; menyokong penstirman TV Langsung & Rakaman, mendengar saluran Radio, EPG dan Pemasa. Tambahan ini gabungkan tambahan ffmpef fan tsreader terdahulu. MediaPortal TV Server frontend. Ondersteunt het bekijken van Live TV en opnames, het luisteren van radio zenders, het tonen van de EPG en het inplannen/beheren van nieuwe opnames (Timers). Deze addon combineert de voorgaande "ffmpeg" en "tsreader" addons. MediaPortal TV Server skall. Støtter streaming av Live TV og opptak, Lytte til Radio kanaler, EPG og Timere. Dette tillegget kombinererer de tidligere ffmpeg og tsreader tilleggene. - Klient serwera TV MediaPortal obsługuje strumieniowanie kanałów radiowych i telewizyjnych, nagrywanie natychmiastowe i wg harmonogramu oraz funkcje przewodnika programów. Klient ten łączy w sobie funkcje wcześniejszych klientów ffmpeg i tsreader. + Klient serwera TV MediaPortal wspiera strumieniowanie kanałów radiowych i telewizyjnych, nagrywanie natychmiastowe i wg harmonogramu oraz funkcje przewodnika programów. Klient ten łączy w sobie funkcje wcześniejszych klientów ffmpeg i tsreader. Frontend para o MediaPortal TV Server. Suporta transmissão de TV em directo e gravações, ouvir estações de Rádio, EPG e Temporizadores. Este add-on combina os antigos add-ons ffmpeg e tsreader. Frontend do Servidor de TV do MediaPortal. Suporta streaming de TV Ao Vivo e Gravações, escutar canais de rádio, EPG e Agendamentos. Este addon combina os antigos addons ffmpeg e tsreader Interfața MediaPortal TV Server. Suportă streaming TV live & Înregistrări, ascultarea posturilor de radio, EPG și Înregistrare programată. Acest plugin combină ex addons ffmpeg si tsreader. diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/addon/changelog.txt kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/addon/changelog.txt --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/addon/changelog.txt 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/addon/changelog.txt 2015-04-01 08:50:10.000000000 +0000 @@ -1,22 +1,5 @@ -v1.10.1 -- Updated to PVR API v1.9.4 -- Updated to GUI API v5.8.0 - -v1.9.27 -- Updated language files from Transifex - -v1.9.26 -- Updated language files from Transifex -- Minor changes to conform with C++11 - -v1.9.25 -- Updated language files from Transifex - -v1.9.24 -- added getBackendHostname function - v1.9.23 -- Fixed mime-type for MPEG-TS +- platform fixes v1.9.22 - Updated language files from Transifex diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/addon/resources/language/Amharic/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/addon/resources/language/Amharic/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/addon/resources/language/Amharic/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/addon/resources/language/Amharic/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -20,10 +20,6 @@ msgid "Include Radio" msgstr "ሬዲዮ ማካተቻ" -msgctxt "#30005" -msgid "Connect timeout (s)" -msgstr "ግንኙነት ጊዜው አልፏል (ሰ)" - msgctxt "#30040" msgid "Connection" msgstr "ግንኙነት " diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/addon/resources/language/Basque/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/addon/resources/language/Basque/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/addon/resources/language/Basque/strings.po 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/addon/resources/language/Basque/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -16,10 +16,6 @@ "Language: eu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -msgctxt "#30003" -msgid "Include Radio" -msgstr "Irratia Barne Hartu" - msgctxt "#30042" msgid "Playback" msgstr "Erreprodukzioa" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/addon/resources/language/Bulgarian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/addon/resources/language/Bulgarian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/addon/resources/language/Bulgarian/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/addon/resources/language/Bulgarian/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -38,15 +38,15 @@ msgctxt "#30005" msgid "Connect timeout (s)" -msgstr "Време на изчакване при свързване (с)" +msgstr "Таймаут при свързване (с)" msgctxt "#30006" msgid "Import only TV Channels from group" -msgstr "Внеси само ТВ каналите от групата" +msgstr "Импортирай само ТВ каналите от групата" msgctxt "#30007" msgid "Import only Radio Channels from group" -msgstr "Внеси само радио каналите от групата" +msgstr "Импортирай само радио каналите от групата" msgctxt "#30008" msgid "Convert hostname to IP-adress" @@ -54,7 +54,7 @@ msgctxt "#30009" msgid "EPG: Read genre strings (slow)" -msgstr "ЕПС: получавай имената на жанровете (бавно)" +msgstr "ЕПС: получавай жанровете (бавно)" msgctxt "#30010" msgid "Wait time after tuning a channel (ms)" @@ -62,7 +62,7 @@ msgctxt "#30015" msgid "Streaming method" -msgstr "Метод на поточно излъчване" +msgstr "Стрийминг метод" msgctxt "#30016" msgid "Windows user account (SMB)" @@ -106,7 +106,7 @@ msgctxt "#30061" msgid "Channel is scrambled" -msgstr "Каналът е кодиран" +msgstr "Канала е кодиран" msgctxt "#30062" msgid "No video or audio detected" @@ -122,7 +122,7 @@ msgctxt "#30065" msgid "Unable to start graph" -msgstr "Неуспешно стартиране на графиката" +msgstr "Неуспешно стартиране на на графиката" msgctxt "#30066" msgid "Unknown channel" @@ -134,7 +134,7 @@ msgctxt "#30068" msgid "Channel is not mapped to any card" -msgstr "Каналът не е свързан към нито една карта" +msgstr "Канала не е свързан към нито една карта" msgctxt "#30069" msgid "Card is disabled" @@ -164,18 +164,10 @@ msgid "No PMT found" msgstr "PMT не е намерена" -msgctxt "#30100" -msgid "Schedule settings" -msgstr "Настройки на графика" - msgctxt "#30101" msgid "Frequency" msgstr "Честота" -msgctxt "#30102" -msgid "Airtime" -msgstr "Време на излъчване" - msgctxt "#30103" msgid "Channels" msgstr "Канали" @@ -184,41 +176,9 @@ msgid "Keep" msgstr "Запази" -msgctxt "#30105" -msgid "Record minutes before start" -msgstr "Минути на записване преди началото" - -msgctxt "#30106" -msgid "Record minutes after end" -msgstr "Минути на записване след края" - msgctxt "#30110" msgid "Record Once" -msgstr "Записване само веднъж" - -msgctxt "#30111" -msgid "Record Daily (This program)" -msgstr "Записване ежедневно (това предаване)" - -msgctxt "#30112" -msgid "Record Weekly" -msgstr "Записване ежеседмично" - -msgctxt "#30113" -msgid "Record Weekends" -msgstr "Записване през събота и неделя" - -msgctxt "#30114" -msgid "Record Week Days" -msgstr "Записване през дните от седмицата" - -msgctxt "#30120" -msgid "This time" -msgstr "Този път" - -msgctxt "#30121" -msgid "Anytime" -msgstr "Всеки път" +msgstr "Запис само веднъж" msgctxt "#30125" msgid "This Channel" @@ -228,14 +188,6 @@ msgid "Any Channel" msgstr "Всеки канал" -msgctxt "#30130" -msgid "Until space needed" -msgstr "Докато няма недостиг на място" - -msgctxt "#30131" -msgid "Until Watched" -msgstr "Докато не са изгледани" - msgctxt "#30132" msgid "Days" msgstr "Дни" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/addon/resources/language/Catalan/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/addon/resources/language/Catalan/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/addon/resources/language/Catalan/strings.po 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/addon/resources/language/Catalan/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -22,7 +22,7 @@ msgctxt "#30001" msgid "Mediaportal Kodi plugin Port" -msgstr "Port del connector per al Kodi del MediaPortal" +msgstr "Port del connector per l'Kodi del MediaPortal" msgctxt "#30002" msgid "Free-to-air only" @@ -180,30 +180,10 @@ msgid "Keep" msgstr "Mantenir" -msgctxt "#30110" -msgid "Record Once" -msgstr "Grava un cop" - -msgctxt "#30112" -msgid "Record Weekly" -msgstr "Grava setmanalment" - -msgctxt "#30120" -msgid "This time" -msgstr "Aquest cop" - msgctxt "#30121" msgid "Anytime" msgstr "En qualsevol moment" -msgctxt "#30125" -msgid "This Channel" -msgstr "Aquest canal" - -msgctxt "#30126" -msgid "Any Channel" -msgstr "Qualsevol canal" - msgctxt "#30132" msgid "Days" msgstr "Dies" @@ -211,7 +191,3 @@ msgctxt "#30133" msgid "Always" msgstr "Sempre" - -msgctxt "#30136" -msgid "Kodi default" -msgstr "Per defecte a Kodi" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/addon/resources/language/Icelandic/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/addon/resources/language/Icelandic/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/addon/resources/language/Icelandic/strings.po 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/addon/resources/language/Icelandic/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -164,10 +164,6 @@ msgid "No PMT found" msgstr "Engin PMT fannst" -msgctxt "#30100" -msgid "Schedule settings" -msgstr "Stillingar upptökuplans" - msgctxt "#30101" msgid "Frequency" msgstr "Tíðni" @@ -184,58 +180,18 @@ msgid "Keep" msgstr "Halda" -msgctxt "#30105" -msgid "Record minutes before start" -msgstr "Taka upp mínútur fyrir upphaf" - -msgctxt "#30106" -msgid "Record minutes after end" -msgstr "Taka upp mínútur eftir enda" - msgctxt "#30110" msgid "Record Once" msgstr "Taka upp einu sinni" -msgctxt "#30111" -msgid "Record Daily (This program)" -msgstr "Dagleg upptaka (þennan dagskrárlið)" - -msgctxt "#30112" -msgid "Record Weekly" -msgstr "Taka upp vikulega" - -msgctxt "#30113" -msgid "Record Weekends" -msgstr "Taka upp um helgar" - -msgctxt "#30114" -msgid "Record Week Days" -msgstr "Taka upp virka daga" - -msgctxt "#30120" -msgid "This time" -msgstr "Í þetta skipti" - msgctxt "#30121" msgid "Anytime" msgstr "Hvenær sem er" -msgctxt "#30125" -msgid "This Channel" -msgstr "Á þessari rás" - msgctxt "#30126" msgid "Any Channel" msgstr "Allar Rásir" -msgctxt "#30130" -msgid "Until space needed" -msgstr "Þangað til vantar pláss" - -msgctxt "#30131" -msgid "Until Watched" -msgstr "Þangað til búið er að horfa á" - msgctxt "#30132" msgid "Days" msgstr "Dagar" @@ -243,11 +199,3 @@ msgctxt "#30133" msgid "Always" msgstr "Alltaf" - -msgctxt "#30135" -msgid "Backend default" -msgstr "Sjálfgefið fyrir bakenda" - -msgctxt "#30136" -msgid "Kodi default" -msgstr "Sjálfgefið fyrir Kodi" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/addon/resources/language/Italian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/addon/resources/language/Italian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/addon/resources/language/Italian/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/addon/resources/language/Italian/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -228,14 +228,6 @@ msgid "Any Channel" msgstr "Qualunque canale" -msgctxt "#30130" -msgid "Until space needed" -msgstr "Fino a spazio necessario" - -msgctxt "#30131" -msgid "Until Watched" -msgstr "Fino a Guardato" - msgctxt "#30132" msgid "Days" msgstr "Giorni" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/addon/resources/language/Korean/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/addon/resources/language/Korean/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/addon/resources/language/Korean/strings.po 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/addon/resources/language/Korean/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -138,7 +138,7 @@ msgctxt "#30069" msgid "Card is disabled" -msgstr "카드 사용 안 함" +msgstr "카드 비활성화" msgctxt "#30070" msgid "Connection to slave failed" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/addon/resources/language/Macedonian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/addon/resources/language/Macedonian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/addon/resources/language/Macedonian/strings.po 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/addon/resources/language/Macedonian/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -30,7 +30,7 @@ msgctxt "#30003" msgid "Include Radio" -msgstr "Вклучи и радио" +msgstr "Вклучено Радио" msgctxt "#30004" msgid "Fast channel switching (don't stop timeshift)" @@ -38,15 +38,15 @@ msgctxt "#30005" msgid "Connect timeout (s)" -msgstr "Тајмаут при поврзување (сек)" +msgstr "Тајмаути на поврзување (с)" msgctxt "#30006" msgid "Import only TV Channels from group" -msgstr "Увези само ТВ канали од групата" +msgstr "Увези само ТВ канали од група" msgctxt "#30007" msgid "Import only Radio Channels from group" -msgstr "Увези само Радио канали од групата" +msgstr "Увези само Радио канали од група" msgctxt "#30008" msgid "Convert hostname to IP-adress" @@ -58,23 +58,23 @@ msgctxt "#30010" msgid "Wait time after tuning a channel (ms)" -msgstr "Време на чекање по префрлување на канал (ms)" +msgstr "Време на чекање по префрлување на канал (мс)" msgctxt "#30015" msgid "Streaming method" -msgstr "Метод на stream-ање" +msgstr "Метод на стримање" msgctxt "#30016" msgid "Windows user account (SMB)" -msgstr "Windows корисничко име (SMB)" +msgstr "Windows user account (SMB)" msgctxt "#30017" msgid "Windows password (SMB)" -msgstr "Windows лозинка (SMB)" +msgstr "Windows password (SMB)" msgctxt "#30018" msgid "Use RTSP streaming" -msgstr "Користи RTSP streaming" +msgstr "Користи RTSP стиминг" msgctxt "#30040" msgid "Connection" @@ -90,11 +90,11 @@ msgctxt "#30050" msgid "Your TVServerKodi version '%s' is too old. Please upgrade to '%s' or higher!" -msgstr "Твојот TVServerKodi верзија '%s' е престара. Надгради на '%s' или по нова!" +msgstr "Твојот TVServerKodi верзија '%s' е престара. Надгради на '%s' или по ново!" msgctxt "#30051" msgid "Your TVServerKodi version is too old. Please upgrade to '%s' or higher!" -msgstr "Твојата TVServerKodi верзија е престара. Надгради на '%s' или по нова!" +msgstr "Твојата TVServerKodi верзија е престара. Надгради на '%s' или по ново!" msgctxt "#30052" msgid "Recording playback failed. Empty URL of filename." @@ -122,7 +122,7 @@ msgctxt "#30065" msgid "Unable to start graph" -msgstr "Неможе да се стартува графата" +msgstr "Неможе да се стартува граф" msgctxt "#30066" msgid "Unknown channel" @@ -138,11 +138,11 @@ msgctxt "#30069" msgid "Card is disabled" -msgstr "Картата е оневозможена" +msgstr "Карта е оневозможена" msgctxt "#30070" msgid "Connection to slave failed" -msgstr "Конекцијата со slave-от е неуспешна" +msgstr "Конекција кон слејв неуспешна" msgctxt "#30071" msgid "Not the owner" @@ -150,7 +150,7 @@ msgctxt "#30072" msgid "Graph building failed" -msgstr "Неуспешна изградба на графата" +msgstr "Неуспешна изградба на граф" msgctxt "#30073" msgid "SW Encoder missing" @@ -158,84 +158,16 @@ msgctxt "#30074" msgid "No free disk space" -msgstr "Нема слободно место на дискот" +msgstr "нема слободно место на дискот" msgctxt "#30075" msgid "No PMT found" -msgstr "Нема пронајдено РМТ" - -msgctxt "#30100" -msgid "Schedule settings" -msgstr "Подеси го распоредот" - -msgctxt "#30101" -msgid "Frequency" -msgstr "Фреквенција" - -msgctxt "#30102" -msgid "Airtime" -msgstr "Време на емитување" +msgstr "нема најдено PMT" msgctxt "#30103" msgid "Channels" msgstr "Канали" -msgctxt "#30104" -msgid "Keep" -msgstr "Задржи" - -msgctxt "#30105" -msgid "Record minutes before start" -msgstr "Сними неколку минути пред почетокот" - -msgctxt "#30106" -msgid "Record minutes after end" -msgstr "Сними неколку минути после крајот" - -msgctxt "#30110" -msgid "Record Once" -msgstr "Сними еднаш" - -msgctxt "#30111" -msgid "Record Daily (This program)" -msgstr "Снимај секој ден (од оваа програма)" - -msgctxt "#30112" -msgid "Record Weekly" -msgstr "Снимај неделно" - -msgctxt "#30113" -msgid "Record Weekends" -msgstr "Снимај преку викенд" - -msgctxt "#30114" -msgid "Record Week Days" -msgstr "Снимај за работни денови" - -msgctxt "#30120" -msgid "This time" -msgstr "Овој пат" - -msgctxt "#30121" -msgid "Anytime" -msgstr "Било кога" - -msgctxt "#30125" -msgid "This Channel" -msgstr "Овој канал" - -msgctxt "#30126" -msgid "Any Channel" -msgstr "Било кој канал" - -msgctxt "#30130" -msgid "Until space needed" -msgstr "Се додека не е потребен простор" - -msgctxt "#30131" -msgid "Until Watched" -msgstr "Се додека не се изгледа" - msgctxt "#30132" msgid "Days" msgstr "денови" @@ -243,11 +175,3 @@ msgctxt "#30133" msgid "Always" msgstr "Секогаш" - -msgctxt "#30135" -msgid "Backend default" -msgstr "Основни подесувања на backend-от" - -msgctxt "#30136" -msgid "Kodi default" -msgstr "Основни подесувања на Kodi" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/addon/resources/language/Persian (Iran)/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/addon/resources/language/Persian (Iran)/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/addon/resources/language/Persian (Iran)/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/addon/resources/language/Persian (Iran)/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -20,14 +20,6 @@ msgid "Playback" msgstr "پخش" -msgctxt "#30103" -msgid "Channels" -msgstr "کانال ها" - -msgctxt "#30104" -msgid "Keep" -msgstr "حفظ شود" - msgctxt "#30132" msgid "Days" msgstr "روز" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/addon/resources/language/Serbian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/addon/resources/language/Serbian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/addon/resources/language/Serbian/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/addon/resources/language/Serbian/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -28,10 +28,6 @@ msgid "Playback" msgstr "Reprodukcija" -msgctxt "#30103" -msgid "Channels" -msgstr "Kanali" - msgctxt "#30132" msgid "Days" msgstr "dana" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/addon/resources/language/Slovenian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/addon/resources/language/Slovenian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/addon/resources/language/Slovenian/strings.po 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/addon/resources/language/Slovenian/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -22,7 +22,7 @@ msgctxt "#30001" msgid "Mediaportal Kodi plugin Port" -msgstr "Vrata vtičnika Mediaportal za Kodi" +msgstr "Vrata vtičnika Kodi za Mediaportal" msgctxt "#30002" msgid "Free-to-air only" @@ -90,11 +90,11 @@ msgctxt "#30050" msgid "Your TVServerKodi version '%s' is too old. Please upgrade to '%s' or higher!" -msgstr "Vaša različica TVServerKodija '%s' je prestara. Posodobite na '%s' ali novejše!" +msgstr "Vaša različica TVServerKodi-ja '%s' je prestara. Posodobite na '%s' ali novejše!" msgctxt "#30051" msgid "Your TVServerKodi version is too old. Please upgrade to '%s' or higher!" -msgstr "Vaša različica TVServerKodija je prestara. Posodobite na '%s' ali novejše!" +msgstr "Vaša različica TVServerKodi-ja je prestara. Posodobite na '%s' ali novejše!" msgctxt "#30052" msgid "Recording playback failed. Empty URL of filename." @@ -164,18 +164,10 @@ msgid "No PMT found" msgstr "PMT ni mogoče najti" -msgctxt "#30100" -msgid "Schedule settings" -msgstr "Nastavitve urnika" - msgctxt "#30101" msgid "Frequency" msgstr "Frekvenca" -msgctxt "#30102" -msgid "Airtime" -msgstr "Čas predvajanja" - msgctxt "#30103" msgid "Channels" msgstr "Programi" @@ -184,34 +176,10 @@ msgid "Keep" msgstr "Obdrži" -msgctxt "#30105" -msgid "Record minutes before start" -msgstr "Snemanje minut pred začetkom" - -msgctxt "#30106" -msgid "Record minutes after end" -msgstr "Snemanje minut po koncu" - msgctxt "#30110" msgid "Record Once" msgstr "Posnemi enkrat" -msgctxt "#30111" -msgid "Record Daily (This program)" -msgstr "Snemaj dnevno (ta program)" - -msgctxt "#30112" -msgid "Record Weekly" -msgstr "Snemaj tedensko" - -msgctxt "#30113" -msgid "Record Weekends" -msgstr "Snemanj ob vikendih" - -msgctxt "#30114" -msgid "Record Week Days" -msgstr "Snemaj med tednom" - msgctxt "#30120" msgid "This time" msgstr "Tokrat" @@ -220,22 +188,6 @@ msgid "Anytime" msgstr "Kadarkoli" -msgctxt "#30125" -msgid "This Channel" -msgstr "Ta program" - -msgctxt "#30126" -msgid "Any Channel" -msgstr "Katerikoli program" - -msgctxt "#30130" -msgid "Until space needed" -msgstr "Dokler se ne potrebuje prostora" - -msgctxt "#30131" -msgid "Until Watched" -msgstr "Do ogleda" - msgctxt "#30132" msgid "Days" msgstr "Dni" @@ -244,10 +196,6 @@ msgid "Always" msgstr "Vedno" -msgctxt "#30135" -msgid "Backend default" -msgstr "Privzeto za hrbtenico" - msgctxt "#30136" msgid "Kodi default" -msgstr "Privzeto za Kodi" +msgstr "Kodi privzeto" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/addon/resources/language/Spanish (Mexico)/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/addon/resources/language/Spanish (Mexico)/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/addon/resources/language/Spanish (Mexico)/strings.po 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/addon/resources/language/Spanish (Mexico)/strings.po 2015-04-01 08:50:10.000000000 +0000 @@ -20,10 +20,6 @@ msgid "Include Radio" msgstr "Incluir Radio" -msgctxt "#30005" -msgid "Connect timeout (s)" -msgstr "Tiempo para conectar agotado (s)" - msgctxt "#30016" msgid "Windows user account (SMB)" msgstr "Usuario de cuenta de Windows (SMB)" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/addon/resources/language/Tamil (India)/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/addon/resources/language/Tamil (India)/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/addon/resources/language/Tamil (India)/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/addon/resources/language/Tamil (India)/strings.po 1970-01-01 00:00:00.000000000 +0000 @@ -1,37 +0,0 @@ -# Kodi Media Center language file -# Addon Name: MediaPortal PVR Client -# Addon id: pvr.mediaportal.tvserver -# Addon Provider: Marcel Groothuis -msgid "" -msgstr "" -"Project-Id-Version: XBMC Main\n" -"Report-Msgid-Bugs-To: http://trac.xbmc.org/\n" -"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Kodi Translation Team\n" -"Language-Team: Tamil (India) (http://www.transifex.com/projects/p/xbmc-main/language/ta_IN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ta_IN\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgctxt "#30042" -msgid "Playback" -msgstr "பின்னணி" - -msgctxt "#30103" -msgid "Channels" -msgstr "சேனல்கள்" - -msgctxt "#30104" -msgid "Keep" -msgstr "வை" - -msgctxt "#30132" -msgid "Days" -msgstr "நாட்கள்" - -msgctxt "#30133" -msgid "Always" -msgstr "எப்போதும்" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/Makefile.am kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/Makefile.am --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/Makefile.am 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/Makefile.am 2015-04-01 08:50:10.000000000 +0000 @@ -14,7 +14,7 @@ include ../Makefile.include.am -AM_CPPFLAGS+=-Isrc +INCLUDES+=-Isrc libmediaportal_addon_la_SOURCES = src/Cards.cpp \ src/channels.cpp \ diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/project/VS2010Express/XBMC_MediaportalTVserver.vcxproj kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/project/VS2010Express/XBMC_MediaportalTVserver.vcxproj --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/project/VS2010Express/XBMC_MediaportalTVserver.vcxproj 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/project/VS2010Express/XBMC_MediaportalTVserver.vcxproj 2015-04-01 08:50:10.000000000 +0000 @@ -184,12 +184,6 @@ - - - - - - diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/project/VS2010Express/XBMC_MediaportalTVserver.vcxproj.filters kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/project/VS2010Express/XBMC_MediaportalTVserver.vcxproj.filters --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/project/VS2010Express/XBMC_MediaportalTVserver.vcxproj.filters 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/project/VS2010Express/XBMC_MediaportalTVserver.vcxproj.filters 2015-04-01 08:50:10.000000000 +0000 @@ -206,10 +206,4 @@ Header Files - - - - - - \ No newline at end of file diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/src/Cards.cpp kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/src/Cards.cpp --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/src/Cards.cpp 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/src/Cards.cpp 2015-04-01 08:50:10.000000000 +0000 @@ -24,7 +24,6 @@ #include "client.h" #include "DateTime.h" -using namespace std; using namespace ADDON; bool CCards::ParseLines(vector& lines) @@ -125,4 +124,4 @@ card.IdCard = -1; return false; -} +} \ No newline at end of file diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/src/Cards.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/src/Cards.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/src/Cards.h 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/src/Cards.h 2015-04-01 08:50:10.000000000 +0000 @@ -22,6 +22,7 @@ #include #include "DateTime.h" +using namespace std; /** * MediaPortal TVServer card settings ("card" table in the database) @@ -29,18 +30,18 @@ typedef struct Card { int IdCard; - std::string DevicePath; - std::string Name; + string DevicePath; + string Name; int Priority; bool GrabEPG; MPTV::CDateTime LastEpgGrab; - std::string RecordingFolder; - std::string RecordingFolderUNC; + string RecordingFolder; + string RecordingFolderUNC; int IdServer; bool Enabled; int CamType; - std::string TimeshiftFolder; - std::string TimeshiftFolderUNC; + string TimeshiftFolder; + string TimeshiftFolderUNC; int RecordingFormat; int DecryptLimit; bool Preload; @@ -49,7 +50,7 @@ bool StopGraph; } Card; -class CCards: public std::vector +class CCards: public vector { public: @@ -60,7 +61,7 @@ * \param lines Vector with response lines * \return True on success, False on failure */ - bool ParseLines(std::vector& lines); + bool ParseLines(vector& lines); /** * \brief Return the data for the card with the given id diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/src/channels.cpp kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/src/channels.cpp --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/src/channels.cpp 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/src/channels.cpp 2015-04-01 08:50:11.000000000 +0000 @@ -38,7 +38,7 @@ bool cChannel::Parse(const std::string& data) { - std::vector fields; + vector fields; Tokenize(data, fields, "|"); diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/src/client.cpp kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/src/client.cpp --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/src/client.cpp 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/src/client.cpp 2015-04-01 08:50:11.000000000 +0000 @@ -471,7 +471,6 @@ pCapabilities->bSupportsEPG = true; pCapabilities->bSupportsRecordings = true; - pCapabilities->bSupportsRecordingsUndelete = false; pCapabilities->bSupportsTimers = true; pCapabilities->bSupportsTV = true; pCapabilities->bSupportsRadio = g_bRadioEnabled; @@ -524,14 +523,6 @@ return "addon error!"; } -//-- GetBackendHostname ------------------------------------------------------- -// Return a String with the backend host name -//----------------------------------------------------------------------------- -const char * GetBackendHostname(void) -{ - return g_szHostname.c_str(); -} - //-- GetDriveSpace ------------------------------------------------------------ // Return the Total and Free Drive space on the PVR Backend //----------------------------------------------------------------------------- @@ -551,7 +542,7 @@ return g_client->GetBackendTime(localTime, gmtOffset); } -PVR_ERROR OpenDialogChannelScan() +PVR_ERROR DialogChannelScan() { return PVR_ERROR_NOT_IMPLEMENTED; } @@ -603,12 +594,12 @@ return PVR_ERROR_NOT_IMPLEMENTED; } -PVR_ERROR OpenDialogChannelSettings(const PVR_CHANNEL& UNUSED(channelinfo)) +PVR_ERROR DialogChannelSettings(const PVR_CHANNEL& UNUSED(channelinfo)) { return PVR_ERROR_NOT_IMPLEMENTED; } -PVR_ERROR OpenDialogChannelAdd(const PVR_CHANNEL& UNUSED(channelinfo)) +PVR_ERROR DialogAddChannel(const PVR_CHANNEL& UNUSED(channelinfo)) { return PVR_ERROR_NOT_IMPLEMENTED; } @@ -645,7 +636,7 @@ /*******************************************/ /** PVR Recording Functions **/ -int GetRecordingsAmount(bool deleted) +int GetRecordingsAmount(void) { if (!g_client) return 0; @@ -653,7 +644,7 @@ return g_client->GetNumRecordings(); } -PVR_ERROR GetRecordings(ADDON_HANDLE handle, bool deleted) +PVR_ERROR GetRecordings(ADDON_HANDLE handle) { if (!g_client) return PVR_ERROR_SERVER_ERROR; @@ -911,6 +902,4 @@ time_t GetPlayingTime() { return 0; } time_t GetBufferTimeStart() { return 0; } time_t GetBufferTimeEnd() { return 0; } -PVR_ERROR UndeleteRecording(const PVR_RECORDING& recording) { return PVR_ERROR_NOT_IMPLEMENTED; } -PVR_ERROR DeleteAllRecordingsFromTrash() { return PVR_ERROR_NOT_IMPLEMENTED; } } //end extern "C" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/src/epg.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/src/epg.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/src/epg.h 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/src/epg.h 2015-04-01 08:50:11.000000000 +0000 @@ -31,24 +31,25 @@ #include "GenreTable.h" #include "DateTime.h" +using namespace std; class cEpg { private: unsigned int m_uid; - std::string m_title; - std::string m_shortText; - std::string m_description; + string m_title; + string m_shortText; + string m_description; MPTV::CDateTime m_startTime; MPTV::CDateTime m_endTime; MPTV::CDateTime m_originalAirDate; int m_duration; - std::string m_genre; + string m_genre; int m_genre_type; int m_genre_subtype; int m_episodeNumber; - std::string m_episodePart; - std::string m_episodeName; + string m_episodePart; + string m_episodeName; int m_seriesNumber; int m_starRating; int m_parentalRating; @@ -59,7 +60,7 @@ virtual ~cEpg(); void Reset(); - bool ParseLine(std::string& data); + bool ParseLine(string& data); int UniqueId(void) const { return m_uid; } time_t StartTime(void) const; time_t EndTime(void) const; diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/src/lib/tsreader/DeMultiplexer.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/src/lib/tsreader/DeMultiplexer.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/src/lib/tsreader/DeMultiplexer.h 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/src/lib/tsreader/DeMultiplexer.h 2015-04-01 08:50:11.000000000 +0000 @@ -39,6 +39,7 @@ #include "PatParser.h" #include "platform/threads/mutex.h" +using namespace std; class CTsReader; class CDeMultiplexer : public CPacketSync, public IPatParserCallback diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/src/lib/tsreader/PatParser.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/src/lib/tsreader/PatParser.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/src/lib/tsreader/PatParser.h 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/src/lib/tsreader/PatParser.h 2015-04-01 08:50:11.000000000 +0000 @@ -25,6 +25,7 @@ #include "PmtParser.h" #include "ChannelInfo.h" #include +using namespace std; class IPatParserCallback { @@ -53,7 +54,7 @@ private: void CleanUp(); IPatParserCallback* m_pCallback; - std::vector m_pmtParsers; + vector m_pmtParsers; int64_t m_packetsReceived; int64_t m_packetsToSkip; int m_iPatTableVersion; diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/src/lib/tsreader/PmtParser.cpp kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/src/lib/tsreader/PmtParser.cpp --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/src/lib/tsreader/PmtParser.cpp 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/src/lib/tsreader/PmtParser.cpp 2015-04-01 08:50:11.000000000 +0000 @@ -85,7 +85,7 @@ pointer += (descriptorLen+2); } // loop 2 - std::vector tempPids; + vector tempPids; m_pidInfo.Reset(); m_pidInfo.PmtPid = GetPid(); diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/src/lib/tsreader/PmtParser.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/src/lib/tsreader/PmtParser.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/src/lib/tsreader/PmtParser.h 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/src/lib/tsreader/PmtParser.h 2015-04-01 08:50:11.000000000 +0000 @@ -24,6 +24,7 @@ #include "TSHeader.h" #include "PidTable.h" #include +using namespace std; #define SERVICE_TYPE_VIDEO_UNKNOWN -1 #define SERVICE_TYPE_VIDEO_MPEG1 0x01 diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/src/lib/tsreader/TSReader.cpp kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/src/lib/tsreader/TSReader.cpp --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/src/lib/tsreader/TSReader.cpp 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/src/lib/tsreader/TSReader.cpp 2015-04-01 08:50:11.000000000 +0000 @@ -40,7 +40,6 @@ #endif #include "FileUtils.h" -using namespace std; using namespace ADDON; CTsReader::CTsReader(): m_demultiplexer( *this ) diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/src/lib/tsreader/TSReader.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/src/lib/tsreader/TSReader.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/src/lib/tsreader/TSReader.h 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/src/lib/tsreader/TSReader.h 2015-04-01 08:50:11.000000000 +0000 @@ -68,7 +68,7 @@ * \brief Override the search directory for timeshift buffer files * \param the new search directory */ - void SetDirectory( std::string& directory ); + void SetDirectory( string& directory ); void SetCardId( int id ); bool IsTimeShifting(); bool IsSeeking(); @@ -98,7 +98,7 @@ #endif CCards* m_cardSettings; ///< Pointer to the MediaPortal card settings. Will be used to determine the base path of the timeshift buffer int m_cardId; ///< Card id for the current Card used for this timeshift buffer - std::string m_basePath; ///< The base path shared by all timeshift buffers (to be determined from the Card settings) + string m_basePath; ///< The base path shared by all timeshift buffers (to be determined from the Card settings) TsReaderState m_State; ///< The current state of the TsReader unsigned long m_lastPause; ///< Last time instance at which the playback was paused int m_WaitForSeekToEof; diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/src/pvrclient-mediaportal.cpp kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/src/pvrclient-mediaportal.cpp --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/src/pvrclient-mediaportal.cpp 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/src/pvrclient-mediaportal.cpp 2015-04-01 08:50:11.000000000 +0000 @@ -43,7 +43,7 @@ int g_iTVServerXBMCBuild = 0; /* PVR client version (don't forget to update also the addon.xml and the Changelog.txt files) */ -#define PVRCLIENT_MEDIAPORTAL_VERSION_STRING "1.9.23" +#define PVRCLIENT_MEDIAPORTAL_VERSION_STRING "1.9.15" /* TVServerXBMC plugin supported versions */ #define TVSERVERXBMC_MIN_VERSION_STRING "1.1.7.107" @@ -707,7 +707,7 @@ //Use OpenLiveStream to read from the timeshift .ts file or an rtsp stream PVR_STRCLR(tag.strStreamURL); if (!bRadio) - PVR_STRCPY(tag.strInputFormat, "video/mp2t"); + PVR_STRCPY(tag.strInputFormat, "video/x-mpegts"); else PVR_STRCLR(tag.strInputFormat); } diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/src/recordings.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/src/recordings.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/src/recordings.h 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/src/recordings.h 2015-04-01 08:50:11.000000000 +0000 @@ -24,6 +24,7 @@ #include "GenreTable.h" #include "DateTime.h" +using namespace std; #define DEFAULTFRAMESPERSECOND 25.0 #define MAXPRIORITY 99 @@ -34,27 +35,27 @@ private: int m_Index; int m_channelID; - std::string m_channelName; - std::string m_filePath; ///< The full recording path as returned by the backend - std::string m_basePath; ///< The base path shared by all recordings (to be determined from the Card settings) - std::string m_directory; ///< An optional subdirectory below the basePath - std::string m_fileName; ///< The recording filename without path - std::string m_stream; - std::string m_originalurl; + string m_channelName; + string m_filePath; ///< The full recording path as returned by the backend + string m_basePath; ///< The base path shared by all recordings (to be determined from the Card settings) + string m_directory; ///< An optional subdirectory below the basePath + string m_fileName; ///< The recording filename without path + string m_stream; + string m_originalurl; MPTV::CDateTime m_startTime; MPTV::CDateTime m_endTime; int m_duration; - std::string m_title; // Title of this event - std::string m_description; // Description of this event - std::string m_episodeName; // Short description of this event (typically the episode name in case of a series) - std::string m_seriesNumber; - std::string m_episodeNumber; - std::string m_episodePart; + string m_title; // Title of this event + string m_description; // Description of this event + string m_episodeName; // Short description of this event (typically the episode name in case of a series) + string m_seriesNumber; + string m_episodeNumber; + string m_episodePart; int m_scheduleID; int m_keepUntil; MPTV::CDateTime m_keepUntilDate; ///< MediaPortal keepUntilDate CCards* m_cardSettings; ///< Pointer to the MediaPortal card settings. Will be used to determine the base path of the recordings - std::string m_genre; + string m_genre; int m_genre_type; int m_genre_subtype; bool m_isRecording; @@ -103,7 +104,7 @@ /** * \brief Override the directory where this recording is stored */ - //void SetDirectory( std::string& directory ); + //void SetDirectory( string& directory ); /** * \brief The RTSP stream URL for this recording (hostname resolved to IP-address) diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/src/Socket.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/src/Socket.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/src/Socket.h 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/src/Socket.h 2015-04-01 08:50:11.000000000 +0000 @@ -18,6 +18,9 @@ */ #pragma once +namespace MPTV //Prevent name clash with Live555 Socket +{ + //Include platform specific datatypes, header files, defines and constants: #if defined TARGET_WINDOWS #define WIN32_LEAN_AND_MEAN // Enable LEAN_AND_MEAN support @@ -67,12 +70,10 @@ #error Platform specific socket support is not yet available on this platform! #endif +using namespace std; #include -namespace MPTV //Prevent name clash with Live555 Socket -{ - #define MAXCONNECTIONS 1 ///< Maximum number of pending connections before "Connection refused" #define MAXRECV 1500 ///< Maximum packet size @@ -269,7 +270,7 @@ bool set_non_blocking ( const bool ); - bool ReadLine (std::string& line); + bool ReadLine (string& line); bool is_valid() const; diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/src/utils.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/src/utils.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mediaportal.tvserver/src/utils.h 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mediaportal.tvserver/src/utils.h 2015-04-01 08:50:11.000000000 +0000 @@ -27,12 +27,13 @@ #include "windows/WindowsUtils.h" #endif +using namespace std; /** * String tokenize * Split string using the given delimiter into a vector of substrings */ -void Tokenize(const std::string& str, std::vector& tokens, const std::string& delimiters); +void Tokenize(const string& str, vector& tokens, const string& delimiters); std::wstring StringToWString(const std::string& s); std::string WStringToString(const std::wstring& s); diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mythtv/addon/addon.xml.in kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mythtv/addon/addon.xml.in --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mythtv/addon/addon.xml.in 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mythtv/addon/addon.xml.in 2015-04-01 08:50:11.000000000 +0000 @@ -1,14 +1,14 @@ - - - + + + bHandlesDemuxing = g_bDemuxing; pCapabilities->bSupportsRecordings = true; - pCapabilities->bSupportsRecordingsUndelete = false; pCapabilities->bSupportsRecordingPlayCount = true; pCapabilities->bSupportsLastPlayedPosition = false; pCapabilities->bSupportsRecordingEdl = true; @@ -716,11 +715,6 @@ return g_client->GetConnectionString(); } -const char *GetBackendHostname(void) -{ - return g_szMythHostname.c_str(); -} - PVR_ERROR GetDriveSpace(long long *iTotal, long long *iUsed) { if (g_client == NULL) @@ -729,7 +723,7 @@ return g_client->GetDriveSpace(iTotal, iUsed); } -PVR_ERROR OpenDialogChannelScan() +PVR_ERROR DialogChannelScan() { return PVR_ERROR_FAILED; } @@ -797,13 +791,13 @@ return PVR_ERROR_NOT_IMPLEMENTED; } -PVR_ERROR OpenDialogChannelSettings(const PVR_CHANNEL &channel) +PVR_ERROR DialogChannelSettings(const PVR_CHANNEL &channel) { (void)channel; return PVR_ERROR_NOT_IMPLEMENTED; } -PVR_ERROR OpenDialogChannelAdd(const PVR_CHANNEL &channel) +PVR_ERROR DialogAddChannel(const PVR_CHANNEL &channel) { (void)channel; return PVR_ERROR_NOT_IMPLEMENTED; @@ -837,19 +831,19 @@ * PVR Recording Functions */ -int GetRecordingsAmount(bool deleted) +int GetRecordingsAmount(void) { if (g_client == NULL) return 0; - (void)deleted; + return g_client->GetRecordingsAmount(); } -PVR_ERROR GetRecordings(ADDON_HANDLE handle, bool deleted) +PVR_ERROR GetRecordings(ADDON_HANDLE handle) { if (g_client == NULL) return PVR_ERROR_SERVER_ERROR; - (void)deleted; + return g_client->GetRecordings(handle); } @@ -1167,7 +1161,5 @@ void DemuxReset() {} const char * GetLiveStreamURL(const PVR_CHANNEL &) { return ""; } void SetSpeed(int) {}; -PVR_ERROR UndeleteRecording(const PVR_RECORDING& recording) { (void)recording; return PVR_ERROR_NOT_IMPLEMENTED; } -PVR_ERROR DeleteAllRecordingsFromTrash() { return PVR_ERROR_NOT_IMPLEMENTED; } } //end extern "C" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mythtv/src/pvrclient-mythtv.cpp kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mythtv/src/pvrclient-mythtv.cpp --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.mythtv/src/pvrclient-mythtv.cpp 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.mythtv/src/pvrclient-mythtv.cpp 2015-04-01 08:50:11.000000000 +0000 @@ -1348,7 +1348,7 @@ PVR->TransferTimerEntry(handle, &tag); // Add it to memorandom: cf UpdateTimer() MYTH_SHARED_PTR pTag = MYTH_SHARED_PTR(new PVR_TIMER(tag)); - m_PVRtimerMemorandum.insert(std::make_pair((unsigned int&)tag.iClientIndex, pTag)); + m_PVRtimerMemorandum.insert(std::make_pair(tag.iClientIndex, pTag)); } if (g_bExtraDebug) diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.nextpvr/addon/addon.xml.in kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.nextpvr/addon/addon.xml.in --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.nextpvr/addon/addon.xml.in 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.nextpvr/addon/addon.xml.in 2015-04-01 08:50:11.000000000 +0000 @@ -1,13 +1,13 @@ - + - - + + Kodi voorprogram vir die NextPVR Kodi frontend for the NextPVR Kodi клиент за NextPVR - Interfície del Kodi pel NextPVR + Interfície de l'Kodi pel NextPVR Rozhraní Kodi pro NextPVR Blaen Kodi ar gyfer NextPVR Kodi frontend til NextPVR @@ -59,7 +59,7 @@ Interfața Kodi pentru NextPVR Интерфейс Kodi для NextPVR Kodi rozhranie pre NextPVR - Kodijev vmesnik za NextPVR + Kodi-jev vmesnik za NextPVR Kodi-frontend för NextPVR NextPVR için Kodi ön ucu Накладка Kodi для NextPVR @@ -101,7 +101,7 @@ NextPVR frontend. Live TV နှင့် Recordings ၊ ရေဒီယိုလှိုင်းများကို နားဆင်ခြင်း ၊ EPG စသည်တို့ကို ထောက်ပံ့ပေးသည်။ NextPVR frontend. Ondersteunt streaming van Live TV & Recordings, het luisteren naar Radio kanalen en EPG. NextPVR frontend. Støtter visning av direkte TV og opptak, lytting til radiokanaler og EPG. - Klient NextPVR obsługuje strumieniowanie kanałów radiowych i telewizyjnych, nagrywanie natychmiastowe i wg harmonogramu oraz funkcje przewodnika programów. + Klient NextPVR wspiera strumieniowanie kanałów radiowych i telewizyjnych, nagrywanie natychmiastowe i wg harmonogramu oraz funkcje przewodnika programów. Frontend NextPVR. Suporta transmissão de Live TV e Gravações, ouvir estações de Rádio e EPG. NextPVR Frontend. Suporta streaming de TV ao Vivo e Gravações, ouvir canais de rádio e EPG. Interfața NextPVR. Suporta streaming Live TV și inregistrari, radio și ghid electronic de programe (EPG) @@ -145,7 +145,7 @@ 아직 개발 진행중입니다. 부족한 부분이 있을 수 있습니다. Tai yra nestabili programinė įranga! Autorius jokiu būdu neatsakingas už nepavykusius įrašus, neteisingus laikmačius, iššvaistytas valandas, ar nutikus kitiems nepageidaujamiems poveikiams ...[COLOR=red](Kodi.lt siūlo/rekomenduoja testuojant šį priedą persijungti į Anglų [orinali] kalbą)[/COLOR] Šis darbs ir procesā. Izmantojiet paši uz savu risku. - Ова е сеуште незавршена програма. Користи на сопствен ризик. + Ова е работа која се извршува. Користи на сопствен ризик. Ia masih dalam pembangunan. Guna atas risiko sendiri. အသုံးပြုရန် လုပ်ဆောင်နေခြင်းဖြစ်သည်။ ကိုယ့်တာဝန်ကိုယ်ယူပြီး အသုံးပြုပါ။ Hier wordt aan gewerkt, Gebruik op eigen risico. diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.nextpvr/addon/changelog.txt kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.nextpvr/addon/changelog.txt --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.nextpvr/addon/changelog.txt 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.nextpvr/addon/changelog.txt 2015-04-01 08:50:11.000000000 +0000 @@ -1,16 +1,11 @@ -v1.10.1 -- Updated to PVR API v1.9.4 -- Updated to GUI API v5.8.0 - v1.9.21 -- updated language files from Transifex +- platform fixes v1.9.20 -- updated language files from Transifex -- minor changes to conform with C++11 +- fixed issue where RPi user were unable to watch live tv due to subtle differences on that platform +- fixed issue where recording list would get out of date and not reflect reality of backend v1.9.19 -- added getBackendHostname function - added support for ATSC subchannel numbers, fixing 'no tuner available' message users were getting with this type of channel - fixes a problem with playback of radio stations - added recording artwork diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.nextpvr/addon/resources/language/Catalan/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.nextpvr/addon/resources/language/Catalan/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.nextpvr/addon/resources/language/Catalan/strings.po 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.nextpvr/addon/resources/language/Catalan/strings.po 2015-04-01 08:50:11.000000000 +0000 @@ -56,34 +56,10 @@ msgid "Tuner no longer available" msgstr "El sintonitzador ja no està disponible" -msgctxt "#30054" -msgid "[RECUR]" -msgstr "[RECUR]" - -msgctxt "#30100" -msgid "Add Timer" -msgstr "Afegeix un temporitzador" - -msgctxt "#30120" -msgid "Recording Type" -msgstr "Tipus d'enregistrament" - -msgctxt "#30121" -msgid "Record Once" -msgstr "Grava un cop" - msgctxt "#30130" msgid "Keep" msgstr "Mantenir" -msgctxt "#30131" -msgid "All Recordings" -msgstr "Tots els enregistraments" - -msgctxt "#30134" -msgid "Recording Directory" -msgstr "Directori d'enregistraments" - msgctxt "#30135" msgid "Default" msgstr "Per defecte" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.nextpvr/addon/resources/language/Macedonian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.nextpvr/addon/resources/language/Macedonian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.nextpvr/addon/resources/language/Macedonian/strings.po 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.nextpvr/addon/resources/language/Macedonian/strings.po 2015-04-01 08:50:11.000000000 +0000 @@ -54,68 +54,8 @@ msgctxt "#30053" msgid "Tuner no longer available" -msgstr "Тјунерот повеќе не е достапен" - -msgctxt "#30054" -msgid "[RECUR]" -msgstr "[RECUR]" - -msgctxt "#30100" -msgid "Add Timer" -msgstr "Додади тајмер" - -msgctxt "#30120" -msgid "Recording Type" -msgstr "Тип на снимка" - -msgctxt "#30121" -msgid "Record Once" -msgstr "Сними еднаш" - -msgctxt "#30122" -msgid "Record Season (NEW episodes on this channel)" -msgstr "Сними сезона (НОВИ епизоди на овој канал)" - -msgctxt "#30123" -msgid "Record Season (All episodes on this channel)" -msgstr "Сними сезона (СИТЕ епизоди на овој канал)" - -msgctxt "#30124" -msgid "Record Season (Daily, this timeslot)" -msgstr "Сними сезона (Дневно, во овој временски период)" - -msgctxt "#30125" -msgid "Record Season (Weekly, this timeslot)" -msgstr "Сними сезона (Неделно, во овој временски период)" - -msgctxt "#30126" -msgid "Record Season (Monday-Friday, this timeslot)" -msgstr "Сними сезона (Понеделник-Петок, овој временски период)" - -msgctxt "#30127" -msgid "Record Season (Weekends, this timeslot)" -msgstr "Сними сезона (Викенд, овој временски период)" - -msgctxt "#30130" -msgid "Keep" -msgstr "Зачувај" - -msgctxt "#30131" -msgid "All Recordings" -msgstr "Сите снимки" - -msgctxt "#30132" -msgid "Pre-Padding (minutes)" -msgstr "Пред-потполнување (минути)" - -msgctxt "#30133" -msgid "Pre-Padding (minutes)" -msgstr "Пре-потполнување (минути)" - -msgctxt "#30134" -msgid "Recording Directory" -msgstr "Локација на снимање" +msgstr "Тјунер не е веќе достапен" msgctxt "#30135" msgid "Default" -msgstr "Фабрички" +msgstr "Подразбирачко" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.nextpvr/addon/resources/language/Persian (Iran)/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.nextpvr/addon/resources/language/Persian (Iran)/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.nextpvr/addon/resources/language/Persian (Iran)/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.nextpvr/addon/resources/language/Persian (Iran)/strings.po 2015-04-01 08:50:11.000000000 +0000 @@ -16,14 +16,6 @@ "Language: fa_IR\n" "Plural-Forms: nplurals=1; plural=0;\n" -msgctxt "#30041" -msgid "Advanced" -msgstr "پیشرفته" - -msgctxt "#30130" -msgid "Keep" -msgstr "حفظ شود" - msgctxt "#30135" msgid "Default" msgstr "پیش فرض" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.nextpvr/addon/resources/language/Serbian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.nextpvr/addon/resources/language/Serbian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.nextpvr/addon/resources/language/Serbian/strings.po 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.nextpvr/addon/resources/language/Serbian/strings.po 2015-04-01 08:50:11.000000000 +0000 @@ -16,10 +16,6 @@ "Language: sr\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -msgctxt "#30041" -msgid "Advanced" -msgstr "Napredno" - msgctxt "#30135" msgid "Default" msgstr "Podrazumevano" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.nextpvr/addon/resources/language/Tamil (India)/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.nextpvr/addon/resources/language/Tamil (India)/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.nextpvr/addon/resources/language/Tamil (India)/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.nextpvr/addon/resources/language/Tamil (India)/strings.po 1970-01-01 00:00:00.000000000 +0000 @@ -1,29 +0,0 @@ -# Kodi Media Center language file -# Addon Name: NextPVR PVR Client -# Addon id: pvr.nextpvr -# Addon Provider: Graeme Blackley -msgid "" -msgstr "" -"Project-Id-Version: XBMC Main\n" -"Report-Msgid-Bugs-To: http://trac.xbmc.org/\n" -"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Kodi Translation Team\n" -"Language-Team: Tamil (India) (http://www.transifex.com/projects/p/xbmc-main/language/ta_IN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ta_IN\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgctxt "#30041" -msgid "Advanced" -msgstr "மேம்பட்ட" - -msgctxt "#30130" -msgid "Keep" -msgstr "வை" - -msgctxt "#30135" -msgid "Default" -msgstr "இயல்புநிலை" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.nextpvr/addon/resources/language/Turkish/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.nextpvr/addon/resources/language/Turkish/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.nextpvr/addon/resources/language/Turkish/strings.po 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.nextpvr/addon/resources/language/Turkish/strings.po 2015-04-01 08:50:11.000000000 +0000 @@ -46,7 +46,7 @@ msgctxt "#30051" msgid "Upgrade to '%s' or higher!" -msgstr "'%s' ya da daha yükseğine güncelleştir!" +msgstr "'%s' yada daha yükseğine güncelleştir!" msgctxt "#30052" msgid "Connection failed. Incorrect PIN?" @@ -104,14 +104,6 @@ msgid "All Recordings" msgstr "Bütün kayıtlar" -msgctxt "#30132" -msgid "Pre-Padding (minutes)" -msgstr "Ön tampon (dakika)" - -msgctxt "#30133" -msgid "Pre-Padding (minutes)" -msgstr "Ön tampon (dakika)" - msgctxt "#30134" msgid "Recording Directory" msgstr "Kayıt dizini" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.nextpvr/Makefile.am kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.nextpvr/Makefile.am --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.nextpvr/Makefile.am 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.nextpvr/Makefile.am 2015-04-01 08:50:11.000000000 +0000 @@ -14,7 +14,7 @@ include ../Makefile.include.am -AM_CPPFLAGS+=-Isrc +INCLUDES+=-Isrc libnextpvr_addon_la_SOURCES = src/client.cpp \ src/pvrclient-nextpvr.cpp \ diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.nextpvr/project/VS2010Express/XBMC_NextPVR.vcxproj kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.nextpvr/project/VS2010Express/XBMC_NextPVR.vcxproj --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.nextpvr/project/VS2010Express/XBMC_NextPVR.vcxproj 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.nextpvr/project/VS2010Express/XBMC_NextPVR.vcxproj 2015-04-01 08:50:11.000000000 +0000 @@ -141,12 +141,6 @@ - - - - - - diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.nextpvr/project/VS2010Express/XBMC_NextPVR.vcxproj.filters kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.nextpvr/project/VS2010Express/XBMC_NextPVR.vcxproj.filters --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.nextpvr/project/VS2010Express/XBMC_NextPVR.vcxproj.filters 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.nextpvr/project/VS2010Express/XBMC_NextPVR.vcxproj.filters 2015-04-01 08:50:11.000000000 +0000 @@ -62,10 +62,4 @@ Header Files - - - - - - \ No newline at end of file diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.nextpvr/src/client.cpp kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.nextpvr/src/client.cpp --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.nextpvr/src/client.cpp 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.nextpvr/src/client.cpp 2015-04-01 08:50:11.000000000 +0000 @@ -32,7 +32,7 @@ * and exported to the other source files. */ std::string g_szHostname = DEFAULT_HOST; ///< The Host name or IP of the NextPVR server -std::string g_szPin = DEFAULT_HOST; ///< The Host name or IP of the NextPVR server +std::string g_szPin = DEFAULT_HOST; ///< The Host name or IP of the NextPVR server int g_iPort = DEFAULT_PORT; ///< The web listening port (default: 8866) /* Client member variables */ @@ -303,7 +303,6 @@ //pCapabilities->bSupportsTimeshift = true; //removed from Frodo API pCapabilities->bSupportsEPG = true; pCapabilities->bSupportsRecordings = true; - pCapabilities->bSupportsRecordingsUndelete = false; pCapabilities->bSupportsTimers = true; pCapabilities->bSupportsTV = true; pCapabilities->bSupportsRadio = true; @@ -355,14 +354,6 @@ return "addon error!"; } -//-- GetBackendHostname ------------------------------------------------------- -// Return a String with the backend host name -//----------------------------------------------------------------------------- -const char * GetBackendHostname(void) -{ - return g_szHostname.c_str(); -} - //-- GetDriveSpace ------------------------------------------------------------ // Return the Total and Free Drive space on the PVR Backend //----------------------------------------------------------------------------- @@ -382,7 +373,7 @@ return g_client->GetBackendTime(localTime, gmtOffset); } -PVR_ERROR OpenDialogChannelScan() +PVR_ERROR DialogChannelScan() { return PVR_ERROR_NOT_IMPLEMENTED; } @@ -434,12 +425,12 @@ return PVR_ERROR_NOT_IMPLEMENTED; } -PVR_ERROR OpenDialogChannelSettings(const PVR_CHANNEL &channelinfo) +PVR_ERROR DialogChannelSettings(const PVR_CHANNEL &channelinfo) { return PVR_ERROR_NOT_IMPLEMENTED; } -PVR_ERROR OpenDialogChannelAdd(const PVR_CHANNEL &channelinfo) +PVR_ERROR DialogAddChannel(const PVR_CHANNEL &channelinfo) { return PVR_ERROR_NOT_IMPLEMENTED; } @@ -476,7 +467,7 @@ /*******************************************/ /** PVR Recording Functions **/ -int GetRecordingsAmount(bool deleted) +int GetRecordingsAmount(void) { if (!g_client) return 0; @@ -484,7 +475,7 @@ return g_client->GetNumRecordings(); } -PVR_ERROR GetRecordings(ADDON_HANDLE handle, bool deleted) +PVR_ERROR GetRecordings(ADDON_HANDLE handle) { if (!g_client) return PVR_ERROR_SERVER_ERROR; @@ -738,6 +729,4 @@ time_t GetPlayingTime() { return 0; } time_t GetBufferTimeStart() { return 0; } time_t GetBufferTimeEnd() { return 0; } -PVR_ERROR UndeleteRecording(const PVR_RECORDING& recording) { return PVR_ERROR_NOT_IMPLEMENTED; } -PVR_ERROR DeleteAllRecordingsFromTrash() { return PVR_ERROR_NOT_IMPLEMENTED; } } //end extern "C" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.nextpvr/src/liveshift.cpp kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.nextpvr/src/liveshift.cpp --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.nextpvr/src/liveshift.cpp 2014-09-12 07:43:39.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.nextpvr/src/liveshift.cpp 2015-04-01 08:50:11.000000000 +0000 @@ -164,7 +164,15 @@ memset(request, 0, sizeof(request)); snprintf(request, sizeof(request), "Range: bytes=%llu-%llu-%d", blockOffset, (blockOffset+length), m_requestNumber); LOG("sending request: %s\n", request); - int sent = m_pSocket->send(request, sizeof(request)); + int sent; + do + { + sent = m_pSocket->send(request, sizeof(request)); +#if defined(TARGET_WINDOWS) + } while (sent < 0 && errno == WSAEWOULDBLOCK); +#else + } while (sent < 0 && errno == EAGAIN); +#endif if (sent != sizeof(request)) { LOG("NOT ALL BYTES SENT! Only sent %d bytes\n", sent); @@ -196,7 +204,16 @@ { LOG("got: %s\n", response); } - +#if defined(TARGET_WINDOWS) + else if (responseByteCount < 0 && errno == WSAEWOULDBLOCK) +#else + else if (responseByteCount < 0 && errno == EAGAIN) +#endif + { + usleep(50000); + LOG("got: EAGAIN"); + continue; + } // drop out if response header looks incorrect if (responseByteCount != sizeof(response)) { @@ -212,8 +229,14 @@ m_lastKnownLength = fileSize; // read response payload - bytesRead = m_pSocket->receive((char *)buffer, length, payloadSize); - + do + { + bytesRead = m_pSocket->receive((char *)buffer, length, payloadSize); +#if defined(TARGET_WINDOWS) + } while (bytesRead < 0 && errno == WSAEWOULDBLOCK); +#else + } while (bytesRead < 0 && errno == EAGAIN); +#endif // if it's from the start of the file, then cache it if (m_startupCache != NULL && ((payloadOffset + payloadSize) < STARTUP_CACHE_SIZE)) { diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.nextpvr/src/pvrclient-nextpvr.cpp kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.nextpvr/src/pvrclient-nextpvr.cpp --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.nextpvr/src/pvrclient-nextpvr.cpp 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.nextpvr/src/pvrclient-nextpvr.cpp 2015-04-01 08:50:11.000000000 +0000 @@ -34,6 +34,8 @@ #if defined(TARGET_WINDOWS) #define atoll(S) _atoi64(S) +#else + #define MAXINT64 ULONG_MAX #endif @@ -124,6 +126,7 @@ m_pLiveShiftSource = NULL; + m_lastRecordingUpdateTime = MAXINT64; // time of last recording check - force forever m_incomingStreamBuffer.Create(188*2000); } @@ -267,6 +270,44 @@ */ bool cPVRClientNextPVR::IsUp() { + // check time since last time Recordings were updated, update if it has been awhile + if (m_bConnected == true && m_lastRecordingUpdateTime != MAXINT64 && time(0) > (m_lastRecordingUpdateTime + 60 )) + { + TiXmlDocument doc; + char request[512]; + sprintf(request, "/service?method=recording.lastupdated"); + CStdString response; + if (DoRequest(request, response) == HTTP_OK) + { + if (doc.Parse(response) != NULL) + { + TiXmlElement* last_update = doc.RootElement()->FirstChildElement("last_update"); + if (last_update != NULL) + { + int64_t update_time = atoll(last_update->GetText()); + if (update_time > m_lastRecordingUpdateTime) + { + m_lastRecordingUpdateTime = MAXINT64; + PVR->TriggerRecordingUpdate(); + PVR->TriggerTimerUpdate(); + } + else + { + m_lastRecordingUpdateTime = time(0); + } + } + else + { + m_lastRecordingUpdateTime = MAXINT64; + } + } + } + else + { + m_lastRecordingUpdateTime = MAXINT64; + XBMC->Log(LOG_NOTICE, "Disabling recording update. Update NextPVR to v3.4"); + } + } return m_bConnected; } @@ -569,7 +610,7 @@ } } - PVR_STRCPY(tag.strInputFormat, "video/mp2t"); + PVR_STRCPY(tag.strInputFormat, "video/x-mpegts"); // check if it's a radio channel tag.bIsRadio = false; @@ -771,6 +812,7 @@ PVR->TransferRecordingEntry(handle, &tag); } } + XBMC->Log(LOG_DEBUG, "Updated recordings %lld", m_lastRecordingUpdateTime); } // ...and any in-progress recordings @@ -810,7 +852,7 @@ } } } - + m_lastRecordingUpdateTime = time(0); return PVR_ERROR_NO_ERROR; } @@ -862,6 +904,7 @@ XBMC->Log(LOG_DEBUG, "SetRecordingLastPlayedPosition failed"); return PVR_ERROR_FAILED; } + PVR->TriggerRecordingUpdate(); } return PVR_ERROR_NO_ERROR; } diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.nextpvr/src/pvrclient-nextpvr.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.nextpvr/src/pvrclient-nextpvr.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.nextpvr/src/pvrclient-nextpvr.h 2014-01-04 10:28:12.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.nextpvr/src/pvrclient-nextpvr.h 2015-04-01 08:50:11.000000000 +0000 @@ -134,6 +134,8 @@ CStdString m_PlaybackURL; LiveShiftSource *m_pLiveShiftSource; + int64_t m_lastRecordingUpdateTime; + char m_sid[64]; int m_iChannelCount; diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.nextpvr/src/RingBuffer.cpp kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.nextpvr/src/RingBuffer.cpp --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.nextpvr/src/RingBuffer.cpp 2014-09-12 07:43:39.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.nextpvr/src/RingBuffer.cpp 2015-04-01 08:50:11.000000000 +0000 @@ -128,7 +128,7 @@ /* Write data to ring buffer from buffer specified in 'buf'. Amount read in is * specified by 'size'. */ -bool CRingBuffer::WriteData(char *buf, unsigned int size) +bool CRingBuffer::WriteData(const char *buf, unsigned int size) { if (size > m_size - m_fillCount) { @@ -225,7 +225,7 @@ return m_size; } -unsigned int CRingBuffer::getReadPtr() +unsigned int CRingBuffer::getReadPtr() const { return m_readPtr; } diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.nextpvr/src/RingBuffer.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.nextpvr/src/RingBuffer.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.nextpvr/src/RingBuffer.h 2014-09-12 07:43:39.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.nextpvr/src/RingBuffer.h 2015-04-01 08:50:11.000000000 +0000 @@ -37,14 +37,14 @@ void Clear(); bool ReadData(char *buf, unsigned int size); bool ReadData(CRingBuffer &rBuf, unsigned int size); - bool WriteData(char *buf, unsigned int size); + bool WriteData(const char *buf, unsigned int size); bool WriteData(CRingBuffer &rBuf, unsigned int size); bool SkipBytes(int skipSize); bool Append(CRingBuffer &rBuf); bool Copy(CRingBuffer &rBuf); char *getBuffer(); unsigned int getSize(); - unsigned int getReadPtr(); + unsigned int getReadPtr() const; unsigned int getWritePtr(); unsigned int getMaxReadSize(); unsigned int getMaxWriteSize(); diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.nextpvr/src/Socket.cpp kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.nextpvr/src/Socket.cpp --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.nextpvr/src/Socket.cpp 2014-01-28 20:43:50.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.nextpvr/src/Socket.cpp 2015-04-01 08:50:11.000000000 +0000 @@ -19,6 +19,8 @@ #include "libXBMC_addon.h" #include #include "platform/os.h" +#include "platform/util/timeutils.h" + #include "client.h" #include "Socket.h" @@ -214,8 +216,15 @@ { return 0; } - - int status = Socket::send( (const char*) data.c_str(), (const unsigned int) data.size()); + int status = 0; + do + { + status = Socket::send( (const char*) data.c_str(), (const unsigned int) data.size()); +#if defined(TARGET_WINDOWS) + } while (status == SOCKET_ERROR && errno == WSAEWOULDBLOCK); +#else + } while (status == SOCKET_ERROR && errno == EAGAIN); +#endif return status; } @@ -249,10 +258,15 @@ _sd = INVALID_SOCKET; return 0; } - - int status = ::send(_sd, data, len, 0 ); - - if (status == -1) + int status = 0; + do { + status = ::send(_sd, data, len, 0 ); +#if defined(TARGET_WINDOWS) + } while (status == SOCKET_ERROR && errno == WSAEWOULDBLOCK); +#else + } while (status == SOCKET_ERROR && errno == EAGAIN); +#endif + if (status == SOCKET_ERROR) { errormessage( getLastError(), "Socket::send"); XBMC->Log(LOG_ERROR, "Socket::send - failed to send data"); @@ -436,11 +450,18 @@ int lasterror = getLastError(); #if defined(TARGET_WINDOWS) if ( lasterror != WSAEWOULDBLOCK) - errormessage( lasterror, "Socket::receive" ); #else - if ( lasterror != EAGAIN && lasterror != EWOULDBLOCK ) - errormessage( lasterror, "Socket::receive" ); + if ( lasterror != EAGAIN ) #endif + { + errormessage( lasterror, "Socket::receive" ); + } + else + { + XBMC->Log(LOG_ERROR, "Socket::read EAGAIN"); + usleep(50000); + continue; + } return status; } diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.nextpvr/src/Socket.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.nextpvr/src/Socket.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.nextpvr/src/Socket.h 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.nextpvr/src/Socket.h 2015-04-01 08:50:11.000000000 +0000 @@ -18,6 +18,9 @@ */ #pragma once +namespace NextPVR +{ + //Include platform specific datatypes, header files, defines and constants: #if defined TARGET_WINDOWS #define WIN32_LEAN_AND_MEAN // Enable LEAN_AND_MEAN support @@ -64,12 +67,10 @@ #error Platform specific socket support is not yet available on this platform! #endif +using namespace std; #include -namespace NextPVR -{ - #define MAXCONNECTIONS 1 ///< Maximum number of pending connections before "Connection refused" #define MAXRECV 1500 ///< Maximum packet size @@ -277,7 +278,7 @@ bool set_non_blocking ( const bool ); - bool ReadResponse (int &code, std::vector &lines); + bool ReadResponse (int &code, vector &lines); bool is_valid() const; diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.njoy/addon/addon.xml.in kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.njoy/addon/addon.xml.in --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.njoy/addon/addon.xml.in 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.njoy/addon/addon.xml.in 2015-04-01 08:50:11.000000000 +0000 @@ -1,12 +1,12 @@ - + {bdc7d21d-9fd9-41aa-bec8-8b70e1448c50} - - - diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.njoy/project/VS2010Express/pvrclient_njoy.vcxproj.filters kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.njoy/project/VS2010Express/pvrclient_njoy.vcxproj.filters --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.njoy/project/VS2010Express/pvrclient_njoy.vcxproj.filters 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.njoy/project/VS2010Express/pvrclient_njoy.vcxproj.filters 2015-04-01 08:50:11.000000000 +0000 @@ -30,7 +30,4 @@ Header Files - - - \ No newline at end of file diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.njoy/src/client.cpp kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.njoy/src/client.cpp --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.njoy/src/client.cpp 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.njoy/src/client.cpp 2015-04-01 08:50:11.000000000 +0000 @@ -227,11 +227,6 @@ return "connected"; } -const char * GetBackendHostname(void) -{ - return g_strHostname.c_str(); -} - int GetChannelsAmount(void) { return m_data->getChannelsAmount(); @@ -249,7 +244,7 @@ /** UNUSED API FUNCTIONS */ PVR_ERROR GetDriveSpace(long long *iTotal, long long *iUsed) { return PVR_ERROR_NOT_IMPLEMENTED; } -PVR_ERROR OpenDialogChannelScan() { return PVR_ERROR_NOT_IMPLEMENTED; } +PVR_ERROR DialogChannelScan() { return PVR_ERROR_NOT_IMPLEMENTED; } PVR_ERROR CallMenuHook(const PVR_MENUHOOK &menuhook, const PVR_MENUHOOK_DATA &item) { return PVR_ERROR_NOT_IMPLEMENTED; } PVR_ERROR GetEPGForChannel(ADDON_HANDLE handle, const PVR_CHANNEL &channel, time_t iStart, time_t iEnd) { return PVR_ERROR_NOT_IMPLEMENTED; } int GetChannelGroupsAmount(void) { return 0; } @@ -258,8 +253,8 @@ 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 OpenDialogChannelSettings(const PVR_CHANNEL &channel) { return PVR_ERROR_NOT_IMPLEMENTED; } -PVR_ERROR OpenDialogChannelAdd(const PVR_CHANNEL &channel) { return PVR_ERROR_NOT_IMPLEMENTED; } +PVR_ERROR DialogChannelSettings(const PVR_CHANNEL &channel) { return PVR_ERROR_NOT_IMPLEMENTED; } +PVR_ERROR DialogAddChannel(const PVR_CHANNEL &channel) { return PVR_ERROR_NOT_IMPLEMENTED; } bool OpenLiveStream(const PVR_CHANNEL &channel) { return false; } void CloseLiveStream(void) {} int GetCurrentClientChannel() { return -1; } @@ -277,8 +272,8 @@ long long PositionLiveStream(void) { return -1; } long long LengthLiveStream(void) { return -1; } const char * GetLiveStreamURL(const PVR_CHANNEL &channel) { return ""; } -int GetRecordingsAmount(bool deleted) { return -1; } -PVR_ERROR GetRecordings(ADDON_HANDLE handle, bool deleted) { return PVR_ERROR_NOT_IMPLEMENTED; } +int GetRecordingsAmount(void) { return -1; } +PVR_ERROR GetRecordings(ADDON_HANDLE handle) { return PVR_ERROR_NOT_IMPLEMENTED; } PVR_ERROR DeleteRecording(const PVR_RECORDING &recording) { return PVR_ERROR_NOT_IMPLEMENTED; } PVR_ERROR RenameRecording(const PVR_RECORDING &recording) { return PVR_ERROR_NOT_IMPLEMENTED; } PVR_ERROR SetRecordingPlayCount(const PVR_RECORDING &recording, int count) { return PVR_ERROR_NOT_IMPLEMENTED; } @@ -300,6 +295,4 @@ time_t GetPlayingTime() { return 0; } time_t GetBufferTimeStart() { return 0; } time_t GetBufferTimeEnd() { return 0; } -PVR_ERROR UndeleteRecording(const PVR_RECORDING& recording) { return PVR_ERROR_NOT_IMPLEMENTED; } -PVR_ERROR DeleteAllRecordingsFromTrash() { return PVR_ERROR_NOT_IMPLEMENTED; } } //end extern "C" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vdr.vnsi/addon/addon.xml.in kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vdr.vnsi/addon/addon.xml.in --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vdr.vnsi/addon/addon.xml.in 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vdr.vnsi/addon/addon.xml.in 2015-04-01 08:50:11.000000000 +0000 @@ -1,14 +1,14 @@ - - - + + + Client PVR pentru conectare VDR la Kodi folosind interfaţa VNSI PVR клиент для подключения VDR к Kodi через интерфейс VNSI PVR klientská aplikácia na pripojenie VDR servera do Kodi prostredníctvom rozhrania VNSI - Odjemalec PVR za povezavo VDR in Kodija preko vmesnika VNSI + Odjemalec PVR za povezavo VDR in Kodi preko vmesnika VNSI Klient PVR për lidhjen e VDR dhe Kodi mbi ndërfaqjen VNSI PVR-klient för att ansluta VDR till Kodi över VNSI-gränsnittet - Kayıt Sunucusu VDR'ye Kodi'yle VNSI Arayüzü Üzerinden Bağlanır Клієнт PVR для зв’язку VDR з Kodi через інтерфейс VNSI Trình PVR để kết nối VDR với Kodi qua giao tiếp VNSI 让 Kodi 通过 VNSI 界面与 VDR 连接的 PVR 客户端 @@ -99,7 +98,7 @@ Bahagian hadapan VDR; menyokong penstirman TV Langsung & Rakaman, EPG, Pemasa menerusi pemalam VNSI VDR frontend: ondersteunt streaming van Live TV & Recordings, EPG, Timers over de VNSI plugin VDR frontend; støtte for visning av direkte TV og opptak, EPG og tidtakere over VNSI-tillegget - Klient VDR obsługuje strumieniowanie kanałów radiowych i telewizyjnych, nagrywanie natychmiastowe i wg harmonogramu oraz funkcje przewodnika programów przy wykorzystaniu wtyczki VNSI + Klient VDR wspiera strumieniowanie kanałów radiowych i telewizyjnych, nagrywanie natychmiastowe i wg harmonogramu oraz funkcje przewodnika programów przy wykorzystaniu wtyczki VNSI Frontend VDR; suporta transmissão de Live TV e Gravações, EPG e Temporizadores através do plugin VNSI Frontend VDR; suporta streaming de TV ao vivo e gravações, EPG, agendamentos sobre o plugin VNSI Frontend VDR; suportă streaming de TV Live & Înregistrări, EPG, Cronometre folosind pluginul VNSI @@ -146,7 +145,7 @@ 이 소프트웨어는 불안정합니다! 제작자는 녹화 실패, 부정확한 타이머, 시간 낭비 및 기타 예상하지 못한 결과에 대해 책임지지 않습니다.. Tai yra nestabili programinė įranga! Autorius jokiu būdu neatsakingas už nepavykusius įrašus, neteisingus laikmačius, iššvaistytas valandas, ar nutikus kitiems nepageidaujamiems poveikiams ...[COLOR=red](Kodi.lt siūlo/rekomenduoja testuojant šį priedą persijungti į Anglų [orinali] kalbą)[/COLOR] Šī ir nestabila programmatūra! Autori nav atbildīgi par nesanākušiem ierakstiem, nepareiziem taimeriem, iztērētām stundām vai jebkādiem citiem nevēlamiem efektiem.. - Ова е нестабилен софтвер! Авторите не се во никој случај одговорни за неуспешни снимања, грешни тајмери, други непосакувани ефекти... + Ова е нестабилен софтвер! Ауторите не се во никој случај одговорни за неуспешни снимања, грешни тајмери, други непосакувани ефекти... Тус програм нь гүйцэд хийгдэж дуусаагүй! Зохиогч нь алдаатай бичлэг, цагийн буруу хөтлөлт, алдагдсан цаг хугацаа эсвэл бусад ямар нэгэн хүсээгүй үр дүнд хариуцлага хүлээхгүй. Ini merupakan perisian tidak stabil! Pengarang tidak bertanggungjawab atas kegagalan rakaman, pemasa tidak betul, masa yang dibazirkan, atau apa jua kesan yang tidak dikehendaki.. Dit is instabiele software! De auteurs zijn op geen enkele wijze verantwoordelijk voor mislukte opnames, onjuiste timers, verspilde uren, of andere ongewenste effecten .. diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vdr.vnsi/addon/resources/language/Amharic/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vdr.vnsi/addon/resources/language/Amharic/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vdr.vnsi/addon/resources/language/Amharic/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vdr.vnsi/addon/resources/language/Amharic/strings.po 2015-04-01 08:50:11.000000000 +0000 @@ -20,10 +20,6 @@ msgid "Priority" msgstr "ቅድሚያ" -msgctxt "#30004" -msgid "Connect timeout (s)" -msgstr "ግንኙነት ጊዜው አልፏል (ሰ)" - msgctxt "#30008" msgid "Channel search" msgstr "ጣቢያ መፈለጊያ" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vdr.vnsi/addon/resources/language/Catalan/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vdr.vnsi/addon/resources/language/Catalan/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vdr.vnsi/addon/resources/language/Catalan/strings.po 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vdr.vnsi/addon/resources/language/Catalan/strings.po 2015-04-01 08:50:11.000000000 +0000 @@ -204,26 +204,10 @@ msgid "Create channel groups automatically on the server" msgstr "Crea grups de canals de forma automàtica al servidor" -msgctxt "#30048" -msgid "Path to channel icons" -msgstr "Camí a les icones del canal" - msgctxt "#30101" msgid "Setup" msgstr "Configuració" -msgctxt "#30104" -msgid "Timeshift Mode" -msgstr "Mode Timeshift" - -msgctxt "#30107" -msgid "VDR Admin" -msgstr "Administrador VDR" - msgctxt "#30108" msgid "Channels" msgstr "Canals" - -msgctxt "#30113" -msgid "Save filters" -msgstr "Desa els filtres" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vdr.vnsi/addon/resources/language/French (Canada)/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vdr.vnsi/addon/resources/language/French (Canada)/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vdr.vnsi/addon/resources/language/French (Canada)/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vdr.vnsi/addon/resources/language/French (Canada)/strings.po 2015-04-01 08:50:11.000000000 +0000 @@ -166,7 +166,7 @@ msgctxt "#30037" msgid "No device available - exiting" -msgstr "Aucun dispositif disponible - fermeture" +msgstr "Aucun dispositif disponible - Sortie" msgctxt "#30038" msgid "No DVB-S2 device available - trying fallback to DVB-S" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vdr.vnsi/addon/resources/language/German/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vdr.vnsi/addon/resources/language/German/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vdr.vnsi/addon/resources/language/German/strings.po 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vdr.vnsi/addon/resources/language/German/strings.po 2015-04-01 08:50:11.000000000 +0000 @@ -30,7 +30,7 @@ msgctxt "#30003" msgid "Character Set Conversion" -msgstr "Zeichensatzkonvertierung" +msgstr "Textkonvertierung (UTF-8)" msgctxt "#30004" msgid "Connect timeout (s)" @@ -50,15 +50,15 @@ msgctxt "#30008" msgid "Channel search" -msgstr "Sendersuche" +msgstr "Kanalsuche" msgctxt "#30009" msgid "Channel search - Settings" -msgstr "Sendersuche - Einstellungen" +msgstr "Kanalsuche - Einstellungen" msgctxt "#30010" msgid "Start Channel search" -msgstr "Sendersuche starten" +msgstr "Kanalsuche starten" msgctxt "#30011" msgid "Source Type" @@ -118,7 +118,7 @@ msgctxt "#30025" msgid "Channel search - running... %i %%" -msgstr "Sendersuche - läuft... %i %%" +msgstr "Kanalsuche - läuft... %i %%" msgctxt "#30026" msgid "Type:" @@ -214,7 +214,7 @@ msgctxt "#30049" msgid "VDR Server MAC for Wake-on-LAN" -msgstr "VDR-Server-MAC-Adresse für Wake-on-LAN" +msgstr "VDR-Server-MAC für Wake-on-LAN" msgctxt "#30100" msgid "VDR OSD" @@ -250,15 +250,15 @@ msgctxt "#30108" msgid "Channels" -msgstr "Sender" +msgstr "Kanäle" msgctxt "#30109" msgid "Provider whitelist" -msgstr "Positivliste der Anbieter" +msgstr "Weißliste der Anbieter" msgctxt "#30110" msgid "Channel blacklist" -msgstr "Negativliste der Kanäle" +msgstr "Weißliste der Kanäle" msgctxt "#30111" msgid "Channel filters" @@ -266,7 +266,7 @@ msgctxt "#30112" msgid "Radio Channels" -msgstr "Radio Sender" +msgstr "Radiokanäle" msgctxt "#30113" msgid "Save filters" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vdr.vnsi/addon/resources/language/Hebrew/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vdr.vnsi/addon/resources/language/Hebrew/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vdr.vnsi/addon/resources/language/Hebrew/strings.po 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vdr.vnsi/addon/resources/language/Hebrew/strings.po 2015-04-01 08:50:11.000000000 +0000 @@ -114,7 +114,7 @@ msgctxt "#30024" msgid "Back" -msgstr "אחורה" +msgstr "חזרה" msgctxt "#30025" msgid "Channel search - running... %i %%" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vdr.vnsi/addon/resources/language/Icelandic/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vdr.vnsi/addon/resources/language/Icelandic/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vdr.vnsi/addon/resources/language/Icelandic/strings.po 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vdr.vnsi/addon/resources/language/Icelandic/strings.po 2015-04-01 08:50:11.000000000 +0000 @@ -208,14 +208,6 @@ msgid "Request Timeshift" msgstr "Biðja um Tímahliðrun" -msgctxt "#30048" -msgid "Path to channel icons" -msgstr "Slóð á táknmyndir rása" - -msgctxt "#30049" -msgid "VDR Server MAC for Wake-on-LAN" -msgstr "MAC vistfang VDR miðlara fyrir Wake On LAN" - msgctxt "#30100" msgid "VDR OSD" msgstr "Skjátexti VDR" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vdr.vnsi/addon/resources/language/Korean/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vdr.vnsi/addon/resources/language/Korean/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vdr.vnsi/addon/resources/language/Korean/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vdr.vnsi/addon/resources/language/Korean/strings.po 2015-04-01 08:50:11.000000000 +0000 @@ -178,7 +178,7 @@ msgctxt "#30040" msgid "Stopped" -msgstr "중지" +msgstr "정지" msgctxt "#30041" msgid "Finished" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vdr.vnsi/addon/resources/language/Macedonian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vdr.vnsi/addon/resources/language/Macedonian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vdr.vnsi/addon/resources/language/Macedonian/strings.po 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vdr.vnsi/addon/resources/language/Macedonian/strings.po 2015-04-01 08:50:11.000000000 +0000 @@ -30,11 +30,11 @@ msgctxt "#30003" msgid "Character Set Conversion" -msgstr "Конверзија на вид букви" +msgstr "Конверзија на вид на карактери" msgctxt "#30004" msgid "Connect timeout (s)" -msgstr "Истече времето за поврзување (s)" +msgstr "Тајмаут на поврзување (с)" msgctxt "#30005" msgid "Allow VDR Messages" @@ -42,11 +42,11 @@ msgctxt "#30006" msgid "Read recordings from directory" -msgstr "Читај снимки од локација" +msgstr "Читај снимки од директориум" msgctxt "#30007" msgid "VDR recordings directory" -msgstr "Локација на VDR снимки" +msgstr "VDR директориум на снимки" msgctxt "#30008" msgid "Channel search" @@ -58,7 +58,7 @@ msgctxt "#30010" msgid "Start Channel search" -msgstr "Започни со барање канали" +msgstr "Почни барање канали" msgctxt "#30011" msgid "Source Type" @@ -118,7 +118,7 @@ msgctxt "#30025" msgid "Channel search - running... %i %%" -msgstr "Барање канали... %i %%" +msgstr "Барање канали - бара... %i %%" msgctxt "#30026" msgid "Type:" @@ -130,7 +130,7 @@ msgctxt "#30028" msgid "Scan: %i" -msgstr "Пребарај: %i" +msgstr "Барај: %i" msgctxt "#30029" msgid "Signal: %i %%" @@ -204,66 +204,14 @@ msgid "Create channel groups automatically on the server" msgstr "Автоматски креирај група на канали на сервер" -msgctxt "#30047" -msgid "Request Timeshift" -msgstr "Побарај Timeshift" - -msgctxt "#30048" -msgid "Path to channel icons" -msgstr "Локација на иконите за канали" - -msgctxt "#30049" -msgid "VDR Server MAC for Wake-on-LAN" -msgstr "VDR Server MAC адреса за Wake-on-LAN" - -msgctxt "#30100" -msgid "VDR OSD" -msgstr "VDR OSD" - msgctxt "#30101" msgid "Setup" msgstr "Конфигурација" -msgctxt "#30102" -msgid "Controlling OSD - press info to exit" -msgstr "Контролирање на дисплејот - притисни „инфо“ за да излезеш" - -msgctxt "#30103" -msgid "Select to control OSD" -msgstr "Одбери за да го контролираш дисплејот" - -msgctxt "#30104" -msgid "Timeshift Mode" -msgstr "Timeshift режим" - -msgctxt "#30105" -msgid "Timeshift Buffer (RAM) x100 MB" -msgstr "Timeshift Buffer (RAM) x100 MB" - -msgctxt "#30106" -msgid "Timeshift Buffer (File) x1 GB" -msgstr "Timeshift Buffer (File) x1 GB" - -msgctxt "#30107" -msgid "VDR Admin" -msgstr "VDR Админ" - msgctxt "#30108" msgid "Channels" msgstr "Канали" -msgctxt "#30109" -msgid "Provider whitelist" -msgstr "Листа на одобрени провајдери" - -msgctxt "#30110" -msgid "Channel blacklist" -msgstr "Листа на блокирани канали" - -msgctxt "#30111" -msgid "Channel filters" -msgstr "Смени филтери" - msgctxt "#30112" msgid "Radio Channels" msgstr "Радио Канали" @@ -271,7 +219,3 @@ msgctxt "#30113" msgid "Save filters" msgstr "Зачувај филтри" - -msgctxt "#30114" -msgid "Provider Unknown" -msgstr "Непознат провајдер" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vdr.vnsi/addon/resources/language/Persian (Iran)/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vdr.vnsi/addon/resources/language/Persian (Iran)/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vdr.vnsi/addon/resources/language/Persian (Iran)/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vdr.vnsi/addon/resources/language/Persian (Iran)/strings.po 2015-04-01 08:50:11.000000000 +0000 @@ -16,14 +16,6 @@ "Language: fa_IR\n" "Plural-Forms: nplurals=1; plural=0;\n" -msgctxt "#30012" -msgid "TV channels" -msgstr "کانال های تلویزیونی" - -msgctxt "#30013" -msgid "Radio channels" -msgstr "کانال های رادیویی" - msgctxt "#30017" msgid "Country" msgstr "کشور" @@ -35,7 +27,3 @@ msgctxt "#30101" msgid "Setup" msgstr "پیکربندی" - -msgctxt "#30108" -msgid "Channels" -msgstr "کانال ها" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vdr.vnsi/addon/resources/language/Serbian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vdr.vnsi/addon/resources/language/Serbian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vdr.vnsi/addon/resources/language/Serbian/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vdr.vnsi/addon/resources/language/Serbian/strings.po 2015-04-01 08:50:11.000000000 +0000 @@ -20,14 +20,6 @@ msgid "Connect timeout (s)" msgstr "Истек времена за повезивање (с)" -msgctxt "#30012" -msgid "TV channels" -msgstr "TV kanali" - -msgctxt "#30013" -msgid "Radio channels" -msgstr "Radio kanali" - msgctxt "#30017" msgid "Country" msgstr "Država" @@ -43,7 +35,3 @@ msgctxt "#30101" msgid "Setup" msgstr "Konfiguracija" - -msgctxt "#30108" -msgid "Channels" -msgstr "Kanali" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vdr.vnsi/addon/resources/language/Slovenian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vdr.vnsi/addon/resources/language/Slovenian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vdr.vnsi/addon/resources/language/Slovenian/strings.po 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vdr.vnsi/addon/resources/language/Slovenian/strings.po 2015-04-01 08:50:11.000000000 +0000 @@ -210,11 +210,11 @@ msgctxt "#30048" msgid "Path to channel icons" -msgstr "Pot do ikon programov" +msgstr "Pot do ikon za kanale" msgctxt "#30049" msgid "VDR Server MAC for Wake-on-LAN" -msgstr "MAC strežnika VDR za Wake-on-LAN" +msgstr "VDR strežnik za Wake-on-LAN" msgctxt "#30100" msgid "VDR OSD" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vdr.vnsi/addon/resources/language/Spanish (Mexico)/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vdr.vnsi/addon/resources/language/Spanish (Mexico)/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vdr.vnsi/addon/resources/language/Spanish (Mexico)/strings.po 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vdr.vnsi/addon/resources/language/Spanish (Mexico)/strings.po 2015-04-01 08:50:11.000000000 +0000 @@ -16,10 +16,6 @@ "Language: es_MX\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -msgctxt "#30004" -msgid "Connect timeout (s)" -msgstr "Tiempo para conectar agotado (s)" - msgctxt "#30012" msgid "TV channels" msgstr "Canales TV" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vdr.vnsi/addon/resources/language/Tamil (India)/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vdr.vnsi/addon/resources/language/Tamil (India)/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vdr.vnsi/addon/resources/language/Tamil (India)/strings.po 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vdr.vnsi/addon/resources/language/Tamil (India)/strings.po 1970-01-01 00:00:00.000000000 +0000 @@ -1,41 +0,0 @@ -# Kodi Media Center language file -# Addon Name: VDR VNSI Client -# Addon id: pvr.vdr.vnsi -# Addon Provider: FernetMenta, Team XBMC -msgid "" -msgstr "" -"Project-Id-Version: XBMC Main\n" -"Report-Msgid-Bugs-To: http://trac.xbmc.org/\n" -"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Kodi Translation Team\n" -"Language-Team: Tamil (India) (http://www.transifex.com/projects/p/xbmc-main/language/ta_IN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ta_IN\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgctxt "#30012" -msgid "TV channels" -msgstr "TV சேனல்கள்" - -msgctxt "#30013" -msgid "Radio channels" -msgstr "வானொலி சேனல்கள்" - -msgctxt "#30017" -msgid "Country" -msgstr "நாடு" - -msgctxt "#30026" -msgid "Type:" -msgstr "வகை:" - -msgctxt "#30039" -msgid "Running" -msgstr "ஓடிகொண்டிருக்கிறது" - -msgctxt "#30108" -msgid "Channels" -msgstr "சேனல்கள்" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vdr.vnsi/addon/resources/language/Turkish/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vdr.vnsi/addon/resources/language/Turkish/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vdr.vnsi/addon/resources/language/Turkish/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vdr.vnsi/addon/resources/language/Turkish/strings.po 2015-04-01 08:50:11.000000000 +0000 @@ -28,10 +28,6 @@ msgid "Priority" msgstr "Öncelik" -msgctxt "#30003" -msgid "Character Set Conversion" -msgstr "Karakter Kümesi Dönüşümü" - msgctxt "#30004" msgid "Connect timeout (s)" msgstr "Bağlantı süresi doldu (s)" @@ -40,10 +36,6 @@ msgid "Allow VDR Messages" msgstr "VDR İletilerine İzin Ver" -msgctxt "#30006" -msgid "Read recordings from directory" -msgstr "Kayıtları dizinden oku" - msgctxt "#30007" msgid "VDR recordings directory" msgstr "VDR kayıtları dizini" @@ -92,18 +84,6 @@ msgid "Cable Inversion" msgstr "Kabloluya çevir" -msgctxt "#30019" -msgid "Cable Symbolrate" -msgstr "Kablo Sembol Oranı" - -msgctxt "#30020" -msgid "Cable modulation" -msgstr "Kablo Modülasyonu" - -msgctxt "#30021" -msgid "Terr Inversion" -msgstr "Terr Ters Dönüştürmesi" - msgctxt "#30022" msgid "Satellite" msgstr "Uydu" @@ -116,10 +96,6 @@ msgid "Back" msgstr "Geri" -msgctxt "#30025" -msgid "Channel search - running... %i %%" -msgstr "Kanal Araması - İlerliyor... %i %%" - msgctxt "#30026" msgid "Type:" msgstr "Tür:" @@ -134,7 +110,7 @@ msgctxt "#30029" msgid "Signal: %i %%" -msgstr "Sinyal: %% %i" +msgstr "Sinyal: %i %%" msgctxt "#30030" msgid "New channels: %i" @@ -152,10 +128,6 @@ msgid "Analog Radio" msgstr "Analog Radyo" -msgctxt "#30034" -msgid "Transponder:" -msgstr "Verici" - msgctxt "#30035" msgid "New channels" msgstr "Yeni kanallar" @@ -164,14 +136,6 @@ msgid "Channel search - Finished" msgstr "Kanal araması - Tamamlandı" -msgctxt "#30037" -msgid "No device available - exiting" -msgstr "Aygıt bulunamadı - çıkılıyor" - -msgctxt "#30038" -msgid "No DVB-S2 device available - trying fallback to DVB-S" -msgstr "DVB-S2 aygıtı bulunamadı - DVB-S'e geri dönmeyi deniyor" - msgctxt "#30039" msgid "Running" msgstr "Çalışıyor" @@ -196,82 +160,14 @@ msgid "Lost connection to VDR Server" msgstr "VDR Sunucusun bağlantısı kaybedildi" -msgctxt "#30045" -msgid "Connection to VDR Server restored" -msgstr "VDR Sunucusu Bağlantısı Kaydedildi" - -msgctxt "#30046" -msgid "Create channel groups automatically on the server" -msgstr "Kanal Gruplarını Bu Sunucuda Kendiliğinden Kaydet" - -msgctxt "#30047" -msgid "Request Timeshift" -msgstr "İstenilen zaman kaydırması" - -msgctxt "#30048" -msgid "Path to channel icons" -msgstr "Kanal simgeleri kaynağı" - -msgctxt "#30049" -msgid "VDR Server MAC for Wake-on-LAN" -msgstr "Ağ Üzerinden Uyandırma (Wake-on-Lan) için VDR Sunucusu Mac Adresi" - -msgctxt "#30100" -msgid "VDR OSD" -msgstr "VDR Göstergesi" - msgctxt "#30101" msgid "Setup" msgstr "Yapılandırma" -msgctxt "#30102" -msgid "Controlling OSD - press info to exit" -msgstr "Gösterge Kontrol Ediliyor - Çıkmak için \"info\" tuşuna basın" - -msgctxt "#30103" -msgid "Select to control OSD" -msgstr "Kontrol İçin Göstergeyi Seçin" - -msgctxt "#30104" -msgid "Timeshift Mode" -msgstr "Zaman Kaydırması Modu" - -msgctxt "#30105" -msgid "Timeshift Buffer (RAM) x100 MB" -msgstr "Zaman Kaydırma Önbelleği (RAM) x100 MB" - -msgctxt "#30106" -msgid "Timeshift Buffer (File) x1 GB" -msgstr "Zaman Kaydırma Önbelleği (DOSYA) x1 GB" - -msgctxt "#30107" -msgid "VDR Admin" -msgstr "VDR Yöneticisi" - msgctxt "#30108" msgid "Channels" msgstr "Kanallar" -msgctxt "#30109" -msgid "Provider whitelist" -msgstr "Sağlayıcı Beyaz Listesi" - -msgctxt "#30110" -msgid "Channel blacklist" -msgstr "Kanal Kara Listesi" - -msgctxt "#30111" -msgid "Channel filters" -msgstr "Kanal Filtreleri" - msgctxt "#30112" msgid "Radio Channels" msgstr "Radyo Kanalları" - -msgctxt "#30113" -msgid "Save filters" -msgstr "Filtreyi Kaydet" - -msgctxt "#30114" -msgid "Provider Unknown" -msgstr "Bilinmeyen Sağlayıcı" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vdr.vnsi/project/VS2010Express/pvrclient_vdr_vnsi.vcxproj kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vdr.vnsi/project/VS2010Express/pvrclient_vdr_vnsi.vcxproj --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vdr.vnsi/project/VS2010Express/pvrclient_vdr_vnsi.vcxproj 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vdr.vnsi/project/VS2010Express/pvrclient_vdr_vnsi.vcxproj 2015-04-01 08:50:11.000000000 +0000 @@ -121,9 +121,6 @@ {fe4573f6-a794-4ad3-b37f-49e51f1140e6} - - - diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vdr.vnsi/project/VS2010Express/pvrclient_vdr_vnsi.vcxproj.filters kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vdr.vnsi/project/VS2010Express/pvrclient_vdr_vnsi.vcxproj.filters --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vdr.vnsi/project/VS2010Express/pvrclient_vdr_vnsi.vcxproj.filters 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vdr.vnsi/project/VS2010Express/pvrclient_vdr_vnsi.vcxproj.filters 2015-04-01 08:50:11.000000000 +0000 @@ -78,7 +78,4 @@ Header Files - - - \ No newline at end of file diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vdr.vnsi/src/client.cpp kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vdr.vnsi/src/client.cpp --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vdr.vnsi/src/client.cpp 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vdr.vnsi/src/client.cpp 2015-04-01 08:50:11.000000000 +0000 @@ -405,8 +405,6 @@ pCapabilities->bHandlesDemuxing = true; if (VNSIData && VNSIData->SupportChannelScan()) pCapabilities->bSupportsChannelScan = true; - if (VNSIData && VNSIData->SupportRecordingsUndelete()) - pCapabilities->bSupportsRecordingsUndelete = true; return PVR_ERROR_NO_ERROR; } @@ -443,11 +441,6 @@ return ConnectionString.c_str(); } -const char * GetBackendHostname(void) -{ - return g_szHostname.c_str(); -} - PVR_ERROR GetDriveSpace(long long *iTotal, long long *iUsed) { if (!VNSIData) @@ -456,7 +449,7 @@ return (VNSIData->GetDriveSpace(iTotal, iUsed) ? PVR_ERROR_NO_ERROR : PVR_ERROR_SERVER_ERROR); } -PVR_ERROR OpenDialogChannelScan(void) +PVR_ERROR DialogChannelScan(void) { cVNSIChannelScan scanner; scanner.Open(g_szHostname, g_iPort); @@ -573,26 +566,20 @@ /*******************************************/ /** PVR Recording Functions **/ -int GetRecordingsAmount(bool deleted) +int GetRecordingsAmount(void) { if (!VNSIData) return 0; - if (!deleted) - return VNSIData->GetRecordingsCount(); - else - return VNSIData->GetDeletedRecordingsCount(); + return VNSIData->GetRecordingsCount(); } -PVR_ERROR GetRecordings(ADDON_HANDLE handle, bool deleted) +PVR_ERROR GetRecordings(ADDON_HANDLE handle) { if (!VNSIData) return PVR_ERROR_SERVER_ERROR; - if (!deleted) - return VNSIData->GetRecordingsList(handle); - else - return VNSIData->GetDeletedRecordingsList(handle); + return VNSIData->GetRecordingsList(handle); } PVR_ERROR RenameRecording(const PVR_RECORDING &recording) @@ -611,22 +598,6 @@ return VNSIData->DeleteRecording(recording); } -PVR_ERROR UndeleteRecording(const PVR_RECORDING& recording) -{ - if (!VNSIData) - return PVR_ERROR_SERVER_ERROR; - - return VNSIData->UndeleteRecording(recording); -} - -PVR_ERROR DeleteAllRecordingsFromTrash() -{ - if (!VNSIData) - return PVR_ERROR_SERVER_ERROR; - - return VNSIData->DeleteAllRecordingsFromTrash(); -} - /*******************************************/ /** PVR Live Stream Functions **/ @@ -827,8 +798,8 @@ 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 OpenDialogChannelSettings(const PVR_CHANNEL &channel) { return PVR_ERROR_NOT_IMPLEMENTED; } -PVR_ERROR OpenDialogChannelAdd(const PVR_CHANNEL &channel) { return PVR_ERROR_NOT_IMPLEMENTED; } +PVR_ERROR DialogChannelSettings(const PVR_CHANNEL &channel) { return PVR_ERROR_NOT_IMPLEMENTED; } +PVR_ERROR DialogAddChannel(const PVR_CHANNEL &channel) { return PVR_ERROR_NOT_IMPLEMENTED; } void DemuxReset(void) {} void DemuxFlush(void) {} int ReadLiveStream(unsigned char *pBuffer, unsigned int iBufferSize) { return 0; } diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vdr.vnsi/src/vnsicommand.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vdr.vnsi/src/vnsicommand.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vdr.vnsi/src/vnsicommand.h 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vdr.vnsi/src/vnsicommand.h 2015-04-01 08:50:11.000000000 +0000 @@ -24,10 +24,7 @@ #define VNSI_COMMAND_H /** Current VNSI Protocol Version number */ -#define VNSI_PROTOCOLVERSION 8 - -/** Start of RDS support protocol Version */ -#define VNSI_RDS_PROTOCOLVERSION 8 +#define VNSI_PROTOCOLVERSION 6 /** Minimum VNSI Protocol Version number */ #define VNSI_MIN_PROTOCOLVERSION 5 @@ -47,9 +44,6 @@ #define CONFNAME_TIMESHIFT "Timeshift" #define CONFNAME_TIMESHIFTBUFFERSIZE "TimeshiftBufferSize" #define CONFNAME_TIMESHIFTBUFFERFILESIZE "TimeshiftBufferFileSize" -#define CONFNAME_TIMESHIFTBUFFERDIR "TimeshiftBufferDir" -#define CONFNAME_PLAYRECORDING "PlayRecording" -#define CONFNAME_AVOIDEPGSCAN "AvoidEPGScan" /* OPCODE 1 - 19: VNSI network functions for general purpose */ #define VNSI_LOGIN 1 @@ -116,14 +110,6 @@ #define VNSI_OSD_DISCONNECT 161 #define VNSI_OSD_HITKEY 162 -/* OPCODE 180 - 189: VNSI network functions for deleted recording access */ -#define VNSI_RECORDINGS_DELETED_ACCESS_SUPPORTED 180 -#define VNSI_RECORDINGS_DELETED_GETCOUNT 181 -#define VNSI_RECORDINGS_DELETED_GETLIST 182 -#define VNSI_RECORDINGS_DELETED_DELETE 183 -#define VNSI_RECORDINGS_DELETED_UNDELETE 184 -#define VNSI_RECORDINGS_DELETED_DELETE_ALL 185 - /** Stream packet types (server -> client) */ #define VNSI_STREAM_CHANGE 1 #define VNSI_STREAM_STATUS 2 diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vdr.vnsi/src/VNSIData.cpp kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vdr.vnsi/src/VNSIData.cpp --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vdr.vnsi/src/VNSIData.cpp 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vdr.vnsi/src/VNSIData.cpp 2015-04-01 08:50:11.000000000 +0000 @@ -169,33 +169,6 @@ return ret == VNSI_RET_OK ? true : false; } -bool cVNSIData::SupportRecordingsUndelete() -{ - if (GetProtocol() > 7) - { - cRequestPacket vrp; - if (!vrp.init(VNSI_RECORDINGS_DELETED_ACCESS_SUPPORTED)) - { - XBMC->Log(LOG_ERROR, "%s - Can't init cRequestPacket", __FUNCTION__); - return false; - } - - cResponsePacket* vresp = ReadResult(&vrp); - if (!vresp) - { - XBMC->Log(LOG_INFO, "%s - Can't get response packed", __FUNCTION__); - return false; - } - - uint32_t ret = vresp->extract_U32(); - delete vresp; - return ret == VNSI_RET_OK ? true : false; - } - - XBMC->Log(LOG_INFO, "%s - Undelete not supported on backend (min. Ver. 1.3.0; Protocol 7)", __FUNCTION__); - return false; -} - bool cVNSIData::EnableStatusInterface(bool onOff) { cRequestPacket vrp; @@ -583,17 +556,19 @@ delete vresp; return PVR_ERROR_UNKNOWN; } + uint32_t returnCode = vresp->extract_U32(); delete vresp; if (returnCode == VNSI_RET_DATALOCKED) return PVR_ERROR_FAILED; - else if (returnCode == VNSI_RET_RECRUNNING) + if (returnCode == VNSI_RET_RECRUNNING) return PVR_ERROR_RECORDING_RUNNING; else if (returnCode == VNSI_RET_DATAINVALID) return PVR_ERROR_INVALID_PARAMETERS; else if (returnCode == VNSI_RET_ERROR) return PVR_ERROR_SERVER_ERROR; + return PVR_ERROR_NO_ERROR; } @@ -694,7 +669,6 @@ tag.iDuration = vresp->extract_U32(); tag.iPriority = vresp->extract_U32(); tag.iLifetime = vresp->extract_U32(); - tag.bIsDeleted = false; char *strChannelName = vresp->extract_String(); strncpy(tag.strChannelName, strChannelName, sizeof(tag.strChannelName) - 1); @@ -765,7 +739,7 @@ PVR_ERROR cVNSIData::DeleteRecording(const PVR_RECORDING& recinfo) { cRequestPacket vrp; - if (!vrp.init(recinfo.bIsDeleted ? VNSI_RECORDINGS_DELETED_DELETE : VNSI_RECORDINGS_DELETE)) + if (!vrp.init(VNSI_RECORDINGS_DELETE)) { XBMC->Log(LOG_ERROR, "%s - Can't init cRequestPacket", __FUNCTION__); return PVR_ERROR_UNKNOWN; @@ -834,164 +808,6 @@ return PVR_ERROR_NO_ERROR; } - -int cVNSIData::GetDeletedRecordingsCount() -{ - cRequestPacket vrp; - if (!vrp.init(VNSI_RECORDINGS_DELETED_GETCOUNT)) - { - XBMC->Log(LOG_ERROR, "%s - Can't init cRequestPacket", __FUNCTION__); - return -1; - } - - cResponsePacket* vresp = ReadResult(&vrp); - if (!vresp) - { - XBMC->Log(LOG_ERROR, "%s - Can't get response packed", __FUNCTION__); - return -1; - } - - uint32_t count = vresp->extract_U32(); - - delete vresp; - return count; -} - -PVR_ERROR cVNSIData::GetDeletedRecordingsList(ADDON_HANDLE handle) -{ - cRequestPacket vrp; - if (!vrp.init(VNSI_RECORDINGS_DELETED_GETLIST)) - { - XBMC->Log(LOG_ERROR, "%s - Can't init cRequestPacket", __FUNCTION__); - return PVR_ERROR_UNKNOWN; - } - - cResponsePacket* vresp = ReadResult(&vrp); - if (!vresp) - { - XBMC->Log(LOG_ERROR, "%s - Can't get response packed", __FUNCTION__); - return PVR_ERROR_UNKNOWN; - } - - CStdString strRecordingId; - while (!vresp->end()) - { - PVR_RECORDING tag; - memset(&tag, 0, sizeof(tag)); - tag.recordingTime = vresp->extract_U32(); - tag.iDuration = vresp->extract_U32(); - tag.iPriority = vresp->extract_U32(); - tag.iLifetime = vresp->extract_U32(); - tag.bIsDeleted = true; - - char *strChannelName = vresp->extract_String(); - strncpy(tag.strChannelName, strChannelName, sizeof(tag.strChannelName) - 1); - - char *strTitle = vresp->extract_String(); - strncpy(tag.strTitle, strTitle, sizeof(tag.strTitle) - 1); - - char *strPlotOutline = vresp->extract_String(); - strncpy(tag.strPlotOutline, strPlotOutline, sizeof(tag.strPlotOutline) - 1); - - char *strPlot = vresp->extract_String(); - strncpy(tag.strPlot, strPlot, sizeof(tag.strPlot) - 1); - - char *strDirectory = vresp->extract_String(); - strncpy(tag.strDirectory, strDirectory, sizeof(tag.strDirectory) - 1); - - strRecordingId.Format("%i", vresp->extract_U32()); - strncpy(tag.strRecordingId, strRecordingId.c_str(), sizeof(tag.strRecordingId) - 1); - - PVR->TransferRecordingEntry(handle, &tag); - - delete[] strChannelName; - delete[] strTitle; - delete[] strPlotOutline; - delete[] strPlot; - delete[] strDirectory; - } - - delete vresp; - - return PVR_ERROR_NO_ERROR; -} - -PVR_ERROR cVNSIData::UndeleteRecording(const PVR_RECORDING& recinfo) -{ - cRequestPacket vrp; - if (!vrp.init(VNSI_RECORDINGS_DELETED_UNDELETE)) - { - XBMC->Log(LOG_ERROR, "%s - Can't init cRequestPacket", __FUNCTION__); - return PVR_ERROR_UNKNOWN; - } - - if (!vrp.add_U32(atoi(recinfo.strRecordingId))) - return PVR_ERROR_UNKNOWN; - - cResponsePacket* vresp = ReadResult(&vrp); - if (vresp == NULL || vresp->noResponse()) - { - delete vresp; - return PVR_ERROR_UNKNOWN; - } - - uint32_t returnCode = vresp->extract_U32(); - delete vresp; - - switch(returnCode) - { - case VNSI_RET_DATALOCKED: - return PVR_ERROR_FAILED; - - case VNSI_RET_RECRUNNING: - return PVR_ERROR_RECORDING_RUNNING; - - case VNSI_RET_DATAINVALID: - return PVR_ERROR_INVALID_PARAMETERS; - - case VNSI_RET_ERROR: - return PVR_ERROR_SERVER_ERROR; - } - - return PVR_ERROR_NO_ERROR; -} - -PVR_ERROR cVNSIData::DeleteAllRecordingsFromTrash() -{ - cRequestPacket vrp; - if (!vrp.init(VNSI_RECORDINGS_DELETED_DELETE_ALL)) - { - XBMC->Log(LOG_ERROR, "%s - Can't init cRequestPacket", __FUNCTION__); - return PVR_ERROR_UNKNOWN; - } - - cResponsePacket* vresp = ReadResult(&vrp); - if (vresp == NULL || vresp->noResponse()) - { - delete vresp; - return PVR_ERROR_UNKNOWN; - } - - uint32_t returnCode = vresp->extract_U32(); - delete vresp; - - switch(returnCode) - { - case VNSI_RET_DATALOCKED: - return PVR_ERROR_FAILED; - - case VNSI_RET_RECRUNNING: - return PVR_ERROR_RECORDING_RUNNING; - - case VNSI_RET_DATAINVALID: - return PVR_ERROR_INVALID_PARAMETERS; - - case VNSI_RET_ERROR: - return PVR_ERROR_SERVER_ERROR; - } - - return PVR_ERROR_NO_ERROR; -} bool cVNSIData::OnResponsePacket(cResponsePacket* pkt) { diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vdr.vnsi/src/VNSIData.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vdr.vnsi/src/VNSIData.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vdr.vnsi/src/VNSIData.h 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vdr.vnsi/src/VNSIData.h 2015-04-01 08:50:11.000000000 +0000 @@ -41,7 +41,6 @@ bool Login(); bool SupportChannelScan(); - bool SupportRecordingsUndelete(); bool EnableStatusInterface(bool onOff); bool GetDriveSpace(long long *total, long long *used); @@ -66,11 +65,6 @@ PVR_ERROR RenameRecording(const PVR_RECORDING& recinfo, const char* newname); PVR_ERROR DeleteRecording(const PVR_RECORDING& recinfo); PVR_ERROR GetRecordingEdl(const PVR_RECORDING& recinfo, PVR_EDL_ENTRY edl[], int *size); - int GetDeletedRecordingsCount(); - PVR_ERROR GetDeletedRecordingsList(ADDON_HANDLE handle); - PVR_ERROR UndeleteRecording(const PVR_RECORDING& recording); - PVR_ERROR DeleteAllRecordingsFromTrash(); - PVR_ERROR UndeleteAllRecordingsFromTrash(); cResponsePacket* ReadResult(cRequestPacket* vrp); diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vdr.vnsi/src/VNSIDemux.cpp kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vdr.vnsi/src/VNSIDemux.cpp --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vdr.vnsi/src/VNSIDemux.cpp 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vdr.vnsi/src/VNSIDemux.cpp 2015-04-01 08:50:11.000000000 +0000 @@ -344,20 +344,6 @@ delete[] language; } - else if (codecId.Codec().codec_type == XBMC_CODEC_TYPE_RDS) - { - const char *language = resp->extract_String(); - uint32_t rel_channel_pid = resp->extract_U32(); - newStream.strLanguage[0] = language[0]; - newStream.strLanguage[1] = language[1]; - newStream.strLanguage[2] = language[2]; - newStream.strLanguage[3] = 0; - newStream.iIdentifier = -1; - - newStreams.push_back(newStream); - - delete[] language; - } else { m_streams.Clear(); diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vuplus/addon/addon.xml.in kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vuplus/addon/addon.xml.in --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vuplus/addon/addon.xml.in 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vuplus/addon/addon.xml.in 2015-04-01 08:50:11.000000000 +0000 @@ -1,12 +1,12 @@ - + Interfața Kodi pentru decodoare VU+ / Enigma2 Фронтэнд Kodi для тюнеров, основанных на VU+ /Enigma2 Rozhranie Kodi pre spoluprácu s prijímačmi VU+ / Enigma2 - Kodijev vmesnik za sprejemnike VU+ / Enigma2 + Kodi-jev vmesnik za sprejemnike VU+ / Enigma2 Frontend i Kodi'së për Aparate VU+ / Enigma2 Kodi Frontend för VU+/Enigma2 baserade dekodrar VU+ / Enigma2 alıcı kutuları için Kodi ön ucu @@ -95,7 +95,7 @@ Bahagian hadapan VU+; menyokong penstirman Langsung & Rakaman, EPG, Pemasa TV VU+ frontend; ondersteunt het streamen van LiveTV & Opnames, EPG, Timers VU+ frontend; støtte for Live TV & Opptak, EPG, Timere. - Klient VU+ obsługuje strumieniowanie kanałów radiowych i telewizyjnych, nagrywanie natychmiastowe i wg harmonogramu oraz funkcje przewodnika programów. + Klient VU+ wspiera strumieniowanie kanałów radiowych i telewizyjnych, nagrywanie natychmiastowe i wg harmonogramu oraz funkcje przewodnika programów. Frontend VU+ ; suporta transmissão de TV em Directo e Gravações, EPG, Temporizadores. VU+ frontend; suporta streaming de TV Ao Vivo e Gravações, EPG, agendamentos. Interfața VU+; suportă streaming programe TV și înregistrare, program electronic, cronometre - înregistrare programată diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vuplus/addon/changelog.txt kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vuplus/addon/changelog.txt --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vuplus/addon/changelog.txt 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vuplus/addon/changelog.txt 2015-04-01 08:50:11.000000000 +0000 @@ -1,15 +1,5 @@ -1.10.1 -- Updated to API v1.9.4 - -1.9.23 -- updated language files from Transifex - -1.9.22 -- updated language files from Transifex -- minor changes to conform with C++11 - 1.9.21 -- added getBackendHostname function +- platform fixes 1.9.20 - updated language files from Transifex diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vuplus/addon/resources/language/Basque/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vuplus/addon/resources/language/Basque/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vuplus/addon/resources/language/Basque/strings.po 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vuplus/addon/resources/language/Basque/strings.po 2015-04-01 08:50:11.000000000 +0000 @@ -24,10 +24,6 @@ msgid "Password" msgstr "Pasahitza" -msgctxt "#30012" -msgid "Webinterface Port" -msgstr "Webinterface-aren Portua" - msgctxt "#30018" msgid "General" msgstr "Orokorra" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vuplus/addon/resources/language/Icelandic/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vuplus/addon/resources/language/Icelandic/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vuplus/addon/resources/language/Icelandic/strings.po 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vuplus/addon/resources/language/Icelandic/strings.po 2015-04-01 08:50:11.000000000 +0000 @@ -112,10 +112,6 @@ msgid "Fetch picons from webinterface" msgstr "Sækja 'picon' frá vefviðmóti" -msgctxt "#30028" -msgid "Use Secure HTTP (https)" -msgstr "Nota öruggara HTTP (https)" - msgctxt "#30500" msgid "Disconnected from '%s'" msgstr "Aftengdur frá '%s'" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vuplus/addon/resources/language/Persian (Iran)/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vuplus/addon/resources/language/Persian (Iran)/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vuplus/addon/resources/language/Persian (Iran)/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vuplus/addon/resources/language/Persian (Iran)/strings.po 2015-04-01 08:50:11.000000000 +0000 @@ -27,15 +27,3 @@ msgctxt "#30018" msgid "General" msgstr "عمومی" - -msgctxt "#30019" -msgid "Channels" -msgstr "کانال ها" - -msgctxt "#30020" -msgid "Advanced" -msgstr "پیشرفته" - -msgctxt "#30021" -msgid "HTTP" -msgstr "HTTP" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vuplus/addon/resources/language/Polish/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vuplus/addon/resources/language/Polish/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vuplus/addon/resources/language/Polish/strings.po 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vuplus/addon/resources/language/Polish/strings.po 2015-04-01 08:50:11.000000000 +0000 @@ -42,7 +42,7 @@ msgctxt "#30010" msgid "Update Interval in minutes" -msgstr "Częstotliwość aktualizacji w minutach" +msgstr "Aktualizuj w interwale minut" msgctxt "#30011" msgid "Automatic Timerlist Cleanup" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vuplus/addon/resources/language/Serbian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vuplus/addon/resources/language/Serbian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vuplus/addon/resources/language/Serbian/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vuplus/addon/resources/language/Serbian/strings.po 2015-04-01 08:50:11.000000000 +0000 @@ -35,15 +35,3 @@ msgctxt "#30018" msgid "General" msgstr "Opšte" - -msgctxt "#30019" -msgid "Channels" -msgstr "Kanali" - -msgctxt "#30020" -msgid "Advanced" -msgstr "Napredno" - -msgctxt "#30021" -msgid "HTTP" -msgstr "HTTP" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vuplus/addon/resources/language/Tamil (India)/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vuplus/addon/resources/language/Tamil (India)/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vuplus/addon/resources/language/Tamil (India)/strings.po 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vuplus/addon/resources/language/Tamil (India)/strings.po 1970-01-01 00:00:00.000000000 +0000 @@ -1,41 +0,0 @@ -# Kodi Media Center language file -# Addon Name: VU+ / Enigma2 Client -# Addon id: pvr.vuplus -# Addon Provider: Joerg Dembski -msgid "" -msgstr "" -"Project-Id-Version: XBMC Main\n" -"Report-Msgid-Bugs-To: http://trac.xbmc.org/\n" -"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Kodi Translation Team\n" -"Language-Team: Tamil (India) (http://www.transifex.com/projects/p/xbmc-main/language/ta_IN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ta_IN\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgctxt "#30003" -msgid "Username" -msgstr "பயனர்பெயர்" - -msgctxt "#30004" -msgid "Password" -msgstr "அடையாளச் சொல்" - -msgctxt "#30018" -msgid "General" -msgstr "பொதுவானது" - -msgctxt "#30019" -msgid "Channels" -msgstr "சேனல்கள்" - -msgctxt "#30020" -msgid "Advanced" -msgstr "மேம்பட்ட" - -msgctxt "#30021" -msgid "HTTP" -msgstr "HTTP" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vuplus/addon/resources/language/Turkish/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vuplus/addon/resources/language/Turkish/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vuplus/addon/resources/language/Turkish/strings.po 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vuplus/addon/resources/language/Turkish/strings.po 2015-04-01 08:50:11.000000000 +0000 @@ -88,10 +88,6 @@ msgid "Recording folder on the receiver" msgstr "Alıcıdaki kayıt klasörü" -msgctxt "#30028" -msgid "Use Secure HTTP (https)" -msgstr "Güvenli HTTP kullan (https)" - msgctxt "#30500" msgid "Disconnected from '%s'" msgstr "'%s' Bağlantı kesilecek" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vuplus/addon/resources/language/Uzbek/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vuplus/addon/resources/language/Uzbek/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vuplus/addon/resources/language/Uzbek/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vuplus/addon/resources/language/Uzbek/strings.po 2015-04-01 08:50:11.000000000 +0000 @@ -31,7 +31,3 @@ msgctxt "#30019" msgid "Channels" msgstr "Kanallar" - -msgctxt "#30021" -msgid "HTTP" -msgstr "HTTP" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vuplus/project/VS2010Express/pvr.vuplus.vcxproj kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vuplus/project/VS2010Express/pvr.vuplus.vcxproj --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vuplus/project/VS2010Express/pvr.vuplus.vcxproj 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vuplus/project/VS2010Express/pvr.vuplus.vcxproj 2015-04-01 08:50:11.000000000 +0000 @@ -106,12 +106,6 @@ {bdc7d21d-9fd9-41aa-bec8-8b70e1448c50} - - - - - - diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vuplus/project/VS2010Express/pvr.vuplus.vcxproj.filters kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vuplus/project/VS2010Express/pvr.vuplus.vcxproj.filters --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vuplus/project/VS2010Express/pvr.vuplus.vcxproj.filters 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vuplus/project/VS2010Express/pvr.vuplus.vcxproj.filters 2015-04-01 08:50:11.000000000 +0000 @@ -30,10 +30,4 @@ Header Files - - - - - - - \ No newline at end of file + diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vuplus/src/client.cpp kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vuplus/src/client.cpp --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.vuplus/src/client.cpp 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.vuplus/src/client.cpp 2015-04-01 08:50:11.000000000 +0000 @@ -336,7 +336,6 @@ pCapabilities->bSupportsTV = true; pCapabilities->bSupportsRadio = true; pCapabilities->bSupportsRecordings = true; - pCapabilities->bSupportsRecordingsUndelete = false; pCapabilities->bSupportsRecordingFolders = true; pCapabilities->bSupportsTimers = true; pCapabilities->bSupportsChannelGroups = true; @@ -371,11 +370,6 @@ return strConnectionString.c_str(); } -const char *GetBackendHostname(void) -{ - return g_strHostname.c_str(); -} - PVR_ERROR GetDriveSpace(long long *iTotal, long long *iUsed) { return PVR_ERROR_SERVER_ERROR; @@ -405,7 +399,7 @@ return VuData->GetChannels(handle, bRadio); } -int GetRecordingsAmount(bool deleted) +int GetRecordingsAmount(void) { if (!VuData || !VuData->IsConnected()) return PVR_ERROR_SERVER_ERROR; @@ -413,7 +407,7 @@ return VuData->GetRecordingsAmount(); } -PVR_ERROR GetRecordings(ADDON_HANDLE handle, bool deleted) +PVR_ERROR GetRecordings(ADDON_HANDLE handle) { if (!VuData || !VuData->IsConnected()) return PVR_ERROR_SERVER_ERROR; @@ -555,13 +549,13 @@ PVR_ERROR GetStreamProperties(PVR_STREAM_PROPERTIES* pProperties) { return PVR_ERROR_NOT_IMPLEMENTED; } void DemuxAbort(void) { return; } DemuxPacket* DemuxRead(void) { return NULL; } -PVR_ERROR OpenDialogChannelScan(void) { return PVR_ERROR_NOT_IMPLEMENTED; } +PVR_ERROR DialogChannelScan(void) { return PVR_ERROR_NOT_IMPLEMENTED; } 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 OpenDialogChannelSettings(const PVR_CHANNEL &channel) { return PVR_ERROR_NOT_IMPLEMENTED; } -PVR_ERROR OpenDialogChannelAdd(const PVR_CHANNEL &channel) { return PVR_ERROR_NOT_IMPLEMENTED; } +PVR_ERROR DialogChannelSettings(const PVR_CHANNEL &channel) { return PVR_ERROR_NOT_IMPLEMENTED; } +PVR_ERROR DialogAddChannel(const PVR_CHANNEL &channel) { return PVR_ERROR_NOT_IMPLEMENTED; } bool OpenRecordedStream(const PVR_RECORDING &recording) { return false; } void CloseRecordedStream(void) {} int ReadRecordedStream(unsigned char *pBuffer, unsigned int iBufferSize) { return 0; } @@ -585,6 +579,4 @@ time_t GetPlayingTime() { return 0; } time_t GetBufferTimeStart() { return 0; } time_t GetBufferTimeEnd() { return 0; } -PVR_ERROR UndeleteRecording(const PVR_RECORDING& recording) { return PVR_ERROR_NOT_IMPLEMENTED; } -PVR_ERROR DeleteAllRecordingsFromTrash() { return PVR_ERROR_NOT_IMPLEMENTED; } } diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.wmc/addon/addon.xml.in kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.wmc/addon/addon.xml.in --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.wmc/addon/addon.xml.in 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.wmc/addon/addon.xml.in 2015-04-01 08:50:11.000000000 +0000 @@ -1,13 +1,13 @@  - - + + - Client PVR WMC PVR WMC klient - Cleient Recordydd WMC PVR WMC-Client Πελάτης PVR του WMC PVR WMC Client @@ -36,20 +34,16 @@ PVR WMC klijent PVR WMC Kliens Klien PVR WMC - PVR WMC Biðlari - Client PVR WMC PVR WMC 클라이언트 PVR WMC klientas - PVR WMC клиент PVR WMC Cliënt Klient TV dla WMC Cliente PVR WMC Cliente de PVR WMC Клиент PVR WMC PVR WMC klient - Odjemalec PVR WMC + PVR WMC Odjemalec PVR WMC-klient - PVR WMC İstemcisi Клієнт PVR WMC WMC PVR 客户端 Edice pro @OS@ @ARCHITECTURE@. PVR klient pro použití nahrávacích a EPG služeb Windows Media Centra. Díky pro Tomba73 a Hoopsdavis. Speciální díky pro DBurckh. @@ -63,22 +57,17 @@ Edición @OS@ @ARCHITECTURE@. Un cliente A PVR para interactuar con los servicios Recording & EPG de Windows Media Center. Gracias a Tomba73 y Hoopsdavis. Agradecimientos especiales a DBurckh. @OS@ @ARCHITECTURE@ Edition. Un client PVR à l'interface avec les services d'enregistrement et de EPG de Windows Media Center. Merci à Tomba73 et Hoopsdavis. Un merci spécial à DBurckh. Édition @ARCHITECTURE@ @SE@. Un client de numériscope pour interfacer avec les services d'enregistrement et de GÉP du Centre Multimédia Windows. Merci à Tomba73 et Hoopsdavis. Un grand merci à DBurckh. - Edición @OS@ @ARCHITECTURE@. Un cliente PVR para os servizos de Gravación e Guía do Windows Media Center. Grazas a Tomba73 e Hoopsdavis. Grazas especiais a DBurckh. גרסת @OS@ @ARCHITECTURE@. לקוח טלוויזיה חיה של Windows Media Center. תומך בהזרמת שידורים חיים והקלטות, הצגת לוח שידורים ותזמון הקלטות. @OS@ @ARCHITECTURE@ izdanje. PVR klijent za povezivanje sa snimanjima i EPG uslugom Windows Media Centra.. Zahvaljujemo Tomba73 i Hoopsdavis. Posebna zahvala DBurckh. @OS@ @ARCHITECTURE@ Kiadás. Egy PVR kliens a Windows Media Center felvételeihez és EPG szolgáltatáshoz. Köszönet: JeffreyF, Tomba73, Hoopsdavis. Különleges köszönet: DBurckh. Edisi @OS@ @ARCHITECTURE@. Sebuah klien PVR untuk berhubungan dengan Perekaman Windows Media Center dan layanan EPG. Terimakasih untuk Tomba73 dan Hoopsdavis. Terimakasih khusus untuk DBurckh. - @OS@ @ARCHITECTURE@ Útgáfa. PVR Biðlari til að tala við Windows Media Center's Upptöku og rafræna dagskrárþjónustur. Þakkir fá Tomba73 og Hoopsdavis. Sérstakar þakkir fær DBurckh. - Edizione @OS@ @ARCHITECTURE@. Un client PVR per interfacciarsi con i servizi di registrazione ed EPG di Windows Media Center. Grazie a Tomba73 e Hoopsdavis. Un ringraziamento speciale a DBurckh. @OS@ @ARCHITECTURE@ Edition. Windows Media Center의 녹화 및 EPG 서비스와 연결되는 PVR 클라이언트입니다. Tomba73 과 Hoopsdavis 에게 감사드립니다. DBurckh 에게 특별한 감사의 말을 남깁니다. @OS@ @ARCHITECTURE@ leidimas. PVR kliento sąsaja su Windows Media Center's įrašymo ir EPG paslaugomis. Dėkojame Tomba73 ir Hoopsdavis. Ypatingai ačiū DBurckh. - @OS@ @ARCHITECTURE@ едиција. PVR клиент кој служи како интерфејс со EPG и сервисите за снимање на Windows Media Center. Благодарност кон Tomba73 и Hoopsdavis. Особено благодарност кон DBurckh. @OS@ @ARCHITECTUUR@ Editie. Een PVR cliënt voor de samenwerking met Windows mediacenter`s opnemen en EPG service met dan aan Tomba73 and Hoopsdavis. Special thanks to DBurckh. Edycja dla @OS@ @ARCHITECTURE@. Klient TV usług nagrywania i przewodnika programów dla Windows Media Center. Podziękowania dla Tomba73 i Hoopsdavis. Specjalne podziękowania dla DBurckh. @ OS @ @ ARQUITETURA @ Edition. Um cliente de PVR para fazer a interface com a gravação e serviços dev EPG do Windows Media Center. Graças a Tomba73 e Hoopsdavis. Um agradecimento especial a DBurckh. Edição @OS@ @ARCHITECTURE@. Um cliente de PVR para fazer a ponte com recurso de gravação e serviços de EPG do Windows Media Center. Obrigado Tomba73 e Hoopsdavis. Agradecimento Especial a DBurckh. Редакция @OS@ @ARCHITECTURE@.Клиент PVR для взаимодействия с записью Windows Media Center и сервисом EPG. Благодарности Tomba73 и Hoopsdavis. Особые благодарности DBurckh. - @OS@ izdaja @ARCHITECTURE@. Odjemalec PVR kot vmesnik za storitve snemanja in EPG na Windows Media Center. Zahvale: Tomba73 in Hoopsdavis. Posebna zahvala: DBurckh. @OS@ @ARCHITECTURE@ Utgåva. En PVR-klient för att hantera Windows Media Centers inspelnings- och EPG-tjänst. Tack till Tomba73 och Hoopsdavis. Speciellt tack till DBurckh. @OS@ @ARCHITECTURE@ 版。针对 Windows 媒体中心录像和电子节目单服务的 PVR 客户端界面。感谢 Tomba73 和 Hoopsdavis,特别感谢 DBurckh。 Това е експериментален софтуер. Използвайте го на свой собствен риск. @@ -105,7 +94,6 @@ 이것은 실험적인 소프트웨어 입니다. 본인의 책임하에 사용해주세요. Tai yra eksperimentinė programinė įranga. Naudodami ją prisiimate visą riziką. Šī ir eksperimentāla programmatūra. Izmantojiet paši uz savu risku. - Ова е експериментален софтвер. Користи на сопствен ризик. Dit is experimentele software. gebruik op eigen risico. Dette er en ekspermitell programvare. Benytt på egen risiko. Oprogramowanie nadal jest w fazie rozwoju i jest niestabilne! Autorzy w żaden sposób nie są odpowiedzialni za nieudane nagrania, błędy w planie nagrań, zmarnowany czas ani jakiekolwiek inne niepożądane efekty. @@ -113,7 +101,7 @@ Este é um trabalho em progresso. Use a seu próprio risco Это экспериментальное ПО. Используйте под свою ответственность. Toto je experimentálny softvér. Používajte ho preto na vlastné riziko. - To je eksperimentalna programska oprema. Uporaba na lastno odgovornost. + To je eksperimentalena programska oprema. Uporaba na lastno odgovornost Detta är en experimentell mjukvara. Används på egen risk. Bu deneysel bir yazılımdır. Kullanım riski kendi sorumluluğunuzdadır. Це експериментальне програмне забезпечення. Використовуйте на свій страх і ризик. diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.wmc/addon/changelog.txt kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.wmc/addon/changelog.txt --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.wmc/addon/changelog.txt 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.wmc/addon/changelog.txt 2015-04-01 08:50:11.000000000 +0000 @@ -1,26 +1,11 @@ -0.5.1 -- Updated to PVR API v1.9.4 -- Updated to GUI API v5.8.0 - -0.4.4 -- Updated Language files from Transifex - -0.4.003 -- Revise previous ServerWMC stream stuttering fix - -0.4.002 -- Updated Language files from Transifex -- Minor changes to conform with C++11 - -0.4.001 -- Kodi 15 versions will now be numbered 0.4.* -- fix stuttering when using new ServerWMC streams of completed WTV recordings +0.3.112 +- platform fixes 0.3.111 -- Updated Language files from Transifex +- Revise previous ServerWMC stream stuttering fix 0.3.110 -- added getBackendHostname function +- fix stuttering when using new ServerWMC streams of completed WTV recordings 0.3.109 - tidy up display of PVR data for Kodi (connection string, backend drive space total/used) @@ -117,4 +102,4 @@ - fixed ‘vector’ class connection crashes when socket is not available 0.1.6 - - first public release + - first public release \ No newline at end of file diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.wmc/addon/resources/language/Bulgarian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.wmc/addon/resources/language/Bulgarian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.wmc/addon/resources/language/Bulgarian/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.wmc/addon/resources/language/Bulgarian/strings.po 2015-04-01 08:50:11.000000000 +0000 @@ -28,10 +28,6 @@ msgid "Recording file not found" msgstr "Записаният файл не е открит" -msgctxt "#30026" -msgid "Sending WakeOnLAN to server..." -msgstr "Изпращане на WakeOnLAN към сървъра..." - msgctxt "#30101" msgid "Record this episode only" msgstr "Запиши само този епизод" @@ -44,14 +40,6 @@ msgid "Any Channel" msgstr "Всеки канал" -msgctxt "#30111" -msgid "Anytime" -msgstr "Всеки път" - msgctxt "#30120" msgid "Delete Timer" msgstr "Изтрий брояча" - -msgctxt "#30122" -msgid "Delete the entire series" -msgstr "Изтрий целия сериал" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.wmc/addon/resources/language/Catalan/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.wmc/addon/resources/language/Catalan/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.wmc/addon/resources/language/Catalan/strings.po 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.wmc/addon/resources/language/Catalan/strings.po 2015-04-01 08:50:11.000000000 +0000 @@ -24,22 +24,6 @@ msgid "Port Number" msgstr "Número de port" -msgctxt "#30100" -msgid "Recording Preference" -msgstr "Preferència d'enregistrament" - -msgctxt "#30102" -msgid "Record the series" -msgstr "Enregistra les sèries" - -msgctxt "#30103" -msgid "Show type:" -msgstr "Tipus de Xou:" - -msgctxt "#30105" -msgid "New only" -msgstr "Només nous" - msgctxt "#30106" msgid "Live only" msgstr "Només en directe" @@ -48,18 +32,6 @@ msgid "Channel:" msgstr "Canal:" -msgctxt "#30108" -msgid "Any Channel" -msgstr "Qualsevol canal" - -msgctxt "#30110" -msgid "Airtime:" -msgstr "Temps en l'aire:" - msgctxt "#30111" msgid "Anytime" msgstr "En qualsevol moment" - -msgctxt "#30120" -msgid "Delete Timer" -msgstr "Elimina Comptador" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.wmc/addon/resources/language/Danish/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.wmc/addon/resources/language/Danish/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.wmc/addon/resources/language/Danish/strings.po 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.wmc/addon/resources/language/Danish/strings.po 2015-04-01 08:50:11.000000000 +0000 @@ -16,66 +16,10 @@ "Language: da\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -msgctxt "#30000" -msgid "Server Hostname or IP" -msgstr "Server værtsnavn eller IP-adresse" - -msgctxt "#30002" -msgid "Port Number" -msgstr "Portnummer" - -msgctxt "#30004" -msgid "No video data found on this channel" -msgstr "Ingen video data fundet på denne kanal" - -msgctxt "#30005" -msgid "Tuner is needed for recording" -msgstr "En TV-tuner er påkrævet for at optage" - -msgctxt "#30008" -msgid "Recording file not found" -msgstr "Optagelsesfil ikke fundet" - -msgctxt "#30012" -msgid "Channel content is protected" -msgstr "Kanalens indhold er beskyttet" - -msgctxt "#30025" -msgid "Use WakeOnLAN to wake up server" -msgstr "Brug netværks-opvågning til at vække serveren" - -msgctxt "#30026" -msgid "Sending WakeOnLAN to server..." -msgstr "Sender opvågningssignal til server..." - -msgctxt "#30100" -msgid "Recording Preference" -msgstr "Optagelses præference" - msgctxt "#30101" msgid "Record this episode only" msgstr "Record this episode only" -msgctxt "#30102" -msgid "Record the series" -msgstr "Optag serien" - -msgctxt "#30103" -msgid "Show type:" -msgstr "Vis type:" - -msgctxt "#30104" -msgid "New and rerun" -msgstr "Nye og genudsendelser" - -msgctxt "#30105" -msgid "New only" -msgstr "Udelukkende nye" - -msgctxt "#30106" -msgid "Live only" -msgstr "Udelukkende Live" - msgctxt "#30107" msgid "Channel:" msgstr "Kanal:" @@ -84,22 +28,10 @@ msgid "Any Channel" msgstr "Hvilken som helst kanal" -msgctxt "#30110" -msgid "Airtime:" -msgstr "Visningstid" - msgctxt "#30111" msgid "Anytime" msgstr "Vilkårligt tidspunkt" -msgctxt "#30120" -msgid "Delete Timer" -msgstr "Slet tidspunkt" - -msgctxt "#30121" -msgid "Delete this episode timer only" -msgstr "Slet kun dette episodetidspunkt" - msgctxt "#30122" msgid "Delete the entire series" msgstr "Delete the entire series" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.wmc/addon/resources/language/Finnish/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.wmc/addon/resources/language/Finnish/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.wmc/addon/resources/language/Finnish/strings.po 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.wmc/addon/resources/language/Finnish/strings.po 2015-04-01 08:50:11.000000000 +0000 @@ -80,10 +80,6 @@ msgid "Refresh SignalStatus Interval (sec)" msgstr "Päivitä SignalStatus-välimatka (sek)" -msgctxt "#30101" -msgid "Record this episode only" -msgstr "Tallenna vain tämä jakso" - msgctxt "#30107" msgid "Channel:" msgstr "Kanava:" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.wmc/addon/resources/language/French (Canada)/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.wmc/addon/resources/language/French (Canada)/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.wmc/addon/resources/language/French (Canada)/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.wmc/addon/resources/language/French (Canada)/strings.po 2015-04-01 08:50:11.000000000 +0000 @@ -94,7 +94,7 @@ msgctxt "#30019" msgid "ServerWMC version update is available (%s)" -msgstr "Une mise à jour de version (%s) est proposée pour ServerWMC" +msgstr "Une mise à jour de version (%s) est disponible pour ServerWMC" msgctxt "#30020" msgid "All tuners for this channel are busy" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.wmc/addon/resources/language/Icelandic/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.wmc/addon/resources/language/Icelandic/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.wmc/addon/resources/language/Icelandic/strings.po 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.wmc/addon/resources/language/Icelandic/strings.po 2015-04-01 08:50:11.000000000 +0000 @@ -80,10 +80,6 @@ msgid "Refresh SignalStatus Interval (sec)" msgstr "Tími á milli SignalStatus upplýsinga (sek)" -msgctxt "#30016" -msgid "Store Resume/Watched status on server" -msgstr "Vista 'Halda áfram/Horft á' stöðu á miðlara" - msgctxt "#30017" msgid "Recorded TV folder not found" msgstr "Sjónvarpsupptökumappa fannst ekki" @@ -92,10 +88,6 @@ msgid "Recorded TV folder cannot be opened" msgstr "Ekki hægt að opna sjónvarpsupptökumöppu" -msgctxt "#30019" -msgid "ServerWMC version update is available (%s)" -msgstr "Uppfærsla á ServerWMC útgáfu er fáanleg (%s)" - msgctxt "#30020" msgid "All tuners for this channel are busy" msgstr "Allir móttakarar fyrir þessa rás eru uppteknir" @@ -116,18 +108,6 @@ msgid "Recording stream exited early" msgstr "Upptökustraumur hætti snemma" -msgctxt "#30025" -msgid "Use WakeOnLAN to wake up server" -msgstr "Nota VaknaViðNet (WakeOnLAN) til að vekja miðlara" - -msgctxt "#30026" -msgid "Sending WakeOnLAN to server..." -msgstr "Sendi VaknaViðNet (WakeOnLAN) til miðlara..." - -msgctxt "#30027" -msgid "Time drift between client and backend of %s minutes" -msgstr "Tímaskekkja á milli biðlara og bakenda uppá %s mínútur" - msgctxt "#30100" msgid "Recording Preference" msgstr "Uppsetning Upptakna" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.wmc/addon/resources/language/Korean/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.wmc/addon/resources/language/Korean/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.wmc/addon/resources/language/Korean/strings.po 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.wmc/addon/resources/language/Korean/strings.po 2015-04-01 08:50:11.000000000 +0000 @@ -18,7 +18,7 @@ msgctxt "#30000" msgid "Server Hostname or IP" -msgstr "서버 호스트네임 또는 IP 주소" +msgstr "서버의 호스트네임 혹은 IP 주소" msgctxt "#30001" msgid "Keep IP address to 127.0.0.1, if server is running on this same system" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.wmc/addon/resources/language/Macedonian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.wmc/addon/resources/language/Macedonian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.wmc/addon/resources/language/Macedonian/strings.po 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.wmc/addon/resources/language/Macedonian/strings.po 2015-04-01 08:50:11.000000000 +0000 @@ -16,170 +16,6 @@ "Language: mk\n" "Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n" -msgctxt "#30000" -msgid "Server Hostname or IP" -msgstr "Hostname или IP на серверот" - -msgctxt "#30001" -msgid "Keep IP address to 127.0.0.1, if server is running on this same system" -msgstr "Задржи ја IP адресата 127.0.0.1, ако овој компјутер е серверот" - -msgctxt "#30002" -msgid "Port Number" -msgstr "Број на порта" - -msgctxt "#30003" -msgid "Stream timeout, unknown problem" -msgstr "Истече врската кон stream-от, непознат проблем" - -msgctxt "#30004" -msgid "No video data found on this channel" -msgstr "Нема видео податоци на овој канал" - -msgctxt "#30005" -msgid "Tuner is needed for recording" -msgstr "Потребен е тјунер за снимање" - -msgctxt "#30006" -msgid "Recording delete failed, file in use or write protected" -msgstr "Не може да се избрише снимката, фајлот се користи или е заштитен" - -msgctxt "#30007" -msgid "Recording delete failed, recorded file doesn't exist" -msgstr "Не може да се избрише снимката, фајлот не постои" - -msgctxt "#30008" -msgid "Recording file not found" -msgstr "Снимката не е најдена" - -msgctxt "#30009" -msgid "Alternate channel chosen: " -msgstr "Алтернативен одбран канал:" - -msgctxt "#30010" -msgid "Alternate time chosen: " -msgstr "Алтернативно одбрано време:" - -msgctxt "#30011" -msgid "Can't start, tuner is no longer available" -msgstr "Тјунерот повеќе не е достапен" - -msgctxt "#30012" -msgid "Channel content is protected" -msgstr "Содржината на каналот е заштитена" - -msgctxt "#30013" -msgid "End time increased by " -msgstr "Крајното време зголемено за" - -msgctxt "#30014" -msgid "Enable SignalStatus calls" -msgstr "Овозможи SignalStatus повици" - -msgctxt "#30015" -msgid "Refresh SignalStatus Interval (sec)" -msgstr "Обнови го интервалот за SignalStatus (сек.)" - -msgctxt "#30016" -msgid "Store Resume/Watched status on server" -msgstr "Зачувај го статусот за Изгледани/Продолжи на серверот" - -msgctxt "#30017" -msgid "Recorded TV folder not found" -msgstr "Фолдерот за ТВ снимки не е најден" - -msgctxt "#30018" -msgid "Recorded TV folder cannot be opened" -msgstr "Не може да се отвори фолдерот за ТВ снимки" - -msgctxt "#30019" -msgid "ServerWMC version update is available (%s)" -msgstr "Постои нова верзија на ServerWMC (%s)" - -msgctxt "#30020" -msgid "All tuners for this channel are busy" -msgstr "Сите тјунери за овој канал се зафатени" - -msgctxt "#30021" -msgid "LiveTV timed-out" -msgstr "Не беше остварена врска со програмата" - -msgctxt "#30022" -msgid "LiveTV error, exited early" -msgstr "Грешка со програмата во живо, прекината е пред време" - -msgctxt "#30023" -msgid "Recording stream timed-out" -msgstr "Му истече времето на stream-от за снимање" - -msgctxt "#30024" -msgid "Recording stream exited early" -msgstr "Рано е прекинат stream-от на снимката" - -msgctxt "#30025" -msgid "Use WakeOnLAN to wake up server" -msgstr "Користи WakeOnLAN за будење на серверот" - -msgctxt "#30026" -msgid "Sending WakeOnLAN to server..." -msgstr "Праќање на WakeOnLAN до серверот..." - -msgctxt "#30027" -msgid "Time drift between client and backend of %s minutes" -msgstr "Постои временска разлика од %s минути меѓу клиентот и backend-ot" - -msgctxt "#30100" -msgid "Recording Preference" -msgstr "Преференција за снимање" - -msgctxt "#30101" -msgid "Record this episode only" -msgstr "Сними ја само оваа епизода" - -msgctxt "#30102" -msgid "Record the series" -msgstr "Сними ја серијата" - -msgctxt "#30103" -msgid "Show type:" -msgstr "Тип на шоу:" - -msgctxt "#30104" -msgid "New and rerun" -msgstr "Нови и повторени" - -msgctxt "#30105" -msgid "New only" -msgstr "Само нови" - -msgctxt "#30106" -msgid "Live only" -msgstr "Само во живо" - msgctxt "#30107" msgid "Channel:" msgstr "Канал:" - -msgctxt "#30108" -msgid "Any Channel" -msgstr "Сите канали" - -msgctxt "#30110" -msgid "Airtime:" -msgstr "Време на емитување" - -msgctxt "#30111" -msgid "Anytime" -msgstr "Секое време" - -msgctxt "#30120" -msgid "Delete Timer" -msgstr "Избриши го тајмерот" - -msgctxt "#30121" -msgid "Delete this episode timer only" -msgstr "Избриши го тајмерот само за оваа епизода" - -msgctxt "#30122" -msgid "Delete the entire series" -msgstr "Избриши ја целата серија" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.wmc/addon/resources/language/Persian (Iran)/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.wmc/addon/resources/language/Persian (Iran)/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.wmc/addon/resources/language/Persian (Iran)/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.wmc/addon/resources/language/Persian (Iran)/strings.po 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -# Kodi Media Center language file -# Addon Name: PVR WMC Client -# Addon id: pvr.wmc -# Addon Provider: KrustyReturns and scarecrow420 -msgid "" -msgstr "" -"Project-Id-Version: XBMC Main\n" -"Report-Msgid-Bugs-To: http://trac.xbmc.org/\n" -"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Kodi Translation Team\n" -"Language-Team: Persian (Iran) (http://www.transifex.com/projects/p/xbmc-main/language/fa_IR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fa_IR\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgctxt "#30107" -msgid "Channel:" -msgstr "کانال:" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.wmc/addon/resources/language/Polish/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.wmc/addon/resources/language/Polish/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.wmc/addon/resources/language/Polish/strings.po 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.wmc/addon/resources/language/Polish/strings.po 2015-04-01 08:50:11.000000000 +0000 @@ -78,7 +78,7 @@ msgctxt "#30015" msgid "Refresh SignalStatus Interval (sec)" -msgstr "Częstotliwość odświeżania jakości sygnału (sec)" +msgstr "Interwał odświeżania jakości sygnału (sec)" msgctxt "#30016" msgid "Store Resume/Watched status on server" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.wmc/addon/resources/language/Slovenian/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.wmc/addon/resources/language/Slovenian/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.wmc/addon/resources/language/Slovenian/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.wmc/addon/resources/language/Slovenian/strings.po 2015-04-01 08:50:11.000000000 +0000 @@ -18,156 +18,44 @@ msgctxt "#30000" msgid "Server Hostname or IP" -msgstr "Ime strežnika ali IP" +msgstr "Ime serverja ali IP" msgctxt "#30001" msgid "Keep IP address to 127.0.0.1, if server is running on this same system" -msgstr "Obdrži naslov IP 127.0.0.1, če teče strežnik na istem istemu" +msgstr "Obdrži IP naslov 127.0.0.1, če dela strežnik na istem istemu" msgctxt "#30002" msgid "Port Number" msgstr "Številka vrat" -msgctxt "#30003" -msgid "Stream timeout, unknown problem" -msgstr "Časovna prekoračitev pretoka, razlog ni znan" - msgctxt "#30004" msgid "No video data found on this channel" -msgstr "Za ta program slika ni na voljo" +msgstr "Na tem kanalu ni video podatkov" msgctxt "#30005" msgid "Tuner is needed for recording" msgstr "Za snemanje potrebujete tuner" -msgctxt "#30006" -msgid "Recording delete failed, file in use or write protected" -msgstr "Brisanje posnetka je spodletelo, datoteka je v rabi ali zaščitena pred pisanjem" - -msgctxt "#30007" -msgid "Recording delete failed, recorded file doesn't exist" -msgstr "Brisanje posnetka je spodletelo, posneta datoteka ne obstaja" - -msgctxt "#30008" -msgid "Recording file not found" -msgstr "Posnetka ni mogoče najti" - -msgctxt "#30009" -msgid "Alternate channel chosen: " -msgstr "Izbran nadomestni program:" - -msgctxt "#30010" -msgid "Alternate time chosen: " -msgstr "Izbran nadomestni čas:" - -msgctxt "#30011" -msgid "Can't start, tuner is no longer available" -msgstr "Ni mogoče zagnati, sprejemnik ni več na voljo" - -msgctxt "#30012" -msgid "Channel content is protected" -msgstr "Vsebina programa je zaščitena" - -msgctxt "#30013" -msgid "End time increased by " -msgstr "Čas konca povečan za" - -msgctxt "#30014" -msgid "Enable SignalStatus calls" -msgstr "Omogoči klice SignalStatus" - -msgctxt "#30015" -msgid "Refresh SignalStatus Interval (sec)" -msgstr "Interval osveževanja SignalStatus (s)" - -msgctxt "#30016" -msgid "Store Resume/Watched status on server" -msgstr "Shrani stanje Nadaljuj/Pogledano na strežniku" - -msgctxt "#30017" -msgid "Recorded TV folder not found" -msgstr "Mape posnetkov TV ni mogoče najti" - -msgctxt "#30018" -msgid "Recorded TV folder cannot be opened" -msgstr "Mape posnetkov TV ni mogoče odpreti" - -msgctxt "#30019" -msgid "ServerWMC version update is available (%s)" -msgstr "Na voljo je posodobitev različice ServerWMC (%s)" - -msgctxt "#30020" -msgid "All tuners for this channel are busy" -msgstr "Vsi sprejemniki za ta program so zasedeni" - -msgctxt "#30021" -msgid "LiveTV timed-out" -msgstr "TV v živo je prekoračila čas" - -msgctxt "#30022" -msgid "LiveTV error, exited early" -msgstr "Napaka TV v živo, prezgodnji izhod" - -msgctxt "#30023" -msgid "Recording stream timed-out" -msgstr "Snemalni pretok je prekoračil čas" - -msgctxt "#30024" -msgid "Recording stream exited early" -msgstr "Snemalni pretok se je prezgodaj zaprl" - -msgctxt "#30025" -msgid "Use WakeOnLAN to wake up server" -msgstr "Uporabi signal WakeOnLAN za vklop strežnika" - -msgctxt "#30026" -msgid "Sending WakeOnLAN to server..." -msgstr "Pošiljanje signala WakeOnLAN strežniku ..." - -msgctxt "#30027" -msgid "Time drift between client and backend of %s minutes" -msgstr "%s-minutni časovni zamik med odjemalcem in hrbtenico" - msgctxt "#30100" msgid "Recording Preference" msgstr "Nastavitve snemanja" msgctxt "#30101" msgid "Record this episode only" -msgstr "Posnemi le to epizodo" - -msgctxt "#30102" -msgid "Record the series" -msgstr "Snemaj nadaljevanko" - -msgctxt "#30103" -msgid "Show type:" -msgstr "Vrsta oddaje:" - -msgctxt "#30104" -msgid "New and rerun" -msgstr "Nove in ponovitve" +msgstr "Posnemi samo to epizodo" msgctxt "#30105" msgid "New only" -msgstr "Samo novo" +msgstr "Samo nov" msgctxt "#30106" msgid "Live only" -msgstr "Samo v živo" +msgstr "V živo" msgctxt "#30107" msgid "Channel:" msgstr "Program:" -msgctxt "#30108" -msgid "Any Channel" -msgstr "Katerikoli program" - -msgctxt "#30110" -msgid "Airtime:" -msgstr "Termin predvajanja:" - msgctxt "#30111" msgid "Anytime" msgstr "Kadarkoli" @@ -176,10 +64,6 @@ msgid "Delete Timer" msgstr "Izbriši časovnik" -msgctxt "#30121" -msgid "Delete this episode timer only" -msgstr "Izbriši samo ta časovnik epizod" - msgctxt "#30122" msgid "Delete the entire series" msgstr "Izbriši celotno serijo" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.wmc/addon/resources/language/Spanish (Mexico)/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.wmc/addon/resources/language/Spanish (Mexico)/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.wmc/addon/resources/language/Spanish (Mexico)/strings.po 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.wmc/addon/resources/language/Spanish (Mexico)/strings.po 2015-04-01 08:50:11.000000000 +0000 @@ -16,14 +16,6 @@ "Language: es_MX\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -msgctxt "#30101" -msgid "Record this episode only" -msgstr "Grabar solo este episodio" - msgctxt "#30107" msgid "Channel:" msgstr "Canal:" - -msgctxt "#30122" -msgid "Delete the entire series" -msgstr "Eliminar serie completa" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.wmc/addon/resources/language/Tamil (India)/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.wmc/addon/resources/language/Tamil (India)/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.wmc/addon/resources/language/Tamil (India)/strings.po 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.wmc/addon/resources/language/Tamil (India)/strings.po 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -# Kodi Media Center language file -# Addon Name: PVR WMC Client -# Addon id: pvr.wmc -# Addon Provider: KrustyReturns and scarecrow420 -msgid "" -msgstr "" -"Project-Id-Version: XBMC Main\n" -"Report-Msgid-Bugs-To: http://trac.xbmc.org/\n" -"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Kodi Translation Team\n" -"Language-Team: Tamil (India) (http://www.transifex.com/projects/p/xbmc-main/language/ta_IN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ta_IN\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgctxt "#30107" -msgid "Channel:" -msgstr "சேனல்:" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.wmc/addon/resources/language/Turkish/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.wmc/addon/resources/language/Turkish/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.wmc/addon/resources/language/Turkish/strings.po 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.wmc/addon/resources/language/Turkish/strings.po 2015-04-01 08:50:11.000000000 +0000 @@ -24,90 +24,6 @@ msgid "Port Number" msgstr "Liman Numarası" -msgctxt "#30003" -msgid "Stream timeout, unknown problem" -msgstr "Akış zaman aşımı, bilinmeyen sorun" - -msgctxt "#30004" -msgid "No video data found on this channel" -msgstr "Bu kanalda video verisi bulunamadı" - -msgctxt "#30005" -msgid "Tuner is needed for recording" -msgstr "Kayıt için alıcı gereklidir." - -msgctxt "#30006" -msgid "Recording delete failed, file in use or write protected" -msgstr "Kayıt silme başarısız, dosya kullanımda veya yazma korumalı" - -msgctxt "#30007" -msgid "Recording delete failed, recorded file doesn't exist" -msgstr "Kayıt silme başarısız, kaydedilen dosya mevcut değil" - -msgctxt "#30008" -msgid "Recording file not found" -msgstr "Kayıt dosyası bulunamadı" - -msgctxt "#30009" -msgid "Alternate channel chosen: " -msgstr "Seçilen alternatif kanal:" - -msgctxt "#30010" -msgid "Alternate time chosen: " -msgstr "Seçilen alternatif zaman:" - -msgctxt "#30011" -msgid "Can't start, tuner is no longer available" -msgstr "Başlayamadı, alıcı uzun süre algılanamadı" - -msgctxt "#30012" -msgid "Channel content is protected" -msgstr "Kanal içeriği korumalı" - -msgctxt "#30017" -msgid "Recorded TV folder not found" -msgstr "Kaydedilenler klasörü bulunamadı" - -msgctxt "#30018" -msgid "Recorded TV folder cannot be opened" -msgstr "Kaydedilenler klasörü açılamadı" - -msgctxt "#30019" -msgid "ServerWMC version update is available (%s)" -msgstr "Sunucu WMC sürümü güncellemesi gerçekleşiyor (%s)" - -msgctxt "#30020" -msgid "All tuners for this channel are busy" -msgstr "Tüm alıcılar bu kanal için meşgul" - -msgctxt "#30021" -msgid "LiveTV timed-out" -msgstr "Canlı yayın zaman aşımına uğradı" - -msgctxt "#30022" -msgid "LiveTV error, exited early" -msgstr "Canlı yayın hatası, erken çıkıldı" - -msgctxt "#30023" -msgid "Recording stream timed-out" -msgstr "Kayıt akışı zaman aşımına uğradı" - -msgctxt "#30024" -msgid "Recording stream exited early" -msgstr "Kayıt akışından erken çıkıldı" - -msgctxt "#30025" -msgid "Use WakeOnLAN to wake up server" -msgstr "Sunucuyu uyandırmak için WakeOnLan özelliğini kullan" - -msgctxt "#30026" -msgid "Sending WakeOnLAN to server..." -msgstr "WakeOnLAN isteği sunucuya gönderiliyor" - -msgctxt "#30100" -msgid "Recording Preference" -msgstr "Kayıt Tercihi" - msgctxt "#30101" msgid "Record this episode only" msgstr "Sadece bu bölümü kaydet" @@ -120,10 +36,6 @@ msgid "Show type:" msgstr "Gösteri türü:" -msgctxt "#30104" -msgid "New and rerun" -msgstr "Yeni ve yeniden çalıştır" - msgctxt "#30105" msgid "New only" msgstr "Sadece yeni" @@ -140,10 +52,6 @@ msgid "Any Channel" msgstr "Herhangi Bir Kanal" -msgctxt "#30110" -msgid "Airtime:" -msgstr "Yayın süresi:" - msgctxt "#30111" msgid "Anytime" msgstr "Her Zaman" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.wmc/addon/resources/language/Welsh/strings.po kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.wmc/addon/resources/language/Welsh/strings.po --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.wmc/addon/resources/language/Welsh/strings.po 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.wmc/addon/resources/language/Welsh/strings.po 2015-04-01 08:50:11.000000000 +0000 @@ -16,10 +16,6 @@ "Language: cy\n" "Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;\n" -msgctxt "#30101" -msgid "Record this episode only" -msgstr "Recordio'r bennod yma" - msgctxt "#30107" msgid "Channel:" msgstr "Sianel:" @@ -31,7 +27,3 @@ msgctxt "#30111" msgid "Anytime" msgstr "Unrhyw bryd" - -msgctxt "#30122" -msgid "Delete the entire series" -msgstr "Dileu'r gyfres gyfan" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.wmc/src/client.cpp kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.wmc/src/client.cpp --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.wmc/src/client.cpp 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.wmc/src/client.cpp 2015-04-01 08:50:11.000000000 +0000 @@ -325,7 +325,6 @@ pCapabilities->bSupportsTV = true; pCapabilities->bSupportsRadio = true; pCapabilities->bSupportsRecordings = true; - pCapabilities->bSupportsRecordingsUndelete = false; pCapabilities->bSupportsTimers = true; pCapabilities->bSupportsChannelGroups = true; pCapabilities->bSupportsChannelScan = false; @@ -360,11 +359,6 @@ return strConnectionString.c_str(); } - const char *GetBackendHostname(void) - { - return g_strServerName.c_str(); - } - PVR_ERROR GetDriveSpace(long long *iTotal, long long *iUsed) { if (_wmc) @@ -481,14 +475,14 @@ } // recording file functions -PVR_ERROR GetRecordings(ADDON_HANDLE handle, bool deleted) + PVR_ERROR GetRecordings(ADDON_HANDLE handle) { if (_wmc) return _wmc->GetRecordings(handle); return PVR_ERROR_NO_ERROR; } - int GetRecordingsAmount(bool deleted) + int GetRecordingsAmount(void) { if (_wmc) return _wmc->GetRecordingsAmount(); @@ -686,12 +680,12 @@ } /** UNUSED API FUNCTIONS */ -PVR_ERROR OpenDialogChannelScan(void) { return PVR_ERROR_NOT_IMPLEMENTED; } + PVR_ERROR DialogChannelScan(void) { 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 OpenDialogChannelSettings(const PVR_CHANNEL &channel) { return PVR_ERROR_NOT_IMPLEMENTED; } -PVR_ERROR OpenDialogChannelAdd(const PVR_CHANNEL &channel) { return PVR_ERROR_NOT_IMPLEMENTED; } + PVR_ERROR DialogChannelSettings(const PVR_CHANNEL &channel) { return PVR_ERROR_NOT_IMPLEMENTED; } + PVR_ERROR DialogAddChannel(const PVR_CHANNEL &channel) { return PVR_ERROR_NOT_IMPLEMENTED; } void DemuxReset(void) {} void DemuxFlush(void) {} void DemuxAbort(void) {} @@ -704,7 +698,5 @@ time_t GetPlayingTime() { return 0; } time_t GetBufferTimeStart() { return 0; } time_t GetBufferTimeEnd() { return 0; } -PVR_ERROR UndeleteRecording(const PVR_RECORDING& recording) { return PVR_ERROR_NOT_IMPLEMENTED; } -PVR_ERROR DeleteAllRecordingsFromTrash() { return PVR_ERROR_NOT_IMPLEMENTED; } } diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.wmc/src/clientversion.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.wmc/src/clientversion.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.wmc/src/clientversion.h 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.wmc/src/clientversion.h 2015-04-01 08:50:11.000000000 +0000 @@ -23,5 +23,5 @@ inline CStdString PVRWMC_GetClientVersion() { - return "0.4.003"; // ALSO CHANGE IN REV NUMBER in 'addon.xml.in' + return "0.3.111"; // ALSO CHANGE IN REV NUMBER in 'addon.xml.in' } \ No newline at end of file diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.wmc/src/pvr2wmc.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.wmc/src/pvr2wmc.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.wmc/src/pvr2wmc.h 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.wmc/src/pvr2wmc.h 2015-04-01 08:50:11.000000000 +0000 @@ -80,8 +80,8 @@ PVR_ERROR SignalStatus(PVR_SIGNAL_STATUS &signalStatus); bool CheckErrorOnServer(); - void TriggerUpdates(std::vector results); - void ExtractDriveSpace(std::vector results); + void TriggerUpdates(vector results); + void ExtractDriveSpace(vector results); private: int _serverBuild; diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.wmc/src/Socket.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.wmc/src/Socket.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/addons/pvr.wmc/src/Socket.h 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/addons/pvr.wmc/src/Socket.h 2015-04-01 08:50:11.000000000 +0000 @@ -68,6 +68,7 @@ #error Platform specific socket support is not yet available on this platform! #endif +using namespace std; #include @@ -229,7 +230,7 @@ bool set_non_blocking ( const bool ); - bool ReadResponses(int &code, std::vector &lines); + bool ReadResponses(int &code, vector &lines); bool is_valid() const; diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/configure.ac kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/configure.ac --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/configure.ac 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/configure.ac 2015-04-01 08:50:11.000000000 +0000 @@ -5,7 +5,7 @@ AC_CONFIG_MACRO_DIR([m4]) -AM_INIT_AUTOMAKE([subdir-objects]) +AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION, [http://www.xbmc.org]) m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([no])]) diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/changelog kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/changelog --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/changelog 2015-02-20 11:28:09.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/changelog 2015-04-01 08:51:03.000000000 +0000 @@ -1,4 +1,4 @@ -kodi-pvr-addons (1.0.0~git20150220.1227-4657d8b-0~trusty) trusty; urgency=high +kodi-pvr-addons (1.0.0~git20150401.1050-4854fbe-0~trusty) trusty; urgency=high [Bernd Kuhls] * Enable Filmon PVR addon only when all dependencies were met diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/changelog.in kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/changelog.in --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/changelog.in 2015-02-20 11:27:45.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/changelog.in 2015-04-01 08:50:15.000000000 +0000 @@ -1,4 +1,4 @@ -kodi-pvr-addons (1.0.0~git20150220.1227-4657d8b-0~#DIST#) #DIST#; urgency=high +kodi-pvr-addons (1.0.0~git20150401.1050-4854fbe-0~#DIST#) #DIST#; urgency=high [Bernd Kuhls] * Enable Filmon PVR addon only when all dependencies were met diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/control kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/control --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/control 2015-02-20 11:28:09.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/control 2015-04-01 08:51:03.000000000 +0000 @@ -11,7 +11,7 @@ Package: kodi-pvr-mythtv Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} -Description: Kodi PVR Addon MythTv - Cmyth - PVR API:1.9.4 +Description: Kodi PVR Addon MythTv - Cmyth - PVR API:1.9.2 This package contains the MythTV PVR (Personal Video Recorder) Addon for Kodi, the award winning free and open source software media-player and entertainment hub for all your digital media @@ -19,7 +19,7 @@ Package: kodi-pvr-vuplus Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} -Description: Kodi PVR Addon Vuplus - PVR API:1.9.4 +Description: Kodi PVR Addon Vuplus - PVR API:1.9.2 This package contains the Vuplus PVR (Personal Video Recorder) Addon for Kodi, the award winning free and open source software media-player and entertainment hub for all your digital media @@ -27,7 +27,7 @@ Package: kodi-pvr-vdr-vnsi Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} -Description: Kodi PVR Addon VDR Vnsi - PVR API:1.9.4 +Description: Kodi PVR Addon VDR Vnsi - PVR API:1.9.2 This package contains the VDR Vnsi PVR (Personal Video Recorder) Addon for Kodi, the award winning free and open source software media-player and entertainment hub for all your digital media @@ -35,13 +35,13 @@ #Package: vdr-plugin-vnsiserver #Architecture: any #Depends: ${shlibs:Depends}, ${misc:Depends}, ${vdr:Depends} -#Description: VDR-Network-Streaming-Interface - PVR API:1.9.4 +#Description: VDR-Network-Streaming-Interface - PVR API:1.9.2 # VDR-Network-Streaming-Interface Package: kodi-pvr-njoy Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} -Description: Kodi PVR Addon Njoy - PVR API:1.9.4 +Description: Kodi PVR Addon Njoy - PVR API:1.9.2 This package contains the Njoy PVR (Personal Video Recorder) Addon for Kodi, the award winning free and open source software media-player and entertainment hub for all your digital media @@ -49,7 +49,7 @@ Package: kodi-pvr-nextpvr Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} -Description: Kodi PVR Addon NextPvr - PVR API:1.9.4 +Description: Kodi PVR Addon NextPvr - PVR API:1.9.2 This package contains the NextPvr PVR (Personal Video Recorder) Addon for Kodi, the award winning free and open source software media-player and entertainment hub for all your digital media @@ -57,7 +57,7 @@ Package: kodi-pvr-mediaportal-tvserver Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} -Description: Kodi PVR Addon Mediaportal Tvserver - PVR API:1.9.4 +Description: Kodi PVR Addon Mediaportal Tvserver - PVR API:1.9.2 This package contains the Mediaportal PVR (Personal Video Recorder) Addon for Kodi, the award winning free and open source software media-player and entertainment hub for all your digital media @@ -65,7 +65,7 @@ Package: kodi-pvr-tvheadend-hts Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} -Description: Kodi PVR Addon TvHeadend Hts - PVR API:1.9.4 +Description: Kodi PVR Addon TvHeadend Hts - PVR API:1.9.2 This package contains the TvHeadend PVR (Personal Video Recorder) Addon for Kodi, the award winning free and open source software media-player and entertainment hub for all your digital media @@ -73,7 +73,7 @@ Package: kodi-pvr-dvbviewer Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} -Description: Kodi PVR Addon Dvbviewer - PVR API:1.9.4 +Description: Kodi PVR Addon Dvbviewer - PVR API:1.9.2 This package contains the Dvbviewer PVR (Personal Video Recorder) Addon for Kodi, the award winning free and open source software media-player and entertainment hub for all your digital media @@ -81,7 +81,7 @@ Package: kodi-pvr-argustv Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} -Description: Kodi PVR Addon Argustv - PVR API:1.9.4 +Description: Kodi PVR Addon Argustv - PVR API:1.9.2 This package contains the Argustv PVR (Personal Video Recorder) Addon for Kodi, the award winning free and open source software media-player and entertainment hub for all your digital media @@ -89,7 +89,7 @@ Package: kodi-pvr-demo Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} -Description: Kodi PVR Demo Addon - PVR API:1.9.4 +Description: Kodi PVR Demo Addon - PVR API:1.9.2 This package contains the Demo PVR (Personal Video Recorder) Addon for Kodi, the award winning free and open source software media-player and entertainment hub for all your digital media @@ -97,7 +97,7 @@ Package: kodi-pvr-iptvsimple Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} -Description: Kodi PVR Iptv Addon - PVR API:1.9.4 +Description: Kodi PVR Iptv Addon - PVR API:1.9.2 This package contains the Iptv PVR (Personal Video Recorder) Addon for Kodi, the award winning free and open source software media-player and entertainment hub for all your digital media diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-argustv.changelog kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-argustv.changelog --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-argustv.changelog 2015-02-20 11:28:11.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-argustv.changelog 2015-04-01 08:51:05.000000000 +0000 @@ -1,4 +1,4 @@ -kodi-pvr-addons (1.10.1-5trusty) trusty; urgency=medium +kodi-pvr-addons (1.9.186-6trusty) trusty; urgency=medium * v0.0.1.133 (31-03-2012) - The add-on now sets the time a recording was last watched on the server v0.0.1.132 (20-03-2012) - Small fix @@ -59,4 +59,4 @@ and live radio (tsbuffer only, no rtsp), basic EPG - Tested ForTheRecord Argus version: v1.5.0.3 - -- wsnipex Fri, 20 Feb 2015 12:28:11 +0100 + -- wsnipex Wed, 01 Apr 2015 10:51:05 +0200 diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-argustv.changelog.old kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-argustv.changelog.old --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-argustv.changelog.old 2015-02-20 11:27:47.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-argustv.changelog.old 2015-04-01 08:50:42.000000000 +0000 @@ -1,4 +1,4 @@ -kodi-pvr-addons (1.10.1-5utopic) utopic; urgency=medium +kodi-pvr-addons (1.9.186-6utopic) utopic; urgency=medium * v0.0.1.133 (31-03-2012) - The add-on now sets the time a recording was last watched on the server v0.0.1.132 (20-03-2012) - Small fix @@ -59,4 +59,4 @@ and live radio (tsbuffer only, no rtsp), basic EPG - Tested ForTheRecord Argus version: v1.5.0.3 - -- wsnipex Fri, 20 Feb 2015 12:27:47 +0100 + -- wsnipex Wed, 01 Apr 2015 10:50:42 +0200 diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-argustv.version kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-argustv.version --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-argustv.version 2015-02-20 11:28:10.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-argustv.version 2015-04-01 08:51:05.000000000 +0000 @@ -1 +1 @@ -1.10.1-5trusty +1.9.186-6trusty diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-demo.changelog kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-demo.changelog --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-demo.changelog 2015-02-20 11:28:15.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-demo.changelog 2015-04-01 08:51:10.000000000 +0000 @@ -1,5 +1,5 @@ -kodi-pvr-addons (1.10.1-5trusty) trusty; urgency=medium +kodi-pvr-addons (1.9.14-6trusty) trusty; urgency=medium * no upstream changelog available - -- wsnipex Fri, 20 Feb 2015 12:28:15 +0100 + -- wsnipex Wed, 01 Apr 2015 10:51:10 +0200 diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-demo.changelog.old kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-demo.changelog.old --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-demo.changelog.old 2015-02-20 11:27:52.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-demo.changelog.old 2015-04-01 08:50:46.000000000 +0000 @@ -1,5 +1,5 @@ -kodi-pvr-addons (1.10.1-5utopic) utopic; urgency=medium +kodi-pvr-addons (1.9.14-6utopic) utopic; urgency=medium * no upstream changelog available - -- wsnipex Fri, 20 Feb 2015 12:27:52 +0100 + -- wsnipex Wed, 01 Apr 2015 10:50:46 +0200 diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-demo.version kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-demo.version --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-demo.version 2015-02-20 11:28:15.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-demo.version 2015-04-01 08:51:09.000000000 +0000 @@ -1 +1 @@ -1.10.1-5trusty +1.9.14-6trusty diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-dvbviewer.changelog kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-dvbviewer.changelog --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-dvbviewer.changelog 2015-02-20 11:28:15.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-dvbviewer.changelog 2015-04-01 08:51:09.000000000 +0000 @@ -1,57 +1,48 @@ -kodi-pvr-addons (1.10.29-5trusty) trusty; urgency=medium +kodi-pvr-addons (1.9.24-6trusty) trusty; urgency=medium - * [updated] Language files from Transifex 1.9.11 [added] add timeshift - buffer functions 1.8.10 [updated] Require DVB Viewer Recording - Service 1.25.0 or later [updated] In general use RS XML API instead - of HTML/channeldat parsing [updated] Rewrote channel parsing. Use - favourites if you want fast startups. [updated] Rewrote recording - parsing, generate unique recording IDs [added] Show available - diskspace [added] RTSP support (Note: RTSP is only available if - timeshift is disabled) [fixed] Removed signal status information. - Not available anymore [fixed] Channel logos not being displayed for - some channels [fixed] After changing certain settings live TV wasn't - work anymore and XBMC restart was required [fixed] possible crash - (2x) 1.8.9 [updated] sync with PVR API v1.8.0 1.7.9 [fixed] loading - favourites without groups/folders 1.7.8 [fixed] fix crash with - Recording Service 1.25.0 1.7.7 [fixed] fix possible crash during - timer updates 1.7.6 [added] Basic timeshift support. [added] Use - channel names from favourites. This allows easy channelname changes. - [fixed] Use 64 bit channel ids. Fall back to 32 bit if - favourites.xml still contain the old ones. [fixed] Replace "/"- - character by " " in channel logo url [updated] A lot of code cleanup - 1.7.5 [updated] Bump after PVR API version bump 1.6.5 [updated] - Language files from Transifex 1.6.4 [fixed] Use utf-8 encoding to - get and set the timers. [fixed] Channel names with more than 25 - chars could crash the add-on. 1.6.3 [updated] Language files from - Transifex 1.6.2 New version number by Team XBMC 0.1.8 [fixed] - Changed the way timers are calculated. This should fix problems with - scheduled and instant recordings on some machines. [fixed] - Favourites didn't show channels if the audio track wasn't the first - one. [fixed] Channel settings weren't saved/restored after a channel - switch with the channels OSD. [fixed] XBMC could hang after a - channel switch with the channels OSD. 0.1.7 [added] The Recording - Service version 1.21 or higher is now required. Download the latest - version from the DVBViewer members area and install it. [added] - Display a notification if the add-on can't connect to the Recording - Service. Please, check that the RS is enabled and the IP, - webinterface port, username and pass are correct. [added] If the - favourites.xml selector is empty, the favourites are loaded from the - web interface. [added] Don't fetch recording thumbnails at startup - if there are more than 20 recordings. [fixed] The add-on crashed if - favourites.xml had entries with the old 32 bits ID. [fixed] Channel - names with ansi chars are converted to utf8 so they can be displayed - properly (a reset of the PVR database may be required). [fixed] - Channel names with more than 25 chars. 0.1.5 [added] Timers support. - [added] An option to load the channels from favourites.xml instead - of from channels.dat (a reset of the PVR database is required). It - is usually located at c:\ProgramData\CMUV\DVBViewer\ This is a - hidden folder so be sure to enable the "Settings\Appearance\File - Lists\Show hidden files and directories" option. [added] Always grab - the EPG data after a channel switch. [added] Recording thumbnails. - [added] Receiving device name to the status info. [fixed] The - preferred language is loaded from the DVBViewer config and used to - get the correct EPG in case it supports multi language entries. - [fixed] When the EPG is missing the description entry, the event - entry is used instead. 0.1.0 First version. + * [fixed] After changing certain settings live TV wasn't work anymore + and XBMC restart was required [fixed] possible crash (2x) 1.8.9 + [updated] sync with PVR API v1.8.0 1.7.9 [fixed] loading favourites + without groups/folders 1.7.8 [fixed] fix crash with Recording + Service 1.25.0 1.7.7 [fixed] fix possible crash during timer updates + 1.7.6 [added] Basic timeshift support. [added] Use channel names + from favourites. This allows easy channelname changes. [fixed] Use + 64 bit channel ids. Fall back to 32 bit if favourites.xml still + contain the old ones. [fixed] Replace "/"-character by " " in + channel logo url [updated] A lot of code cleanup 1.7.5 [updated] + Bump after PVR API version bump 1.6.5 [updated] Language files from + Transifex 1.6.4 [fixed] Use utf-8 encoding to get and set the + timers. [fixed] Channel names with more than 25 chars could crash + the add-on. 1.6.3 [updated] Language files from Transifex 1.6.2 New + version number by Team XBMC 0.1.8 [fixed] Changed the way timers are + calculated. This should fix problems with scheduled and instant + recordings on some machines. [fixed] Favourites didn't show channels + if the audio track wasn't the first one. [fixed] Channel settings + weren't saved/restored after a channel switch with the channels OSD. + [fixed] XBMC could hang after a channel switch with the channels + OSD. 0.1.7 [added] The Recording Service version 1.21 or higher is + now required. Download the latest version from the DVBViewer members + area and install it. [added] Display a notification if the add-on + can't connect to the Recording Service. Please, check that the RS is + enabled and the IP, webinterface port, username and pass are + correct. [added] If the favourites.xml selector is empty, the + favourites are loaded from the web interface. [added] Don't fetch + recording thumbnails at startup if there are more than 20 + recordings. [fixed] The add-on crashed if favourites.xml had entries + with the old 32 bits ID. [fixed] Channel names with ansi chars are + converted to utf8 so they can be displayed properly (a reset of the + PVR database may be required). [fixed] Channel names with more than + 25 chars. 0.1.5 [added] Timers support. [added] An option to load + the channels from favourites.xml instead of from channels.dat (a + reset of the PVR database is required). It is usually located at + c:\ProgramData\CMUV\DVBViewer\ This is a hidden folder so be sure to + enable the "Settings\Appearance\File Lists\Show hidden files and + directories" option. [added] Always grab the EPG data after a + channel switch. [added] Recording thumbnails. [added] Receiving + device name to the status info. [fixed] The preferred language is + loaded from the DVBViewer config and used to get the correct EPG in + case it supports multi language entries. [fixed] When the EPG is + missing the description entry, the event entry is used instead. + 0.1.0 First version. - -- wsnipex Fri, 20 Feb 2015 12:28:15 +0100 + -- wsnipex Wed, 01 Apr 2015 10:51:09 +0200 diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-dvbviewer.changelog.old kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-dvbviewer.changelog.old --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-dvbviewer.changelog.old 2015-02-20 11:27:51.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-dvbviewer.changelog.old 2015-04-01 08:50:45.000000000 +0000 @@ -1,57 +1,48 @@ -kodi-pvr-addons (1.10.29-5utopic) utopic; urgency=medium +kodi-pvr-addons (1.9.24-6utopic) utopic; urgency=medium - * [updated] Language files from Transifex 1.9.11 [added] add timeshift - buffer functions 1.8.10 [updated] Require DVB Viewer Recording - Service 1.25.0 or later [updated] In general use RS XML API instead - of HTML/channeldat parsing [updated] Rewrote channel parsing. Use - favourites if you want fast startups. [updated] Rewrote recording - parsing, generate unique recording IDs [added] Show available - diskspace [added] RTSP support (Note: RTSP is only available if - timeshift is disabled) [fixed] Removed signal status information. - Not available anymore [fixed] Channel logos not being displayed for - some channels [fixed] After changing certain settings live TV wasn't - work anymore and XBMC restart was required [fixed] possible crash - (2x) 1.8.9 [updated] sync with PVR API v1.8.0 1.7.9 [fixed] loading - favourites without groups/folders 1.7.8 [fixed] fix crash with - Recording Service 1.25.0 1.7.7 [fixed] fix possible crash during - timer updates 1.7.6 [added] Basic timeshift support. [added] Use - channel names from favourites. This allows easy channelname changes. - [fixed] Use 64 bit channel ids. Fall back to 32 bit if - favourites.xml still contain the old ones. [fixed] Replace "/"- - character by " " in channel logo url [updated] A lot of code cleanup - 1.7.5 [updated] Bump after PVR API version bump 1.6.5 [updated] - Language files from Transifex 1.6.4 [fixed] Use utf-8 encoding to - get and set the timers. [fixed] Channel names with more than 25 - chars could crash the add-on. 1.6.3 [updated] Language files from - Transifex 1.6.2 New version number by Team XBMC 0.1.8 [fixed] - Changed the way timers are calculated. This should fix problems with - scheduled and instant recordings on some machines. [fixed] - Favourites didn't show channels if the audio track wasn't the first - one. [fixed] Channel settings weren't saved/restored after a channel - switch with the channels OSD. [fixed] XBMC could hang after a - channel switch with the channels OSD. 0.1.7 [added] The Recording - Service version 1.21 or higher is now required. Download the latest - version from the DVBViewer members area and install it. [added] - Display a notification if the add-on can't connect to the Recording - Service. Please, check that the RS is enabled and the IP, - webinterface port, username and pass are correct. [added] If the - favourites.xml selector is empty, the favourites are loaded from the - web interface. [added] Don't fetch recording thumbnails at startup - if there are more than 20 recordings. [fixed] The add-on crashed if - favourites.xml had entries with the old 32 bits ID. [fixed] Channel - names with ansi chars are converted to utf8 so they can be displayed - properly (a reset of the PVR database may be required). [fixed] - Channel names with more than 25 chars. 0.1.5 [added] Timers support. - [added] An option to load the channels from favourites.xml instead - of from channels.dat (a reset of the PVR database is required). It - is usually located at c:\ProgramData\CMUV\DVBViewer\ This is a - hidden folder so be sure to enable the "Settings\Appearance\File - Lists\Show hidden files and directories" option. [added] Always grab - the EPG data after a channel switch. [added] Recording thumbnails. - [added] Receiving device name to the status info. [fixed] The - preferred language is loaded from the DVBViewer config and used to - get the correct EPG in case it supports multi language entries. - [fixed] When the EPG is missing the description entry, the event - entry is used instead. 0.1.0 First version. + * [fixed] After changing certain settings live TV wasn't work anymore + and XBMC restart was required [fixed] possible crash (2x) 1.8.9 + [updated] sync with PVR API v1.8.0 1.7.9 [fixed] loading favourites + without groups/folders 1.7.8 [fixed] fix crash with Recording + Service 1.25.0 1.7.7 [fixed] fix possible crash during timer updates + 1.7.6 [added] Basic timeshift support. [added] Use channel names + from favourites. This allows easy channelname changes. [fixed] Use + 64 bit channel ids. Fall back to 32 bit if favourites.xml still + contain the old ones. [fixed] Replace "/"-character by " " in + channel logo url [updated] A lot of code cleanup 1.7.5 [updated] + Bump after PVR API version bump 1.6.5 [updated] Language files from + Transifex 1.6.4 [fixed] Use utf-8 encoding to get and set the + timers. [fixed] Channel names with more than 25 chars could crash + the add-on. 1.6.3 [updated] Language files from Transifex 1.6.2 New + version number by Team XBMC 0.1.8 [fixed] Changed the way timers are + calculated. This should fix problems with scheduled and instant + recordings on some machines. [fixed] Favourites didn't show channels + if the audio track wasn't the first one. [fixed] Channel settings + weren't saved/restored after a channel switch with the channels OSD. + [fixed] XBMC could hang after a channel switch with the channels + OSD. 0.1.7 [added] The Recording Service version 1.21 or higher is + now required. Download the latest version from the DVBViewer members + area and install it. [added] Display a notification if the add-on + can't connect to the Recording Service. Please, check that the RS is + enabled and the IP, webinterface port, username and pass are + correct. [added] If the favourites.xml selector is empty, the + favourites are loaded from the web interface. [added] Don't fetch + recording thumbnails at startup if there are more than 20 + recordings. [fixed] The add-on crashed if favourites.xml had entries + with the old 32 bits ID. [fixed] Channel names with ansi chars are + converted to utf8 so they can be displayed properly (a reset of the + PVR database may be required). [fixed] Channel names with more than + 25 chars. 0.1.5 [added] Timers support. [added] An option to load + the channels from favourites.xml instead of from channels.dat (a + reset of the PVR database is required). It is usually located at + c:\ProgramData\CMUV\DVBViewer\ This is a hidden folder so be sure to + enable the "Settings\Appearance\File Lists\Show hidden files and + directories" option. [added] Always grab the EPG data after a + channel switch. [added] Recording thumbnails. [added] Receiving + device name to the status info. [fixed] The preferred language is + loaded from the DVBViewer config and used to get the correct EPG in + case it supports multi language entries. [fixed] When the EPG is + missing the description entry, the event entry is used instead. + 0.1.0 First version. - -- wsnipex Fri, 20 Feb 2015 12:27:51 +0100 + -- wsnipex Wed, 01 Apr 2015 10:50:45 +0200 diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-dvbviewer.version kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-dvbviewer.version --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-dvbviewer.version 2015-02-20 11:28:14.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-dvbviewer.version 2015-04-01 08:51:09.000000000 +0000 @@ -1 +1 @@ -1.10.29-5trusty +1.9.24-6trusty diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-iptvsimple.changelog kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-iptvsimple.changelog --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-iptvsimple.changelog 2015-02-20 11:28:13.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-iptvsimple.changelog 2015-04-01 08:51:08.000000000 +0000 @@ -1,8 +1,6 @@ -kodi-pvr-addons (1.10.1-5trusty) trusty; urgency=medium +kodi-pvr-addons (1.9.12-6trusty) trusty; urgency=medium - * v1.10.1 - language files from Transifex - minor changes to conform - with C++11 - Updated to API v1.9.4 v1.9.12 - added - getBackendHostname function v1.9.10 - change library name to Kodi + * v1.9.12 - platform fixes v1.9.10 - change library name to Kodi v1.9.9 - fixed deadlock when activating the addon on some darwin (osx, ios) runtimes v1.9.6 - updated to API v1.9.2 v1.9.3 - added setting to disable cache m3u/epg - added support for @@ -16,4 +14,4 @@ source and XMLTV as EPG source - Supports Live TV, Radio channels and EPG - -- wsnipex Fri, 20 Feb 2015 12:28:13 +0100 + -- wsnipex Wed, 01 Apr 2015 10:51:08 +0200 diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-iptvsimple.changelog.old kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-iptvsimple.changelog.old --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-iptvsimple.changelog.old 2015-02-20 11:27:50.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-iptvsimple.changelog.old 2015-04-01 08:50:44.000000000 +0000 @@ -1,8 +1,6 @@ -kodi-pvr-addons (1.10.1-5utopic) utopic; urgency=medium +kodi-pvr-addons (1.9.12-6utopic) utopic; urgency=medium - * v1.10.1 - language files from Transifex - minor changes to conform - with C++11 - Updated to API v1.9.4 v1.9.12 - added - getBackendHostname function v1.9.10 - change library name to Kodi + * v1.9.12 - platform fixes v1.9.10 - change library name to Kodi v1.9.9 - fixed deadlock when activating the addon on some darwin (osx, ios) runtimes v1.9.6 - updated to API v1.9.2 v1.9.3 - added setting to disable cache m3u/epg - added support for @@ -16,4 +14,4 @@ source and XMLTV as EPG source - Supports Live TV, Radio channels and EPG - -- wsnipex Fri, 20 Feb 2015 12:27:50 +0100 + -- wsnipex Wed, 01 Apr 2015 10:50:44 +0200 diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-iptvsimple.version kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-iptvsimple.version --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-iptvsimple.version 2015-02-20 11:28:13.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-iptvsimple.version 2015-04-01 08:51:07.000000000 +0000 @@ -1 +1 @@ -1.10.1-5trusty +1.9.12-6trusty diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-mediaportal-tvserver.changelog kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-mediaportal-tvserver.changelog --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-mediaportal-tvserver.changelog 2015-02-20 11:28:12.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-mediaportal-tvserver.changelog 2015-04-01 08:51:06.000000000 +0000 @@ -1,4 +1,4 @@ -kodi-pvr-addons (1.10.1-5trusty) trusty; urgency=medium +kodi-pvr-addons (1.9.23-6trusty) trusty; urgency=medium * - Added: use channel icons from MediaPortal (Windows, localhost only) - Changed: switch from libPlatform + libTcpSocket to platform @@ -51,4 +51,4 @@ client should abort connection when the TVServerXBMC version is too old v1.1.0.60 - Fix PVR client destroy - -- wsnipex Fri, 20 Feb 2015 12:28:12 +0100 + -- wsnipex Wed, 01 Apr 2015 10:51:06 +0200 diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-mediaportal-tvserver.changelog.old kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-mediaportal-tvserver.changelog.old --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-mediaportal-tvserver.changelog.old 2015-02-20 11:27:48.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-mediaportal-tvserver.changelog.old 2015-04-01 08:50:42.000000000 +0000 @@ -1,4 +1,4 @@ -kodi-pvr-addons (1.10.1-5utopic) utopic; urgency=medium +kodi-pvr-addons (1.9.23-6utopic) utopic; urgency=medium * - Added: use channel icons from MediaPortal (Windows, localhost only) - Changed: switch from libPlatform + libTcpSocket to platform @@ -51,4 +51,4 @@ client should abort connection when the TVServerXBMC version is too old v1.1.0.60 - Fix PVR client destroy - -- wsnipex Fri, 20 Feb 2015 12:27:48 +0100 + -- wsnipex Wed, 01 Apr 2015 10:50:42 +0200 diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-mediaportal-tvserver.version kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-mediaportal-tvserver.version --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-mediaportal-tvserver.version 2015-02-20 11:28:11.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-mediaportal-tvserver.version 2015-04-01 08:51:05.000000000 +0000 @@ -1 +1 @@ -1.10.1-5trusty +1.9.23-6trusty diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-mythtv.changelog kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-mythtv.changelog --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-mythtv.changelog 2015-02-20 11:28:14.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-mythtv.changelog 2015-04-01 08:51:08.000000000 +0000 @@ -1,7 +1,7 @@ -kodi-pvr-addons (2.0.2-5trusty) trusty; urgency=medium +kodi-pvr-addons (1.12.6-6trusty) trusty; urgency=medium * - Adding WS API Security Pin parameter - Adding episode info - (subtitle) to EPG title v1.9.29 - fixed resource leak on file cache + (subtitle) to EPG title v1.29.0 - fixed resource leak on file cache failure v1.9.28 - Updated language files from Transifex v1.9.27 - change library name to Kodi v1.9.26 - fixed deadlock when activating the addon on some darwin (osx, ios) runtimes v1.9.25 - Handle GUI @@ -36,4 +36,4 @@ parsing of 'airdate' in proto v1.9.14 - Fork of pvr.mythtv.cmyth - Use C++ library CPPMyth for MythTV backend 0.27 to 0.28-pre - -- wsnipex Fri, 20 Feb 2015 12:28:14 +0100 + -- wsnipex Wed, 01 Apr 2015 10:51:08 +0200 diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-mythtv.changelog.old kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-mythtv.changelog.old --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-mythtv.changelog.old 2015-02-20 11:27:50.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-mythtv.changelog.old 2015-04-01 08:50:45.000000000 +0000 @@ -1,7 +1,7 @@ -kodi-pvr-addons (2.0.2-5utopic) utopic; urgency=medium +kodi-pvr-addons (1.12.6-6utopic) utopic; urgency=medium * - Adding WS API Security Pin parameter - Adding episode info - (subtitle) to EPG title v1.9.29 - fixed resource leak on file cache + (subtitle) to EPG title v1.29.0 - fixed resource leak on file cache failure v1.9.28 - Updated language files from Transifex v1.9.27 - change library name to Kodi v1.9.26 - fixed deadlock when activating the addon on some darwin (osx, ios) runtimes v1.9.25 - Handle GUI @@ -36,4 +36,4 @@ parsing of 'airdate' in proto v1.9.14 - Fork of pvr.mythtv.cmyth - Use C++ library CPPMyth for MythTV backend 0.27 to 0.28-pre - -- wsnipex Fri, 20 Feb 2015 12:27:50 +0100 + -- wsnipex Wed, 01 Apr 2015 10:50:45 +0200 diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-mythtv.version kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-mythtv.version --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-mythtv.version 2015-02-20 11:28:13.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-mythtv.version 2015-04-01 08:51:08.000000000 +0000 @@ -1 +1 @@ -2.0.2-5trusty +1.12.6-6trusty diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-nextpvr.changelog kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-nextpvr.changelog --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-nextpvr.changelog 2015-02-20 11:28:10.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-nextpvr.changelog 2015-04-01 08:51:05.000000000 +0000 @@ -1,6 +1,7 @@ -kodi-pvr-addons (1.10.1-5trusty) trusty; urgency=medium +kodi-pvr-addons (1.9.21-6trusty) trusty; urgency=medium - * v1.9.19 - added getBackendHostname function - added support for ATSC + * - fixed issue where recording list would get out of date and not + reflect reality of backend v1.9.19 - added support for ATSC subchannel numbers, fixing 'no tuner available' message users were getting with this type of channel - fixes a problem with playback of radio stations - added recording artwork - added fanart v1.9.18 - @@ -34,4 +35,4 @@ Shows user a notification message when this was required. v1.0.0.0 - Created - -- wsnipex Fri, 20 Feb 2015 12:28:10 +0100 + -- wsnipex Wed, 01 Apr 2015 10:51:05 +0200 diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-nextpvr.changelog.old kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-nextpvr.changelog.old --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-nextpvr.changelog.old 2015-02-20 11:27:47.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-nextpvr.changelog.old 2015-04-01 08:50:41.000000000 +0000 @@ -1,6 +1,7 @@ -kodi-pvr-addons (1.10.1-5utopic) utopic; urgency=medium +kodi-pvr-addons (1.9.21-6utopic) utopic; urgency=medium - * v1.9.19 - added getBackendHostname function - added support for ATSC + * - fixed issue where recording list would get out of date and not + reflect reality of backend v1.9.19 - added support for ATSC subchannel numbers, fixing 'no tuner available' message users were getting with this type of channel - fixes a problem with playback of radio stations - added recording artwork - added fanart v1.9.18 - @@ -34,4 +35,4 @@ Shows user a notification message when this was required. v1.0.0.0 - Created - -- wsnipex Fri, 20 Feb 2015 12:27:47 +0100 + -- wsnipex Wed, 01 Apr 2015 10:50:41 +0200 diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-nextpvr.version kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-nextpvr.version --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-nextpvr.version 2015-02-20 11:28:10.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-nextpvr.version 2015-04-01 08:51:04.000000000 +0000 @@ -1 +1 @@ -1.10.1-5trusty +1.9.21-6trusty diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-njoy.changelog kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-njoy.changelog --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-njoy.changelog 2015-02-20 11:28:13.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-njoy.changelog 2015-04-01 08:51:07.000000000 +0000 @@ -1,5 +1,5 @@ -kodi-pvr-addons (1.10.1-5trusty) trusty; urgency=medium +kodi-pvr-addons (1.9.14-6trusty) trusty; urgency=medium * no upstream changelog available - -- wsnipex Fri, 20 Feb 2015 12:28:13 +0100 + -- wsnipex Wed, 01 Apr 2015 10:51:07 +0200 diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-njoy.changelog.old kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-njoy.changelog.old --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-njoy.changelog.old 2015-02-20 11:27:49.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-njoy.changelog.old 2015-04-01 08:50:44.000000000 +0000 @@ -1,5 +1,5 @@ -kodi-pvr-addons (1.10.1-5utopic) utopic; urgency=medium +kodi-pvr-addons (1.9.14-6utopic) utopic; urgency=medium * no upstream changelog available - -- wsnipex Fri, 20 Feb 2015 12:27:49 +0100 + -- wsnipex Wed, 01 Apr 2015 10:50:44 +0200 diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-njoy.version kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-njoy.version --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-njoy.version 2015-02-20 11:28:12.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-njoy.version 2015-04-01 08:51:07.000000000 +0000 @@ -1 +1 @@ -1.10.1-5trusty +1.9.14-6trusty diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-tvheadend-hts.changelog kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-tvheadend-hts.changelog --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-tvheadend-hts.changelog 2015-02-20 11:28:10.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-tvheadend-hts.changelog 2015-04-01 08:51:04.000000000 +0000 @@ -1,4 +1,4 @@ -kodi-pvr-addons (2.1.1-5trusty) trusty; urgency=medium +kodi-pvr-addons (1.9.40-6trusty) trusty; urgency=medium * - add timeshift skip support (FF/RW still not working) - fix bug in tvh webroot processing 1.6.18 - ensure channel count is not cleared @@ -32,4 +32,4 @@ removed unneeded member in CHTSPDemux - better handling of disconnect and reconnects 1.6.4 - initial release - -- wsnipex Fri, 20 Feb 2015 12:28:10 +0100 + -- wsnipex Wed, 01 Apr 2015 10:51:04 +0200 diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-tvheadend-hts.changelog.old kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-tvheadend-hts.changelog.old --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-tvheadend-hts.changelog.old 2015-02-20 11:27:46.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-tvheadend-hts.changelog.old 2015-04-01 08:50:40.000000000 +0000 @@ -1,4 +1,4 @@ -kodi-pvr-addons (2.1.1-5utopic) utopic; urgency=medium +kodi-pvr-addons (1.9.40-6utopic) utopic; urgency=medium * - add timeshift skip support (FF/RW still not working) - fix bug in tvh webroot processing 1.6.18 - ensure channel count is not cleared @@ -32,4 +32,4 @@ removed unneeded member in CHTSPDemux - better handling of disconnect and reconnects 1.6.4 - initial release - -- wsnipex Fri, 20 Feb 2015 12:27:46 +0100 + -- wsnipex Wed, 01 Apr 2015 10:50:40 +0200 diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-tvheadend-hts.version kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-tvheadend-hts.version --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-tvheadend-hts.version 2015-02-20 11:28:09.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-tvheadend-hts.version 2015-04-01 08:51:04.000000000 +0000 @@ -1 +1 @@ -2.1.1-5trusty +1.9.40-6trusty diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-vdr-vnsi.changelog kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-vdr-vnsi.changelog --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-vdr-vnsi.changelog 2015-02-20 11:28:09.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-vdr-vnsi.changelog 2015-04-01 08:51:04.000000000 +0000 @@ -1,5 +1,5 @@ -kodi-pvr-addons (1.10.2-5trusty) trusty; urgency=medium +kodi-pvr-addons (1.9.25-6trusty) trusty; urgency=medium * no upstream changelog available - -- wsnipex Fri, 20 Feb 2015 12:28:09 +0100 + -- wsnipex Wed, 01 Apr 2015 10:51:04 +0200 diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-vdr-vnsi.changelog.old kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-vdr-vnsi.changelog.old --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-vdr-vnsi.changelog.old 2015-02-20 11:27:45.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-vdr-vnsi.changelog.old 2015-04-01 08:50:40.000000000 +0000 @@ -1,5 +1,5 @@ -kodi-pvr-addons (1.10.2-5utopic) utopic; urgency=medium +kodi-pvr-addons (1.9.25-6utopic) utopic; urgency=medium * no upstream changelog available - -- wsnipex Fri, 20 Feb 2015 12:27:45 +0100 + -- wsnipex Wed, 01 Apr 2015 10:50:40 +0200 diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-vdr-vnsi.version kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-vdr-vnsi.version --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-vdr-vnsi.version 2015-02-20 11:28:09.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-vdr-vnsi.version 2015-04-01 08:51:03.000000000 +0000 @@ -1 +1 @@ -1.10.2-5trusty +1.9.25-6trusty diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-vuplus.changelog kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-vuplus.changelog --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-vuplus.changelog 2015-02-20 11:28:12.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-vuplus.changelog 2015-04-01 08:51:07.000000000 +0000 @@ -1,4 +1,4 @@ -kodi-pvr-addons (1.10.1-5trusty) trusty; urgency=medium +kodi-pvr-addons (1.9.21-6trusty) trusty; urgency=medium * 0.2.4 - fix: put username & password into the streaming url 0.2.3 - fix: put username & password into recording-url 0.2.2: - fix: escape @@ -48,4 +48,4 @@ 0.1.1 - fix: URLEncode the service reference when fetching EPG 0.1.0 - Iniital Version - -- wsnipex Fri, 20 Feb 2015 12:28:12 +0100 + -- wsnipex Wed, 01 Apr 2015 10:51:07 +0200 diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-vuplus.changelog.old kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-vuplus.changelog.old --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-vuplus.changelog.old 2015-02-20 11:27:48.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-vuplus.changelog.old 2015-04-01 08:50:43.000000000 +0000 @@ -1,4 +1,4 @@ -kodi-pvr-addons (1.10.1-5utopic) utopic; urgency=medium +kodi-pvr-addons (1.9.21-6utopic) utopic; urgency=medium * 0.2.4 - fix: put username & password into the streaming url 0.2.3 - fix: put username & password into recording-url 0.2.2: - fix: escape @@ -48,4 +48,4 @@ 0.1.1 - fix: URLEncode the service reference when fetching EPG 0.1.0 - Iniital Version - -- wsnipex Fri, 20 Feb 2015 12:27:48 +0100 + -- wsnipex Wed, 01 Apr 2015 10:50:43 +0200 diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-vuplus.version kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-vuplus.version --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/kodi-pvr-vuplus.version 2015-02-20 11:28:12.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/kodi-pvr-vuplus.version 2015-04-01 08:51:06.000000000 +0000 @@ -1 +1 @@ -1.10.1-5trusty +1.9.21-6trusty diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/versiontag kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/versiontag --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/debian/versiontag 2015-02-20 11:27:42.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/debian/versiontag 2015-04-01 08:50:11.000000000 +0000 @@ -1 +1 @@ -5 +6 diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/.gitignore kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/.gitignore --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/.gitignore 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/.gitignore 2015-04-01 08:50:10.000000000 +0000 @@ -4,7 +4,6 @@ .libs .project -.dirstamp .dummy .dummy.in aclocal.m4 diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/lib/cppmyth/cppmyth/CMakeLists.txt kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/lib/cppmyth/cppmyth/CMakeLists.txt --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/lib/cppmyth/cppmyth/CMakeLists.txt 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/lib/cppmyth/cppmyth/CMakeLists.txt 2015-04-01 08:50:11.000000000 +0000 @@ -14,7 +14,7 @@ ############################################################################### # set lib version here -set (CPPMYTH_LIB_VERSION "1.1.8") +set (CPPMYTH_LIB_VERSION "1.1.10") set (CPPMYTH_LIB_SOVERSION "1.1") ############################################################################### diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/lib/cppmyth/cppmyth/src/atomic.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/lib/cppmyth/cppmyth/src/atomic.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/lib/cppmyth/cppmyth/src/atomic.h 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/lib/cppmyth/cppmyth/src/atomic.h 2015-04-01 08:50:11.000000000 +0000 @@ -145,24 +145,44 @@ /* The value for __val is in '__oldval' */ __val = __oldval; -#elif (defined __ARM_ARCH && __ARM_ARCH >= 6) +#elif (defined __ARM_ARCH && __ARM_ARCH >= 7) int inc = 1; __asm__ volatile ( + "dmb ish\n" /* Memory barrier */ "1:" "ldrex %0, [%1]\n" "add %0, %0, %2\n" "strex r1, %0, [%1]\n" "cmp r1, #0\n" "bne 1b\n" + "dmb ish\n" /* Memory barrier */ : "=&r" (__val) : "r"(valp), "r"(inc) : "r1"); +#elif (defined __ARM_ARCH && __ARM_ARCH == 6) + int inc = 1; + __asm__ volatile ( + "mcr p15, 0, %0, c7, c10, 5" /* Memory barrier */ + : : "r"(0) : "memory"); + __asm__ volatile ( + "1:" + "ldrex %0, [%1]\n" + "add %0, %0, %2\n" + "strex r1, %0, [%1]\n" + "cmp r1, #0\n" + "bne 1b\n" + : "=&r" (__val) + : "r"(valp), "r"(inc) + : "r1"); + __asm__ volatile ( + "mcr p15, 0, %0, c7, c10, 5" /* Memory barrier */ + : : "r"(0) : "memory"); + #elif (defined __ARM_ARCH && __ARM_ARCH < 6) int tmp1, tmp2; int inc = 1; __asm__ volatile ( - "\n" "0:" "ldr %0, [%3]\n" "add %1, %0, %4\n" @@ -261,24 +281,44 @@ /* The value for __val is in '__oldval' */ __val = __oldval; -#elif (defined __ARM_ARCH && __ARM_ARCH >= 6) +#elif (defined __ARM_ARCH && __ARM_ARCH >= 7) int dec = 1; __asm__ volatile ( "1:" + "dmb ish\n" /* Memory barrier */ "ldrex %0, [%1]\n" "sub %0, %0, %2\n" "strex r1, %0, [%1]\n" "cmp r1, #0\n" "bne 1b\n" + "dmb ish\n" /* Memory barrier */ : "=&r" (__val) : "r"(valp), "r"(dec) : "r1"); +#elif (defined __ARM_ARCH && __ARM_ARCH == 6) + int dec = 1; + __asm__ volatile ( + "mcr p15, 0, %0, c7, c10, 5" /* Memory barrier */ + : : "r"(0) : "memory"); + __asm__ volatile ( + "1:" + "ldrex %0, [%1]\n" + "sub %0, %0, %2\n" + "strex r1, %0, [%1]\n" + "cmp r1, #0\n" + "bne 1b\n" + : "=&r" (__val) + : "r"(valp), "r"(dec) + : "r1"); + __asm__ volatile ( + "mcr p15, 0, %0, c7, c10, 5" /* Memory barrier */ + : : "r"(0) : "memory"); + #elif (defined __ARM_ARCH && __ARM_ARCH < 6) int tmp1, tmp2; int inc = -1; __asm__ volatile ( - "\n" "0:" "ldr %0, [%3]\n" "add %1, %0, %4\n" diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/lib/cppmyth/cppmyth/src/mythtypes.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/lib/cppmyth/cppmyth/src/mythtypes.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/lib/cppmyth/cppmyth/src/mythtypes.h 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/lib/cppmyth/cppmyth/src/mythtypes.h 2015-04-01 08:50:11.000000000 +0000 @@ -30,6 +30,10 @@ #include #include +/** + * @namespace Myth + * @brief This is the main namespace that encloses all public classes + */ namespace Myth { uint32_t StringToId(const std::string& str); diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/lib/cppmyth/cppmyth/src/mythwsapi.cpp kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/lib/cppmyth/cppmyth/src/mythwsapi.cpp --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/lib/cppmyth/cppmyth/src/mythwsapi.cpp 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/lib/cppmyth/cppmyth/src/mythwsapi.cpp 2015-04-01 08:50:11.000000000 +0000 @@ -114,11 +114,11 @@ if (resp.IsSuccessful()) { // Parse content response - const MythJSON::Document json(resp); - const MythJSON::Node& root = json.GetRoot(); + const JSON::Document json(resp); + const JSON::Node& root = json.GetRoot(); if (json.IsValid() && root.IsObject()) { - const MythJSON::Node& field = root.GetObjectValue("String"); + const JSON::Node& field = root.GetObjectValue("String"); if (field.IsString()) { const std::string& val = field.GetStringValue(); @@ -150,11 +150,11 @@ return false; } // Parse content response - const MythJSON::Document json(resp); - const MythJSON::Node& root = json.GetRoot(); + const JSON::Document json(resp); + const JSON::Node& root = json.GetRoot(); if (json.IsValid() && root.IsObject()) { - const MythJSON::Node& field = root.GetObjectValue("String"); + const JSON::Node& field = root.GetObjectValue("String"); if (field.IsString()) { const std::string& val = field.GetStringValue(); @@ -188,15 +188,15 @@ return false; } // Parse content response - const MythJSON::Document json(resp); - const MythJSON::Node& root = json.GetRoot(); + const JSON::Document json(resp); + const JSON::Node& root = json.GetRoot(); if (json.IsValid() && root.IsObject()) { - const MythJSON::Node& con = root.GetObjectValue("ConnectionInfo"); + const JSON::Node& con = root.GetObjectValue("ConnectionInfo"); if (con.IsObject()) { - const MythJSON::Node& ver = con.GetObjectValue("Version"); - MythJSON::BindObject(ver, &m_version, MythDTO::getVersionBindArray(wsv.ranking)); + const JSON::Node& ver = con.GetObjectValue("Version"); + JSON::BindObject(ver, &m_version, MythDTO::getVersionBindArray(wsv.ranking)); if (m_version.protocol) return true; } @@ -283,8 +283,8 @@ DBG(MYTH_DBG_ERROR, "%s: invalid response\n", __FUNCTION__); return ret; } - const MythJSON::Document json(resp); - const MythJSON::Node& root = json.GetRoot(); + const JSON::Document json(resp); + const JSON::Node& root = json.GetRoot(); if (!json.IsValid() || !root.IsObject()) { DBG(MYTH_DBG_ERROR, "%s: unexpected content\n", __FUNCTION__); @@ -293,14 +293,14 @@ DBG(MYTH_DBG_DEBUG, "%s: content parsed\n", __FUNCTION__); // Object: SettingList - const MythJSON::Node& slist = root.GetObjectValue("SettingList"); + const JSON::Node& slist = root.GetObjectValue("SettingList"); // Object: Settings - const MythJSON::Node& sts = slist.GetObjectValue("Settings"); + const JSON::Node& sts = slist.GetObjectValue("Settings"); if (sts.IsObject()) { if (sts.Size()) { - const MythJSON::Node& val = sts.GetObjectValue(static_cast(0)); + const JSON::Node& val = sts.GetObjectValue(static_cast(0)); if (val.IsString()) { ret.reset(new Setting()); // Using default constructor @@ -312,6 +312,42 @@ return ret; } +SettingPtr WSAPI::GetSetting5_0(const std::string& key, const std::string& hostname) +{ + SettingPtr ret; + + // Initialize request header + WSRequest req = WSRequest(m_server, m_port); + req.RequestAccept(CT_JSON); + req.RequestService("/Myth/GetSetting"); + req.SetContentParam("HostName", hostname); + req.SetContentParam("Key", key); + WSResponse resp(req); + if (!resp.IsSuccessful()) + { + DBG(MYTH_DBG_ERROR, "%s: invalid response\n", __FUNCTION__); + return ret; + } + const JSON::Document json(resp); + const JSON::Node& root = json.GetRoot(); + if (!json.IsValid() || !root.IsObject()) + { + DBG(MYTH_DBG_ERROR, "%s: unexpected content\n", __FUNCTION__); + return ret; + } + DBG(MYTH_DBG_DEBUG, "%s: content parsed\n", __FUNCTION__); + + // Object: String + const JSON::Node& val = root.GetObjectValue("String"); + if (val.IsString()) + { + ret.reset(new Setting()); // Using default constructor + ret->key = key; + ret->value = val.GetStringValue(); + } + return ret; +} + SettingPtr WSAPI::GetSetting(const std::string& key, bool myhost) { std::string hostname; @@ -335,8 +371,54 @@ DBG(MYTH_DBG_ERROR, "%s: invalid response\n", __FUNCTION__); return ret; } - const MythJSON::Document json(resp); - const MythJSON::Node& root = json.GetRoot(); + const JSON::Document json(resp); + const JSON::Node& root = json.GetRoot(); + if (!json.IsValid() || !root.IsObject()) + { + DBG(MYTH_DBG_ERROR, "%s: unexpected content\n", __FUNCTION__); + return ret; + } + DBG(MYTH_DBG_DEBUG, "%s: content parsed\n", __FUNCTION__); + + // Object: SettingList + const JSON::Node& slist = root.GetObjectValue("SettingList"); + // Object: Settings + const JSON::Node& sts = slist.GetObjectValue("Settings"); + if (sts.IsObject()) + { + size_t s = sts.Size(); + for (size_t i = 0; i < s; ++i) + { + const JSON::Node& val = sts.GetObjectValue(i); + if (val.IsString()) + { + SettingPtr setting(new Setting()); // Using default constructor + setting->key = sts.GetObjectKey(i); + setting->value = val.GetStringValue(); + ret->insert(SettingMap::value_type(setting->key, setting)); + } + } + } + return ret; +} + +SettingMapPtr WSAPI::GetSettings5_0(const std::string& hostname) +{ + SettingMapPtr ret(new SettingMap); + + // Initialize request header + WSRequest req = WSRequest(m_server, m_port); + req.RequestAccept(CT_JSON); + req.RequestService("/Myth/GetSettingList"); + req.SetContentParam("HostName", hostname); + WSResponse resp(req); + if (!resp.IsSuccessful()) + { + DBG(MYTH_DBG_ERROR, "%s: invalid response\n", __FUNCTION__); + return ret; + } + const JSON::Document json(resp); + const JSON::Node& root = json.GetRoot(); if (!json.IsValid() || !root.IsObject()) { DBG(MYTH_DBG_ERROR, "%s: unexpected content\n", __FUNCTION__); @@ -345,15 +427,15 @@ DBG(MYTH_DBG_DEBUG, "%s: content parsed\n", __FUNCTION__); // Object: SettingList - const MythJSON::Node& slist = root.GetObjectValue("SettingList"); + const JSON::Node& slist = root.GetObjectValue("SettingList"); // Object: Settings - const MythJSON::Node& sts = slist.GetObjectValue("Settings"); + const JSON::Node& sts = slist.GetObjectValue("Settings"); if (sts.IsObject()) { size_t s = sts.Size(); for (size_t i = 0; i < s; ++i) { - const MythJSON::Node& val = sts.GetObjectValue(i); + const JSON::Node& val = sts.GetObjectValue(i); if (val.IsString()) { SettingPtr setting(new Setting()); // Using default constructor @@ -392,8 +474,8 @@ DBG(MYTH_DBG_ERROR, "%s: invalid response\n", __FUNCTION__); return false; } - const MythJSON::Document json(resp); - const MythJSON::Node& root = json.GetRoot(); + const JSON::Document json(resp); + const JSON::Node& root = json.GetRoot(); if (!json.IsValid() || !root.IsObject()) { DBG(MYTH_DBG_ERROR, "%s: unexpected content\n", __FUNCTION__); @@ -401,7 +483,7 @@ } DBG(MYTH_DBG_DEBUG, "%s: content parsed\n", __FUNCTION__); - const MythJSON::Node& field = root.GetObjectValue("bool"); + const JSON::Node& field = root.GetObjectValue("bool"); if (!field.IsString() || strcmp(field.GetStringValue().c_str(), "true")) return false; return true; @@ -430,8 +512,8 @@ DBG(MYTH_DBG_ERROR, "%s: invalid response\n", __FUNCTION__); return ret; } - const MythJSON::Document json(resp); - const MythJSON::Node& root = json.GetRoot(); + const JSON::Document json(resp); + const JSON::Node& root = json.GetRoot(); if (!json.IsValid() || !root.IsObject()) { DBG(MYTH_DBG_ERROR, "%s: unexpected content\n", __FUNCTION__); @@ -440,17 +522,17 @@ DBG(MYTH_DBG_DEBUG, "%s: content parsed\n", __FUNCTION__); // Object: CaptureCardList - const MythJSON::Node& clist = root.GetObjectValue("CaptureCardList"); + const JSON::Node& clist = root.GetObjectValue("CaptureCardList"); // Object: CaptureCards[] - const MythJSON::Node& cards = clist.GetObjectValue("CaptureCards"); + const JSON::Node& cards = clist.GetObjectValue("CaptureCards"); // Iterates over the sequence elements. size_t cs = cards.Size(); for (size_t ci = 0; ci < cs; ++ci) { - const MythJSON::Node& card = cards.GetArrayElement(ci); + const JSON::Node& card = cards.GetArrayElement(ci); CaptureCardPtr captureCard(new CaptureCard()); // Using default constructor // Bind the new captureCard - MythJSON::BindObject(card, captureCard.get(), bindcard); + JSON::BindObject(card, captureCard.get(), bindcard); ret->push_back(captureCard); } return ret; @@ -478,8 +560,8 @@ DBG(MYTH_DBG_ERROR, "%s: invalid response\n", __FUNCTION__); return ret; } - const MythJSON::Document json(resp); - const MythJSON::Node& root = json.GetRoot(); + const JSON::Document json(resp); + const JSON::Node& root = json.GetRoot(); if (!json.IsValid() || !root.IsObject()) { DBG(MYTH_DBG_ERROR, "%s: unexpected content\n", __FUNCTION__); @@ -488,17 +570,17 @@ DBG(MYTH_DBG_DEBUG, "%s: content parsed\n", __FUNCTION__); // Object: VideoSourceList - const MythJSON::Node& slist = root.GetObjectValue("VideoSourceList"); + const JSON::Node& slist = root.GetObjectValue("VideoSourceList"); // Object: VideoSources[] - const MythJSON::Node& vsrcs = slist.GetObjectValue("VideoSources"); + const JSON::Node& vsrcs = slist.GetObjectValue("VideoSources"); // Iterates over the sequence elements. size_t vs = vsrcs.Size(); for (size_t vi = 0; vi < vs; ++vi) { - const MythJSON::Node& vsrc = vsrcs.GetArrayElement(vi); + const JSON::Node& vsrc = vsrcs.GetArrayElement(vi); VideoSourcePtr videoSource(new VideoSource()); // Using default constructor // Bind the new videoSource - MythJSON::BindObject(vsrc, videoSource.get(), bindvsrc); + JSON::BindObject(vsrc, videoSource.get(), bindvsrc); ret->push_back(videoSource); } return ret; @@ -537,8 +619,8 @@ DBG(MYTH_DBG_ERROR, "%s: invalid response\n", __FUNCTION__); break; } - const MythJSON::Document json(resp); - const MythJSON::Node& root = json.GetRoot(); + const JSON::Document json(resp); + const JSON::Node& root = json.GetRoot(); if (!json.IsValid() || !root.IsObject()) { DBG(MYTH_DBG_ERROR, "%s: unexpected content\n", __FUNCTION__); @@ -547,9 +629,9 @@ DBG(MYTH_DBG_DEBUG, "%s: content parsed\n", __FUNCTION__); // Object: ChannelInfoList - const MythJSON::Node& clist = root.GetObjectValue("ChannelInfoList"); + const JSON::Node& clist = root.GetObjectValue("ChannelInfoList"); ItemList list = ItemList(); // Using default constructor - MythJSON::BindObject(clist, &list, bindlist); + JSON::BindObject(clist, &list, bindlist); // List has ProtoVer. Check it or sound alarm if (list.protoVer != proto) { @@ -558,16 +640,16 @@ } count = 0; // Object: ChannelInfos[] - const MythJSON::Node& chans = clist.GetObjectValue("ChannelInfos"); + const JSON::Node& chans = clist.GetObjectValue("ChannelInfos"); // Iterates over the sequence elements. size_t cs = chans.Size(); for (size_t ci = 0; ci < cs; ++ci) { ++count; - const MythJSON::Node& chan = chans.GetArrayElement(ci); + const JSON::Node& chan = chans.GetArrayElement(ci); ChannelPtr channel(new Channel()); // Using default constructor // Bind the new channel - MythJSON::BindObject(chan, channel.get(), bindchan); + JSON::BindObject(chan, channel.get(), bindchan); if (channel->chanId && (!onlyVisible || channel->visible)) ret->push_back(channel); } @@ -614,8 +696,8 @@ DBG(MYTH_DBG_ERROR, "%s: invalid response\n", __FUNCTION__); break; } - const MythJSON::Document json(resp); - const MythJSON::Node& root = json.GetRoot(); + const JSON::Document json(resp); + const JSON::Node& root = json.GetRoot(); if (!json.IsValid() || !root.IsObject()) { DBG(MYTH_DBG_ERROR, "%s: unexpected content\n", __FUNCTION__); @@ -624,9 +706,9 @@ DBG(MYTH_DBG_DEBUG, "%s: content parsed\n", __FUNCTION__); // Object: ChannelInfoList - const MythJSON::Node& clist = root.GetObjectValue("ChannelInfoList"); + const JSON::Node& clist = root.GetObjectValue("ChannelInfoList"); ItemList list = ItemList(); // Using default constructor - MythJSON::BindObject(clist, &list, bindlist); + JSON::BindObject(clist, &list, bindlist); // List has ProtoVer. Check it or sound alarm if (list.protoVer != proto) { @@ -635,16 +717,16 @@ } count = 0; // Object: ChannelInfos[] - const MythJSON::Node& chans = clist.GetObjectValue("ChannelInfos"); + const JSON::Node& chans = clist.GetObjectValue("ChannelInfos"); // Iterates over the sequence elements. size_t cs = chans.Size(); for (size_t ci = 0; ci < cs; ++ci) { ++count; - const MythJSON::Node& chan = chans.GetArrayElement(ci); + const JSON::Node& chan = chans.GetArrayElement(ci); ChannelPtr channel(new Channel()); // Using default constructor // Bind the new channel - MythJSON::BindObject(chan, channel.get(), bindchan); + JSON::BindObject(chan, channel.get(), bindchan); if (channel->chanId) ret->push_back(channel); } @@ -691,8 +773,8 @@ DBG(MYTH_DBG_ERROR, "%s: invalid response\n", __FUNCTION__); return ret; } - const MythJSON::Document json(resp); - const MythJSON::Node& root = json.GetRoot(); + const JSON::Document json(resp); + const JSON::Node& root = json.GetRoot(); if (!json.IsValid() || !root.IsObject()) { DBG(MYTH_DBG_ERROR, "%s: unexpected content\n", __FUNCTION__); @@ -701,9 +783,9 @@ DBG(MYTH_DBG_DEBUG, "%s: content parsed\n", __FUNCTION__); // Object: ProgramGuide - const MythJSON::Node& glist = root.GetObjectValue("ProgramGuide"); + const JSON::Node& glist = root.GetObjectValue("ProgramGuide"); ItemList list = ItemList(); // Using default constructor - MythJSON::BindObject(glist, &list, bindlist); + JSON::BindObject(glist, &list, bindlist); // List has ProtoVer. Check it or sound alarm if (list.protoVer != proto) { @@ -711,25 +793,25 @@ return ret; } // Object: Channels[] - const MythJSON::Node& chans = glist.GetObjectValue("Channels"); + const JSON::Node& chans = glist.GetObjectValue("Channels"); // Iterates over the sequence elements. size_t cs = chans.Size(); for (size_t ci = 0; ci < cs; ++ci) { - const MythJSON::Node& chan = chans.GetArrayElement(ci); + const JSON::Node& chan = chans.GetArrayElement(ci); Channel channel; - MythJSON::BindObject(chan, &channel, bindchan); + JSON::BindObject(chan, &channel, bindchan); // Object: Programs[] - const MythJSON::Node& progs = chan.GetObjectValue("Programs"); + const JSON::Node& progs = chan.GetObjectValue("Programs"); // Iterates over the sequence elements. size_t ps = progs.Size(); for (size_t pi = 0; pi < ps; ++pi) { ++count; - const MythJSON::Node& prog = progs.GetArrayElement(pi); + const JSON::Node& prog = progs.GetArrayElement(pi); ProgramPtr program(new Program()); // Using default constructor // Bind the new program - MythJSON::BindObject(prog, program.get(), bindprog); + JSON::BindObject(prog, program.get(), bindprog); program->channel = channel; ret->insert(std::make_pair(program->startTime, program)); } @@ -782,8 +864,8 @@ DBG(MYTH_DBG_ERROR, "%s: invalid response\n", __FUNCTION__); break; } - const MythJSON::Document json(resp); - const MythJSON::Node& root = json.GetRoot(); + const JSON::Document json(resp); + const JSON::Node& root = json.GetRoot(); if (!json.IsValid() || !root.IsObject()) { DBG(MYTH_DBG_ERROR, "%s: unexpected content\n", __FUNCTION__); @@ -792,9 +874,9 @@ DBG(MYTH_DBG_DEBUG, "%s: content parsed\n", __FUNCTION__); // Object: ProgramList - const MythJSON::Node& plist = root.GetObjectValue("ProgramList"); + const JSON::Node& plist = root.GetObjectValue("ProgramList"); ItemList list = ItemList(); // Using default constructor - MythJSON::BindObject(plist, &list, bindlist); + JSON::BindObject(plist, &list, bindlist); // List has ProtoVer. Check it or sound alarm if (list.protoVer != proto) { @@ -803,30 +885,30 @@ } count = 0; // Object: Programs[] - const MythJSON::Node& progs = plist.GetObjectValue("Programs"); + const JSON::Node& progs = plist.GetObjectValue("Programs"); // Iterates over the sequence elements. size_t ps = progs.Size(); for (size_t pi = 0; pi < ps; ++pi) { ++count; - const MythJSON::Node& prog = progs.GetArrayElement(pi); + const JSON::Node& prog = progs.GetArrayElement(pi); ProgramPtr program(new Program()); // Using default constructor // Bind the new program - MythJSON::BindObject(prog, program.get(), bindprog); + JSON::BindObject(prog, program.get(), bindprog); // Bind channel of program - const MythJSON::Node& chan = prog.GetObjectValue("Channel"); - MythJSON::BindObject(chan, &(program->channel), bindchan); + const JSON::Node& chan = prog.GetObjectValue("Channel"); + JSON::BindObject(chan, &(program->channel), bindchan); // Bind recording of program - const MythJSON::Node& reco = prog.GetObjectValue("Recording"); - MythJSON::BindObject(reco, &(program->recording), bindreco); + const JSON::Node& reco = prog.GetObjectValue("Recording"); + JSON::BindObject(reco, &(program->recording), bindreco); // Bind artwork list of program - const MythJSON::Node& arts = prog.GetObjectValue("Artwork").GetObjectValue("ArtworkInfos"); + const JSON::Node& arts = prog.GetObjectValue("Artwork").GetObjectValue("ArtworkInfos"); size_t as = arts.Size(); for (size_t pa = 0; pa < as; ++pa) { - const MythJSON::Node& artw = arts.GetArrayElement(pa); + const JSON::Node& artw = arts.GetArrayElement(pa); Artwork artwork = Artwork(); // Using default constructor - MythJSON::BindObject(artw, &artwork, bindartw); + JSON::BindObject(artw, &artwork, bindartw); program->artwork.push_back(artwork); } ret->push_back(program); @@ -865,8 +947,8 @@ DBG(MYTH_DBG_ERROR, "%s: invalid response\n", __FUNCTION__); return ret; } - const MythJSON::Document json(resp); - const MythJSON::Node& root = json.GetRoot(); + const JSON::Document json(resp); + const JSON::Node& root = json.GetRoot(); if (!json.IsValid() || !root.IsObject()) { DBG(MYTH_DBG_ERROR, "%s: unexpected content\n", __FUNCTION__); @@ -874,24 +956,24 @@ } DBG(MYTH_DBG_DEBUG, "%s: content parsed\n", __FUNCTION__); - const MythJSON::Node& prog = root.GetObjectValue("Program"); + const JSON::Node& prog = root.GetObjectValue("Program"); ProgramPtr program(new Program()); // Using default constructor // Bind the new program - MythJSON::BindObject(prog, program.get(), bindprog); + JSON::BindObject(prog, program.get(), bindprog); // Bind channel of program - const MythJSON::Node& chan = prog.GetObjectValue("Channel"); - MythJSON::BindObject(chan, &(program->channel), bindchan); + const JSON::Node& chan = prog.GetObjectValue("Channel"); + JSON::BindObject(chan, &(program->channel), bindchan); // Bind recording of program - const MythJSON::Node& reco = prog.GetObjectValue("Recording"); - MythJSON::BindObject(reco, &(program->recording), bindreco); + const JSON::Node& reco = prog.GetObjectValue("Recording"); + JSON::BindObject(reco, &(program->recording), bindreco); // Bind artwork list of program - const MythJSON::Node& arts = prog.GetObjectValue("Artwork").GetObjectValue("ArtworkInfos"); + const JSON::Node& arts = prog.GetObjectValue("Artwork").GetObjectValue("ArtworkInfos"); size_t as = arts.Size(); for (size_t pa = 0; pa < as; ++pa) { - const MythJSON::Node& artw = arts.GetArrayElement(pa); + const JSON::Node& artw = arts.GetArrayElement(pa); Artwork artwork = Artwork(); // Using default constructor - MythJSON::BindObject(artw, &artwork, bindartw); + JSON::BindObject(artw, &artwork, bindartw); program->artwork.push_back(artwork); } // Return valid program @@ -923,8 +1005,8 @@ DBG(MYTH_DBG_ERROR, "%s: invalid response\n", __FUNCTION__); return ret; } - const MythJSON::Document json(resp); - const MythJSON::Node& root = json.GetRoot(); + const JSON::Document json(resp); + const JSON::Node& root = json.GetRoot(); if (!json.IsValid() || !root.IsObject()) { DBG(MYTH_DBG_ERROR, "%s: unexpected content\n", __FUNCTION__); @@ -932,24 +1014,24 @@ } DBG(MYTH_DBG_DEBUG, "%s: content parsed\n", __FUNCTION__); - const MythJSON::Node& prog = root.GetObjectValue("Program"); + const JSON::Node& prog = root.GetObjectValue("Program"); ProgramPtr program(new Program()); // Using default constructor // Bind the new program - MythJSON::BindObject(prog, program.get(), bindprog); + JSON::BindObject(prog, program.get(), bindprog); // Bind channel of program - const MythJSON::Node& chan = prog.GetObjectValue("Channel"); - MythJSON::BindObject(chan, &(program->channel), bindchan); + const JSON::Node& chan = prog.GetObjectValue("Channel"); + JSON::BindObject(chan, &(program->channel), bindchan); // Bind recording of program - const MythJSON::Node& reco = prog.GetObjectValue("Recording"); - MythJSON::BindObject(reco, &(program->recording), bindreco); + const JSON::Node& reco = prog.GetObjectValue("Recording"); + JSON::BindObject(reco, &(program->recording), bindreco); // Bind artwork list of program - const MythJSON::Node& arts = prog.GetObjectValue("Artwork").GetObjectValue("ArtworkInfos"); + const JSON::Node& arts = prog.GetObjectValue("Artwork").GetObjectValue("ArtworkInfos"); size_t as = arts.Size(); for (size_t pa = 0; pa < as; ++pa) { - const MythJSON::Node& artw = arts.GetArrayElement(pa); + const JSON::Node& artw = arts.GetArrayElement(pa); Artwork artwork = Artwork(); // Using default constructor - MythJSON::BindObject(artw, &artwork, bindartw); + JSON::BindObject(artw, &artwork, bindartw); program->artwork.push_back(artwork); } // Return valid program @@ -978,8 +1060,8 @@ DBG(MYTH_DBG_ERROR, "%s: invalid response\n", __FUNCTION__); return false; } - const MythJSON::Document json(resp); - const MythJSON::Node& root = json.GetRoot(); + const JSON::Document json(resp); + const JSON::Node& root = json.GetRoot(); if (!json.IsValid() || !root.IsObject()) { DBG(MYTH_DBG_ERROR, "%s: unexpected content\n", __FUNCTION__); @@ -987,7 +1069,7 @@ } DBG(MYTH_DBG_DEBUG, "%s: content parsed\n", __FUNCTION__); - const MythJSON::Node& field = root.GetObjectValue("bool"); + const JSON::Node& field = root.GetObjectValue("bool"); if (!field.IsString() || strcmp(field.GetStringValue().c_str(), "true")) return false; return true; @@ -1011,8 +1093,8 @@ DBG(MYTH_DBG_ERROR, "%s: invalid response\n", __FUNCTION__); return false; } - const MythJSON::Document json(resp); - const MythJSON::Node& root = json.GetRoot(); + const JSON::Document json(resp); + const JSON::Node& root = json.GetRoot(); if (!json.IsValid() || !root.IsObject()) { DBG(MYTH_DBG_ERROR, "%s: unexpected content\n", __FUNCTION__); @@ -1020,7 +1102,7 @@ } DBG(MYTH_DBG_DEBUG, "%s: content parsed\n", __FUNCTION__); - const MythJSON::Node& field = root.GetObjectValue("bool"); + const JSON::Node& field = root.GetObjectValue("bool"); if (!field.IsString() || strcmp(field.GetStringValue().c_str(), "true")) return false; return true; @@ -1044,8 +1126,8 @@ DBG(MYTH_DBG_ERROR, "%s: invalid response\n", __FUNCTION__); return false; } - const MythJSON::Document json(resp); - const MythJSON::Node& root = json.GetRoot(); + const JSON::Document json(resp); + const JSON::Node& root = json.GetRoot(); if (!json.IsValid() || !root.IsObject()) { DBG(MYTH_DBG_ERROR, "%s: unexpected content\n", __FUNCTION__); @@ -1053,7 +1135,7 @@ } DBG(MYTH_DBG_DEBUG, "%s: content parsed\n", __FUNCTION__); - const MythJSON::Node& field = root.GetObjectValue("bool"); + const JSON::Node& field = root.GetObjectValue("bool"); if (!field.IsString() || strcmp(field.GetStringValue().c_str(), "true")) return false; return true; @@ -1075,8 +1157,8 @@ DBG(MYTH_DBG_ERROR, "%s: invalid response\n", __FUNCTION__); return false; } - const MythJSON::Document json(resp); - const MythJSON::Node& root = json.GetRoot(); + const JSON::Document json(resp); + const JSON::Node& root = json.GetRoot(); if (!json.IsValid() || !root.IsObject()) { DBG(MYTH_DBG_ERROR, "%s: unexpected content\n", __FUNCTION__); @@ -1084,7 +1166,7 @@ } DBG(MYTH_DBG_DEBUG, "%s: content parsed\n", __FUNCTION__); - const MythJSON::Node& field = root.GetObjectValue("bool"); + const JSON::Node& field = root.GetObjectValue("bool"); if (!field.IsString() || strcmp(field.GetStringValue().c_str(), "true")) return false; return true; @@ -1109,8 +1191,8 @@ DBG(MYTH_DBG_ERROR, "%s: invalid response\n", __FUNCTION__); return false; } - const MythJSON::Document json(resp); - const MythJSON::Node& root = json.GetRoot(); + const JSON::Document json(resp); + const JSON::Node& root = json.GetRoot(); if (!json.IsValid() || !root.IsObject()) { DBG(MYTH_DBG_ERROR, "%s: unexpected content\n", __FUNCTION__); @@ -1118,7 +1200,7 @@ } DBG(MYTH_DBG_DEBUG, "%s: content parsed\n", __FUNCTION__); - const MythJSON::Node& field = root.GetObjectValue("bool"); + const JSON::Node& field = root.GetObjectValue("bool"); if (!field.IsString() || strcmp(field.GetStringValue().c_str(), "true")) return false; return true; @@ -1141,8 +1223,8 @@ DBG(MYTH_DBG_ERROR, "%s: invalid response\n", __FUNCTION__); return false; } - const MythJSON::Document json(resp); - const MythJSON::Node& root = json.GetRoot(); + const JSON::Document json(resp); + const JSON::Node& root = json.GetRoot(); if (!json.IsValid() || !root.IsObject()) { DBG(MYTH_DBG_ERROR, "%s: unexpected content\n", __FUNCTION__); @@ -1150,7 +1232,7 @@ } DBG(MYTH_DBG_DEBUG, "%s: content parsed\n", __FUNCTION__); - const MythJSON::Node& field = root.GetObjectValue("bool"); + const JSON::Node& field = root.GetObjectValue("bool"); if (!field.IsString() || strcmp(field.GetStringValue().c_str(), "true")) return false; return true; @@ -1196,8 +1278,8 @@ DBG(MYTH_DBG_ERROR, "%s: invalid response\n", __FUNCTION__); break; } - const MythJSON::Document json(resp); - const MythJSON::Node& root = json.GetRoot(); + const JSON::Document json(resp); + const JSON::Node& root = json.GetRoot(); if (!json.IsValid() || !root.IsObject()) { DBG(MYTH_DBG_ERROR, "%s: unexpected content\n", __FUNCTION__); @@ -1206,9 +1288,9 @@ DBG(MYTH_DBG_DEBUG, "%s: content parsed\n", __FUNCTION__); // Object: RecRuleList - const MythJSON::Node& rlist = root.GetObjectValue("RecRuleList"); + const JSON::Node& rlist = root.GetObjectValue("RecRuleList"); ItemList list = ItemList(); // Using default constructor - MythJSON::BindObject(rlist, &list, bindlist); + JSON::BindObject(rlist, &list, bindlist); // List has ProtoVer. Check it or sound alarm if (list.protoVer != proto) { @@ -1217,16 +1299,16 @@ } count = 0; // Object: RecRules[] - const MythJSON::Node& recs = rlist.GetObjectValue("RecRules"); + const JSON::Node& recs = rlist.GetObjectValue("RecRules"); // Iterates over the sequence elements. size_t rs = recs.Size(); for (size_t ri = 0; ri < rs; ++ri) { ++count; - const MythJSON::Node& rec = recs.GetArrayElement(ri); + const JSON::Node& rec = recs.GetArrayElement(ri); RecordSchedulePtr record(new RecordSchedule()); // Using default constructor // Bind the new record - MythJSON::BindObject(rec, record.get(), bindrec); + JSON::BindObject(rec, record.get(), bindrec); ProcessRecordIN(proto, *record); ret->push_back(record); } @@ -1258,8 +1340,8 @@ DBG(MYTH_DBG_ERROR, "%s: invalid response\n", __FUNCTION__); return ret; } - const MythJSON::Document json(resp); - const MythJSON::Node& root = json.GetRoot(); + const JSON::Document json(resp); + const JSON::Node& root = json.GetRoot(); if (!json.IsValid() || !root.IsObject()) { DBG(MYTH_DBG_ERROR, "%s: unexpected content\n", __FUNCTION__); @@ -1267,10 +1349,10 @@ } DBG(MYTH_DBG_DEBUG, "%s: content parsed\n", __FUNCTION__); - const MythJSON::Node& rec = root.GetObjectValue("RecRule"); + const JSON::Node& rec = root.GetObjectValue("RecRule"); RecordSchedulePtr record(new RecordSchedule()); // Using default constructor // Bind the new record - MythJSON::BindObject(rec, record.get(), bindrec); + JSON::BindObject(rec, record.get(), bindrec); // Return valid record if (record->recordId > 0) { @@ -1368,8 +1450,8 @@ DBG(MYTH_DBG_ERROR, "%s: invalid response\n", __FUNCTION__); return false; } - const MythJSON::Document json(resp); - const MythJSON::Node& root = json.GetRoot(); + const JSON::Document json(resp); + const JSON::Node& root = json.GetRoot(); if (!json.IsValid() || !root.IsObject()) { DBG(MYTH_DBG_ERROR, "%s: unexpected content\n", __FUNCTION__); @@ -1377,7 +1459,7 @@ } DBG(MYTH_DBG_DEBUG, "%s: content parsed\n", __FUNCTION__); - const MythJSON::Node& field = root.GetObjectValue("int"); + const JSON::Node& field = root.GetObjectValue("int"); if (!field.IsString() || str2uint32(field.GetStringValue().c_str(), &recordid)) return false; record.recordId = recordid; @@ -1459,8 +1541,8 @@ DBG(MYTH_DBG_ERROR, "%s: invalid response\n", __FUNCTION__); return false; } - const MythJSON::Document json(resp); - const MythJSON::Node& root = json.GetRoot(); + const JSON::Document json(resp); + const JSON::Node& root = json.GetRoot(); if (!json.IsValid() || !root.IsObject()) { DBG(MYTH_DBG_ERROR, "%s: unexpected content\n", __FUNCTION__); @@ -1468,7 +1550,7 @@ } DBG(MYTH_DBG_DEBUG, "%s: content parsed\n", __FUNCTION__); - const MythJSON::Node& field = root.GetObjectValue("uint"); + const JSON::Node& field = root.GetObjectValue("uint"); if (!field.IsString() || str2uint32(field.GetStringValue().c_str(), &recordid)) return false; record.recordId = recordid; @@ -1551,8 +1633,8 @@ DBG(MYTH_DBG_ERROR, "%s: invalid response\n", __FUNCTION__); return false; } - const MythJSON::Document json(resp); - const MythJSON::Node& root = json.GetRoot(); + const JSON::Document json(resp); + const JSON::Node& root = json.GetRoot(); if (!json.IsValid() || !root.IsObject()) { DBG(MYTH_DBG_ERROR, "%s: unexpected content\n", __FUNCTION__); @@ -1560,7 +1642,7 @@ } DBG(MYTH_DBG_DEBUG, "%s: content parsed\n", __FUNCTION__); - const MythJSON::Node& field = root.GetObjectValue("bool"); + const JSON::Node& field = root.GetObjectValue("bool"); if (!field.IsString() || strcmp(field.GetStringValue().c_str(), "true")) return false; return true; @@ -1584,8 +1666,8 @@ DBG(MYTH_DBG_ERROR, "%s: invalid response\n", __FUNCTION__); return false; } - const MythJSON::Document json(resp); - const MythJSON::Node& root = json.GetRoot(); + const JSON::Document json(resp); + const JSON::Node& root = json.GetRoot(); if (!json.IsValid() || !root.IsObject()) { DBG(MYTH_DBG_ERROR, "%s: unexpected content\n", __FUNCTION__); @@ -1593,7 +1675,7 @@ } DBG(MYTH_DBG_DEBUG, "%s: content parsed\n", __FUNCTION__); - const MythJSON::Node& field = root.GetObjectValue("bool"); + const JSON::Node& field = root.GetObjectValue("bool"); if (!field.IsString() || strcmp(field.GetStringValue().c_str(), "true")) return false; return true; @@ -1617,8 +1699,8 @@ DBG(MYTH_DBG_ERROR, "%s: invalid response\n", __FUNCTION__); return false; } - const MythJSON::Document json(resp); - const MythJSON::Node& root = json.GetRoot(); + const JSON::Document json(resp); + const JSON::Node& root = json.GetRoot(); if (!json.IsValid() || !root.IsObject()) { DBG(MYTH_DBG_ERROR, "%s: unexpected content\n", __FUNCTION__); @@ -1626,7 +1708,7 @@ } DBG(MYTH_DBG_DEBUG, "%s: content parsed\n", __FUNCTION__); - const MythJSON::Node& field = root.GetObjectValue("bool"); + const JSON::Node& field = root.GetObjectValue("bool"); if (!field.IsString() || strcmp(field.GetStringValue().c_str(), "true")) return false; return true; @@ -1650,8 +1732,8 @@ DBG(MYTH_DBG_ERROR, "%s: invalid response\n", __FUNCTION__); return false; } - const MythJSON::Document json(resp); - const MythJSON::Node& root = json.GetRoot(); + const JSON::Document json(resp); + const JSON::Node& root = json.GetRoot(); if (!json.IsValid() || !root.IsObject()) { DBG(MYTH_DBG_ERROR, "%s: unexpected content\n", __FUNCTION__); @@ -1659,7 +1741,7 @@ } DBG(MYTH_DBG_DEBUG, "%s: content parsed\n", __FUNCTION__); - const MythJSON::Node& field = root.GetObjectValue("bool"); + const JSON::Node& field = root.GetObjectValue("bool"); if (!field.IsString() || strcmp(field.GetStringValue().c_str(), "true")) return false; return true; @@ -1713,8 +1795,8 @@ DBG(MYTH_DBG_ERROR, "%s: invalid response\n", __FUNCTION__); break; } - const MythJSON::Document json(resp); - const MythJSON::Node& root = json.GetRoot(); + const JSON::Document json(resp); + const JSON::Node& root = json.GetRoot(); if (!json.IsValid() || !root.IsObject()) { DBG(MYTH_DBG_ERROR, "%s: unexpected content\n", __FUNCTION__); @@ -1723,9 +1805,9 @@ DBG(MYTH_DBG_DEBUG, "%s: content parsed\n", __FUNCTION__); // Object: ProgramList - const MythJSON::Node& plist = root.GetObjectValue("ProgramList"); + const JSON::Node& plist = root.GetObjectValue("ProgramList"); ItemList list = ItemList(); // Using default constructor - MythJSON::BindObject(plist, &list, bindlist); + JSON::BindObject(plist, &list, bindlist); // List has ProtoVer. Check it or sound alarm if (list.protoVer != proto) { @@ -1734,22 +1816,22 @@ } count = 0; // Object: Programs[] - const MythJSON::Node& progs = plist.GetObjectValue("Programs"); + const JSON::Node& progs = plist.GetObjectValue("Programs"); // Iterates over the sequence elements. size_t ps = progs.Size(); for (size_t pi = 0; pi < ps; ++pi) { ++count; - const MythJSON::Node& prog = progs.GetArrayElement(pi); + const JSON::Node& prog = progs.GetArrayElement(pi); ProgramPtr program(new Program()); // Using default constructor // Bind the new program - MythJSON::BindObject(prog, program.get(), bindprog); + JSON::BindObject(prog, program.get(), bindprog); // Bind channel of program - const MythJSON::Node& chan = prog.GetObjectValue("Channel"); - MythJSON::BindObject(chan, &(program->channel), bindchan); + const JSON::Node& chan = prog.GetObjectValue("Channel"); + JSON::BindObject(chan, &(program->channel), bindchan); // Bind recording of program - const MythJSON::Node& reco = prog.GetObjectValue("Recording"); - MythJSON::BindObject(reco, &(program->recording), bindreco); + const JSON::Node& reco = prog.GetObjectValue("Recording"); + JSON::BindObject(reco, &(program->recording), bindreco); ret->push_back(program); } DBG(MYTH_DBG_DEBUG, "%s: received count(%d)\n", __FUNCTION__, count); @@ -1793,8 +1875,8 @@ DBG(MYTH_DBG_ERROR, "%s: invalid response\n", __FUNCTION__); break; } - const MythJSON::Document json(resp); - const MythJSON::Node& root = json.GetRoot(); + const JSON::Document json(resp); + const JSON::Node& root = json.GetRoot(); if (!json.IsValid() || !root.IsObject()) { DBG(MYTH_DBG_ERROR, "%s: unexpected content\n", __FUNCTION__); @@ -1803,9 +1885,9 @@ DBG(MYTH_DBG_DEBUG, "%s: content parsed\n", __FUNCTION__); // Object: ProgramList - const MythJSON::Node& plist = root.GetObjectValue("ProgramList"); + const JSON::Node& plist = root.GetObjectValue("ProgramList"); ItemList list = ItemList(); // Using default constructor - MythJSON::BindObject(plist, &list, bindlist); + JSON::BindObject(plist, &list, bindlist); // List has ProtoVer. Check it or sound alarm if (list.protoVer != proto) { @@ -1814,22 +1896,22 @@ } count = 0; // Object: Programs[] - const MythJSON::Node& progs = plist.GetObjectValue("Programs"); + const JSON::Node& progs = plist.GetObjectValue("Programs"); // Iterates over the sequence elements. size_t ps = progs.Size(); for (size_t pi = 0; pi < ps; ++pi) { ++count; - const MythJSON::Node& prog = progs.GetArrayElement(pi); + const JSON::Node& prog = progs.GetArrayElement(pi); ProgramPtr program(new Program()); // Using default constructor // Bind the new program - MythJSON::BindObject(prog, program.get(), bindprog); + JSON::BindObject(prog, program.get(), bindprog); // Bind channel of program - const MythJSON::Node& chan = prog.GetObjectValue("Channel"); - MythJSON::BindObject(chan, &(program->channel), bindchan); + const JSON::Node& chan = prog.GetObjectValue("Channel"); + JSON::BindObject(chan, &(program->channel), bindchan); // Bind recording of program - const MythJSON::Node& reco = prog.GetObjectValue("Recording"); - MythJSON::BindObject(reco, &(program->recording), bindreco); + const JSON::Node& reco = prog.GetObjectValue("Recording"); + JSON::BindObject(reco, &(program->recording), bindreco); ret->push_back(program); } DBG(MYTH_DBG_DEBUG, "%s: received count(%d)\n", __FUNCTION__, count); @@ -1873,8 +1955,8 @@ DBG(MYTH_DBG_ERROR, "%s: invalid response\n", __FUNCTION__); break; } - const MythJSON::Document json(resp); - const MythJSON::Node& root = json.GetRoot(); + const JSON::Document json(resp); + const JSON::Node& root = json.GetRoot(); if (!json.IsValid() || !root.IsObject()) { DBG(MYTH_DBG_ERROR, "%s: unexpected content\n", __FUNCTION__); @@ -1883,9 +1965,9 @@ DBG(MYTH_DBG_DEBUG, "%s: content parsed\n", __FUNCTION__); // Object: ProgramList - const MythJSON::Node& plist = root.GetObjectValue("ProgramList"); + const JSON::Node& plist = root.GetObjectValue("ProgramList"); ItemList list = ItemList(); // Using default constructor - MythJSON::BindObject(plist, &list, bindlist); + JSON::BindObject(plist, &list, bindlist); // List has ProtoVer. Check it or sound alarm if (list.protoVer != proto) { @@ -1894,22 +1976,22 @@ } count = 0; // Object: Programs[] - const MythJSON::Node& progs = plist.GetObjectValue("Programs"); + const JSON::Node& progs = plist.GetObjectValue("Programs"); // Iterates over the sequence elements. size_t ps = progs.Size(); for (size_t pi = 0; pi < ps; ++pi) { ++count; - const MythJSON::Node& prog = progs.GetArrayElement(pi); + const JSON::Node& prog = progs.GetArrayElement(pi); ProgramPtr program(new Program()); // Using default constructor // Bind the new program - MythJSON::BindObject(prog, program.get(), bindprog); + JSON::BindObject(prog, program.get(), bindprog); // Bind channel of program - const MythJSON::Node& chan = prog.GetObjectValue("Channel"); - MythJSON::BindObject(chan, &(program->channel), bindchan); + const JSON::Node& chan = prog.GetObjectValue("Channel"); + JSON::BindObject(chan, &(program->channel), bindchan); // Bind recording of program - const MythJSON::Node& reco = prog.GetObjectValue("Recording"); - MythJSON::BindObject(reco, &(program->recording), bindreco); + const JSON::Node& reco = prog.GetObjectValue("Recording"); + JSON::BindObject(reco, &(program->recording), bindreco); ret->push_back(program); } DBG(MYTH_DBG_DEBUG, "%s: received count(%d)\n", __FUNCTION__, count); @@ -2063,8 +2145,8 @@ DBG(MYTH_DBG_ERROR, "%s: invalid response\n", __FUNCTION__); return ret; } - const MythJSON::Document json(resp); - const MythJSON::Node& root = json.GetRoot(); + const JSON::Document json(resp); + const JSON::Node& root = json.GetRoot(); if (!json.IsValid() || !root.IsObject()) { DBG(MYTH_DBG_ERROR, "%s: unexpected content\n", __FUNCTION__); @@ -2072,15 +2154,15 @@ } DBG(MYTH_DBG_DEBUG, "%s: content parsed\n", __FUNCTION__); - const MythJSON::Node& list = root.GetObjectValue("ArtworkInfoList"); + const JSON::Node& list = root.GetObjectValue("ArtworkInfoList"); // Bind artwork list - const MythJSON::Node& arts = list.GetObjectValue("ArtworkInfos"); + const JSON::Node& arts = list.GetObjectValue("ArtworkInfos"); size_t as = arts.Size(); for (size_t pa = 0; pa < as; ++pa) { - const MythJSON::Node& artw = arts.GetArrayElement(pa); + const JSON::Node& artw = arts.GetArrayElement(pa); ArtworkPtr artwork(new Artwork()); // Using default constructor - MythJSON::BindObject(artw, artwork.get(), bindartw); + JSON::BindObject(artw, artwork.get(), bindartw); ret->push_back(artwork); } return ret; diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/lib/cppmyth/cppmyth/src/mythwsapi.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/lib/cppmyth/cppmyth/src/mythwsapi.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/lib/cppmyth/cppmyth/src/mythwsapi.h 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/lib/cppmyth/cppmyth/src/mythwsapi.h 2015-04-01 08:50:11.000000000 +0000 @@ -26,16 +26,16 @@ #include "mythwsstream.h" #define MYTH_API_VERSION_MIN_RANKING 0x00020000 -#define MYTH_API_VERSION_MAX_RANKING 0x0004FFFF - -namespace PLATFORM -{ - class CMutex; -} +#define MYTH_API_VERSION_MAX_RANKING 0x0005FFFF namespace Myth { + namespace PLATFORM + { + class CMutex; + } + typedef enum { WS_Myth = 0, @@ -73,6 +73,7 @@ SettingPtr GetSetting(const std::string& key, const std::string& hostname) { WSServiceVersion_t wsv = CheckService(WS_Myth); + if (wsv.ranking >= 0x00050000) return GetSetting5_0(key, hostname); if (wsv.ranking >= 0x00020000) return GetSetting2_0(key, hostname); return SettingPtr(); } @@ -88,6 +89,7 @@ SettingMapPtr GetSettings(const std::string& hostname) { WSServiceVersion_t wsv = CheckService(WS_Myth); + if (wsv.ranking >= 0x00050000) return GetSettings5_0(hostname); if (wsv.ranking >= 0x00020000) return GetSettings2_0(hostname); return SettingMapPtr(new SettingMap); } @@ -411,7 +413,9 @@ bool CheckVersion2_0(); SettingPtr GetSetting2_0(const std::string& key, const std::string& hostname); + SettingPtr GetSetting5_0(const std::string& key, const std::string& hostname); SettingMapPtr GetSettings2_0(const std::string& hostname); + SettingMapPtr GetSettings5_0(const std::string& hostname); bool PutSetting2_0(const std::string& key, const std::string& value, bool myhost); CaptureCardListPtr GetCaptureCardList1_4(); diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/lib/cppmyth/cppmyth/src/private/mythdto/mythdto.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/lib/cppmyth/cppmyth/src/private/mythdto/mythdto.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/lib/cppmyth/cppmyth/src/private/mythdto/mythdto.h 2014-11-24 13:23:34.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/lib/cppmyth/cppmyth/src/private/mythdto/mythdto.h 2015-04-01 08:50:11.000000000 +0000 @@ -71,7 +71,7 @@ /** * @namespace MythDTO - * @brief DTO Helper + * @brief This namespace contains all DTO definitions */ namespace MythDTO { diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/lib/cppmyth/cppmyth/src/private/mythjsonbinder.cpp kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/lib/cppmyth/cppmyth/src/private/mythjsonbinder.cpp --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/lib/cppmyth/cppmyth/src/private/mythjsonbinder.cpp 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/lib/cppmyth/cppmyth/src/private/mythjsonbinder.cpp 2015-04-01 08:50:11.000000000 +0000 @@ -28,7 +28,9 @@ #include #include -void MythJSON::BindObject(const Node& node, void *obj, const bindings_t *bl) +using namespace Myth; + +void JSON::BindObject(const Node& node, void *obj, const bindings_t *bl) { int i, err; diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/lib/cppmyth/cppmyth/src/private/mythjsonbinder.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/lib/cppmyth/cppmyth/src/private/mythjsonbinder.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/lib/cppmyth/cppmyth/src/private/mythjsonbinder.h 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/lib/cppmyth/cppmyth/src/private/mythjsonbinder.h 2015-04-01 08:50:11.000000000 +0000 @@ -25,9 +25,12 @@ #include "mythdto/mythdto.h" #include "mythjsonparser.h" -namespace MythJSON +namespace Myth +{ +namespace JSON { void BindObject(const Node& node, void *obj, const bindings_t *bl); } +} #endif /* MYTHJSONBINDER_H */ diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/lib/cppmyth/cppmyth/src/private/mythjsonparser.cpp kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/lib/cppmyth/cppmyth/src/private/mythjsonparser.cpp --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/lib/cppmyth/cppmyth/src/private/mythjsonparser.cpp 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/lib/cppmyth/cppmyth/src/private/mythjsonparser.cpp 2015-04-01 08:50:11.000000000 +0000 @@ -29,57 +29,57 @@ //// Node //// -MythJSON::Node::Node() +JSON::Node::Node() : m_value(sajson::TYPE_NULL, 0, 0) { } -MythJSON::Node::Node(const sajson::value& value) +JSON::Node::Node(const sajson::value& value) : m_value(value) { } -bool MythJSON::Node::IsNull() const +bool JSON::Node::IsNull() const { return (m_value.get_type() == sajson::TYPE_NULL); } -bool MythJSON::Node::IsObject() const +bool JSON::Node::IsObject() const { return (m_value.get_type() == sajson::TYPE_OBJECT); } -bool MythJSON::Node::IsArray() const +bool JSON::Node::IsArray() const { return (m_value.get_type() == sajson::TYPE_ARRAY); } -bool MythJSON::Node::IsString() const +bool JSON::Node::IsString() const { return (m_value.get_type() == sajson::TYPE_STRING); } -bool MythJSON::Node::IsDouble() const +bool JSON::Node::IsDouble() const { return (m_value.get_type() == sajson::TYPE_DOUBLE); } -bool MythJSON::Node::IsInt() const +bool JSON::Node::IsInt() const { return (m_value.get_type() == sajson::TYPE_INTEGER); } -bool MythJSON::Node::IsTrue() const +bool JSON::Node::IsTrue() const { return (m_value.get_type() == sajson::TYPE_TRUE); } -bool MythJSON::Node::IsFalse() const +bool JSON::Node::IsFalse() const { return (m_value.get_type() == sajson::TYPE_FALSE); } -std::string MythJSON::Node::GetStringValue() const +std::string JSON::Node::GetStringValue() const { if (m_value.get_type() == sajson::TYPE_STRING) return m_value.as_string(); @@ -87,7 +87,7 @@ return std::string(); } -size_t MythJSON::Node::GetStringSize() const +size_t JSON::Node::GetStringSize() const { if (m_value.get_type() == sajson::TYPE_STRING) return m_value.get_string_length(); @@ -95,7 +95,7 @@ return 0; } -double MythJSON::Node::GetDoubleValue() const +double JSON::Node::GetDoubleValue() const { if (m_value.get_type() == sajson::TYPE_DOUBLE) return m_value.get_double_value(); @@ -103,7 +103,7 @@ return 0.0; } -int64_t MythJSON::Node::GetBigIntValue() const +int64_t JSON::Node::GetBigIntValue() const { if (m_value.get_type() == sajson::TYPE_DOUBLE || m_value.get_type() == sajson::TYPE_INTEGER) return (int64_t) m_value.get_number_value(); @@ -111,7 +111,7 @@ return 0; } -int32_t MythJSON::Node::GetIntValue() const +int32_t JSON::Node::GetIntValue() const { if (m_value.get_type() == sajson::TYPE_INTEGER) return (int32_t) m_value.get_integer_value(); @@ -119,7 +119,7 @@ return 0; } -size_t MythJSON::Node::Size() const +size_t JSON::Node::Size() const { if (m_value.get_type() == sajson::TYPE_ARRAY || m_value.get_type() == sajson::TYPE_OBJECT) return m_value.get_length(); @@ -127,7 +127,7 @@ return 0; } -MythJSON::Node MythJSON::Node::GetArrayElement(size_t index) const +JSON::Node JSON::Node::GetArrayElement(size_t index) const { if (m_value.get_type() == sajson::TYPE_ARRAY) return Node(m_value.get_array_element(index)); @@ -135,7 +135,7 @@ return Node(); } -std::string MythJSON::Node::GetObjectKey(size_t index) const +std::string JSON::Node::GetObjectKey(size_t index) const { if (m_value.get_type() == sajson::TYPE_OBJECT) return m_value.get_object_key(index).as_string(); @@ -143,7 +143,7 @@ return std::string(); } -MythJSON::Node MythJSON::Node::GetObjectValue(size_t index) const +JSON::Node JSON::Node::GetObjectValue(size_t index) const { if (m_value.get_type() == sajson::TYPE_OBJECT) return Node(m_value.get_object_value(index)); @@ -151,7 +151,7 @@ return Node(); } -MythJSON::Node MythJSON::Node::GetObjectValue(const char *key) const +JSON::Node JSON::Node::GetObjectValue(const char *key) const { if (m_value.get_type() == sajson::TYPE_OBJECT) { @@ -169,7 +169,7 @@ //// Document //// -MythJSON::Document::Document(Myth::WSResponse& resp) +JSON::Document::Document(Myth::WSResponse& resp) : m_isValid(false) , m_document(NULL) { @@ -196,7 +196,7 @@ delete[] content; } -MythJSON::Node MythJSON::Document::GetRoot() const +JSON::Node JSON::Document::GetRoot() const { if (m_document) return Node(m_document->get_root()); diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/lib/cppmyth/cppmyth/src/private/mythjsonparser.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/lib/cppmyth/cppmyth/src/private/mythjsonparser.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/lib/cppmyth/cppmyth/src/private/mythjsonparser.h 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/lib/cppmyth/cppmyth/src/private/mythjsonparser.h 2015-04-01 08:50:11.000000000 +0000 @@ -29,7 +29,13 @@ #include -namespace MythJSON +/** + * @namespace Myth::JSON + * @brief This namespace contains all operations to handle JSON content + */ +namespace Myth +{ +namespace JSON { class Node { @@ -84,5 +90,6 @@ sajson::document *m_document; }; } +} #endif /* MYTHJSONPARSER_H */ diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/lib/cppmyth/cppmyth/src/private/platform/posix/os-threads.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/lib/cppmyth/cppmyth/src/private/platform/posix/os-threads.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/lib/cppmyth/cppmyth/src/private/platform/posix/os-threads.h 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/lib/cppmyth/cppmyth/src/private/platform/posix/os-threads.h 2015-04-01 08:50:11.000000000 +0000 @@ -32,6 +32,8 @@ * http://www.pulse-eight.net/ */ +namespace Myth +{ namespace PLATFORM { inline pthread_mutexattr_t *GetRecursiveMutexAttribute(void) @@ -131,3 +133,4 @@ pthread_cond_t m_condition; }; } +} diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/lib/cppmyth/cppmyth/src/private/platform/threads/mutex.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/lib/cppmyth/cppmyth/src/private/platform/threads/mutex.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/lib/cppmyth/cppmyth/src/private/platform/threads/mutex.h 2014-09-12 07:43:46.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/lib/cppmyth/cppmyth/src/private/platform/threads/mutex.h 2015-04-01 08:50:11.000000000 +0000 @@ -42,6 +42,8 @@ #include "../util/timeutils.h" +namespace Myth +{ namespace PLATFORM { class PreventCopy @@ -352,3 +354,4 @@ bool m_bAutoReset; }; } +} diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/lib/cppmyth/cppmyth/src/private/platform/threads/threads.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/lib/cppmyth/cppmyth/src/private/platform/threads/threads.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/lib/cppmyth/cppmyth/src/private/platform/threads/threads.h 2014-11-24 13:23:34.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/lib/cppmyth/cppmyth/src/private/platform/threads/threads.h 2015-04-01 08:50:11.000000000 +0000 @@ -34,6 +34,8 @@ #include "mutex.h" +namespace Myth +{ namespace PLATFORM { class CThread @@ -151,4 +153,5 @@ CMutex m_threadMutex; thread_t m_thread; }; -}; +} +} diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/lib/cppmyth/cppmyth/src/private/platform/util/timeutils.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/lib/cppmyth/cppmyth/src/private/platform/util/timeutils.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/lib/cppmyth/cppmyth/src/private/platform/util/timeutils.h 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/lib/cppmyth/cppmyth/src/private/platform/util/timeutils.h 2015-04-01 08:50:11.000000000 +0000 @@ -43,6 +43,8 @@ #include #endif +namespace Myth +{ namespace PLATFORM { inline int64_t GetTimeMs() @@ -97,4 +99,5 @@ private: uint64_t m_iTarget; }; -}; +} +} diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/lib/cppmyth/cppmyth/src/private/platform/windows/os-threads.cpp kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/lib/cppmyth/cppmyth/src/private/platform/windows/os-threads.cpp --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/lib/cppmyth/cppmyth/src/private/platform/windows/os-threads.cpp 2014-09-12 07:43:46.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/lib/cppmyth/cppmyth/src/private/platform/windows/os-threads.cpp 2015-04-01 08:50:11.000000000 +0000 @@ -33,7 +33,7 @@ #include "../os.h" #include "os-threads.h" -using namespace PLATFORM; +using namespace Myth::PLATFORM; static ConditionArg g_InitializeConditionVariable; static ConditionArg g_WakeConditionVariable; diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/lib/cppmyth/cppmyth/src/private/platform/windows/os-threads.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/lib/cppmyth/cppmyth/src/private/platform/windows/os-threads.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/lib/cppmyth/cppmyth/src/private/platform/windows/os-threads.h 2014-09-12 07:43:46.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/lib/cppmyth/cppmyth/src/private/platform/windows/os-threads.h 2015-04-01 08:50:11.000000000 +0000 @@ -32,6 +32,8 @@ * http://www.pulse-eight.net/ */ +namespace Myth +{ namespace PLATFORM { #define thread_t HANDLE @@ -64,3 +66,4 @@ HANDLE m_conditionPreVista; }; } +} diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/lib/cppmyth/cppmyth/src/proto/mythprotobase.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/lib/cppmyth/cppmyth/src/proto/mythprotobase.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/lib/cppmyth/cppmyth/src/proto/mythprotobase.h 2014-11-24 13:23:34.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/lib/cppmyth/cppmyth/src/proto/mythprotobase.h 2015-04-01 08:50:11.000000000 +0000 @@ -31,14 +31,14 @@ #define PROTO_STR_SEPARATOR "[]:[]" #define PROTO_STR_SEPARATOR_LEN (sizeof(PROTO_STR_SEPARATOR) - 1) -namespace PLATFORM -{ - class CMutex; -} - namespace Myth { + namespace PLATFORM + { + class CMutex; + } + class TcpSocket; class ProtoBase diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/lib/jsoncpp/Makefile.am kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/lib/jsoncpp/Makefile.am --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/lib/jsoncpp/Makefile.am 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/lib/jsoncpp/Makefile.am 2015-04-01 08:50:11.000000000 +0000 @@ -4,7 +4,7 @@ src/lib_json/json_value.cpp \ src/lib_json/json_writer.cpp -AM_CPPFLAGS=-Iinclude/ +INCLUDES=-Iinclude/ $(LIB): libjsoncpp.la cp -f .libs/libjsoncpp.a . diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/lib/libdvblinkremote/Makefile.am kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/lib/libdvblinkremote/Makefile.am --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/lib/libdvblinkremote/Makefile.am 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/lib/libdvblinkremote/Makefile.am 2015-04-01 08:50:11.000000000 +0000 @@ -28,8 +28,8 @@ LIBS= @abs_top_srcdir@/lib/tinyxml2/libtinyxml2.la -AM_CPPFLAGS=-I.. +INCLUDES=-I.. $(LIB): libdvblinkremote.la cp -f .libs/libdvblinkremote.a . - cp -f .libs/libdvblinkremote.la $(LIB) + cp -f .libs/libdvblinkremote.la $(LIB) \ No newline at end of file diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/lib/libhts/htsmsg.c kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/lib/libhts/htsmsg.c --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/lib/libhts/htsmsg.c 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/lib/libhts/htsmsg.c 2015-04-01 08:50:11.000000000 +0000 @@ -397,7 +397,7 @@ case HMF_STR: break; case HMF_S64: - snprintf(buf, sizeof(buf), "%" PRId64, f->hmf_s64); + snprintf(buf, sizeof(buf), "%"PRId64, f->hmf_s64); f->hmf_str = strdup(buf); f->hmf_type = HMF_STR; break; diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/lib/platform/sockets/tcp.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/lib/platform/sockets/tcp.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/lib/platform/sockets/tcp.h 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/lib/platform/sockets/tcp.h 2015-04-01 08:50:11.000000000 +0000 @@ -34,6 +34,7 @@ #include "socket.h" +using namespace std; namespace PLATFORM { diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/lib/platform/threads/mutex.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/lib/platform/threads/mutex.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/lib/platform/threads/mutex.h 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/lib/platform/threads/mutex.h 2015-04-01 08:50:11.000000000 +0000 @@ -226,17 +226,9 @@ volatile bool m_bIsLocked; }; - typedef bool (*PredicateCallback) (void *param); - template class CCondition : public PreventCopy { - private: - static bool _PredicateCallbackDefault ( void *param ) - { - _Predicate *p = (_Predicate*)param; - return (*p); - } public: inline CCondition(void) {} inline ~CCondition(void) @@ -254,34 +246,35 @@ m_condition.Signal(); } - inline bool Wait(CMutex &mutex, uint32_t iTimeout) + inline bool Wait(CMutex &mutex, _Predicate &predicate) { - return m_condition.Wait(mutex.m_mutex, iTimeout); + while(!predicate) + m_condition.Wait(mutex.m_mutex); + return true; } - inline bool Wait(CMutex &mutex, PredicateCallback callback, void *param, uint32_t iTimeout) + inline bool Wait(CMutex &mutex, _Predicate &predicate, uint32_t iTimeout) { + if (iTimeout == 0) + return Wait(mutex, predicate); + + if (predicate) + return true; + bool bReturn(false); + bool bBreak(false); CTimeout timeout(iTimeout); + uint32_t iMsLeft(0); - while (!bReturn) + while (!bReturn && !bBreak) { - if ((bReturn = callback(param)) == true) - break; - uint32_t iMsLeft = timeout.TimeLeft(); - if ((iTimeout != 0) && (iMsLeft == 0)) - break; - m_condition.Wait(mutex.m_mutex, iMsLeft); + iMsLeft = timeout.TimeLeft(); + if ((bReturn = predicate) == false && (bBreak = iMsLeft == 0) == false) + m_condition.Wait(mutex.m_mutex, iMsLeft); } - return bReturn; } - inline bool Wait(CMutex &mutex, _Predicate &predicate, uint32_t iTimeout = 0) - { - return Wait(mutex, _PredicateCallbackDefault, (void*)&predicate, iTimeout); - } - private: CConditionImpl m_condition; }; diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/README kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/README --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/README 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/README 2015-04-01 08:50:10.000000000 +0000 @@ -1 +1,70 @@ -See README.md +============================= + Linux, OS-X, BSD +============================= + +Start by executing: +./bootstrap + +To install add-ons into /path/to/XBMC: +./configure --prefix=/path/to/XBMC +make install + +To build all PVR add-ons as .zip archives: +./configure +make zip + +Building addons with dependencies: +---------------------------------- +The build method described above excludes addons that depend on runtime libraries. +This is because the installed versions of the dependend libraries on the build-machine +and the target machine have to match exactly. Therefore this addons cannot be +distributed easily. + +Distribution package maintainers and users who build the addons on their target machine +can enable the build of addons with dependencies: + +./configure --enable-addons-with-dependencies + +List of addons with dependencies: +--------------------------------- +- Filmon addon: + Build dependencies: jsoncpp, crypto++, curl +- IPTV Simple addon: + Build dependencies: zlib + +============================= + Windows +============================= +Building the pvr addons standalone: +----------------------------------- +Prepare: +1) Install Visual C++ Express 2010 (follow the instructions on the wiki for XBMC itself) +Compile: +2) Run project\BuildDependencies\DownloadBuildDeps.bat +3) Open this solution from project\VS2010Express\xbmc-pvr-addons.sln +4) Select the wanted configuration "Debug" or "Release" +5) Press F7 to build the solution +Install: +Still a TODO. The buildsystem does not yet generate .zip archives +Workaround: copy the wanted pvr addons to your XBMC installation by hand. +Example: addons\pvr.demo\addon\*.* => YOUR_XBMC_DIR\addons\pvr.demo\*.* + +Building the pvr addons together with xbmc: +------------------------------------------- +Firstly ensure that you have a working build for both XBMC and xbmc-pvr-addons separately + +Then import the xbmc_pvr_addons projects into the XBMC solution +1) Open "XBMC for Windows.sln" +2) Right click the solution in Solution Explorer and select Add -> Existing Project +3) Change file type filter to "Solution Files (*.sln)" +4) Browse to and select the PVR addons solution (xbmc-pvr-addons.sln) +5) Dismiss any warnings about projects already existing in the solution +6) If you only develop on certain addons you can remove unwanted addon projects from the XBMC solution + +The pvr projects already contain a PostBuild action that only runs when part of the XBMC solution, that copies their output into the XBMC solution's addon directory + +Remember not to include any XBMC solution file modifications to include the PVR addons, in your pull requests! + +XBMC Windows installer with included pvr addons: +------------------------------------------------ +Not yet possible. Still a TODO. diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/README.md kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/README.md --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/README.md 2015-01-19 19:21:06.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/README.md 1970-01-01 00:00:00.000000000 +0000 @@ -1,62 +0,0 @@ -## Building - -### Linux, OS X, BSD - -Start by executing: -``` -./bootstrap -``` - -To build all PVR addons and install them directly (so that you just have to enable them in Kodi), execute the following (change the prefix path to your actual installation): - -``` -./configure --prefix=/usr/local/lib/kodi -make install -``` - -To build all PVR addons and package them into individual ZIP archives (which can then be installed manually), execute the following: -``` -./configure -make zip -``` - -#### Building addons with dependencies: - -The build method described above excludes addons that depend on runtime libraries. This is because the installed versions of the dependend libraries on the build-machine and the target machine have to match exactly. Therefore this addons cannot be distributed easily. - -Distribution package maintainers and users who build the addons on their target machine can enable the build of addons with dependencies: - -``` -./configure --enable-addons-with-dependencies -``` - -#### List of addons with dependencies: - -* Filmon addon: jsoncpp, crypto++, curl -* IPTV Simple addon: zlib - -### Windows - -#### Building the addons standalone - -1. Install [Visual Studio Express 2013](http://www.visualstudio.com/downloads/download-visual-studio-vs#d-express-windows-desktop) -2. Run `project\BuildDependencies\DownloadBuildDeps.bat` -3. Open the solution from `project\VS2010Express\xbmc-pvr-addons.sln` -4. Select the wanted configuration ("Debug" or "Release") -5. Press F7 to build the solution -6. The Windows build system unfortunately doesn't generate ZIP archives of the addons. A workaround is to copy the desired addons to your Kodi installation manually, e.g. by copying `addons\pvr.demo\addon\*.*` to `YOUR_KODI_DIR\addons\pvr.demo\*.*` - -#### Building the addons together with Kodi - -First ensure that you have separate working build environments for both Kodi and the addons, then import the addon projects into the Kodi solution like this: - -1. Open "XBMC for Windows.sln" -2. Right-click the solution in Solution Explorer and select Add -> Existing Project -3. Change file type filter to "Solution Files (*.sln)" -4. Browse to and select the PVR addons solution (xbmc-pvr-addons.sln) -5. Dismiss any warnings about projects already existing in the solution -6. If you only develop on certain addons you can remove unwanted addon projects from the XBMC solution - -The PVR addon projects already contain a PostBuild action that only runs when part of the XBMC solution, that copies their output into the Kodi's solution's addon directory. This mean no manual copying is needed like when building the addons standalone. - -Remember, if you make any modifications to the Kodi solution to include PVR addons, don't include those changes when you do pull requests! diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/xbmc/libXBMC_addon.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/xbmc/libXBMC_addon.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/xbmc/libXBMC_addon.h 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/xbmc/libXBMC_addon.h 2015-04-01 08:50:11.000000000 +0000 @@ -28,10 +28,6 @@ #include #ifdef _WIN32 // windows -#ifndef _SSIZE_T_DEFINED -typedef intptr_t ssize_t; -#define _SSIZE_T_DEFINED -#endif // !_SSIZE_T_DEFINED #include "dlfcn-win32.h" #define ADDON_DLL "\\library.xbmc.addon\\libXBMC_addon" ADDON_HELPER_EXT #define ADDON_HELPER_EXT ".dll" @@ -190,7 +186,7 @@ dlsym(m_libXBMC_addon, "XBMC_open_file_for_write"); if (XBMC_open_file_for_write == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } - XBMC_read_file = (ssize_t (*)(void* HANDLE, void* CB, void* file, void* lpBuf, size_t uiBufSize)) + XBMC_read_file = (unsigned int (*)(void* HANDLE, void* CB, void* file, void* lpBuf, int64_t uiBufSize)) dlsym(m_libXBMC_addon, "XBMC_read_file"); if (XBMC_read_file == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } @@ -198,7 +194,7 @@ dlsym(m_libXBMC_addon, "XBMC_read_file_string"); if (XBMC_read_file_string == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } - XBMC_write_file = (ssize_t (*)(void* HANDLE, void* CB, void* file, const void* lpBuf, size_t uiBufSize)) + XBMC_write_file = (int (*)(void* HANDLE, void* CB, void* file, const void* lpBuf, int64_t uiBufSize)) dlsym(m_libXBMC_addon, "XBMC_write_file"); if (XBMC_write_file == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } @@ -379,11 +375,9 @@ * @param file The file handle to read from. * @param lpBuf The buffer to store the data in. * @param uiBufSize The size of the buffer. - * @return number of successfully read bytes if any bytes were read and stored in - * buffer, zero if no bytes are available to read (end of file was reached) - * or undetectable error occur, -1 in case of any explicit error + * @return Number of bytes read. */ - ssize_t ReadFile(void* file, void* lpBuf, size_t uiBufSize) + unsigned int ReadFile(void* file, void* lpBuf, int64_t uiBufSize) { return XBMC_read_file(m_Handle, m_Callbacks, file, lpBuf, uiBufSize); } @@ -405,11 +399,9 @@ * @param file The file handle to write to. * @param lpBuf The data to write. * @param uiBufSize Size of the data to write. - * @return number of successfully written bytes if any bytes were written, - * zero if no bytes were written and no detectable error occur, - * -1 in case of any explicit error + * @return The number of bytes read. */ - ssize_t WriteFile(void* file, const void* lpBuf, size_t uiBufSize) + int WriteFile(void* file, const void* lpBuf, int64_t uiBufSize) { return XBMC_write_file(m_Handle, m_Callbacks, file, lpBuf, uiBufSize); } @@ -570,9 +562,9 @@ void (*XBMC_free_string)(void *HANDLE, void* CB, char* str); void* (*XBMC_open_file)(void *HANDLE, void* CB, const char* strFileName, unsigned int flags); void* (*XBMC_open_file_for_write)(void *HANDLE, void* CB, const char* strFileName, bool bOverWrite); - ssize_t (*XBMC_read_file)(void *HANDLE, void* CB, void* file, void* lpBuf, size_t uiBufSize); + unsigned int (*XBMC_read_file)(void *HANDLE, void* CB, void* file, void* lpBuf, int64_t uiBufSize); bool (*XBMC_read_file_string)(void *HANDLE, void* CB, void* file, char *szLine, int iLineLength); - ssize_t(*XBMC_write_file)(void *HANDLE, void* CB, void* file, const void* lpBuf, size_t uiBufSize); + int (*XBMC_write_file)(void *HANDLE, void* CB, void* file, const void* lpBuf, int64_t uiBufSize); void (*XBMC_flush_file)(void *HANDLE, void* CB, void* file); int64_t (*XBMC_seek_file)(void *HANDLE, void* CB, void* file, int64_t iFilePosition, int iWhence); int (*XBMC_truncate_file)(void *HANDLE, void* CB, void* file, int64_t iSize); diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/xbmc/libXBMC_gui.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/xbmc/libXBMC_gui.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/xbmc/libXBMC_gui.h 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/xbmc/libXBMC_gui.h 2015-04-01 08:50:11.000000000 +0000 @@ -36,14 +36,13 @@ #endif /* current ADDONGUI API version */ -#define XBMC_GUI_API_VERSION "5.8.0" +#define XBMC_GUI_API_VERSION "5.3.0" /* min. ADDONGUI API version */ -#define XBMC_GUI_MIN_API_VERSION "5.8.0" +#define XBMC_GUI_MIN_API_VERSION "5.3.0" #define ADDON_ACTION_PREVIOUS_MENU 10 #define ADDON_ACTION_CLOSE_DIALOG 51 -#define ADDON_ACTION_NAV_BACK 92 class CAddonGUIWindow; class CAddonGUISpinControl; @@ -51,8 +50,6 @@ class CAddonGUIProgressControl; class CAddonListItem; class CAddonGUIRenderingControl; -class CAddonGUISliderControl; -class CAddonGUISettingsSliderControl; class CHelper_libXBMC_gui { @@ -172,125 +169,6 @@ dlsym(m_libXBMC_gui, "GUI_control_release_rendering"); if (GUI_control_release_rendering == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } - GUI_control_get_slider = (CAddonGUISliderControl* (*)(void *HANDLE, void *CB, CAddonGUIWindow *window, int controlId)) - dlsym(m_libXBMC_gui, "GUI_control_get_slider"); - if (GUI_control_get_slider == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } - - GUI_control_release_slider = (void (*)(CAddonGUISliderControl* p)) - dlsym(m_libXBMC_gui, "GUI_control_release_slider"); - if (GUI_control_release_slider == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } - - GUI_control_get_settings_slider = (CAddonGUISettingsSliderControl* (*)(void *HANDLE, void *CB, CAddonGUIWindow *window, int controlId)) - dlsym(m_libXBMC_gui, "GUI_control_get_settings_slider"); - if (GUI_control_get_settings_slider == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } - - GUI_control_release_settings_slider = (void (*)(CAddonGUISettingsSliderControl* p)) - dlsym(m_libXBMC_gui, "GUI_control_release_settings_slider"); - if (GUI_control_release_settings_slider == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } - - GUI_dialog_keyboard_show_and_get_input_with_head = (bool (*)(void *HANDLE, void *CB, char &aTextString, unsigned int iMaxStringSize, const char *heading, bool allowEmptyResult, bool hiddenInput, unsigned int autoCloseMs)) - dlsym(m_libXBMC_gui, "GUI_dialog_keyboard_show_and_get_input_with_head"); - if (GUI_dialog_keyboard_show_and_get_input_with_head == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } - - GUI_dialog_keyboard_show_and_get_input = (bool (*)(void *HANDLE, void *CB, char &aTextString, unsigned int iMaxStringSize, bool allowEmptyResult, unsigned int autoCloseMs)) - dlsym(m_libXBMC_gui, "GUI_dialog_keyboard_show_and_get_input"); - if (GUI_dialog_keyboard_show_and_get_input == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } - - GUI_dialog_keyboard_show_and_get_new_password_with_head = (bool (*)(void *HANDLE, void *CB, char &newPassword, unsigned int iMaxStringSize, const char *heading, bool allowEmptyResult, unsigned int autoCloseMs)) - dlsym(m_libXBMC_gui, "GUI_dialog_keyboard_show_and_get_new_password_with_head"); - if (GUI_dialog_keyboard_show_and_get_new_password_with_head == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } - - GUI_dialog_keyboard_show_and_get_new_password = (bool (*)(void *HANDLE, void *CB, char &strNewPassword, unsigned int iMaxStringSize, unsigned int autoCloseMs)) - dlsym(m_libXBMC_gui, "GUI_dialog_keyboard_show_and_get_new_password"); - if (GUI_dialog_keyboard_show_and_get_new_password == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } - - GUI_dialog_keyboard_show_and_verify_new_password_with_head = (bool (*)(void *HANDLE, void *CB, char &strNewPassword, unsigned int iMaxStringSize, const char *heading, bool allowEmptyResult, unsigned int autoCloseMs)) - dlsym(m_libXBMC_gui, "GUI_dialog_keyboard_show_and_verify_new_password_with_head"); - if (GUI_dialog_keyboard_show_and_verify_new_password_with_head == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } - - GUI_dialog_keyboard_show_and_verify_new_password = (bool (*)(void *HANDLE, void *CB, char &strNewPassword, unsigned int iMaxStringSize, unsigned int autoCloseMs)) - dlsym(m_libXBMC_gui, "GUI_dialog_keyboard_show_and_verify_new_password"); - if (GUI_dialog_keyboard_show_and_verify_new_password == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } - - GUI_dialog_keyboard_show_and_verify_password = (int (*)(void *HANDLE, void *CB, char &strPassword, unsigned int iMaxStringSize, const char *strHeading, int iRetries, unsigned int autoCloseMs)) - dlsym(m_libXBMC_gui, "GUI_dialog_keyboard_show_and_verify_password"); - if (GUI_dialog_keyboard_show_and_verify_password == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } - - GUI_dialog_keyboard_show_and_get_filter = (bool (*)(void *HANDLE, void *CB, char &aTextString, unsigned int iMaxStringSize, bool searching, unsigned int autoCloseMs)) - dlsym(m_libXBMC_gui, "GUI_dialog_keyboard_show_and_get_filter"); - if (GUI_dialog_keyboard_show_and_get_filter == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } - - GUI_dialog_keyboard_send_text_to_active_keyboard = (bool (*)(void *HANDLE, void *CB, const char *aTextString, bool closeKeyboard)) - dlsym(m_libXBMC_gui, "GUI_dialog_keyboard_send_text_to_active_keyboard"); - if (GUI_dialog_keyboard_send_text_to_active_keyboard == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } - - GUI_dialog_keyboard_is_activated = (bool (*)(void *HANDLE, void *CB)) - dlsym(m_libXBMC_gui, "GUI_dialog_keyboard_is_activated"); - if (GUI_dialog_keyboard_is_activated == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } - - GUI_dialog_numeric_show_and_verify_new_password = (bool (*)(void *HANDLE, void *CB, char &strNewPassword, unsigned int iMaxStringSize)) - dlsym(m_libXBMC_gui, "GUI_dialog_numeric_show_and_verify_new_password"); - if (GUI_dialog_numeric_show_and_verify_new_password == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } - - GUI_dialog_numeric_show_and_verify_password = (int (*)(void *HANDLE, void *CB, char &strPassword, unsigned int iMaxStringSize, const char *strHeading, int iRetries)) - dlsym(m_libXBMC_gui, "GUI_dialog_numeric_show_and_verify_password"); - if (GUI_dialog_numeric_show_and_verify_password == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } - - GUI_dialog_numeric_show_and_verify_input = (bool (*)(void *HANDLE, void *CB, char &strPassword, unsigned int iMaxStringSize, const char *strHeading, bool bGetUserInput)) - dlsym(m_libXBMC_gui, "GUI_dialog_numeric_show_and_verify_input"); - if (GUI_dialog_numeric_show_and_verify_input == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } - - GUI_dialog_numeric_show_and_get_time = (bool (*)(void *HANDLE, void *CB, tm &time, const char *strHeading)) - dlsym(m_libXBMC_gui, "GUI_dialog_numeric_show_and_get_time"); - if (GUI_dialog_numeric_show_and_get_time == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } - - GUI_dialog_numeric_show_and_get_date = (bool (*)(void *HANDLE, void *CB, tm &date, const char *strHeading)) - dlsym(m_libXBMC_gui, "GUI_dialog_numeric_show_and_get_date"); - if (GUI_dialog_numeric_show_and_get_date == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } - - GUI_dialog_numeric_show_and_get_ipaddress = (bool (*)(void *HANDLE, void *CB, char &IPAddress, unsigned int iMaxStringSize, const char *strHeading)) - dlsym(m_libXBMC_gui, "GUI_dialog_numeric_show_and_get_ipaddress"); - if (GUI_dialog_numeric_show_and_get_ipaddress == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } - - GUI_dialog_numeric_show_and_get_number = (bool (*)(void *HANDLE, void *CB, char &strInput, unsigned int iMaxStringSize, const char *strHeading, unsigned int iAutoCloseTimeoutMs)) - dlsym(m_libXBMC_gui, "GUI_dialog_numeric_show_and_get_number"); - if (GUI_dialog_numeric_show_and_get_number == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } - - GUI_dialog_numeric_show_and_get_seconds = (bool (*)(void *HANDLE, void *CB, char &strTime, unsigned int iMaxStringSize, const char *strHeading)) - dlsym(m_libXBMC_gui, "GUI_dialog_numeric_show_and_get_seconds"); - if (GUI_dialog_numeric_show_and_get_seconds == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } - - GUI_dialog_filebrowser_show_and_get_file = (bool (*)(void *HANDLE, void *CB, const char *directory, const char *mask, const char *heading, char &path, unsigned int iMaxStringSize, bool useThumbs, bool useFileDirectories, bool singleList)) - dlsym(m_libXBMC_gui, "GUI_dialog_filebrowser_show_and_get_file"); - if (GUI_dialog_filebrowser_show_and_get_file == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } - - GUI_dialog_ok_show_and_get_input_single_text = (void (*)(void *HANDLE, void *CB, const char *heading, const char *text)) - dlsym(m_libXBMC_gui, "GUI_dialog_ok_show_and_get_input_single_text"); - if (GUI_dialog_ok_show_and_get_input_single_text == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } - - GUI_dialog_ok_show_and_get_input_line_text = (void (*)(void *HANDLE, void *CB, const char *heading, const char *line0, const char *line1, const char *line2)) - dlsym(m_libXBMC_gui, "GUI_dialog_ok_show_and_get_input_line_text"); - if (GUI_dialog_ok_show_and_get_input_line_text == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } - - GUI_dialog_yesno_show_and_get_input_singletext = (bool (*)(void *HANDLE, void *CB, const char *heading, const char *text, bool& bCanceled, const char *noLabel, const char *yesLabel)) - dlsym(m_libXBMC_gui, "GUI_dialog_yesno_show_and_get_input_singletext"); - if (GUI_dialog_yesno_show_and_get_input_singletext == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } - - GUI_dialog_yesno_show_and_get_input_linetext = (bool (*)(void *HANDLE, void *CB, const char *heading, const char *line0, const char *line1, const char *line2, const char *noLabel, const char *yesLabel)) - dlsym(m_libXBMC_gui, "GUI_dialog_yesno_show_and_get_input_linetext"); - if (GUI_dialog_yesno_show_and_get_input_linetext == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } - - GUI_dialog_yesno_show_and_get_input_linebuttontext = (bool (*)(void *HANDLE, void *CB, const char *heading, const char *line0, const char *line1, const char *line2, bool &bCanceled, const char *noLabel, const char *yesLabel)) - dlsym(m_libXBMC_gui, "GUI_dialog_yesno_show_and_get_input_linebuttontext"); - if (GUI_dialog_yesno_show_and_get_input_linebuttontext == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } - - GUI_dialog_text_viewer = (void (*)(void *hdl, void *cb, const char *heading, const char *text)) - dlsym(m_libXBMC_gui, "GUI_dialog_text_viewer"); - if (GUI_dialog_text_viewer == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } - - GUI_dialog_select = (int (*)(void *hdl, void *cb, const char *heading, const char *entries[], unsigned int size, int selected)) - dlsym(m_libXBMC_gui, "GUI_dialog_select"); - if (GUI_dialog_select == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } m_Callbacks = GUI_register_me(m_Handle); return m_Callbacks != NULL; @@ -381,177 +259,6 @@ return GUI_control_release_rendering(p); } - CAddonGUISliderControl* Control_getSlider(CAddonGUIWindow *window, int controlId) - { - return GUI_control_get_slider(m_Handle, m_Callbacks, window, controlId); - } - - void Control_releaseSlider(CAddonGUISliderControl* p) - { - return GUI_control_release_slider(p); - } - - CAddonGUISettingsSliderControl* Control_getSettingsSlider(CAddonGUIWindow *window, int controlId) - { - return GUI_control_get_settings_slider(m_Handle, m_Callbacks, window, controlId); - } - - void Control_releaseSettingsSlider(CAddonGUISettingsSliderControl* p) - { - return GUI_control_release_settings_slider(p); - } - - /*! @name GUI Keyboard functions */ - //@{ - bool Dialog_Keyboard_ShowAndGetInput(char &strText, unsigned int iMaxStringSize, const char *strHeading, bool allowEmptyResult, bool hiddenInput, unsigned int autoCloseMs = 0) - { - return GUI_dialog_keyboard_show_and_get_input_with_head(m_Handle, m_Callbacks, strText, iMaxStringSize, strHeading, allowEmptyResult, hiddenInput, autoCloseMs); - } - - bool Dialog_Keyboard_ShowAndGetInput(char &strText, unsigned int iMaxStringSize, bool allowEmptyResult, unsigned int autoCloseMs = 0) - { - return GUI_dialog_keyboard_show_and_get_input(m_Handle, m_Callbacks, strText, iMaxStringSize, allowEmptyResult, autoCloseMs); - } - - bool Dialog_Keyboard_ShowAndGetNewPassword(char &strNewPassword, unsigned int iMaxStringSize, const char *strHeading, bool allowEmptyResult, unsigned int autoCloseMs = 0) - { - return GUI_dialog_keyboard_show_and_get_new_password_with_head(m_Handle, m_Callbacks, strNewPassword, iMaxStringSize, strHeading, allowEmptyResult, autoCloseMs); - } - - bool Dialog_Keyboard_ShowAndGetNewPassword(char &strNewPassword, unsigned int iMaxStringSize, unsigned int autoCloseMs = 0) - { - return GUI_dialog_keyboard_show_and_get_new_password(m_Handle, m_Callbacks, strNewPassword, iMaxStringSize, autoCloseMs); - } - - bool Dialog_Keyboard_ShowAndVerifyNewPassword(char &strNewPassword, unsigned int iMaxStringSize, const char *strHeading, bool allowEmptyResult, unsigned int autoCloseMs = 0) - { - return GUI_dialog_keyboard_show_and_verify_new_password_with_head(m_Handle, m_Callbacks, strNewPassword, iMaxStringSize, strHeading, allowEmptyResult, autoCloseMs); - } - - bool Dialog_Keyboard_ShowAndVerifyNewPassword(char &strNewPassword, unsigned int iMaxStringSize, unsigned int autoCloseMs = 0) - { - return GUI_dialog_keyboard_show_and_verify_new_password(m_Handle, m_Callbacks, strNewPassword, iMaxStringSize, autoCloseMs); - } - - int Dialog_Keyboard_ShowAndVerifyPassword(char &strPassword, unsigned int iMaxStringSize, const char *strHeading, int iRetries, unsigned int autoCloseMs = 0) - { - return GUI_dialog_keyboard_show_and_verify_password(m_Handle, m_Callbacks, strPassword, iMaxStringSize, strHeading, iRetries, autoCloseMs); - } - - bool Dialog_Keyboard_ShowAndGetFilter(char &strText, unsigned int iMaxStringSize, bool searching, unsigned int autoCloseMs = 0) - { - return GUI_dialog_keyboard_show_and_get_filter(m_Handle, m_Callbacks, strText, iMaxStringSize, searching, autoCloseMs); - } - - bool Dialog_Keyboard_SendTextToActiveKeyboard(const char *aTextString, bool closeKeyboard = false) - { - return GUI_dialog_keyboard_send_text_to_active_keyboard(m_Handle, m_Callbacks, aTextString, closeKeyboard); - } - - bool Dialog_Keyboard_isKeyboardActivated() - { - return GUI_dialog_keyboard_is_activated(m_Handle, m_Callbacks); - } - //@} - - /*! @name GUI Numeric functions */ - //@{ - bool Dialog_Numeric_ShowAndVerifyNewPassword(char &strNewPassword, unsigned int iMaxStringSize) - { - return GUI_dialog_numeric_show_and_verify_new_password(m_Handle, m_Callbacks, strNewPassword, iMaxStringSize); - } - - int Dialog_Numeric_ShowAndVerifyPassword(char &strPassword, unsigned int iMaxStringSize, const char *strHeading, int iRetries) - { - return GUI_dialog_numeric_show_and_verify_password(m_Handle, m_Callbacks, strPassword, iMaxStringSize, strHeading, iRetries); - } - - bool Dialog_Numeric_ShowAndVerifyInput(char &strPassword, unsigned int iMaxStringSize, const char *strHeading, bool bGetUserInput) - { - return GUI_dialog_numeric_show_and_verify_input(m_Handle, m_Callbacks, strPassword, iMaxStringSize, strHeading, bGetUserInput); - } - - bool Dialog_Numeric_ShowAndGetTime(tm &time, const char *strHeading) - { - return GUI_dialog_numeric_show_and_get_time(m_Handle, m_Callbacks, time, strHeading); - } - - bool Dialog_Numeric_ShowAndGetDate(tm &date, const char *strHeading) - { - return GUI_dialog_numeric_show_and_get_date(m_Handle, m_Callbacks, date, strHeading); - } - - bool Dialog_Numeric_ShowAndGetIPAddress(char &strIPAddress, unsigned int iMaxStringSize, const char *strHeading) - { - return GUI_dialog_numeric_show_and_get_ipaddress(m_Handle, m_Callbacks, strIPAddress, iMaxStringSize, strHeading); - } - - bool Dialog_Numeric_ShowAndGetNumber(char &strInput, unsigned int iMaxStringSize, const char *strHeading, unsigned int iAutoCloseTimeoutMs = 0) - { - return GUI_dialog_numeric_show_and_get_number(m_Handle, m_Callbacks, strInput, iMaxStringSize, strHeading, iAutoCloseTimeoutMs = 0); - } - - bool Dialog_Numeric_ShowAndGetSeconds(char &strTime, unsigned int iMaxStringSize, const char *strHeading) - { - return GUI_dialog_numeric_show_and_get_seconds(m_Handle, m_Callbacks, strTime, iMaxStringSize, strHeading); - } - //@} - - /*! @name GUI File browser functions */ - //@{ - bool Dialog_FileBrowser_ShowAndGetFile(const char *directory, const char *mask, const char *heading, char &strPath, unsigned int iMaxStringSize, bool useThumbs = false, bool useFileDirectories = false, bool singleList = false) - { - return GUI_dialog_filebrowser_show_and_get_file(m_Handle, m_Callbacks, directory, mask, heading, strPath, iMaxStringSize, useThumbs, useFileDirectories, singleList); - } - //@} - - /*! @name GUI OK Dialog functions */ - //@{ - void Dialog_OK_ShowAndGetInput(const char *heading, const char *text) - { - GUI_dialog_ok_show_and_get_input_single_text(m_Handle, m_Callbacks, heading, text); - } - - void Dialog_OK_ShowAndGetInput(const char *heading, const char *line0, const char *line1, const char *line2) - { - GUI_dialog_ok_show_and_get_input_line_text(m_Handle, m_Callbacks, heading, line0, line1, line2); - } - //@} - - /*! @name GUI Yes No Dialog functions */ - //@{ - bool Dialog_YesNo_ShowAndGetInput(const char *heading, const char *text, bool& bCanceled, const char *noLabel = "", const char *yesLabel = "") - { - return GUI_dialog_yesno_show_and_get_input_singletext(m_Handle, m_Callbacks, heading, text, bCanceled, noLabel, yesLabel); - } - - bool Dialog_YesNo_ShowAndGetInput(const char *heading, const char *line0, const char *line1, const char *line2, const char *noLabel = "", const char *yesLabel = "") - { - return GUI_dialog_yesno_show_and_get_input_linetext(m_Handle, m_Callbacks, heading, line0, line1, line2, noLabel, yesLabel); - } - - bool Dialog_YesNo_ShowAndGetInput(const char *heading, const char *line0, const char *line1, const char *line2, bool &bCanceled, const char *noLabel = "", const char *yesLabel = "") - { - return GUI_dialog_yesno_show_and_get_input_linebuttontext(m_Handle, m_Callbacks, heading, line0, line1, line2, bCanceled, noLabel, yesLabel); - } - //@} - - /*! @name GUI Text viewer Dialog */ - //@{ - void Dialog_TextViewer(const char *heading, const char *text) - { - return GUI_dialog_text_viewer(m_Handle, m_Callbacks, heading, text); - } - //@} - - /*! @name GUI select Dialog */ - //@{ - int Dialog_Select(const char *heading, const char *entries[], unsigned int size, int selected = -1) - { - return GUI_dialog_select(m_Handle, m_Callbacks, heading, entries, size, selected); - } - //@} - protected: void* (*GUI_register_me)(void *HANDLE); void (*GUI_unregister_me)(void *HANDLE, void* CB); @@ -572,36 +279,6 @@ void (*GUI_ListItem_destroy)(CAddonListItem* p); CAddonGUIRenderingControl* (*GUI_control_get_rendering)(void *HANDLE, void* CB, CAddonGUIWindow *window, int controlId); void (*GUI_control_release_rendering)(CAddonGUIRenderingControl* p); - CAddonGUISliderControl* (*GUI_control_get_slider)(void *HANDLE, void* CB, CAddonGUIWindow *window, int controlId); - void (*GUI_control_release_slider)(CAddonGUISliderControl* p); - CAddonGUISettingsSliderControl* (*GUI_control_get_settings_slider)(void *HANDLE, void* CB, CAddonGUIWindow *window, int controlId); - void (*GUI_control_release_settings_slider)(CAddonGUISettingsSliderControl* p); - bool (*GUI_dialog_keyboard_show_and_get_input_with_head)(void *HANDLE, void *CB, char &aTextString, unsigned int iMaxStringSize, const char *heading, bool allowEmptyResult, bool hiddenInput, unsigned int autoCloseMs); - bool (*GUI_dialog_keyboard_show_and_get_input)(void *HANDLE, void *CB, char &aTextString, unsigned int iMaxStringSize, bool allowEmptyResult, unsigned int autoCloseMs); - bool (*GUI_dialog_keyboard_show_and_get_new_password_with_head)(void *HANDLE, void *CB, char &newPassword, unsigned int iMaxStringSize, const char *heading, bool allowEmptyResult, unsigned int autoCloseMs); - bool (*GUI_dialog_keyboard_show_and_get_new_password)(void *HANDLE, void *CB, char &strNewPassword, unsigned int iMaxStringSize, unsigned int autoCloseMs); - bool (*GUI_dialog_keyboard_show_and_verify_new_password_with_head)(void *HANDLE, void *CB, char &strNewPassword, unsigned int iMaxStringSize, const char *heading, bool allowEmptyResult, unsigned int autoCloseMs); - bool (*GUI_dialog_keyboard_show_and_verify_new_password)(void *HANDLE, void *CB, char &strNewPassword, unsigned int iMaxStringSize, unsigned int autoCloseMs); - int (*GUI_dialog_keyboard_show_and_verify_password)(void *HANDLE, void *CB, char &strPassword, unsigned int iMaxStringSize, const char *strHeading, int iRetries, unsigned int autoCloseMs); - bool (*GUI_dialog_keyboard_show_and_get_filter)(void *HANDLE, void *CB, char &aTextString, unsigned int iMaxStringSize, bool searching, unsigned int autoCloseMs); - bool (*GUI_dialog_keyboard_send_text_to_active_keyboard)(void *HANDLE, void *CB, const char *aTextString, bool closeKeyboard); - bool (*GUI_dialog_keyboard_is_activated)(void *HANDLE, void *CB); - bool (*GUI_dialog_numeric_show_and_verify_new_password)(void *HANDLE, void *CB, char &strNewPassword, unsigned int iMaxStringSize); - int (*GUI_dialog_numeric_show_and_verify_password)(void *HANDLE, void *CB, char &strPassword, unsigned int iMaxStringSize, const char *strHeading, int iRetries); - bool (*GUI_dialog_numeric_show_and_verify_input)(void *HANDLE, void *CB, char &strPassword, unsigned int iMaxStringSize, const char *strHeading, bool bGetUserInput); - bool (*GUI_dialog_numeric_show_and_get_time)(void *HANDLE, void *CB, tm &time, const char *strHeading); - bool (*GUI_dialog_numeric_show_and_get_date)(void *HANDLE, void *CB, tm &date, const char *strHeading); - bool (*GUI_dialog_numeric_show_and_get_ipaddress)(void *HANDLE, void *CB, char &IPAddress, unsigned int iMaxStringSize, const char *strHeading); - bool (*GUI_dialog_numeric_show_and_get_number)(void *HANDLE, void *CB, char &strInput, unsigned int iMaxStringSize, const char *strHeading, unsigned int iAutoCloseTimeoutMs); - bool (*GUI_dialog_numeric_show_and_get_seconds)(void *HANDLE, void *CB, char &strTime, unsigned int iMaxStringSize, const char *strHeading); - bool (*GUI_dialog_filebrowser_show_and_get_file)(void *HANDLE, void *CB, const char *directory, const char *mask, const char *heading, char &path, unsigned int iMaxStringSize, bool useThumbs, bool useFileDirectories, bool singleList); - void (*GUI_dialog_ok_show_and_get_input_single_text)(void *HANDLE, void *CB, const char *heading, const char *text); - void (*GUI_dialog_ok_show_and_get_input_line_text)(void *HANDLE, void *CB, const char *heading, const char *line0, const char *line1, const char *line2); - bool (*GUI_dialog_yesno_show_and_get_input_singletext)(void *HANDLE, void *CB, const char *heading, const char *text, bool& bCanceled, const char *noLabel, const char *yesLabel); - bool (*GUI_dialog_yesno_show_and_get_input_linetext)(void *HANDLE, void *CB, const char *heading, const char *line0, const char *line1, const char *line2, const char *noLabel, const char *yesLabel); - bool (*GUI_dialog_yesno_show_and_get_input_linebuttontext)(void *HANDLE, void *CB, const char *heading, const char *line0, const char *line1, const char *line2, bool &bCanceled, const char *noLabel, const char *yesLabel); - void (*GUI_dialog_text_viewer)(void *hdl, void *cb, const char *heading, const char *text); - int (*GUI_dialog_select)(void *hdl, void *cb, const char *heading, const char *entries[], unsigned int size, int selected); private: void *m_libXBMC_gui; @@ -673,67 +350,6 @@ void *m_cb; }; -class CAddonGUISliderControl -{ -public: - CAddonGUISliderControl(void *hdl, void *cb, CAddonGUIWindow *window, int controlId); - virtual ~CAddonGUISliderControl(void) {} - - virtual void SetVisible(bool yesNo); - virtual std::string GetDescription() const; - - virtual void SetIntRange(int iStart, int iEnd); - virtual void SetIntValue(int iValue); - virtual int GetIntValue() const; - virtual void SetIntInterval(int iInterval); - - virtual void SetPercentage(float fPercent); - virtual float GetPercentage() const; - - virtual void SetFloatRange(float fStart, float fEnd); - virtual void SetFloatValue(float fValue); - virtual float GetFloatValue() const; - virtual void SetFloatInterval(float fInterval); - -private: - CAddonGUIWindow *m_Window; - int m_ControlId; - GUIHANDLE m_SliderHandle; - void *m_Handle; - void *m_cb; -}; - -class CAddonGUISettingsSliderControl -{ -public: - CAddonGUISettingsSliderControl(void *hdl, void *cb, CAddonGUIWindow *window, int controlId); - virtual ~CAddonGUISettingsSliderControl(void) {} - - virtual void SetVisible(bool yesNo); - virtual void SetText(const char *label); - virtual std::string GetDescription() const; - - virtual void SetIntRange(int iStart, int iEnd); - virtual void SetIntValue(int iValue); - virtual int GetIntValue() const; - virtual void SetIntInterval(int iInterval); - - virtual void SetPercentage(float fPercent); - virtual float GetPercentage() const; - - virtual void SetFloatRange(float fStart, float fEnd); - virtual void SetFloatValue(float fValue); - virtual float GetFloatValue() const; - virtual void SetFloatInterval(float fInterval); - -private: - CAddonGUIWindow *m_Window; - int m_ControlId; - GUIHANDLE m_SettingsSliderHandle; - void *m_Handle; - void *m_cb; -}; - class CAddonListItem { friend class CAddonGUIWindow; @@ -767,8 +383,6 @@ friend class CAddonGUIRadioButton; friend class CAddonGUIProgressControl; friend class CAddonGUIRenderingControl; -friend class CAddonGUISliderControl; -friend class CAddonGUISettingsSliderControl; public: CAddonGUIWindow(void *hdl, void *cb, const char *xmlFilename, const char *defaultSkin, bool forceFallback, bool asDialog); diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/xbmc/xbmc_codec_types.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/xbmc/xbmc_codec_types.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/xbmc/xbmc_codec_types.h 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/xbmc/xbmc_codec_types.h 2015-04-01 08:50:11.000000000 +0000 @@ -34,7 +34,6 @@ XBMC_CODEC_TYPE_AUDIO, XBMC_CODEC_TYPE_DATA, XBMC_CODEC_TYPE_SUBTITLE, - XBMC_CODEC_TYPE_RDS, XBMC_CODEC_TYPE_NB } xbmc_codec_type_t; diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/xbmc/xbmc_pvr_dll.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/xbmc/xbmc_pvr_dll.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/xbmc/xbmc_pvr_dll.h 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/xbmc/xbmc_pvr_dll.h 2015-04-01 08:50:11.000000000 +0000 @@ -176,9 +176,8 @@ * Show the channel scan dialog if this backend supports it. * @return PVR_ERROR_NO_ERROR if the dialog was displayed successfully. * @remarks Required if bSupportsChannelScan is set to true. Return PVR_ERROR_NOT_IMPLEMENTED if this add-on won't provide this function. - * @note see libXBMC_gui.h about related parts */ - PVR_ERROR OpenDialogChannelScan(void); + PVR_ERROR DialogChannelScan(void); /*! * @return The total amount of channels on the backend, or -1 on error. @@ -202,7 +201,7 @@ * Delete a channel from the backend. * @param channel The channel to delete. * @return PVR_ERROR_NO_ERROR if the channel has been deleted successfully. - * @remarks Required if bSupportsChannelSettings is set to true. + * @remarks Optional. Return PVR_ERROR_NOT_IMPLEMENTED if this add-on won't provide this function. */ PVR_ERROR DeleteChannel(const PVR_CHANNEL& channel); @@ -210,7 +209,7 @@ * Rename a channel on the backend. * @param channel The channel to rename, containing the new channel name. * @return PVR_ERROR_NO_ERROR if the channel has been renamed successfully. - * @remarks Optional, and only used if bSupportsChannelSettings is set to true. Return PVR_ERROR_NOT_IMPLEMENTED if this add-on won't provide this function. + * @remarks Optional. Return PVR_ERROR_NOT_IMPLEMENTED if this add-on won't provide this function. */ PVR_ERROR RenameChannel(const PVR_CHANNEL& channel); @@ -218,7 +217,7 @@ * Move a channel to another channel number on the backend. * @param channel The channel to move, containing the new channel number. * @return PVR_ERROR_NO_ERROR if the channel has been moved successfully. - * @remarks Optional, and only used if bSupportsChannelSettings is set to true. Return PVR_ERROR_NOT_IMPLEMENTED if this add-on won't provide this function. + * @remarks Optional. Return PVR_ERROR_NOT_IMPLEMENTED if this add-on won't provide this function. */ PVR_ERROR MoveChannel(const PVR_CHANNEL& channel); @@ -226,19 +225,17 @@ * Show the channel settings dialog, if supported by the backend. * @param channel The channel to show the dialog for. * @return PVR_ERROR_NO_ERROR if the dialog has been displayed successfully. - * @remarks Required if bSupportsChannelSettings is set to true. - * @note see libXBMC_gui.h about related parts + * @remarks Optional. Return PVR_ERROR_NOT_IMPLEMENTED if this add-on won't provide this function. */ - PVR_ERROR OpenDialogChannelSettings(const PVR_CHANNEL& channel); + PVR_ERROR DialogChannelSettings(const PVR_CHANNEL& channel); /*! * Show the dialog to add a channel on the backend, if supported by the backend. * @param channel The channel to add. * @return PVR_ERROR_NO_ERROR if the channel has been added successfully. - * @remarks Required if bSupportsChannelSettings is set to true. - * @note see libXBMC_gui.h about related parts + * @remarks Optional. Return PVR_ERROR_NOT_IMPLEMENTED if this add-on won't provide this function. */ - PVR_ERROR OpenDialogChannelAdd(const PVR_CHANNEL& channel); + PVR_ERROR DialogAddChannel(const PVR_CHANNEL& channel); //@} /** @name PVR recording methods @@ -248,21 +245,19 @@ */ //@{ /*! - * @return The total amount of recordings on the backend or -1 on error. - * @param deleted if set return deleted recording (called if bSupportsRecordingsUndelete set to true) + * @return The total amount of channels on the backend or -1 on error. * @remarks Required if bSupportsRecordings is set to true. Return PVR_ERROR_NOT_IMPLEMENTED if this add-on won't provide this function. */ - int GetRecordingsAmount(bool deleted); + int GetRecordingsAmount(void); /*! * Request the list of all recordings from the backend, if supported. * Recording entries are added to XBMC by calling TransferRecordingEntry() on the callback. * @param handle Handle to pass to the callback method. - * @param deleted if set return deleted recording (called if bSupportsRecordingsUndelete set to true) * @return PVR_ERROR_NO_ERROR if the recordings have been fetched successfully. * @remarks Required if bSupportsRecordings is set to true. Return PVR_ERROR_NOT_IMPLEMENTED if this add-on won't provide this function. */ - PVR_ERROR GetRecordings(ADDON_HANDLE handle, bool deleted); + PVR_ERROR GetRecordings(ADDON_HANDLE handle); /*! * Delete a recording on the backend. @@ -273,20 +268,6 @@ PVR_ERROR DeleteRecording(const PVR_RECORDING& recording); /*! - * Undelete a recording on the backend. - * @param recording The recording to undelete. - * @return PVR_ERROR_NO_ERROR if the recording has been undeleted successfully. - * @remarks Optional, and only used if bSupportsRecordingsUndelete is set to true. Return PVR_ERROR_NOT_IMPLEMENTED if this add-on won't provide this function. - */ - PVR_ERROR UndeleteRecording(const PVR_RECORDING& recording); - - /*! - * @brief Delete all recordings permanent which in the deleted folder on the backend. - * @return PVR_ERROR_NO_ERROR if the recordings has been deleted successfully. - */ - PVR_ERROR DeleteAllRecordingsFromTrash(); - - /*! * Rename a recording on the backend. * @param recording The recording to rename, containing the new name. * @return PVR_ERROR_NO_ERROR if the recording has been renamed successfully. @@ -614,13 +595,6 @@ time_t GetBufferTimeEnd(); /*! - * Get the hostname of the pvr backend server - * @return hostname as ip address or alias. If backend does not - * utilize a server, return empty string. - */ - const char* GetBackendHostname(); - - /*! * Called by XBMC to assign the function pointers of this add-on to pClient. * @param pClient The struct to assign the function pointers to. */ @@ -636,7 +610,7 @@ pClient->GetBackendName = GetBackendName; pClient->GetBackendVersion = GetBackendVersion; pClient->GetDriveSpace = GetDriveSpace; - pClient->OpenDialogChannelScan = OpenDialogChannelScan; + pClient->DialogChannelScan = DialogChannelScan; pClient->MenuHook = CallMenuHook; pClient->GetEpg = GetEPGForChannel; @@ -650,14 +624,12 @@ pClient->DeleteChannel = DeleteChannel; pClient->RenameChannel = RenameChannel; pClient->MoveChannel = MoveChannel; - pClient->OpenDialogChannelSettings = OpenDialogChannelSettings; - pClient->OpenDialogChannelAdd = OpenDialogChannelAdd; + pClient->DialogChannelSettings = DialogChannelSettings; + pClient->DialogAddChannel = DialogAddChannel; pClient->GetRecordingsAmount = GetRecordingsAmount; pClient->GetRecordings = GetRecordings; pClient->DeleteRecording = DeleteRecording; - pClient->UndeleteRecording = UndeleteRecording; - pClient->DeleteAllRecordingsFromTrash = DeleteAllRecordingsFromTrash; pClient->RenameRecording = RenameRecording; pClient->SetRecordingPlayCount = SetRecordingPlayCount; pClient->SetRecordingLastPlayedPosition = SetRecordingLastPlayedPosition; @@ -702,8 +674,6 @@ pClient->GetPlayingTime = GetPlayingTime; pClient->GetBufferTimeStart = GetBufferTimeStart; pClient->GetBufferTimeEnd = GetBufferTimeEnd; - - pClient->GetBackendHostname = GetBackendHostname; }; }; diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/xbmc/xbmc_pvr_types.h kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/xbmc/xbmc_pvr_types.h --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/xbmc/xbmc_pvr_types.h 2015-02-20 11:24:58.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/xbmc/xbmc_pvr_types.h 2015-04-01 08:50:11.000000000 +0000 @@ -75,10 +75,10 @@ #define PVR_STREAM_MAX_STREAMS 20 /* current PVR API version */ -#define XBMC_PVR_API_VERSION "1.9.4" +#define XBMC_PVR_API_VERSION "1.9.2" /* min. PVR API version */ -#define XBMC_PVR_MIN_API_VERSION "1.9.4" +#define XBMC_PVR_MIN_API_VERSION "1.9.2" #ifdef __cplusplus extern "C" { @@ -122,14 +122,13 @@ */ typedef enum { - PVR_MENUHOOK_UNKNOWN =-1, /*!< @brief unknown menu hook */ - PVR_MENUHOOK_ALL = 0, /*!< @brief all categories */ - PVR_MENUHOOK_CHANNEL = 1, /*!< @brief for channels */ - PVR_MENUHOOK_TIMER = 2, /*!< @brief for timers */ - PVR_MENUHOOK_EPG = 3, /*!< @brief for EPG */ - PVR_MENUHOOK_RECORDING = 4, /*!< @brief for recordings */ - PVR_MENUHOOK_DELETED_RECORDING = 5, /*!< @brief for deleted recordings */ - PVR_MENUHOOK_SETTING = 6, /*!< @brief for settings */ + PVR_MENUHOOK_UNKNOWN =-1, /*!< @brief unknown menu hook */ + PVR_MENUHOOK_ALL = 0, /*!< @brief all categories */ + PVR_MENUHOOK_CHANNEL = 1, /*!< @brief for channels */ + PVR_MENUHOOK_TIMER = 2, /*!< @brief for timers */ + PVR_MENUHOOK_EPG = 3, /*!< @brief for EPG */ + PVR_MENUHOOK_RECORDING = 4, /*!< @brief for recordings */ + PVR_MENUHOOK_SETTING = 5, /*!< @brief for settings */ } PVR_MENUHOOK_CAT; /*! @@ -151,11 +150,9 @@ bool bSupportsTV; /*!< @brief true if this add-on provides TV channels */ bool bSupportsRadio; /*!< @brief true if this add-on supports radio channels */ bool bSupportsRecordings; /*!< @brief true if this add-on supports playback of recordings stored on the backend */ - bool bSupportsRecordingsUndelete; /*!< @brief true if this add-on supports undelete of recordings stored on the backend */ bool bSupportsTimers; /*!< @brief true if this add-on supports the creation and editing of timers */ bool bSupportsChannelGroups; /*!< @brief true if this add-on supports channel groups */ bool bSupportsChannelScan; /*!< @brief true if this add-on support scanning for new channels on the backend */ - bool bSupportsChannelSettings; /*!< @brief true if this add-on supports the following functions: DeleteChannel, RenameChannel, MoveChannel, DialogChannelSettings and DialogAddChannel */ bool bHandlesInputStream; /*!< @brief true if this add-on provides an input stream. false if XBMC handles the stream. */ bool bHandlesDemuxing; /*!< @brief true if this add-on demultiplexes packets. */ bool bSupportsRecordingFolders; /*!< @brief true if the backend supports timers / recordings in folders. */ @@ -298,7 +295,6 @@ int iGenreSubType; /*!< @brief (optional) genre sub type */ int iPlayCount; /*!< @brief (optional) play count of this recording on the client */ int iLastPlayedPosition; /*!< @brief (optional) last played position of this recording on the client */ - bool bIsDeleted; /*!< @brief (optional) shows this recording is deleted and can be undelete */ } ATTRIBUTE_PACKED PVR_RECORDING; /*! @@ -353,19 +349,17 @@ int (__cdecl* GetChannelGroupsAmount)(void); PVR_ERROR (__cdecl* GetChannelGroups)(ADDON_HANDLE, bool); PVR_ERROR (__cdecl* GetChannelGroupMembers)(ADDON_HANDLE, const PVR_CHANNEL_GROUP&); - PVR_ERROR (__cdecl* OpenDialogChannelScan)(void); + PVR_ERROR (__cdecl* DialogChannelScan)(void); int (__cdecl* GetChannelsAmount)(void); PVR_ERROR (__cdecl* GetChannels)(ADDON_HANDLE, bool); PVR_ERROR (__cdecl* DeleteChannel)(const PVR_CHANNEL&); PVR_ERROR (__cdecl* RenameChannel)(const PVR_CHANNEL&); PVR_ERROR (__cdecl* MoveChannel)(const PVR_CHANNEL&); - PVR_ERROR (__cdecl* OpenDialogChannelSettings)(const PVR_CHANNEL&); - PVR_ERROR (__cdecl* OpenDialogChannelAdd)(const PVR_CHANNEL&); - int (__cdecl* GetRecordingsAmount)(bool); - PVR_ERROR (__cdecl* GetRecordings)(ADDON_HANDLE, bool); + PVR_ERROR (__cdecl* DialogChannelSettings)(const PVR_CHANNEL&); + PVR_ERROR (__cdecl* DialogAddChannel)(const PVR_CHANNEL&); + int (__cdecl* GetRecordingsAmount)(void); + PVR_ERROR (__cdecl* GetRecordings)(ADDON_HANDLE); PVR_ERROR (__cdecl* DeleteRecording)(const PVR_RECORDING&); - PVR_ERROR (__cdecl* UndeleteRecording)(const PVR_RECORDING&); - PVR_ERROR (__cdecl* DeleteAllRecordingsFromTrash)(void); PVR_ERROR (__cdecl* RenameRecording)(const PVR_RECORDING&); PVR_ERROR (__cdecl* SetRecordingPlayCount)(const PVR_RECORDING&, int); PVR_ERROR (__cdecl* SetRecordingLastPlayedPosition)(const PVR_RECORDING&, int); @@ -405,7 +399,6 @@ time_t (__cdecl* GetPlayingTime)(void); time_t (__cdecl* GetBufferTimeStart)(void); time_t (__cdecl* GetBufferTimeEnd)(void); - const char* (__cdecl* GetBackendHostname)(void); } PVRClient; #ifdef __cplusplus diff -Nru kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/xbmc/xbmc_stream_utils.hpp kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/xbmc/xbmc_stream_utils.hpp --- kodi-pvr-addons-1.0.0~git20150220.1227-4657d8b/xbmc/xbmc_stream_utils.hpp 2015-01-19 19:21:07.000000000 +0000 +++ kodi-pvr-addons-1.0.0~git20150401.1050-4854fbe/xbmc/xbmc_stream_utils.hpp 2015-04-01 08:50:11.000000000 +0000 @@ -160,7 +160,7 @@ { XbmcPvrStream *foundStream = GetStreamById(iPhysicalId); if (foundStream) - stream = foundStream; + *stream = *foundStream; else { stream->iIdentifier = -1;