From 6af1e3dfe98df9a9adc787d76c807a0385c2f412 Mon Sep 17 00:00:00 2001 From: Kai Sommerfeld Date: Wed, 9 Sep 2015 17:47:33 +0200 Subject: [PATCH 001/100] Update to PVR addon API v4.0.0 --- pvr.iptvsimple/addon.xml.in | 4 ++-- pvr.iptvsimple/changelog.txt | 3 +++ src/client.cpp | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index 00f46ffaa..29bfe00aa 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,12 +1,12 @@ - + Date: Fri, 18 Sep 2015 14:45:42 +0200 Subject: [PATCH 002/100] Update to PVR addon API v4.1.0 --- pvr.iptvsimple/addon.xml.in | 4 ++-- pvr.iptvsimple/changelog.txt | 3 +++ src/PVRIptvData.cpp | 1 + 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index 29bfe00aa..8e45765ec 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,12 +1,12 @@ - + TransferEpgEntry(handle, &tag); From eda38ccfd3f4354e6d5111420b43d2b18a4a7be9 Mon Sep 17 00:00:00 2001 From: txtranslation Date: Tue, 8 Dec 2015 08:01:55 +0000 Subject: [PATCH 003/100] [lang] updated language files from Transifex --- pvr.iptvsimple/addon.xml.in | 36 +++++--- pvr.iptvsimple/changelog.txt | 3 + .../resource.language.bg_bg/strings.po | 4 +- .../resource.language.ca_es/strings.po | 16 ++++ .../resource.language.da_dk/strings.po | 16 ++++ .../resource.language.el_gr/strings.po | 16 ++++ .../resource.language.es_ar/strings.po | 16 ++++ .../resource.language.es_mx/strings.po | 4 + .../resource.language.fi_fi/strings.po | 48 +++++++++++ .../resource.language.fr_fr/strings.po | 24 +++--- .../resource.language.he_il/strings.po | 8 +- .../resource.language.hr_hr/strings.po | 16 ++++ .../resource.language.id_id/strings.po | 16 ++++ .../resource.language.is_is/strings.po | 16 ++++ .../resource.language.ko_kr/strings.po | 4 + .../resource.language.ms_my/strings.po | 4 +- .../resource.language.mt_mt/strings.po | 84 +++++++++++++++++++ .../resource.language.nb_no/strings.po | 24 +++++- .../resource.language.pl_pl/strings.po | 6 +- .../resource.language.pt_pt/strings.po | 12 +++ .../resource.language.ro_ro/strings.po | 24 ++++++ .../resource.language.sk_sk/strings.po | 16 ++++ .../resource.language.sr_rs/strings.po | 80 ++++++++++++++++++ .../resource.language.sr_rs@latin/strings.po | 80 ++++++++++++++++++ .../resource.language.vi_vn/strings.po | 16 ++++ 25 files changed, 550 insertions(+), 39 deletions(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index 8e45765ec..99d68a4ab 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,7 +1,7 @@ @@ -13,7 +13,7 @@ library_@PLATFORM@="@LIBRARY_FILENAME@"/> 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 PVR de Kodi per al suport d'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 @@ -23,10 +23,11 @@ Kodi PVR addon for IPTV support. 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 Kodi PVR addon for IPTV support. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home - Kodi PVR addon para soporte IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home + Addon Kodi PVR para soporte IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Kodi PVR addon para soporte IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home + Kodi PVR lisäosa IPTV tuella. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Addiciel de numériscope Kodi pour la prise en charge de IPTV https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home - Extension PVR pour le support IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home + Extension enregistreur vidéo (PVR) pour la gestion IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Complemento PVR do Kodi de soporte á IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home לקוח טלוויזיה חיה עם תמיכה ב־IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Kodi PVR dodatak za IPTV podršku. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home @@ -39,16 +40,19 @@ Kodi PVR priedas IPTV palaikymui. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Kodi PVR pielikums IPTV atbalstam. 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 - Pasang-tambah PVR Kodi untuk sokongan IPTV https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home + Tambahan PVR Kodi untuk sokongan IPTV https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home + PVR addon ta' Kodi għall-IPTV. 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 Kodi PVR add-on voor IPTV ondersteuning. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home - Klient TV dla IPTV. Więcej informacji o dodatku: https://github.com/afedchin/xbmc-addon-iptvsimple/wiki/IPTV-Simple-Home + Klient telewizyjny dla telewizji internetowej. Więcej informacji o dodatku: 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 Addon PVR do Kodi para suporte IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Supliment PVR Kodi 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 PVR додатни програм за IPTV подршку. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home + Kodi PVR dodatni program za IPTV podršku. 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 PVR надбудова Kodi для підтримки IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home @@ -64,10 +68,11 @@ IPTV Simple PVR Client support m3u playlists, streaming of Live TV for multicast/unicast sources, listening to Radio channels and EPG. IPTV Simple PVR Client support m3u playlists, streaming of Live TV for multicast/unicast sources, listening to Radio channels and EPG. IPTV Simple PVR Client support m3u playlists, streaming of Live TV for multicast/unicast sources, listening to Radio channels and EPG. - El cliente PVR IPTV Simple soporta listas M3U, reproducción de TV en Vivo para origenes multicast/unicast, escucha de canales de radio y GEP + Cliente simple PVR IPTV. Reproduce de TV en Vivo multicast/unicast y listas m3u8 . reproduce tambien canales de radio y GEP El cliente PVR IPTV Simple soporta listas M3U, reproducción de TV en Vivo para origenes multicast/unicast, escucha de canales de radio y EPG + IPTV Simple PVR Client tukee m3u soittolistoja, multicast/unicast LIVE TV toistoa, radiokanavia jaohjelmaopasta. Client de numériscope simple pour IPTV, prenant en charge les listes de lecture m3u, la lecture en transit des télés en direct pour les sources de multidiffusion et de monodiffusion, l'écoute de chaînes radio, et le GÉP. - Le client PVR IPTV Simple supporte les listes de lecture m3u, la diffusion en continu de la TV en direct en mono ou multi-diffusion, l'écoute des chaînes radio et l'EPG. + Le client enregistreur vidéo (PVR) IPTV Simple gère les listes de lecture M3U, la diffusion en continu de la TV en direct en mono ou multidiffusion, l'écoute des chaînes radio et le guide électronique des programmes TV. O cliente PVR simple de IPTV soporta listaxes m3u, transmisión de TV en directo para fontes multicast/unicast, escoita de canles de Radio e Guía. לקוח טלוויזיה חיה IPTV Simple תומך ברשימות m3u, הזרמת שידורים חיים ממקור מרובב/ סטרים בודד, האזנה לתחנות רדיו והצגת לוח שידורים. IPTV Simple PVR klijent podržava m3u popise izvođenja, streamanje TV programa s više ili jednog izvora, slušanje radio programa i elektronski programski vodič (EPG). @@ -80,20 +85,23 @@ IPTV Simple PVR klientas palaiko m3u grojaraščius, TV transliacijas iš multicast/unicast šaltinių, radijo stočių transliacijas ir EPG. IPTV vienkāršais PVR klients atbalsta m3u spēļsarakstus, tiešraides TV straumēšanu multiraides/uniraides avotiem, radio kanālu klausīšanos un EPG. IPTV Simple PVR Client поддржува m3u листи, гледање на Live TV од multicast/unicast извори, слушање Радио канали и EPG. - IPTV Simple PVR Client menyokong senarai audio visual m3u, penstriman Live TV untuk + Klien PVR IPTV Simple menyokong senarai audio visual m3u, penstriman TV Langsung untuk sumber satu siaran/berbilang-siaran, mendengar saluran Radio dan EPG. + IPTV Simple PVR Client jiflaħ għal playlists m3u, streaming ta' TV Lajv għal sorsi multicast/unicast, smiegħ ta' stazzjonijiet tar-Radju u EPG. IPTV Simple PVR klient støtter m3u spillelister, strømming av Live TV, lytting til radiokanaler og programguider. IPTV simpele PVR cliënt ondersteunt m3u afspeellijsten, streaming van live TV voor multicast/unicast bronnen, luisteren naar radiozenders en EPG. - Klient IPTV Simple obsługuje listy odtwarzania m3u, strumieniowanie kanałów radiowych i telewizyjnych ze źródeł pojedynczych i grupowych oraz funkcje przewodnika telewizyjnego. + Klient telewizyjny dla telewizji internetowej obsługuje listy odtwarzania m3u, strumieniowanie kanałów radiowych i telewizyjnych ze źródeł punktowych i grupowych oraz funkcje przewodnika telewizyjnego. O cliente de PVR IPTV Simple Client oferece suporte para listas m3u, transmissão de TV ao vivo de fontes multicast/unicast, transmissão de rádios e, ainda, suporte a guia de programação eletrônico - EPG. 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. PVR Client IPTV suporta liste m3u, redare TV în direct pentru surse de multicast/unicast, ascultare canale radio si EPG. Интерфейс для IPTV. Поддерживает просмотр потокового ТВ для юникаст/мультикаст источников, прослушивание радиоканалов и работу с электронным телегидом. Jednoduchý IPTV PVR klient podporuje mp3 zoznamy súborov, streamovanie živého televízneho vysielania ako multicast/unicast zdroje, počúvanie rozhlasových kanálov a EPG. IPTV Simple odjemalec PVR podpira sezname m3u, pretakanja TV v živo za vire multicast/unicast, poslušenje radijskih postaj in EPG. + IPTV Једноставан PVR Клијент подржава m3u листе за репродукцију, стримовање ТВ Уживо за multicast/unicast изворе, слушање Радио канала и EPG. + IPTV Jednostavan PVR Klijent podržava m3u liste za reprodukciju, strimovanje TV Uživo za multicast/unicast izvore, slušanje Radio kanala i EPG. IPTV Simple PVR Client stöder m3u-spellistor, strömmande Live-TV för multicast/unicast-källor, radiolyssning och EPG. IPTV Basit PVR İstemcisi m3u çalma listeleri, multicast/unicast kaynaklar için Canlı TV akışı, radyo kanallarını dinleme ve EPG destekler. IPTV 简单 PVR 前端支持 m3u 播放列表、多播/单播源直播电视、收听电台和电子节目单。 - Тази програма е нестабилна! Авторите не носят отговорност за неуспешно възпроизвеждане, некоректно време на ЕПС, пропиляното време и други нежелани ефекти. + Тази програма е нестабилна! Авторите не носят отговорност за неуспешно възпроизвеждане, некоректни часове в електронния програмен справочник, пропиляното време и други нежелани ефекти. Aquest programari és inestable! Els autors no es fan responsables de reproduccions fallides, horaris incorrectes a l'EPG, hores perdudes o qualsevol altre efecte no desitjat. Tento software není stabilní. Autoři nejsou žádným způsobem zodpovědní za selhání při nahrávání, neplatné časovače, ztracený čas, či jakékoliv jiné nežádoucí události... Mae hwn yn feddalwedd ansad! Nid yw'r awduron yn gyfrifol mewn unrhyw ffordd am fethu recordio, amseru gwallus, oriau wedi eu gwastraffu nac effeithiau anymunol eraill. @@ -106,8 +114,9 @@ This is unstable software! The authors are in no way responsible for failed playings, incorrect EPG times, wasted hours, or any other undesirable effects. Este es un software inestable. El autor no se hace responsable por reproducciones fallidas, datos de GEP incorrectos, horas perdidas o cualquier otro efecto indeseable. Este es un software inestable! El autor no se hace responsable de reproducciones fallidas, datos de EPG incorrectos, horas perdidas o cualquier otro efecto indeseado. + Tämä on epävakaa ohjelma! Ohjelman kirjoittavat eivät vastaa millään tavalla epäonnistuneista toistoista, vääristä EPG ajoista, hukatusta ajasta tai muista ei-halutuista tapahtumista. Ce logiciel est instable! Les auteurs ne sont aucunement responsables des lectures défaillantes, d'horaires erronés du GÉP, des heures perdues ou tout autre effet indésirable. - Ce logiciel est en cours de développement. Les auteurs ne sont en aucun cas responsables de l'échec des lectures, horaires EPG, temps perdu et autres effets indésirables. + Logiciel en cours d'élaboration ! Les auteurs ne sont en aucun cas responsables de l'échec des enregistrements, programmations défectueuses, temps perdu ou autres effets indésirables. Este software non é estábel! Os autores non se fan responsábeis dos erros na reproducción, horarios incorrectos na Guía, horas vencidas, e otros efectos non desexados. זוהי איננה הרחבה יציבה! המפתחים אינם אחראים על כשלון בניגון, זמנים שגויים במדריך השידורים, שעות מבוזבזות או כל תופעה לא רצויה אחרת. Ovo je nestabilan softver! Autori nisu ni na koji način odgovorani za neuspjelo snimanje, netočna zakazana snimanja, izgubjene sate, ili bilo koje druge neželjene učinke... @@ -121,6 +130,7 @@ Šī ir nestabila programmatūra! Autori nav atbildīgi par neizdevušos atskaņošanu, nepareizu EPG laiku, iztērētām stundām vai jebkādiem citiem nevēlamiem efektiem. Ова е нестабилен софтвер! Авторите во никој случај не се одговорни за неуспешно гледање, неточни времиња во EPG, вашето потрошено време или било кои непосакувани ефекти. Perisian ini tidak stabi! Pengarang tidak bertanggungjawab atas kegagalan memainkan, pemasa EPG yang tidak betul, pembaziran masa atau sebarang kesan tidak diingini. + Dan il-programm mhuwiex stabbli! L-awturi m'huma bl-ebda mod responsabbli għal daqq li ma jirnexxiex, ħinijiet tal-EPG żbaljati, siegħat moħlija jew kwalunkwe effet ieħor mhux mixtieq. Dette er et ustabilt program! Skaperne er på ingen måte ansvarlig for feil ved avspilling, feil programguide tide, bortkastede timer eller andre uønskede ting. Deze software is niet 100% stabiel! De auteurs zijn op geen enkele wijze aansprakelijk voor mislukte opnames, incorrecte EPG tijden, verspilde uren, of enig ander ongewild neveneffect.. 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. @@ -130,6 +140,8 @@ Это нестабильная программа! Авторы не несут ответственности за неудачные воспроизведение, неверные время EPG, потраченное время и прочие нежелательные эффекты. Toto je nestabilný softvér! Autori nie sú v žiadnom prípade zodpovední za chybné prehrávanie, nesprávne časy EPG, premrhané hodiny alebo akékoľvek iné nežiadúce účinky. To je nestabilna programska oprema! Avtorji niso odgovorni za neuspela predvajanja, nepravilne čase v EPG, zapravljen čas in katerikoli drug neželen učinek. + Овај софтвер је нестабилан! Аутори ни на који начин нису одговорни за неуспела снимања, неисправне тајмере, изгубљене сате, или било које друге нежељене ефекте. + Ovaj softver je nestabilan! Autori ni na koji način nisu odgovorni za neuspela snimanja, neispravne tajmere, izgubljene sate, ili bilo koje druge neželjene efekte. Denna mjukvara är ostabil! Författarna kan inte på något sätt hållas ansvariga för felaktiga uppspelningar, EPG-tider, bortslösade timmar eller andra oönskade effekter. To je niystabilny softwer! Autōry niy sōm ôdpedzialne za niypodarzōne graniy, niynŏleżne godziny EPG, stracōne godziny i inksze niychciane efekty. Bu kararsız bir yazılımdır! Yazanlar oynatma hatası, yanlış EPG zamanları, harcanmış saatler ya da diğer etkilerden sorumlu değildir. diff --git a/pvr.iptvsimple/changelog.txt b/pvr.iptvsimple/changelog.txt index 815c51f3e..9543d0e56 100644 --- a/pvr.iptvsimple/changelog.txt +++ b/pvr.iptvsimple/changelog.txt @@ -1,3 +1,6 @@ +v1.12.7 +- updated language files from Transifex + v1.12.6 - Updated to PVR API v4.1.0 diff --git a/pvr.iptvsimple/resources/language/resource.language.bg_bg/strings.po b/pvr.iptvsimple/resources/language/resource.language.bg_bg/strings.po index 238bc813e..e616a1b78 100644 --- a/pvr.iptvsimple/resources/language/resource.language.bg_bg/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.bg_bg/strings.po @@ -46,7 +46,7 @@ msgstr "Започни номерирането на каналите от" msgctxt "#30020" msgid "EPG Settings" -msgstr "ЕПС настройки" +msgstr "Настройки на справочника" msgctxt "#30021" msgid "XMLTV Path" @@ -62,7 +62,7 @@ msgstr "Приложи времевото отместване за всички msgctxt "#30024" msgid "EPG Time Shift (hours)" -msgstr "ЕПС времево отместване (часове)" +msgstr "Времево отместване в справочника (часове)" msgctxt "#30025" msgid "Cache m3u at local storage" diff --git a/pvr.iptvsimple/resources/language/resource.language.ca_es/strings.po b/pvr.iptvsimple/resources/language/resource.language.ca_es/strings.po index 214ecade7..dc7257d57 100644 --- a/pvr.iptvsimple/resources/language/resource.language.ca_es/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.ca_es/strings.po @@ -84,6 +84,22 @@ msgctxt "#30032" msgid "Channels Logos Base URL" msgstr "URL base per a logos de canals" +msgctxt "#30040" +msgid "XMLTV Logos Options" +msgstr "Opcions de logos XMLTV" + +msgctxt "#30041" +msgid "Channels Logos from XMLTV" +msgstr "Logos de canals de XMLTV" + msgctxt "#30042" msgid "Ignore" msgstr "Ignora" + +msgctxt "#30043" +msgid "Prefer M3U" +msgstr "Preferir M3U" + +msgctxt "#30044" +msgid "Prefer XMLTV" +msgstr "XMLTV preferit" diff --git a/pvr.iptvsimple/resources/language/resource.language.da_dk/strings.po b/pvr.iptvsimple/resources/language/resource.language.da_dk/strings.po index 0782bbd58..2997f602d 100644 --- a/pvr.iptvsimple/resources/language/resource.language.da_dk/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.da_dk/strings.po @@ -84,6 +84,22 @@ msgctxt "#30032" msgid "Channels Logos Base URL" msgstr "Kanals Logos Base URL" +msgctxt "#30040" +msgid "XMLTV Logos Options" +msgstr "XMLTV Logo Indstillinger" + +msgctxt "#30041" +msgid "Channels Logos from XMLTV" +msgstr "Kanal Logoer fra XMLTV" + msgctxt "#30042" msgid "Ignore" msgstr "Ignorer" + +msgctxt "#30043" +msgid "Prefer M3U" +msgstr "Foretræk M3u" + +msgctxt "#30044" +msgid "Prefer XMLTV" +msgstr "Foretræk XMLTV" diff --git a/pvr.iptvsimple/resources/language/resource.language.el_gr/strings.po b/pvr.iptvsimple/resources/language/resource.language.el_gr/strings.po index 43a0a7dad..2870859df 100644 --- a/pvr.iptvsimple/resources/language/resource.language.el_gr/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.el_gr/strings.po @@ -84,6 +84,22 @@ msgctxt "#30032" msgid "Channels Logos Base URL" msgstr "Βασική URL Λογότυπων Καναλιών" +msgctxt "#30040" +msgid "XMLTV Logos Options" +msgstr "Επιλογές λογότυπων XMLTV" + +msgctxt "#30041" +msgid "Channels Logos from XMLTV" +msgstr "Λογότυπα καναλιών από XMLTV" + msgctxt "#30042" msgid "Ignore" msgstr "Αγνόηση" + +msgctxt "#30043" +msgid "Prefer M3U" +msgstr "Προτίμηση M3U" + +msgctxt "#30044" +msgid "Prefer XMLTV" +msgstr "Προτίμηση XMLTV" diff --git a/pvr.iptvsimple/resources/language/resource.language.es_ar/strings.po b/pvr.iptvsimple/resources/language/resource.language.es_ar/strings.po index c91da219a..51030553d 100644 --- a/pvr.iptvsimple/resources/language/resource.language.es_ar/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.es_ar/strings.po @@ -84,6 +84,22 @@ msgctxt "#30032" msgid "Channels Logos Base URL" msgstr "URL de la Base de Logotipos de Canales" +msgctxt "#30040" +msgid "XMLTV Logos Options" +msgstr "Opciones para logos XMLTV" + +msgctxt "#30041" +msgid "Channels Logos from XMLTV" +msgstr "Logos de canales de XMLTV" + msgctxt "#30042" msgid "Ignore" msgstr "Ignorar" + +msgctxt "#30043" +msgid "Prefer M3U" +msgstr "Use primero M3U si esta disponible" + +msgctxt "#30044" +msgid "Prefer XMLTV" +msgstr "Use primero XMLTV si esta disponible" diff --git a/pvr.iptvsimple/resources/language/resource.language.es_mx/strings.po b/pvr.iptvsimple/resources/language/resource.language.es_mx/strings.po index 62b61af9a..a3ef28f63 100644 --- a/pvr.iptvsimple/resources/language/resource.language.es_mx/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.es_mx/strings.po @@ -27,3 +27,7 @@ msgstr "General" msgctxt "#30042" msgid "Ignore" msgstr "Ignorar" + +msgctxt "#30044" +msgid "Prefer XMLTV" +msgstr "XMLTV preferido" diff --git a/pvr.iptvsimple/resources/language/resource.language.fi_fi/strings.po b/pvr.iptvsimple/resources/language/resource.language.fi_fi/strings.po index ef2a87aff..deef75816 100644 --- a/pvr.iptvsimple/resources/language/resource.language.fi_fi/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.fi_fi/strings.po @@ -20,6 +20,10 @@ msgctxt "#30000" msgid "Location" msgstr "Sijainti" +msgctxt "#30001" +msgid "Local Path (include Local Network)" +msgstr "Paikallinen polku (sisältää lähiverkon)" + msgctxt "#30010" msgid "General" msgstr "Yleiset" @@ -32,10 +36,54 @@ msgctxt "#30012" msgid "M3U Play List URL" msgstr "M3U soittolistan URL" +msgctxt "#30013" +msgid "Numbering channels starts at" +msgstr "Kanavien numerointi alkaa" + msgctxt "#30020" msgid "EPG Settings" msgstr "EPG asetukset" +msgctxt "#30021" +msgid "XMLTV Path" +msgstr "XMLTV polku" + +msgctxt "#30022" +msgid "XMLTV URL" +msgstr "XMLTV polku" + +msgctxt "#30023" +msgid "Apply Time Shift To All Channels" +msgstr "Käytä ajansiirtoa kaikilla kanavilla" + +msgctxt "#30024" +msgid "EPG Time Shift (hours)" +msgstr "EPG ajansiirto (tuntia)" + +msgctxt "#30025" +msgid "Cache m3u at local storage" +msgstr "Käytä paikallista levyä m3u tiedostojen välimuistina." + +msgctxt "#30026" +msgid "Cache XMLTV at local storage" +msgstr "Käytä paikallista levyä XMLTV tiedostojen välimuistina." + +msgctxt "#30030" +msgid "Channels Logos" +msgstr "Kanava logot" + +msgctxt "#30031" +msgid "Channels Logos Folder" +msgstr "Kanava logojen kansio" + +msgctxt "#30032" +msgid "Channels Logos Base URL" +msgstr "Kanavalogojen URL" + +msgctxt "#30040" +msgid "XMLTV Logos Options" +msgstr "XMLTV logojen asetukset" + msgctxt "#30041" msgid "Channels Logos from XMLTV" msgstr "Kanavalogot XMLTV:stä" diff --git a/pvr.iptvsimple/resources/language/resource.language.fr_fr/strings.po b/pvr.iptvsimple/resources/language/resource.language.fr_fr/strings.po index ed005b82a..e417fa4ba 100644 --- a/pvr.iptvsimple/resources/language/resource.language.fr_fr/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.fr_fr/strings.po @@ -22,23 +22,23 @@ msgstr "Emplacement" msgctxt "#30001" msgid "Local Path (include Local Network)" -msgstr "Chemin local (inclue le réseau local)" +msgstr "Chemin local (inclure le réseau local)" msgctxt "#30002" msgid "Remote Path (Internet address)" -msgstr "Chemin d'accès (adresse internet)" +msgstr "Chemin d'accès distant (adresse internet)" msgctxt "#30010" msgid "General" -msgstr "General" +msgstr "Général" msgctxt "#30011" msgid "M3U Play List Path" -msgstr "Chemin de la Playlist M3U" +msgstr "Chemin de la liste de chaînes M3U" msgctxt "#30012" msgid "M3U Play List URL" -msgstr "URL de la playlist M3U" +msgstr "URL de la liste de chaînes M3U" msgctxt "#30013" msgid "Numbering channels starts at" @@ -46,7 +46,7 @@ msgstr "Début de numérotation des chaînes" msgctxt "#30020" msgid "EPG Settings" -msgstr "Paramètres du guide des programmes" +msgstr "Guide TV" msgctxt "#30021" msgid "XMLTV Path" @@ -58,19 +58,19 @@ msgstr "URL du fichier XMLTV" msgctxt "#30023" msgid "Apply Time Shift To All Channels" -msgstr "Appliquer un décalage horaire sur toutes les chaînes" +msgstr "Appliquer un différé sur toutes les chaînes" msgctxt "#30024" msgid "EPG Time Shift (hours)" -msgstr "Décalage horaire de l'EPG (heures)" +msgstr "Différé du guide des programmes (heures)" msgctxt "#30025" msgid "Cache m3u at local storage" -msgstr "Cache de m3u sur le stockage local" +msgstr "Cacher le M3U sur le stockage local" msgctxt "#30026" msgid "Cache XMLTV at local storage" -msgstr "Cache de XMLTV sur le stockage local" +msgstr "Cacher le XMLTV sur le stockage local" msgctxt "#30030" msgid "Channels Logos" @@ -82,7 +82,7 @@ msgstr "Dossier des logos de chaînes" msgctxt "#30032" msgid "Channels Logos Base URL" -msgstr "URL de base des Logos de chaînes" +msgstr "URL de base des logos de chaînes" msgctxt "#30040" msgid "XMLTV Logos Options" @@ -90,7 +90,7 @@ msgstr "Options des logos XMLTV" msgctxt "#30041" msgid "Channels Logos from XMLTV" -msgstr "Logos des chaînes de XMLTV" +msgstr "Logos des chaînes à partir du XMLTV" msgctxt "#30042" msgid "Ignore" diff --git a/pvr.iptvsimple/resources/language/resource.language.he_il/strings.po b/pvr.iptvsimple/resources/language/resource.language.he_il/strings.po index f0fac52a1..d75a9e757 100644 --- a/pvr.iptvsimple/resources/language/resource.language.he_il/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.he_il/strings.po @@ -86,11 +86,11 @@ msgstr "כתובת בסיס של סמלי ערוצים" msgctxt "#30040" msgid "XMLTV Logos Options" -msgstr "אפשרויות לוגאים של XMLTV" +msgstr "סמלי XMLTV" msgctxt "#30041" msgid "Channels Logos from XMLTV" -msgstr "לוגואים של ערוצים מ XMLTV" +msgstr "סמלי ערוצים מ־XMLTV" msgctxt "#30042" msgid "Ignore" @@ -98,8 +98,8 @@ msgstr "התעלם" msgctxt "#30043" msgid "Prefer M3U" -msgstr "העדפת M3U" +msgstr "העדף M3U" msgctxt "#30044" msgid "Prefer XMLTV" -msgstr "העדפת XMLTV" +msgstr "העדף XMLTV" diff --git a/pvr.iptvsimple/resources/language/resource.language.hr_hr/strings.po b/pvr.iptvsimple/resources/language/resource.language.hr_hr/strings.po index 3963ff651..e980c3fcb 100644 --- a/pvr.iptvsimple/resources/language/resource.language.hr_hr/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.hr_hr/strings.po @@ -84,6 +84,22 @@ msgctxt "#30032" msgid "Channels Logos Base URL" msgstr "Osnovni URL logotipova programa" +msgctxt "#30040" +msgid "XMLTV Logos Options" +msgstr "Mogućnosti XMLTV logotipa" + +msgctxt "#30041" +msgid "Channels Logos from XMLTV" +msgstr "Logotipovi programa s XMLTV-a" + msgctxt "#30042" msgid "Ignore" msgstr "Zanemari" + +msgctxt "#30043" +msgid "Prefer M3U" +msgstr "Preferiraj M3U" + +msgctxt "#30044" +msgid "Prefer XMLTV" +msgstr "Preferiraj XMLTV" diff --git a/pvr.iptvsimple/resources/language/resource.language.id_id/strings.po b/pvr.iptvsimple/resources/language/resource.language.id_id/strings.po index 95e77dcfe..e08d83a20 100644 --- a/pvr.iptvsimple/resources/language/resource.language.id_id/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.id_id/strings.po @@ -84,6 +84,22 @@ msgctxt "#30032" msgid "Channels Logos Base URL" msgstr "Basis URL Logo Kanal" +msgctxt "#30040" +msgid "XMLTV Logos Options" +msgstr "Pilihan Logo XMLTV " + +msgctxt "#30041" +msgid "Channels Logos from XMLTV" +msgstr "Logo saluran dari XMLTV" + msgctxt "#30042" msgid "Ignore" msgstr "Abaikan" + +msgctxt "#30043" +msgid "Prefer M3U" +msgstr "Pilih M3U" + +msgctxt "#30044" +msgid "Prefer XMLTV" +msgstr "Memilih XMLTV " diff --git a/pvr.iptvsimple/resources/language/resource.language.is_is/strings.po b/pvr.iptvsimple/resources/language/resource.language.is_is/strings.po index 81ce881c2..4fd960cce 100644 --- a/pvr.iptvsimple/resources/language/resource.language.is_is/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.is_is/strings.po @@ -84,6 +84,22 @@ msgctxt "#30032" msgid "Channels Logos Base URL" msgstr "Netfang fyrir Merki Rása" +msgctxt "#30040" +msgid "XMLTV Logos Options" +msgstr "Valkostir XMLTV táknmynda" + +msgctxt "#30041" +msgid "Channels Logos from XMLTV" +msgstr "Rása-táknmyndir frá XMLTV" + msgctxt "#30042" msgid "Ignore" msgstr "Hundsa" + +msgctxt "#30043" +msgid "Prefer M3U" +msgstr "Kjósa M3U" + +msgctxt "#30044" +msgid "Prefer XMLTV" +msgstr "Kjósa XMLTV" diff --git a/pvr.iptvsimple/resources/language/resource.language.ko_kr/strings.po b/pvr.iptvsimple/resources/language/resource.language.ko_kr/strings.po index 52f2161e9..19e146076 100644 --- a/pvr.iptvsimple/resources/language/resource.language.ko_kr/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.ko_kr/strings.po @@ -87,3 +87,7 @@ msgstr "채널 로고 기본 URL" msgctxt "#30042" msgid "Ignore" msgstr "무시" + +msgctxt "#30044" +msgid "Prefer XMLTV" +msgstr "XMLTV 우선" diff --git a/pvr.iptvsimple/resources/language/resource.language.ms_my/strings.po b/pvr.iptvsimple/resources/language/resource.language.ms_my/strings.po index 78a7588ee..fd194deaf 100644 --- a/pvr.iptvsimple/resources/language/resource.language.ms_my/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.ms_my/strings.po @@ -18,7 +18,7 @@ msgstr "" msgctxt "#30000" msgid "Location" -msgstr "Kedudukan" +msgstr "Lokasi" msgctxt "#30001" msgid "Local Path (include Local Network)" @@ -58,7 +58,7 @@ msgstr "URL XMLTV" msgctxt "#30023" msgid "Apply Time Shift To All Channels" -msgstr "Laksana Anjak Masa Kepada Semua Saluran" +msgstr "Laksana Anjak Masa Ke Semua Saluran" msgctxt "#30024" msgid "EPG Time Shift (hours)" diff --git a/pvr.iptvsimple/resources/language/resource.language.mt_mt/strings.po b/pvr.iptvsimple/resources/language/resource.language.mt_mt/strings.po index 5ac24d292..51e9e35b2 100644 --- a/pvr.iptvsimple/resources/language/resource.language.mt_mt/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.mt_mt/strings.po @@ -16,6 +16,90 @@ msgstr "" "Language: mt_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 "#30000" +msgid "Location" +msgstr "Post" + +msgctxt "#30001" +msgid "Local Path (include Local Network)" +msgstr "Path Lokali (Inkludi n-Network Lokali)" + +msgctxt "#30002" +msgid "Remote Path (Internet address)" +msgstr "Path Remot (Indirizz fuq l-Internet)" + msgctxt "#30010" msgid "General" msgstr "Ġenerali" + +msgctxt "#30011" +msgid "M3U Play List Path" +msgstr "Path tal-playlist M3U" + +msgctxt "#30012" +msgid "M3U Play List URL" +msgstr "URL tal-playlist M3U" + +msgctxt "#30013" +msgid "Numbering channels starts at" +msgstr "In-Numerazzjoni tal-istazzjonijiet tibda minn" + +msgctxt "#30020" +msgid "EPG Settings" +msgstr "Settings tal-EPG" + +msgctxt "#30021" +msgid "XMLTV Path" +msgstr "Path tat-TV XML" + +msgctxt "#30022" +msgid "XMLTV URL" +msgstr "URL tat-TV XML" + +msgctxt "#30023" +msgid "Apply Time Shift To All Channels" +msgstr "Applika Ċaqliqa fil-Ħin għall-iStazzjonijiet Kollha" + +msgctxt "#30024" +msgid "EPG Time Shift (hours)" +msgstr "Ċaqliqa fil-ħin għall-EPG (siegħat)" + +msgctxt "#30025" +msgid "Cache m3u at local storage" +msgstr "Żomm cache ta' m3u lokalment" + +msgctxt "#30026" +msgid "Cache XMLTV at local storage" +msgstr "Żomm cache ta' XMLTV lokalment" + +msgctxt "#30030" +msgid "Channels Logos" +msgstr "Armi tal-istazzjonijiet" + +msgctxt "#30031" +msgid "Channels Logos Folder" +msgstr "Fowlder bl-armi tal-istazzjonijiet" + +msgctxt "#30032" +msgid "Channels Logos Base URL" +msgstr "URL Bażi tal-Armi tal-iStazzjonijiet" + +msgctxt "#30040" +msgid "XMLTV Logos Options" +msgstr "Għażliet tal-Armi tal-iStazzjonijiet" + +msgctxt "#30041" +msgid "Channels Logos from XMLTV" +msgstr "Armi tal-iStazzjonijiet minn XMLTV" + +msgctxt "#30042" +msgid "Ignore" +msgstr "Injora" + +msgctxt "#30043" +msgid "Prefer M3U" +msgstr "Ippreferi M3U" + +msgctxt "#30044" +msgid "Prefer XMLTV" +msgstr "Ippreferi XMLTV" diff --git a/pvr.iptvsimple/resources/language/resource.language.nb_no/strings.po b/pvr.iptvsimple/resources/language/resource.language.nb_no/strings.po index 4b4ce67e8..2a16702ea 100644 --- a/pvr.iptvsimple/resources/language/resource.language.nb_no/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.nb_no/strings.po @@ -22,11 +22,11 @@ msgstr "Plassering" msgctxt "#30001" msgid "Local Path (include Local Network)" -msgstr "Lokal bane (inkluder lokalt nettverk)" +msgstr "Lokal sti (inkluder lokalt nettverk)" msgctxt "#30002" msgid "Remote Path (Internet address)" -msgstr "Ekstern bane (internett adresse)" +msgstr "Ekstern sti (internett adresse)" msgctxt "#30010" msgid "General" @@ -34,7 +34,7 @@ msgstr "Generelt" msgctxt "#30011" msgid "M3U Play List Path" -msgstr "M3U spillelistebane" +msgstr "M3U spillelistesti" msgctxt "#30012" msgid "M3U Play List URL" @@ -50,7 +50,7 @@ msgstr "Innstillinger for programguide" msgctxt "#30021" msgid "XMLTV Path" -msgstr "XMLTV bane" +msgstr "XMLTV sti" msgctxt "#30022" msgid "XMLTV URL" @@ -84,6 +84,22 @@ msgctxt "#30032" msgid "Channels Logos Base URL" msgstr "Plassering for kanallogoer" +msgctxt "#30040" +msgid "XMLTV Logos Options" +msgstr "XMLTV Logo alternativer" + +msgctxt "#30041" +msgid "Channels Logos from XMLTV" +msgstr "Kanallogoer fra XMLTV" + msgctxt "#30042" msgid "Ignore" msgstr "Ignorer" + +msgctxt "#30043" +msgid "Prefer M3U" +msgstr "Foretrekk M3U" + +msgctxt "#30044" +msgid "Prefer XMLTV" +msgstr "Foretrekk XMLTV" diff --git a/pvr.iptvsimple/resources/language/resource.language.pl_pl/strings.po b/pvr.iptvsimple/resources/language/resource.language.pl_pl/strings.po index c20205ed0..4f4e7abf5 100644 --- a/pvr.iptvsimple/resources/language/resource.language.pl_pl/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.pl_pl/strings.po @@ -74,15 +74,15 @@ msgstr "Buforuj lokalnie dane XMLTV " msgctxt "#30030" msgid "Channels Logos" -msgstr "Logo kanałów " +msgstr "Loga kanałów " msgctxt "#30031" msgid "Channels Logos Folder" -msgstr "Folder logo kanałów " +msgstr "Folder z logami kanałów " msgctxt "#30032" msgid "Channels Logos Base URL" -msgstr "Bazowy adres URL logo kanałów " +msgstr "Bazowy adres URL z logami kanałów " msgctxt "#30040" msgid "XMLTV Logos Options" diff --git a/pvr.iptvsimple/resources/language/resource.language.pt_pt/strings.po b/pvr.iptvsimple/resources/language/resource.language.pt_pt/strings.po index ac9402e4c..a75ed4cdb 100644 --- a/pvr.iptvsimple/resources/language/resource.language.pt_pt/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.pt_pt/strings.po @@ -84,10 +84,22 @@ msgctxt "#30032" msgid "Channels Logos Base URL" msgstr "Endereço dos Logotipos de Canais" +msgctxt "#30040" +msgid "XMLTV Logos Options" +msgstr "Opções de logótipos do XMLTV " + +msgctxt "#30041" +msgid "Channels Logos from XMLTV" +msgstr "Logótipos dos canais do XMLTV" + msgctxt "#30042" msgid "Ignore" msgstr "Ignorar" +msgctxt "#30043" +msgid "Prefer M3U" +msgstr "Dar preferência ao M3U" + msgctxt "#30044" msgid "Prefer XMLTV" msgstr "Preferir XMLTV" diff --git a/pvr.iptvsimple/resources/language/resource.language.ro_ro/strings.po b/pvr.iptvsimple/resources/language/resource.language.ro_ro/strings.po index d99d681cc..a8b8d11dc 100644 --- a/pvr.iptvsimple/resources/language/resource.language.ro_ro/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.ro_ro/strings.po @@ -56,6 +56,22 @@ msgctxt "#30022" msgid "XMLTV URL" msgstr "URL XMLTV" +msgctxt "#30023" +msgid "Apply Time Shift To All Channels" +msgstr "Aplică decalaj temporal la toate canalele" + +msgctxt "#30024" +msgid "EPG Time Shift (hours)" +msgstr "Decalaj temporal pentru ghidul tv (ore)" + +msgctxt "#30025" +msgid "Cache m3u at local storage" +msgstr "Preîncarcă m3u în stocarea locală" + +msgctxt "#30026" +msgid "Cache XMLTV at local storage" +msgstr "Preîncarcă XMLTV în stocarea locală" + msgctxt "#30030" msgid "Channels Logos" msgstr "Embleme canale" @@ -68,6 +84,14 @@ msgctxt "#30032" msgid "Channels Logos Base URL" msgstr " URL de bază pentru sigle canale" +msgctxt "#30040" +msgid "XMLTV Logos Options" +msgstr "Opțiuni sigle XMLTV" + +msgctxt "#30041" +msgid "Channels Logos from XMLTV" +msgstr "Sigle canale din XMLTV" + msgctxt "#30042" msgid "Ignore" msgstr "Ignoră" diff --git a/pvr.iptvsimple/resources/language/resource.language.sk_sk/strings.po b/pvr.iptvsimple/resources/language/resource.language.sk_sk/strings.po index 511778fac..4617a0cbe 100644 --- a/pvr.iptvsimple/resources/language/resource.language.sk_sk/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.sk_sk/strings.po @@ -84,6 +84,22 @@ msgctxt "#30032" msgid "Channels Logos Base URL" msgstr "Základná URL adresa log staníc" +msgctxt "#30040" +msgid "XMLTV Logos Options" +msgstr "Možnosti pre logá XMLTV" + +msgctxt "#30041" +msgid "Channels Logos from XMLTV" +msgstr "Logá kanálov z XMLTV" + msgctxt "#30042" msgid "Ignore" msgstr "Ignorovať" + +msgctxt "#30043" +msgid "Prefer M3U" +msgstr "Uprednostniť M3U" + +msgctxt "#30044" +msgid "Prefer XMLTV" +msgstr "Prednostný XMLTV" diff --git a/pvr.iptvsimple/resources/language/resource.language.sr_rs/strings.po b/pvr.iptvsimple/resources/language/resource.language.sr_rs/strings.po index 573fcbaf5..5e3223bbd 100644 --- a/pvr.iptvsimple/resources/language/resource.language.sr_rs/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.sr_rs/strings.po @@ -20,6 +20,86 @@ msgctxt "#30000" msgid "Location" msgstr "Локација" +msgctxt "#30001" +msgid "Local Path (include Local Network)" +msgstr "Локална Путања (укључи Локалну Мрежу)" + +msgctxt "#30002" +msgid "Remote Path (Internet address)" +msgstr "Удаљена путања (Интернет адреса)" + msgctxt "#30010" msgid "General" msgstr "Опште" + +msgctxt "#30011" +msgid "M3U Play List Path" +msgstr "Путања M3U Листе за Репродукцију" + +msgctxt "#30012" +msgid "M3U Play List URL" +msgstr "URL M3U Листе за Репродукцију" + +msgctxt "#30013" +msgid "Numbering channels starts at" +msgstr "Нумерисање канала почиње од" + +msgctxt "#30020" +msgid "EPG Settings" +msgstr "EPG подешавања" + +msgctxt "#30021" +msgid "XMLTV Path" +msgstr "XMLTV Путања" + +msgctxt "#30022" +msgid "XMLTV URL" +msgstr "XMLTV URL" + +msgctxt "#30023" +msgid "Apply Time Shift To All Channels" +msgstr "Примени Временски Померај На Све Канале" + +msgctxt "#30024" +msgid "EPG Time Shift (hours)" +msgstr "EPG Временски Померај (сати)" + +msgctxt "#30025" +msgid "Cache m3u at local storage" +msgstr "Кеширај m3u на локално складиште" + +msgctxt "#30026" +msgid "Cache XMLTV at local storage" +msgstr "Кеширај XMLTV на локално складиште" + +msgctxt "#30030" +msgid "Channels Logos" +msgstr "Логои Канала" + +msgctxt "#30031" +msgid "Channels Logos Folder" +msgstr "Фасцикла Логоа Канала" + +msgctxt "#30032" +msgid "Channels Logos Base URL" +msgstr "Основни URL Логоа Канала" + +msgctxt "#30040" +msgid "XMLTV Logos Options" +msgstr "XMLTV Опције Логоа" + +msgctxt "#30041" +msgid "Channels Logos from XMLTV" +msgstr "Логои Канала од XMLTV" + +msgctxt "#30042" +msgid "Ignore" +msgstr "Игнорисати" + +msgctxt "#30043" +msgid "Prefer M3U" +msgstr "Дати предност M3U" + +msgctxt "#30044" +msgid "Prefer XMLTV" +msgstr "Дати предност XMLTV" diff --git a/pvr.iptvsimple/resources/language/resource.language.sr_rs@latin/strings.po b/pvr.iptvsimple/resources/language/resource.language.sr_rs@latin/strings.po index 830c3113f..f37872966 100644 --- a/pvr.iptvsimple/resources/language/resource.language.sr_rs@latin/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.sr_rs@latin/strings.po @@ -20,6 +20,86 @@ msgctxt "#30000" msgid "Location" msgstr "Lokacija" +msgctxt "#30001" +msgid "Local Path (include Local Network)" +msgstr "Lokalna Putanja (uključi Lokalnu Mrežu)" + +msgctxt "#30002" +msgid "Remote Path (Internet address)" +msgstr "Udaljena putanja (Internet adresa)" + msgctxt "#30010" msgid "General" msgstr "Opšte" + +msgctxt "#30011" +msgid "M3U Play List Path" +msgstr "Putanja M3U Liste za Reprodukciju" + +msgctxt "#30012" +msgid "M3U Play List URL" +msgstr "URL M3U Liste za Reprodukciju" + +msgctxt "#30013" +msgid "Numbering channels starts at" +msgstr "Numerisanje kanala počinje od" + +msgctxt "#30020" +msgid "EPG Settings" +msgstr "EPG podešavanja" + +msgctxt "#30021" +msgid "XMLTV Path" +msgstr "XMLTV Putanja" + +msgctxt "#30022" +msgid "XMLTV URL" +msgstr "XMLTV URL" + +msgctxt "#30023" +msgid "Apply Time Shift To All Channels" +msgstr "Primeni Vremenski Pomeraj Na Sve Kanale" + +msgctxt "#30024" +msgid "EPG Time Shift (hours)" +msgstr "EPG Vremenski Pomeraj (sati)" + +msgctxt "#30025" +msgid "Cache m3u at local storage" +msgstr "Keširaj m3u na lokalno skladište" + +msgctxt "#30026" +msgid "Cache XMLTV at local storage" +msgstr "Keširaj XMLTV na lokalno skladište" + +msgctxt "#30030" +msgid "Channels Logos" +msgstr "Logoi Kanala" + +msgctxt "#30031" +msgid "Channels Logos Folder" +msgstr "Fascikla Logoa Kanala" + +msgctxt "#30032" +msgid "Channels Logos Base URL" +msgstr "Osnovni URL Logoa Kanala" + +msgctxt "#30040" +msgid "XMLTV Logos Options" +msgstr "XMLTV Opcije Logoa" + +msgctxt "#30041" +msgid "Channels Logos from XMLTV" +msgstr "Logoi Kanala od XMLTV" + +msgctxt "#30042" +msgid "Ignore" +msgstr "Ignorisati" + +msgctxt "#30043" +msgid "Prefer M3U" +msgstr "Dati prednost M3U" + +msgctxt "#30044" +msgid "Prefer XMLTV" +msgstr "Dati prednost XMLTV" diff --git a/pvr.iptvsimple/resources/language/resource.language.vi_vn/strings.po b/pvr.iptvsimple/resources/language/resource.language.vi_vn/strings.po index 88e23c398..a18fd4070 100644 --- a/pvr.iptvsimple/resources/language/resource.language.vi_vn/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.vi_vn/strings.po @@ -28,6 +28,10 @@ msgctxt "#30012" msgid "M3U Play List URL" msgstr "Danh sách đường dẫn M3U" +msgctxt "#30013" +msgid "Numbering channels starts at" +msgstr "Bắt đầu tại kênh" + msgctxt "#30020" msgid "EPG Settings" msgstr "Tùy chọn Thông tin kênh" @@ -36,6 +40,18 @@ msgctxt "#30030" msgid "Channels Logos" msgstr "Biểu tượng kênh" +msgctxt "#30031" +msgid "Channels Logos Folder" +msgstr "Thư mục biểu tượng kênh" + +msgctxt "#30040" +msgid "XMLTV Logos Options" +msgstr "Cài đặt biểu tượng XMLTV" + +msgctxt "#30041" +msgid "Channels Logos from XMLTV" +msgstr "Biểu tượng kênh từ XMLTV" + msgctxt "#30042" msgid "Ignore" msgstr "Bỏ qua" From 85a31ca583b705ca48a91a0ab103fa0789f5fdac Mon Sep 17 00:00:00 2001 From: txtranslation Date: Sun, 3 Jan 2016 20:27:50 +0000 Subject: [PATCH 004/100] [lang] updated language files from Transifex --- pvr.iptvsimple/addon.xml.in | 6 +++--- pvr.iptvsimple/changelog.txt | 3 +++ .../resources/language/resource.language.el_gr/strings.po | 2 +- .../resources/language/resource.language.ro_ro/strings.po | 2 +- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index 99d68a4ab..27409272e 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,7 +1,7 @@ @@ -31,7 +31,7 @@ Complemento PVR do Kodi de soporte á IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home לקוח טלוויזיה חיה עם תמיכה ב־IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Kodi PVR dodatak za IPTV podršku. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home - Kodi PVR kiegészítő IPTV támogatással. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home + Kodi PVR kiegészítő az IPTV támogatáshoz. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Pengaya PVR Kodi untuk dukungan IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Kodi upptökuviðbót fyrir stuðning við IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Addon PVR Kodi per il supporto IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home @@ -89,7 +89,7 @@ IPTV Simple PVR Client jiflaħ għal playlists m3u, streaming ta' TV Lajv għal sorsi multicast/unicast, smiegħ ta' stazzjonijiet tar-Radju u EPG. IPTV Simple PVR klient støtter m3u spillelister, strømming av Live TV, lytting til radiokanaler og programguider. IPTV simpele PVR cliënt ondersteunt m3u afspeellijsten, streaming van live TV voor multicast/unicast bronnen, luisteren naar radiozenders en EPG. - Klient telewizyjny dla telewizji internetowej obsługuje listy odtwarzania m3u, strumieniowanie kanałów radiowych i telewizyjnych ze źródeł punktowych i grupowych oraz funkcje przewodnika telewizyjnego. + Klient telewizji dla telewizji internetowej obsługuje listy odtwarzania m3u, strumieniowanie kanałów radiowych i telewizyjnych ze źródeł punktowych i grupowych oraz funkcje przewodnika telewizyjnego. O cliente de PVR IPTV Simple Client oferece suporte para listas m3u, transmissão de TV ao vivo de fontes multicast/unicast, transmissão de rádios e, ainda, suporte a guia de programação eletrônico - EPG. 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. PVR Client IPTV suporta liste m3u, redare TV în direct pentru surse de multicast/unicast, ascultare canale radio si EPG. diff --git a/pvr.iptvsimple/changelog.txt b/pvr.iptvsimple/changelog.txt index 9543d0e56..a6b0f6fc2 100644 --- a/pvr.iptvsimple/changelog.txt +++ b/pvr.iptvsimple/changelog.txt @@ -1,3 +1,6 @@ +v1.12.8 +- updated language files from Transifex + v1.12.7 - updated language files from Transifex diff --git a/pvr.iptvsimple/resources/language/resource.language.el_gr/strings.po b/pvr.iptvsimple/resources/language/resource.language.el_gr/strings.po index 2870859df..d726cc0b6 100644 --- a/pvr.iptvsimple/resources/language/resource.language.el_gr/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.el_gr/strings.po @@ -86,7 +86,7 @@ msgstr "Βασική URL Λογότυπων Καναλιών" msgctxt "#30040" msgid "XMLTV Logos Options" -msgstr "Επιλογές λογότυπων XMLTV" +msgstr "Επιλογές Λογότυπων XMLTV" msgctxt "#30041" msgid "Channels Logos from XMLTV" diff --git a/pvr.iptvsimple/resources/language/resource.language.ro_ro/strings.po b/pvr.iptvsimple/resources/language/resource.language.ro_ro/strings.po index a8b8d11dc..c047d12f6 100644 --- a/pvr.iptvsimple/resources/language/resource.language.ro_ro/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.ro_ro/strings.po @@ -46,7 +46,7 @@ msgstr "Numerotarea canalelor începe de la" msgctxt "#30020" msgid "EPG Settings" -msgstr "Setări EPG" +msgstr "Stabiliri EPG" msgctxt "#30021" msgid "XMLTV Path" From 567eeb3351a7fcefdd39f34fc4e916174c8b75a4 Mon Sep 17 00:00:00 2001 From: txtranslation Date: Sun, 10 Jan 2016 21:41:24 +0000 Subject: [PATCH 005/100] [lang] updated language files from Transifex --- pvr.iptvsimple/addon.xml.in | 10 ++++--- pvr.iptvsimple/changelog.txt | 3 ++ .../resource.language.af_za/strings.po | 20 +++++++++++++ .../resource.language.pt_pt/strings.po | 28 +++++++++---------- 4 files changed, 43 insertions(+), 18 deletions(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index 27409272e..270916fe7 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,7 +1,7 @@ @@ -12,6 +12,7 @@ point="xbmc.pvrclient" library_@PLATFORM@="@LIBRARY_FILENAME@"/> + Kodi PVR byvoegsel vir IPTV ondersteuning. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Kodi ПВР добавка за поддръжка на IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Complement PVR de Kodi per al suport d'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 @@ -46,7 +47,7 @@ Kodi PVR add-on voor IPTV ondersteuning. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Klient telewizyjny dla telewizji internetowej. Więcej informacji o dodatku: 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 - Addon PVR do Kodi para suporte IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home + Extra Kodi PVR para suporte a IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Supliment PVR Kodi 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 @@ -91,7 +92,7 @@ IPTV simpele PVR cliënt ondersteunt m3u afspeellijsten, streaming van live TV voor multicast/unicast bronnen, luisteren naar radiozenders en EPG. Klient telewizji dla telewizji internetowej obsługuje listy odtwarzania m3u, strumieniowanie kanałów radiowych i telewizyjnych ze źródeł punktowych i grupowych oraz funkcje przewodnika telewizyjnego. O cliente de PVR IPTV Simple Client oferece suporte para listas m3u, transmissão de TV ao vivo de fontes multicast/unicast, transmissão de rádios e, ainda, suporte a guia de programação eletrônico - EPG. - 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. + Cliente IPTV Simple PVR com suporte a listas de reprodução m3u, transmissão de TV em direto de fontes multidifusão/unidifusão, ouvir estações de rádio e EPG. PVR Client IPTV suporta liste m3u, redare TV în direct pentru surse de multicast/unicast, ascultare canale radio si EPG. Интерфейс для IPTV. Поддерживает просмотр потокового ТВ для юникаст/мультикаст источников, прослушивание радиоканалов и работу с электронным телегидом. Jednoduchý IPTV PVR klient podporuje mp3 zoznamy súborov, streamovanie živého televízneho vysielania ako multicast/unicast zdroje, počúvanie rozhlasových kanálov a EPG. @@ -101,6 +102,7 @@ IPTV Simple PVR Client stöder m3u-spellistor, strömmande Live-TV för multicast/unicast-källor, radiolyssning och EPG. IPTV Basit PVR İstemcisi m3u çalma listeleri, multicast/unicast kaynaklar için Canlı TV akışı, radyo kanallarını dinleme ve EPG destekler. IPTV 简单 PVR 前端支持 m3u 播放列表、多播/单播源直播电视、收听电台和电子节目单。 + Hierdie is onstabiele sagteware! Die outeurs is op geen manier verantwoordelik vir gefaalde spele, inkorrekte EPG tye, vermorsde ure, of enige ander ongewensde effekte. Тази програма е нестабилна! Авторите не носят отговорност за неуспешно възпроизвеждане, некоректни часове в електронния програмен справочник, пропиляното време и други нежелани ефекти. Aquest programari és inestable! Els autors no es fan responsables de reproduccions fallides, horaris incorrectes a l'EPG, hores perdudes o qualsevol altre efecte no desitjat. Tento software není stabilní. Autoři nejsou žádným způsobem zodpovědní za selhání při nahrávání, neplatné časovače, ztracený čas, či jakékoliv jiné nežádoucí události... @@ -135,7 +137,7 @@ Deze software is niet 100% stabiel! De auteurs zijn op geen enkele wijze aansprakelijk voor mislukte opnames, incorrecte EPG tijden, verspilde uren, of enig ander ongewild neveneffect.. Oprogramowanie nadal jest w fazie rozwoju i jest niestabilne! Autorzy w żaden sposób nie są odpowiedzialni za nieudane nagrania, błędy w harmonogramie nagrań, zmarnowany czas ani jakiekolwiek inne niepożądane efekty. Este é um software instável! Os autores não são responsáveis por falhas nas reproduções, horários incorretos no EPG, horas perdidas ou quaisquer outros efeitos indesejáveis. - Este software é instável! Os autores não se responsabilizam por falhas nas reproduções, horários do EPG incorrectos, ou outro qualquer efeito não desejado. + Este software é instável! Os autores não podem ser responsabilizados por gravações falhadas, temporizadores incorretos, horas desperdiçadas ou qualquer outro tipo de efeitos indesejáveis... Acest software este instabil! Autorii nu sunt responsabili în nici un fel pentru înregistrări eșuate, cronometrări EPG incorecte, ore pierdute sau orice alte efecte nedorite. Это нестабильная программа! Авторы не несут ответственности за неудачные воспроизведение, неверные время EPG, потраченное время и прочие нежелательные эффекты. Toto je nestabilný softvér! Autori nie sú v žiadnom prípade zodpovední za chybné prehrávanie, nesprávne časy EPG, premrhané hodiny alebo akékoľvek iné nežiadúce účinky. diff --git a/pvr.iptvsimple/changelog.txt b/pvr.iptvsimple/changelog.txt index a6b0f6fc2..2f1ae5513 100644 --- a/pvr.iptvsimple/changelog.txt +++ b/pvr.iptvsimple/changelog.txt @@ -1,3 +1,6 @@ +v1.12.9 +- updated language files from Transifex + v1.12.8 - updated language files from Transifex diff --git a/pvr.iptvsimple/resources/language/resource.language.af_za/strings.po b/pvr.iptvsimple/resources/language/resource.language.af_za/strings.po index c539ab890..c5491a679 100644 --- a/pvr.iptvsimple/resources/language/resource.language.af_za/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.af_za/strings.po @@ -20,10 +20,30 @@ msgctxt "#30000" msgid "Location" msgstr "Ligging" +msgctxt "#30002" +msgid "Remote Path (Internet address)" +msgstr "Afgeleë pad (Internet adres)" + msgctxt "#30010" msgid "General" msgstr "Algemeen" +msgctxt "#30020" +msgid "EPG Settings" +msgstr "EPG verstellings" + +msgctxt "#30021" +msgid "XMLTV Path" +msgstr "XMLTV pad" + +msgctxt "#30022" +msgid "XMLTV URL" +msgstr "XMLTV URL" + +msgctxt "#30024" +msgid "EPG Time Shift (hours)" +msgstr "EPG tyd skuif (ure)" + msgctxt "#30042" msgid "Ignore" msgstr "Ignoreer" diff --git a/pvr.iptvsimple/resources/language/resource.language.pt_pt/strings.po b/pvr.iptvsimple/resources/language/resource.language.pt_pt/strings.po index a75ed4cdb..e4a4f79d8 100644 --- a/pvr.iptvsimple/resources/language/resource.language.pt_pt/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.pt_pt/strings.po @@ -22,11 +22,11 @@ msgstr "Localização" msgctxt "#30001" msgid "Local Path (include Local Network)" -msgstr "Localização no Sistema (incluir Rede Local)" +msgstr "Caminho local (incluir rede local)" msgctxt "#30002" msgid "Remote Path (Internet address)" -msgstr "Localização Remota (endereço da internet)" +msgstr "Caminho remoto (endereço web)" msgctxt "#30010" msgid "General" @@ -34,11 +34,11 @@ msgstr "Geral" msgctxt "#30011" msgid "M3U Play List Path" -msgstr "Localização da Lista Reprodução M3U" +msgstr "Caminho da lista de reprodução M3U" msgctxt "#30012" msgid "M3U Play List URL" -msgstr "Endereço da Lista Reprodução M3U" +msgstr "URL da lista de reprodução M3U" msgctxt "#30013" msgid "Numbering channels starts at" @@ -50,39 +50,39 @@ msgstr "Definições EPG" msgctxt "#30021" msgid "XMLTV Path" -msgstr "Localização XMLTV" +msgstr "Caminho XMLTV" msgctxt "#30022" msgid "XMLTV URL" -msgstr "Endereço XMLTV" +msgstr "URL XMLTV" msgctxt "#30023" msgid "Apply Time Shift To All Channels" -msgstr "Aplicar Deslocamento no Tempo a Todos os Canais" +msgstr "Aplicar deslocação de tempo para todos os canais" msgctxt "#30024" msgid "EPG Time Shift (hours)" -msgstr "Deslocamento no Tempo do EPG (horas)" +msgstr "Deslocação de tempo do EPG (horas)" msgctxt "#30025" msgid "Cache m3u at local storage" -msgstr "Cache de m3u em armazenamento local" +msgstr "Cache m3u no armazenamento local" msgctxt "#30026" msgid "Cache XMLTV at local storage" -msgstr "Cache de XMLTV em armazenamento local" +msgstr "Cache XMLTV no armazenamento local" msgctxt "#30030" msgid "Channels Logos" -msgstr "Logotipos de Canais" +msgstr "Logotipos dos canais" msgctxt "#30031" msgid "Channels Logos Folder" -msgstr "Localização dos Logotipos de Canais" +msgstr "Pasta de logótipos dos canais" msgctxt "#30032" msgid "Channels Logos Base URL" -msgstr "Endereço dos Logotipos de Canais" +msgstr "URL base dos logótipos de canais" msgctxt "#30040" msgid "XMLTV Logos Options" @@ -98,7 +98,7 @@ msgstr "Ignorar" msgctxt "#30043" msgid "Prefer M3U" -msgstr "Dar preferência ao M3U" +msgstr "Preferir M3U" msgctxt "#30044" msgid "Prefer XMLTV" From 878cf5d99f5dcc68525411db1c58c196dd65674a Mon Sep 17 00:00:00 2001 From: Kai Sommerfeld Date: Sun, 17 Jan 2016 17:45:50 +0100 Subject: [PATCH 006/100] Initial Kodi Krypton version. --- pvr.iptvsimple/addon.xml.in | 2 +- pvr.iptvsimple/changelog.txt | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index 270916fe7..cccf45806 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,7 +1,7 @@ diff --git a/pvr.iptvsimple/changelog.txt b/pvr.iptvsimple/changelog.txt index 2f1ae5513..60ac90914 100644 --- a/pvr.iptvsimple/changelog.txt +++ b/pvr.iptvsimple/changelog.txt @@ -1,3 +1,6 @@ +v2.0.0 +- Initial Kodi Krypton version. + v1.12.9 - updated language files from Transifex From 2dbfe7ffb1dbcf37662fa7044f03e6b668f4c75b Mon Sep 17 00:00:00 2001 From: Stefan Saraev Date: Tue, 19 Jan 2016 23:18:33 +0200 Subject: [PATCH 007/100] update for pvr api 4.2.0 --- pvr.iptvsimple/addon.xml.in | 2 +- pvr.iptvsimple/changelog.txt | 3 +++ src/client.cpp | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index cccf45806..3c26301c6 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -6,7 +6,7 @@ provider-name="nightik"> - + Date: Wed, 6 Jan 2016 15:08:48 +0000 Subject: [PATCH 008/100] [src] Update to p8-platform --- src/PVRIptvData.cpp | 2 +- src/PVRIptvData.h | 6 +++--- src/client.cpp | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/PVRIptvData.cpp b/src/PVRIptvData.cpp index 7fb1b517a..662aad3cd 100644 --- a/src/PVRIptvData.cpp +++ b/src/PVRIptvData.cpp @@ -30,7 +30,7 @@ #include "zlib.h" #include "rapidxml/rapidxml.hpp" #include "PVRIptvData.h" -#include "platform/util/StringUtils.h" +#include "p8-platform/util/StringUtils.h" #define M3U_START_MARKER "#EXTM3U" #define M3U_INFO_MARKER "#EXTINF" diff --git a/src/PVRIptvData.h b/src/PVRIptvData.h index 21492973d..b14765048 100644 --- a/src/PVRIptvData.h +++ b/src/PVRIptvData.h @@ -24,9 +24,9 @@ */ #include -#include "platform/util/StdString.h" +#include "p8-platform/util/StdString.h" #include "client.h" -#include "platform/threads/threads.h" +#include "p8-platform/threads/threads.h" struct PVRIptvEpgEntry { @@ -81,7 +81,7 @@ struct PVRIptvEpgGenre std::string strGenre; }; -class PVRIptvData : public PLATFORM::CThread +class PVRIptvData : public P8PLATFORM::CThread { public: PVRIptvData(void); diff --git a/src/client.cpp b/src/client.cpp index 84c2aa1e2..6dea75811 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -26,7 +26,7 @@ #include "kodi/xbmc_pvr_dll.h" #include "kodi/libKODI_guilib.h" #include "PVRIptvData.h" -#include "platform/util/util.h" +#include "p8-platform/util/util.h" using namespace ADDON; From 3f834bcc4804d6f2eade30ffe2d1d0b704f83352 Mon Sep 17 00:00:00 2001 From: "h.udo" Date: Wed, 6 Jan 2016 15:21:33 +0000 Subject: [PATCH 009/100] [cmake] Update to p8-platform --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 43103dbdb..cb77e20cd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,11 +6,11 @@ enable_language(CXX) find_package(kodi REQUIRED) find_package(kodiplatform REQUIRED) -find_package(platform REQUIRED) +find_package(p8-platform REQUIRED) find_package(ZLIB REQUIRED) include_directories(${kodiplatform_INCLUDE_DIRS} - ${platform_INCLUDE_DIRS} + ${p8-platform_INCLUDE_DIRS} ${KODI_INCLUDE_DIR} ${ZLIB_INCLUDE_DIRS} ${PROJECT_SOURCE_DIR}/lib) From 5aa51c68d97ae27a1bfa8d26893f5e2153b8e94a Mon Sep 17 00:00:00 2001 From: Stefan Saraev Date: Fri, 22 Jan 2016 14:54:34 +0200 Subject: [PATCH 010/100] bump to 2.0.1 --- pvr.iptvsimple/addon.xml.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index 3c26301c6..9524fac44 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,7 +1,7 @@ From 6ccfebd93d24ba4999d78129c7b9aee63f02db11 Mon Sep 17 00:00:00 2001 From: "h.udo" Date: Sat, 23 Jan 2016 18:00:00 +0000 Subject: [PATCH 011/100] Fix build after rename of p8-platform --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index cb77e20cd..9c9af4414 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,7 +15,7 @@ include_directories(${kodiplatform_INCLUDE_DIRS} ${ZLIB_INCLUDE_DIRS} ${PROJECT_SOURCE_DIR}/lib) -set(DEPLIBS ${platform_LIBRARIES} +set(DEPLIBS ${p8-platform_LIBRARIES} ${ZLIB_LIBRARIES}) message(STATUS "ZLIB_LIBRARIES: ${ZLIB_LIBRARIES}") From bd52b6243cffd567adcb09f9791b4337ae6079ed Mon Sep 17 00:00:00 2001 From: txtranslation Date: Sat, 23 Jan 2016 22:26:25 +0000 Subject: [PATCH 012/100] [lang] updated language files from Transifex --- pvr.iptvsimple/addon.xml.in | 5 +- pvr.iptvsimple/changelog.txt | 3 + .../resource.language.af_za/strings.po | 56 +++++++++++++++++++ 3 files changed, 62 insertions(+), 2 deletions(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index 9524fac44..ee764587e 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,7 +1,7 @@ @@ -58,6 +58,7 @@ IPTV desteği için Kodi PVR eklentisi. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home PVR надбудова Kodi для підтримки 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 + IPTV Simple PVR kliënt ondersteun M3U speellyste, stroom van lewendige TV vir multisaai / unisaai bronne, luister na radio kanale en EPG. IPTV обикновен ПВР клиент. Поддържа m3u плейлисти, поточна телевизия за мултикаст/уникаст източници, слушане на радио канали и електронен програмен справочник. Client senzill per a IPTV PVR amb support per a llistes de reproducció m3u, streaming de TV en viu multicast/unicast, reproducció de canals de ràdio i EPG. IPTV Simple PVR Client podporuje m3u playlisty, streemování TV pro multicast/unicast zdroje, poslouchání Radia a EPG. @@ -72,7 +73,7 @@ Cliente simple PVR IPTV. Reproduce de TV en Vivo multicast/unicast y listas m3u8 . reproduce tambien canales de radio y GEP El cliente PVR IPTV Simple soporta listas M3U, reproducción de TV en Vivo para origenes multicast/unicast, escucha de canales de radio y EPG IPTV Simple PVR Client tukee m3u soittolistoja, multicast/unicast LIVE TV toistoa, radiokanavia jaohjelmaopasta. - Client de numériscope simple pour IPTV, prenant en charge les listes de lecture m3u, la lecture en transit des télés en direct pour les sources de multidiffusion et de monodiffusion, l'écoute de chaînes radio, et le GÉP. + Client de numériscope simple pour IPTV, prenant en charge les listes de lecture m3u, la diffusion en continu des télés en direct pour les sources de multidiffusion et de monodiffusion, l'écoute de chaînes radio, et le GÉP. Le client enregistreur vidéo (PVR) IPTV Simple gère les listes de lecture M3U, la diffusion en continu de la TV en direct en mono ou multidiffusion, l'écoute des chaînes radio et le guide électronique des programmes TV. O cliente PVR simple de IPTV soporta listaxes m3u, transmisión de TV en directo para fontes multicast/unicast, escoita de canles de Radio e Guía. לקוח טלוויזיה חיה IPTV Simple תומך ברשימות m3u, הזרמת שידורים חיים ממקור מרובב/ סטרים בודד, האזנה לתחנות רדיו והצגת לוח שידורים. diff --git a/pvr.iptvsimple/changelog.txt b/pvr.iptvsimple/changelog.txt index 1a9e86eb3..4e4e6b0d1 100644 --- a/pvr.iptvsimple/changelog.txt +++ b/pvr.iptvsimple/changelog.txt @@ -1,3 +1,6 @@ +v2.0.2 +- updated language files from Transifex + v2.0.1 - Updated to PVR API v4.2.0 diff --git a/pvr.iptvsimple/resources/language/resource.language.af_za/strings.po b/pvr.iptvsimple/resources/language/resource.language.af_za/strings.po index c5491a679..59ceb5c68 100644 --- a/pvr.iptvsimple/resources/language/resource.language.af_za/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.af_za/strings.po @@ -20,6 +20,10 @@ msgctxt "#30000" msgid "Location" msgstr "Ligging" +msgctxt "#30001" +msgid "Local Path (include Local Network)" +msgstr "Lokale pad (sluit lokale netwerlk in)" + msgctxt "#30002" msgid "Remote Path (Internet address)" msgstr "Afgeleë pad (Internet adres)" @@ -28,6 +32,18 @@ msgctxt "#30010" msgid "General" msgstr "Algemeen" +msgctxt "#30011" +msgid "M3U Play List Path" +msgstr "M3U speellys pad" + +msgctxt "#30012" +msgid "M3U Play List URL" +msgstr "M3U speellys URL" + +msgctxt "#30013" +msgid "Numbering channels starts at" +msgstr "Nommer van kanale begin by" + msgctxt "#30020" msgid "EPG Settings" msgstr "EPG verstellings" @@ -40,10 +56,50 @@ msgctxt "#30022" msgid "XMLTV URL" msgstr "XMLTV URL" +msgctxt "#30023" +msgid "Apply Time Shift To All Channels" +msgstr "Pas tyd skuif toe op alle kanale" + msgctxt "#30024" msgid "EPG Time Shift (hours)" msgstr "EPG tyd skuif (ure)" +msgctxt "#30025" +msgid "Cache m3u at local storage" +msgstr "Kas M3U by lokale stoor" + +msgctxt "#30026" +msgid "Cache XMLTV at local storage" +msgstr "Kas XMLTV by lokale stoor" + +msgctxt "#30030" +msgid "Channels Logos" +msgstr "Kanale logos" + +msgctxt "#30031" +msgid "Channels Logos Folder" +msgstr "Kanale logos gids" + +msgctxt "#30032" +msgid "Channels Logos Base URL" +msgstr "Kanale logos basis URL" + +msgctxt "#30040" +msgid "XMLTV Logos Options" +msgstr "XMLTV logos opsies" + +msgctxt "#30041" +msgid "Channels Logos from XMLTV" +msgstr "Kanale logos vanaf XMLTV" + msgctxt "#30042" msgid "Ignore" msgstr "Ignoreer" + +msgctxt "#30043" +msgid "Prefer M3U" +msgstr "Verkies M3U" + +msgctxt "#30044" +msgid "Prefer XMLTV" +msgstr "Verkies XMLTV" From f0d9707faec1ce3c992bf0749f34a6596c3eb951 Mon Sep 17 00:00:00 2001 From: Martijn Kaijser Date: Fri, 29 Jan 2016 14:02:41 +0100 Subject: [PATCH 013/100] add Travis-CI file --- .travis.yml | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 000000000..db83066e3 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,43 @@ +language: cpp + +# +# Define the build matrix +# +# Travis defaults to building on Ubuntu Precise when building on +# Linux. We need Trusty in order to get up to date versions of +# cmake and g++. +# +matrix: + include: + - os: linux + dist: trusty + sudo: required + compiler: gcc + - os: linux + dist: trusty + sudo: required + compiler: clang + - os: osx + osx_image: xcode7.3 + - os: osx + osx_image: xcode6.1 + +# +# Some of the OS X images don't have cmake, contrary to what people +# on the Internet say +# +before_install: + - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then which cmake || brew update ; fi + - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then which cmake || brew install cmake ; fi + +# +# The addon source is automatically checked out in $TRAVIS_BUILD_DIR, +# we'll put the Kodi source on the same level +# +before_script: + - cd $TRAVIS_BUILD_DIR/.. + - git clone --depth=1 https://github.com/xbmc/xbmc.git + - cd pvr.iptvsimple && mkdir build && cd build + - cmake -DADDONS_TO_BUILD=pvr.iptvsimple -DADDON_SRC_PREFIX=../.. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=../../xbmc/addons -DPACKAGE_ZIP=1 ../../xbmc/project/cmake/addons + +script: make From 7cdc32628468bbf17f54eccf51b9e266ce21b2fb Mon Sep 17 00:00:00 2001 From: Martijn Kaijser Date: Fri, 29 Jan 2016 14:19:48 +0100 Subject: [PATCH 014/100] Update README.md --- README.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/README.md b/README.md index bce04bae2..85037a8ef 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,19 @@ +[![Build Status](https://travis-ci.org/kodi-pvr/pvr.iptvsimple.svg?branch=master)](https://travis-ci.org/kodi-pvr/pvr.iptvsimple) +[![Coverity Scan Build Status](https://scan.coverity.com/projects/5120/badge.svg)](https://scan.coverity.com/projects/5120) + # IPTV Simple PVR IPTV Live TV and Radio PVR client addon for [Kodi] (http://kodi.tv) +## Build instructions + +### Linux + +1. `git clone https://github.com/xbmc/xbmc.git` +2. `git clone https://github.com/kodi-pvr/pvr.iptvsimple.git` +3. `cd pvr.iptvsimple && mkdir build && cd build` +4. `cmake -DADDONS_TO_BUILD=pvr.iptvsimple -DADDON_SRC_PREFIX=../.. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=../../xbmc/addons -DPACKAGE_ZIP=1 ../../xbmc/project/cmake/addons` +5. `make` + ##### Useful links * [Kodi's PVR user support] (http://forum.kodi.tv/forumdisplay.php?fid=167) From fb324182b7c6b555a4d6b4211efa49ccf5f11203 Mon Sep 17 00:00:00 2001 From: "h.udo" Date: Thu, 28 Jan 2016 15:25:29 +0000 Subject: [PATCH 015/100] Add .gitignore file --- .gitignore | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..f8be080e6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,23 @@ +# build artifacts +build/ +debian/changelog +debian/files +debian/kodi-pvr-iptvsimple-dbg.debhelper.log +debian/kodi-pvr-iptvsimple-dbg.substvars +debian/kodi-pvr-iptvsimple-dbg/ +debian/kodi-pvr-iptvsimple.debhelper.log +debian/kodi-pvr-iptvsimple.postinst.debhelper +debian/kodi-pvr-iptvsimple.postrm.debhelper +debian/kodi-pvr-iptvsimple.substvars +debian/kodi-pvr-iptvsimple/ +debian/tmp/ +obj-x86_64-linux-gnu/ +pvr.iptvsimple/addon.xml + +# clion +.idea/ + +# Eclipse/CDT +.cproject +.project +.settings/ From 4255aa0853db3575c61168a3f5fe8881e9304419 Mon Sep 17 00:00:00 2001 From: "h.udo" Date: Thu, 28 Jan 2016 16:44:19 +0000 Subject: [PATCH 016/100] [debian] Delete changelog. We generate it on the fly using changelog.in when needed --- debian/changelog | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 debian/changelog diff --git a/debian/changelog b/debian/changelog deleted file mode 100644 index 1d9bfc01f..000000000 --- a/debian/changelog +++ /dev/null @@ -1,7 +0,0 @@ -kodi-pvr-iptvsimple (1.9.27-1~trusty) trusty; urgency=low - - [ kodi ] - * autogenerated dummy changelog - - -- Arne Morten Kvarving Sat, 01 Jun 2013 00:59:22 +0200 - From c2fd1370bc0a24b843881f786d6c86f9c7f67cf6 Mon Sep 17 00:00:00 2001 From: Kai Sommerfeld Date: Mon, 8 Feb 2016 15:20:22 +0100 Subject: [PATCH 017/100] [API 5.0.0] Version bump and changelog update --- pvr.iptvsimple/addon.xml.in | 4 ++-- pvr.iptvsimple/changelog.txt | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index ee764587e..222c98044 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,12 +1,12 @@ - + Date: Mon, 8 Feb 2016 16:22:32 +0100 Subject: [PATCH 018/100] [API 5.0.0] Remove GUI API dependency --- src/client.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/client.cpp b/src/client.cpp index 9925da1fc..855822c25 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -24,7 +24,6 @@ #include "client.h" #include "kodi/xbmc_pvr_dll.h" -#include "kodi/libKODI_guilib.h" #include "PVRIptvData.h" #include "p8-platform/util/util.h" @@ -293,12 +292,12 @@ const char* GetMininumPVRAPIVersion(void) const char* GetGUIAPIVersion(void) { - return KODI_GUILIB_API_VERSION; + return ""; // GUI API not used } const char* GetMininumGUIAPIVersion(void) { - return KODI_GUILIB_MIN_API_VERSION; + return ""; // GUI API not used } PVR_ERROR GetAddonCapabilities(PVR_ADDON_CAPABILITIES* pCapabilities) From 1a66ae4995bcde7e0560380c81cbd6c8345891df Mon Sep 17 00:00:00 2001 From: Kai Sommerfeld Date: Mon, 8 Feb 2016 16:28:22 +0100 Subject: [PATCH 019/100] [API 5.0.0] Remove GetCurrentClientChannel --- src/client.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/client.cpp b/src/client.cpp index 855822c25..65d0732d4 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -386,11 +386,6 @@ void CloseLiveStream(void) m_bIsPlaying = false; } -int GetCurrentClientChannel(void) -{ - return m_currentChannel.iUniqueId; -} - bool SwitchChannel(const PVR_CHANNEL &channel) { CloseLiveStream(); From 19d1d11a1d85081f63fe290e93a9ab143350ca94 Mon Sep 17 00:00:00 2001 From: Kai Sommerfeld Date: Tue, 9 Feb 2016 10:51:12 +0100 Subject: [PATCH 020/100] [API 5.0.0] Add SetEPGTimeFrame --- src/client.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/client.cpp b/src/client.cpp index 65d0732d4..aca8c00ac 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -480,4 +480,5 @@ 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; } +PVR_ERROR SetEPGTimeFrame(int) { return PVR_ERROR_NOT_IMPLEMENTED; } } From abeff923ed1ff2d4a800dbd65227de6a836781a9 Mon Sep 17 00:00:00 2001 From: Anton Fedchin Date: Thu, 18 Feb 2016 11:46:34 +0300 Subject: [PATCH 021/100] * Fix: Don't ignore channels logo if base logo path setting is empty. * Fix: Don't apply base logo path to channels logo if tvg-logo has a full NET path. --- src/PVRIptvData.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/PVRIptvData.cpp b/src/PVRIptvData.cpp index 662aad3cd..f3c747207 100644 --- a/src/PVRIptvData.cpp +++ b/src/PVRIptvData.cpp @@ -968,14 +968,18 @@ int PVRIptvData::GetCachedFileContents(const std::string &strCachedName, const s void PVRIptvData::ApplyChannelsLogos() { - if (m_strLogoPath.empty()) - return; - std::vector::iterator channel; for(channel = m_channels.begin(); channel < m_channels.end(); ++channel) { if (!channel->strTvgLogo.empty()) - channel->strLogoPath = PathCombine(m_strLogoPath, channel->strTvgLogo); + { + if (!m_strLogoPath.empty() + // special proto + && channel->strTvgLogo.find("://") == std::string::npos) + channel->strLogoPath = PathCombine(m_strLogoPath, channel->strTvgLogo); + else + channel->strLogoPath = channel->strTvgLogo; + } } } From 260c26eaf687b3b3912521cc90d55df90ecb75d6 Mon Sep 17 00:00:00 2001 From: Anton Fedchin Date: Thu, 18 Feb 2016 11:47:08 +0300 Subject: [PATCH 022/100] Bump to v2.1.1 --- pvr.iptvsimple/addon.xml.in | 2 +- pvr.iptvsimple/changelog.txt | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index 222c98044..4f3ea1a43 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,7 +1,7 @@ diff --git a/pvr.iptvsimple/changelog.txt b/pvr.iptvsimple/changelog.txt index 81da464a7..4c232f2d5 100644 --- a/pvr.iptvsimple/changelog.txt +++ b/pvr.iptvsimple/changelog.txt @@ -1,3 +1,7 @@ +v2.1.1 +- Fix: Don't ignore channels logo if base logo path setting is empty. +- Fix: Don't apply base logo path to channels logo if tvg-logo has a full NET path. + v2.1.0 - Updated to PVR addon API v5.0.0 From 87a43d93b639ef4ed5416445b6370910071caf18 Mon Sep 17 00:00:00 2001 From: Kai Sommerfeld Date: Tue, 8 Mar 2016 19:38:13 +0100 Subject: [PATCH 023/100] [API 5.1.0] PVR API and addon version bump. --- pvr.iptvsimple/addon.xml.in | 4 ++-- pvr.iptvsimple/changelog.txt | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index 4f3ea1a43..2d4321a0d 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,12 +1,12 @@ - + Date: Sun, 27 Mar 2016 16:13:59 +0200 Subject: [PATCH 024/100] PVR API 5.1.1 https://github.com/xbmc/xbmc/pull/9459 --- pvr.iptvsimple/addon.xml.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index 2d4321a0d..d24103ed6 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,12 +1,12 @@ - + Date: Thu, 31 Mar 2016 10:39:46 +0200 Subject: [PATCH 025/100] Update .travis.yml --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index db83066e3..1a95af741 100644 --- a/.travis.yml +++ b/.travis.yml @@ -38,6 +38,6 @@ before_script: - cd $TRAVIS_BUILD_DIR/.. - git clone --depth=1 https://github.com/xbmc/xbmc.git - cd pvr.iptvsimple && mkdir build && cd build - - cmake -DADDONS_TO_BUILD=pvr.iptvsimple -DADDON_SRC_PREFIX=../.. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=../../xbmc/addons -DPACKAGE_ZIP=1 ../../xbmc/project/cmake/addons + - cmake -DADDONS_TO_BUILD=pvr.iptvsimple -DADDON_SRC_PREFIX=$TRAVIS_BUILD_DIR/.. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=$TRAVIS_BUILD_DIR/../xbmc/addons -DPACKAGE_ZIP=1 $TRAVIS_BUILD_DIR/../xbmc/project/cmake/addons script: make From ae23489c9a49e83a479360fc711cd8faa1ee3a76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Luc=20Barri=C3=A8re?= Date: Thu, 21 Apr 2016 00:20:46 +0200 Subject: [PATCH 026/100] adapt to PVR API 5.2.0 --- pvr.iptvsimple/addon.xml.in | 4 ++-- pvr.iptvsimple/changelog.txt | 3 +++ src/client.cpp | 20 ++++++++++++++++---- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index d24103ed6..2259f4139 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,12 +1,12 @@ - + Date: Fri, 13 May 2016 11:41:59 +0100 Subject: [PATCH 027/100] Fix includes --- src/client.cpp | 2 +- src/client.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/client.cpp b/src/client.cpp index ecd44ddf4..f804e9056 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -23,7 +23,7 @@ */ #include "client.h" -#include "kodi/xbmc_pvr_dll.h" +#include "xbmc_pvr_dll.h" #include "PVRIptvData.h" #include "p8-platform/util/util.h" diff --git a/src/client.h b/src/client.h index 07e589914..972eab592 100644 --- a/src/client.h +++ b/src/client.h @@ -23,8 +23,8 @@ * */ -#include "kodi/libXBMC_addon.h" -#include "kodi/libXBMC_pvr.h" +#include "libXBMC_addon.h" +#include "libXBMC_pvr.h" #define M3U_FILE_NAME "iptv.m3u.cache" #define TVG_FILE_NAME "xmltv.xml.cache" From 613cf86109eb16a74d021818ea1f866948bba544 Mon Sep 17 00:00:00 2001 From: "h.udo" Date: Fri, 13 May 2016 12:03:59 +0100 Subject: [PATCH 028/100] Bump addon --- pvr.iptvsimple/addon.xml.in | 2 +- pvr.iptvsimple/changelog.txt | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index 2259f4139..17937c165 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,7 +1,7 @@ diff --git a/pvr.iptvsimple/changelog.txt b/pvr.iptvsimple/changelog.txt index 433ae918c..e273557e9 100644 --- a/pvr.iptvsimple/changelog.txt +++ b/pvr.iptvsimple/changelog.txt @@ -1,3 +1,6 @@ +v2.3.1 +- Fix includes + v2.3.0 - Updated to PVR addon API v5.2.0 From 619b834e36840141c555fd6ab2140bb01434caa1 Mon Sep 17 00:00:00 2001 From: "h.udo" Date: Mon, 16 May 2016 23:38:24 +0100 Subject: [PATCH 029/100] [cmake] Rename find_package(kodi) to Kodi --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9c9af4414..4d8f08043 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,7 +4,7 @@ cmake_minimum_required(VERSION 2.6) enable_language(CXX) -find_package(kodi REQUIRED) +find_package(Kodi REQUIRED) find_package(kodiplatform REQUIRED) find_package(p8-platform REQUIRED) find_package(ZLIB REQUIRED) From 6ea17c50765ad4ae0f661b5c5847deea3589200e Mon Sep 17 00:00:00 2001 From: "h.udo" Date: Wed, 18 May 2016 10:12:11 +0100 Subject: [PATCH 030/100] Bump add-on --- pvr.iptvsimple/addon.xml.in | 2 +- pvr.iptvsimple/changelog.txt | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index 17937c165..11a2c6bb6 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,7 +1,7 @@ diff --git a/pvr.iptvsimple/changelog.txt b/pvr.iptvsimple/changelog.txt index e273557e9..c25d5ae1e 100644 --- a/pvr.iptvsimple/changelog.txt +++ b/pvr.iptvsimple/changelog.txt @@ -1,3 +1,6 @@ +v2.4.0 +- Cmake: rename find_package kodi to Kodi + v2.3.1 - Fix includes From 9c85da9e3d5d2ebf4ed65ca576016d35a484e3ad Mon Sep 17 00:00:00 2001 From: dmw Date: Sun, 12 Jun 2016 10:54:06 +0100 Subject: [PATCH 031/100] Increase logging, parse M3U files lacking EXTM3U marker. Needed to handle reading directly M3U from some dodgy IPTV providers. --- pvr.iptvsimple/changelog.txt | 1 + src/PVRIptvData.cpp | 12 ++++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/pvr.iptvsimple/changelog.txt b/pvr.iptvsimple/changelog.txt index c25d5ae1e..ed14e4237 100644 --- a/pvr.iptvsimple/changelog.txt +++ b/pvr.iptvsimple/changelog.txt @@ -1,5 +1,6 @@ v2.4.0 - Cmake: rename find_package kodi to Kodi +- Attempt to parse playlists lacking EXTM3U marker v2.3.1 - Fix includes diff --git a/src/PVRIptvData.cpp b/src/PVRIptvData.cpp index f3c747207..ff9b8bc78 100644 --- a/src/PVRIptvData.cpp +++ b/src/PVRIptvData.cpp @@ -329,11 +329,12 @@ bool PVRIptvData::LoadPlayList(void) char szLine[1024]; while(stream.getline(szLine, 1024)) { - std::string strLine(szLine); strLine = StringUtils::TrimRight(strLine, " \t\r\n"); strLine = StringUtils::TrimLeft(strLine, " \t"); + XBMC->Log(LOG_DEBUG, "Read line: '%s'", strLine.c_str()); + if (strLine.empty()) { continue; @@ -354,7 +355,10 @@ bool PVRIptvData::LoadPlayList(void) } else { - break; + XBMC->Log(LOG_ERROR, + "URL '%s' missing %s descriptor on line 1, attempting to " + "parse it anyway.", + m_strM3uUrl.c_str(), M3U_START_MARKER); } } @@ -437,6 +441,10 @@ bool PVRIptvData::LoadPlayList(void) } else if (strLine[0] != '#') { + XBMC->Log(LOG_DEBUG, + "Found URL: '%s' (current channel name: '%s')", + strLine.c_str(), tmpChannel.strChannelName.c_str()); + PVRIptvChannel channel; channel.iUniqueId = GetChannelId(tmpChannel.strChannelName.c_str(), strLine.c_str()); channel.iChannelNumber = iChannelNum++; From 1ea1f36ea8d2c1265c1854805cf33fb0d65ced59 Mon Sep 17 00:00:00 2001 From: txtranslation Date: Sat, 18 Jun 2016 22:09:48 +0100 Subject: [PATCH 032/100] [lang] updated language files from Transifex --- pvr.iptvsimple/addon.xml.in | 4 ++-- pvr.iptvsimple/changelog.txt | 3 +++ .../resources/language/resource.language.bg_bg/strings.po | 8 ++++++++ .../resources/language/resource.language.es_mx/strings.po | 4 ++++ .../resources/language/resource.language.fi_fi/strings.po | 4 ++++ .../resources/language/resource.language.nb_no/strings.po | 2 +- 6 files changed, 22 insertions(+), 3 deletions(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index 11a2c6bb6..248930809 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,7 +1,7 @@ @@ -47,7 +47,7 @@ Kodi PVR add-on voor IPTV ondersteuning. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Klient telewizyjny dla telewizji internetowej. Więcej informacji o dodatku: 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 - Extra Kodi PVR para suporte a IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home + Add-on Kodi PVR para suporte a IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Supliment PVR Kodi 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 diff --git a/pvr.iptvsimple/changelog.txt b/pvr.iptvsimple/changelog.txt index c25d5ae1e..1d141f722 100644 --- a/pvr.iptvsimple/changelog.txt +++ b/pvr.iptvsimple/changelog.txt @@ -1,3 +1,6 @@ +v2.4.1 +- updated language files from Transifex + v2.4.0 - Cmake: rename find_package kodi to Kodi diff --git a/pvr.iptvsimple/resources/language/resource.language.bg_bg/strings.po b/pvr.iptvsimple/resources/language/resource.language.bg_bg/strings.po index e616a1b78..691cd27c7 100644 --- a/pvr.iptvsimple/resources/language/resource.language.bg_bg/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.bg_bg/strings.po @@ -87,3 +87,11 @@ msgstr "Връзка към базата с логата на каналите" msgctxt "#30042" msgid "Ignore" msgstr "Игнорирай" + +msgctxt "#30043" +msgid "Prefer M3U" +msgstr "Предпочитай M3U" + +msgctxt "#30044" +msgid "Prefer XMLTV" +msgstr "Предпочитай XMLTV" diff --git a/pvr.iptvsimple/resources/language/resource.language.es_mx/strings.po b/pvr.iptvsimple/resources/language/resource.language.es_mx/strings.po index a3ef28f63..0297259ac 100644 --- a/pvr.iptvsimple/resources/language/resource.language.es_mx/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.es_mx/strings.po @@ -24,6 +24,10 @@ msgctxt "#30010" msgid "General" msgstr "General" +msgctxt "#30030" +msgid "Channels Logos" +msgstr "Logos de canal" + msgctxt "#30042" msgid "Ignore" msgstr "Ignorar" diff --git a/pvr.iptvsimple/resources/language/resource.language.fi_fi/strings.po b/pvr.iptvsimple/resources/language/resource.language.fi_fi/strings.po index deef75816..93e5cf649 100644 --- a/pvr.iptvsimple/resources/language/resource.language.fi_fi/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.fi_fi/strings.po @@ -24,6 +24,10 @@ msgctxt "#30001" msgid "Local Path (include Local Network)" msgstr "Paikallinen polku (sisältää lähiverkon)" +msgctxt "#30002" +msgid "Remote Path (Internet address)" +msgstr "Verkkopolku (Internet osoite)" + msgctxt "#30010" msgid "General" msgstr "Yleiset" diff --git a/pvr.iptvsimple/resources/language/resource.language.nb_no/strings.po b/pvr.iptvsimple/resources/language/resource.language.nb_no/strings.po index 2a16702ea..d31e585c1 100644 --- a/pvr.iptvsimple/resources/language/resource.language.nb_no/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.nb_no/strings.po @@ -66,7 +66,7 @@ msgstr "Programguide tidshopp (timer)" msgctxt "#30025" msgid "Cache m3u at local storage" -msgstr "Mellomlagre m3u lokalt" +msgstr "Mellomlagre M3U lokalt" msgctxt "#30026" msgid "Cache XMLTV at local storage" From 21e91a5f61fab32aad8bb3103f402f6e1785bb23 Mon Sep 17 00:00:00 2001 From: txtranslation Date: Thu, 21 Jul 2016 22:13:59 +0100 Subject: [PATCH 033/100] [lang] updated language files from Transifex --- pvr.iptvsimple/addon.xml.in | 2 +- pvr.iptvsimple/changelog.txt | 3 +++ .../resources/language/resource.language.fi_fi/strings.po | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index 248930809..c2f9ee9dc 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,7 +1,7 @@ diff --git a/pvr.iptvsimple/changelog.txt b/pvr.iptvsimple/changelog.txt index 1d141f722..4d5df367c 100644 --- a/pvr.iptvsimple/changelog.txt +++ b/pvr.iptvsimple/changelog.txt @@ -1,3 +1,6 @@ +v2.4.2 +- updated language files from Transifex + v2.4.1 - updated language files from Transifex diff --git a/pvr.iptvsimple/resources/language/resource.language.fi_fi/strings.po b/pvr.iptvsimple/resources/language/resource.language.fi_fi/strings.po index 93e5cf649..b029435ea 100644 --- a/pvr.iptvsimple/resources/language/resource.language.fi_fi/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.fi_fi/strings.po @@ -74,7 +74,7 @@ msgstr "Käytä paikallista levyä XMLTV tiedostojen välimuistina." msgctxt "#30030" msgid "Channels Logos" -msgstr "Kanava logot" +msgstr "Kanavalogot" msgctxt "#30031" msgid "Channels Logos Folder" From a4c52558bc6f1bbf472aac187d3fe7d79eb6eac2 Mon Sep 17 00:00:00 2001 From: txtranslation Date: Sat, 20 Aug 2016 23:48:28 +0100 Subject: [PATCH 034/100] [lang] updated language files from Transifex --- pvr.iptvsimple/addon.xml.in | 11 +++--- pvr.iptvsimple/changelog.txt | 3 ++ .../resource.language.az_az/strings.po | 37 +++++++++++++++++++ .../resource.language.ca_es/strings.po | 2 +- .../resource.language.fi_fi/strings.po | 26 ++++++------- .../resource.language.ko_kr/strings.po | 12 ++++++ 6 files changed, 72 insertions(+), 19 deletions(-) create mode 100644 pvr.iptvsimple/resources/language/resource.language.az_az/strings.po diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index c2f9ee9dc..bf74d103a 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,7 +1,7 @@ @@ -13,6 +13,7 @@ library_@PLATFORM@="@LIBRARY_FILENAME@"/> Kodi PVR byvoegsel vir IPTV ondersteuning. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home + IPTV dəstəyi üçün Kodi PVR əlavəsini yükləyin. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Kodi ПВР добавка за поддръжка на IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Complement PVR de Kodi per al suport d'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 @@ -26,7 +27,7 @@ Kodi PVR addon for IPTV support. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Addon Kodi PVR para soporte IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Kodi PVR addon para soporte IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home - Kodi PVR lisäosa IPTV tuella. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home + Kodin PVR-lisäosa IPTV-tuella. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Addiciel de numériscope Kodi pour la prise en charge de IPTV https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Extension enregistreur vidéo (PVR) pour la gestion IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Complemento PVR do Kodi de soporte á IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home @@ -60,7 +61,7 @@ Kodi PVR 插件需要 IPTV 支持。https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home IPTV Simple PVR kliënt ondersteun M3U speellyste, stroom van lewendige TV vir multisaai / unisaai bronne, luister na radio kanale en EPG. IPTV обикновен ПВР клиент. Поддържа m3u плейлисти, поточна телевизия за мултикаст/уникаст източници, слушане на радио канали и електронен програмен справочник. - Client senzill per a IPTV PVR amb support per a llistes de reproducció m3u, streaming de TV en viu multicast/unicast, reproducció de canals de ràdio i EPG. + Client senzill per a IPTV PVR compatible amb les llistes de reproducció m3u, streaming de TV en directe multicast/unicast, reproducció de canals de ràdio i EPG. IPTV Simple PVR Client podporuje m3u playlisty, streemování TV pro multicast/unicast zdroje, poslouchání Radia a EPG. Cleient IPTV Simple PVR Mae'n cynnal rhestrau m3u, ffrydio Teledu Byw o ffynonellau darlledu eang ac unigol, gwrando ar sianeli Radio ac Amserlen Rhaglenni. IPTV Simpel PVR klient understøttelse M3U-afspilningslister, streaming af direkte tv til multicast/unicast kilder, lytte til radio kanaler og EPG. @@ -72,7 +73,7 @@ IPTV Simple PVR Client support m3u playlists, streaming of Live TV for multicast/unicast sources, listening to Radio channels and EPG. Cliente simple PVR IPTV. Reproduce de TV en Vivo multicast/unicast y listas m3u8 . reproduce tambien canales de radio y GEP El cliente PVR IPTV Simple soporta listas M3U, reproducción de TV en Vivo para origenes multicast/unicast, escucha de canales de radio y EPG - IPTV Simple PVR Client tukee m3u soittolistoja, multicast/unicast LIVE TV toistoa, radiokanavia jaohjelmaopasta. + IPTV Simple PVR Client tukee m3u-toistolistoja, multicast/unicast-tv-lähetysten toistoa, radiokanavia ja ohjelmaopasta. Client de numériscope simple pour IPTV, prenant en charge les listes de lecture m3u, la diffusion en continu des télés en direct pour les sources de multidiffusion et de monodiffusion, l'écoute de chaînes radio, et le GÉP. Le client enregistreur vidéo (PVR) IPTV Simple gère les listes de lecture M3U, la diffusion en continu de la TV en direct en mono ou multidiffusion, l'écoute des chaînes radio et le guide électronique des programmes TV. O cliente PVR simple de IPTV soporta listaxes m3u, transmisión de TV en directo para fontes multicast/unicast, escoita de canles de Radio e Guía. @@ -117,7 +118,7 @@ This is unstable software! The authors are in no way responsible for failed playings, incorrect EPG times, wasted hours, or any other undesirable effects. Este es un software inestable. El autor no se hace responsable por reproducciones fallidas, datos de GEP incorrectos, horas perdidas o cualquier otro efecto indeseable. Este es un software inestable! El autor no se hace responsable de reproducciones fallidas, datos de EPG incorrectos, horas perdidas o cualquier otro efecto indeseado. - Tämä on epävakaa ohjelma! Ohjelman kirjoittavat eivät vastaa millään tavalla epäonnistuneista toistoista, vääristä EPG ajoista, hukatusta ajasta tai muista ei-halutuista tapahtumista. + Tämä on epävakaa ohjelma! Ohjelman kirjoittajat eivät vastaa millään tavalla epäonnistuneista toistoista, vääristä EPG-ajoista, hukatusta ajasta tai muista ei-halutuista tapahtumista. Ce logiciel est instable! Les auteurs ne sont aucunement responsables des lectures défaillantes, d'horaires erronés du GÉP, des heures perdues ou tout autre effet indésirable. Logiciel en cours d'élaboration ! Les auteurs ne sont en aucun cas responsables de l'échec des enregistrements, programmations défectueuses, temps perdu ou autres effets indésirables. Este software non é estábel! Os autores non se fan responsábeis dos erros na reproducción, horarios incorrectos na Guía, horas vencidas, e otros efectos non desexados. diff --git a/pvr.iptvsimple/changelog.txt b/pvr.iptvsimple/changelog.txt index 4d5df367c..0be593986 100644 --- a/pvr.iptvsimple/changelog.txt +++ b/pvr.iptvsimple/changelog.txt @@ -1,3 +1,6 @@ +v2.4.3 +- updated language files from Transifex + v2.4.2 - updated language files from Transifex diff --git a/pvr.iptvsimple/resources/language/resource.language.az_az/strings.po b/pvr.iptvsimple/resources/language/resource.language.az_az/strings.po new file mode 100644 index 000000000..4fb23d2d5 --- /dev/null +++ b/pvr.iptvsimple/resources/language/resource.language.az_az/strings.po @@ -0,0 +1,37 @@ +# Kodi Media Center language file +# Addon Name: PVR IPTV Simple Client +# Addon id: pvr.iptvsimple +# Addon Provider: nightik +msgid "" +msgstr "" +"Project-Id-Version: KODI Main\n" +"Report-Msgid-Bugs-To: http://trac.kodi.tv/\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 (Azerbaijan) (http://www.transifex.com/projects/p/kodi-main/language/az_AZ/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: az_AZ\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgctxt "#30010" +msgid "General" +msgstr "Ümumi" + +msgctxt "#30020" +msgid "EPG Settings" +msgstr "EPG ayarları" + +msgctxt "#30024" +msgid "EPG Time Shift (hours)" +msgstr "EPG vaxtı (saat)" + +msgctxt "#30030" +msgid "Channels Logos" +msgstr "Kanal loqoları" + +msgctxt "#30031" +msgid "Channels Logos Folder" +msgstr "Kanalların loqo qovluğu" diff --git a/pvr.iptvsimple/resources/language/resource.language.ca_es/strings.po b/pvr.iptvsimple/resources/language/resource.language.ca_es/strings.po index dc7257d57..2b1402a90 100644 --- a/pvr.iptvsimple/resources/language/resource.language.ca_es/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.ca_es/strings.po @@ -46,7 +46,7 @@ msgstr "La numeració de canals comença al" msgctxt "#30020" msgid "EPG Settings" -msgstr "Configuració de l'EPG" +msgstr "Ajusts de l'EPG" msgctxt "#30021" msgid "XMLTV Path" diff --git a/pvr.iptvsimple/resources/language/resource.language.fi_fi/strings.po b/pvr.iptvsimple/resources/language/resource.language.fi_fi/strings.po index b029435ea..408021cfb 100644 --- a/pvr.iptvsimple/resources/language/resource.language.fi_fi/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.fi_fi/strings.po @@ -26,7 +26,7 @@ msgstr "Paikallinen polku (sisältää lähiverkon)" msgctxt "#30002" msgid "Remote Path (Internet address)" -msgstr "Verkkopolku (Internet osoite)" +msgstr "Verkkopolku (Internet-osoite)" msgctxt "#30010" msgid "General" @@ -34,11 +34,11 @@ msgstr "Yleiset" msgctxt "#30011" msgid "M3U Play List Path" -msgstr "M3U soittolistan polku" +msgstr "M3U-soittolistan polku" msgctxt "#30012" msgid "M3U Play List URL" -msgstr "M3U soittolistan URL" +msgstr "M3U-soittolistan URL" msgctxt "#30013" msgid "Numbering channels starts at" @@ -46,15 +46,15 @@ msgstr "Kanavien numerointi alkaa" msgctxt "#30020" msgid "EPG Settings" -msgstr "EPG asetukset" +msgstr "EPG-asetukset" msgctxt "#30021" msgid "XMLTV Path" -msgstr "XMLTV polku" +msgstr "XMLTV:n polku" msgctxt "#30022" msgid "XMLTV URL" -msgstr "XMLTV polku" +msgstr "XMLTV:n URL" msgctxt "#30023" msgid "Apply Time Shift To All Channels" @@ -62,15 +62,15 @@ msgstr "Käytä ajansiirtoa kaikilla kanavilla" msgctxt "#30024" msgid "EPG Time Shift (hours)" -msgstr "EPG ajansiirto (tuntia)" +msgstr "EPG-ajansiirto (tuntia)" msgctxt "#30025" msgid "Cache m3u at local storage" -msgstr "Käytä paikallista levyä m3u tiedostojen välimuistina." +msgstr "Käytä paikallista levyä m3u-tiedostojen välimuistina." msgctxt "#30026" msgid "Cache XMLTV at local storage" -msgstr "Käytä paikallista levyä XMLTV tiedostojen välimuistina." +msgstr "Käytä paikallista levyä XMLTV-tiedostojen välimuistina." msgctxt "#30030" msgid "Channels Logos" @@ -78,7 +78,7 @@ msgstr "Kanavalogot" msgctxt "#30031" msgid "Channels Logos Folder" -msgstr "Kanava logojen kansio" +msgstr "Kanavalogojen kansio" msgctxt "#30032" msgid "Channels Logos Base URL" @@ -86,7 +86,7 @@ msgstr "Kanavalogojen URL" msgctxt "#30040" msgid "XMLTV Logos Options" -msgstr "XMLTV logojen asetukset" +msgstr "XMLTV-logojen asetukset" msgctxt "#30041" msgid "Channels Logos from XMLTV" @@ -98,8 +98,8 @@ msgstr "Jätä huomioimatta" msgctxt "#30043" msgid "Prefer M3U" -msgstr "Suosi M3U" +msgstr "Suosi M3U:ta" msgctxt "#30044" msgid "Prefer XMLTV" -msgstr "Suosi XMLTV" +msgstr "Suosi XMLTV:tä" diff --git a/pvr.iptvsimple/resources/language/resource.language.ko_kr/strings.po b/pvr.iptvsimple/resources/language/resource.language.ko_kr/strings.po index 19e146076..0de3715d6 100644 --- a/pvr.iptvsimple/resources/language/resource.language.ko_kr/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.ko_kr/strings.po @@ -84,10 +84,22 @@ msgctxt "#30032" msgid "Channels Logos Base URL" msgstr "채널 로고 기본 URL" +msgctxt "#30040" +msgid "XMLTV Logos Options" +msgstr "XMLTV 로고 옵션" + +msgctxt "#30041" +msgid "Channels Logos from XMLTV" +msgstr "XMLTV 채널 로고" + msgctxt "#30042" msgid "Ignore" msgstr "무시" +msgctxt "#30043" +msgid "Prefer M3U" +msgstr "M3U 우선" + msgctxt "#30044" msgid "Prefer XMLTV" msgstr "XMLTV 우선" From 053298623e8a58153eab425d1f2c7d892bc15ac2 Mon Sep 17 00:00:00 2001 From: Chadi El Masri Date: Thu, 6 Oct 2016 22:00:14 +0200 Subject: [PATCH 035/100] Handle time offset in EPG programme start and end times --- src/PVRIptvData.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/PVRIptvData.cpp b/src/PVRIptvData.cpp index f3c747207..05468d790 100644 --- a/src/PVRIptvData.cpp +++ b/src/PVRIptvData.cpp @@ -749,9 +749,12 @@ int PVRIptvData::ParseDateTime(std::string& strDate, bool iDateFormat) { struct tm timeinfo; memset(&timeinfo, 0, sizeof(tm)); + char sign = '+'; + int hours = 0; + int minutes = 0; if (iDateFormat) - sscanf(strDate.c_str(), "%04d%02d%02d%02d%02d%02d", &timeinfo.tm_year, &timeinfo.tm_mon, &timeinfo.tm_mday, &timeinfo.tm_hour, &timeinfo.tm_min, &timeinfo.tm_sec); + sscanf(strDate.c_str(), "%04d%02d%02d%02d%02d%02d %c%02d%02d", &timeinfo.tm_year, &timeinfo.tm_mon, &timeinfo.tm_mday, &timeinfo.tm_hour, &timeinfo.tm_min, &timeinfo.tm_sec, &sign, &hours, &minutes); else sscanf(strDate.c_str(), "%02d.%02d.%04d%02d:%02d:%02d", &timeinfo.tm_mday, &timeinfo.tm_mon, &timeinfo.tm_year, &timeinfo.tm_hour, &timeinfo.tm_min, &timeinfo.tm_sec); @@ -759,7 +762,16 @@ int PVRIptvData::ParseDateTime(std::string& strDate, bool iDateFormat) timeinfo.tm_year -= 1900; timeinfo.tm_isdst = -1; - return mktime(&timeinfo); + std::time_t current_time; + std::time(¤t_time); + long offset = std::localtime(¤t_time)->tm_gmtoff; + + long offset_of_date = (hours * 60 * 60) + (minutes * 60); + if (sign == '-') { + offset_of_date = 0 - offset_of_date; + } + + return mktime(&timeinfo) - offset_of_date + offset; } PVRIptvChannel * PVRIptvData::FindChannel(const std::string &strId, const std::string &strName) From 0dc20554d5e0bccc51f367606eaba72f1e77242f Mon Sep 17 00:00:00 2001 From: Chadi El Masri Date: Fri, 7 Oct 2016 22:37:14 +0200 Subject: [PATCH 036/100] Bump to v2.4.4 --- pvr.iptvsimple/addon.xml.in | 2 +- pvr.iptvsimple/changelog.txt | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index bf74d103a..43df29890 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,7 +1,7 @@ diff --git a/pvr.iptvsimple/changelog.txt b/pvr.iptvsimple/changelog.txt index 0be593986..ea426cb01 100644 --- a/pvr.iptvsimple/changelog.txt +++ b/pvr.iptvsimple/changelog.txt @@ -1,3 +1,6 @@ +v2.4.4 +- Fix: Handle time offset in EPG programme start and end times. + v2.4.3 - updated language files from Transifex From ae4c7a8147e22dcf0b8b4584c68277d32a19e0c6 Mon Sep 17 00:00:00 2001 From: Anton Fedchin Date: Tue, 11 Oct 2016 01:05:40 +0300 Subject: [PATCH 037/100] fixup build on windows. --- src/PVRIptvData.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/PVRIptvData.cpp b/src/PVRIptvData.cpp index 05468d790..b344639b3 100644 --- a/src/PVRIptvData.cpp +++ b/src/PVRIptvData.cpp @@ -764,14 +764,20 @@ int PVRIptvData::ParseDateTime(std::string& strDate, bool iDateFormat) std::time_t current_time; std::time(¤t_time); - long offset = std::localtime(¤t_time)->tm_gmtoff; + long offset = 0; +#ifndef TARGET_WINDOWS + offset = -std::localtime(¤t_time)->tm_gmtoff; +#else + _get_timezone(&offset); +#endif // TARGET_WINDOWS long offset_of_date = (hours * 60 * 60) + (minutes * 60); - if (sign == '-') { - offset_of_date = 0 - offset_of_date; + if (sign == '-') + { + offset_of_date = -offset_of_date; } - return mktime(&timeinfo) - offset_of_date + offset; + return mktime(&timeinfo) - offset_of_date - offset; } PVRIptvChannel * PVRIptvData::FindChannel(const std::string &strId, const std::string &strName) From 28e607bb7d192c54759bae8e2bb1a5d51297e002 Mon Sep 17 00:00:00 2001 From: sangwoo shin Date: Thu, 24 Nov 2016 13:14:26 +0900 Subject: [PATCH 038/100] add channel number tag --- src/PVRIptvData.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/PVRIptvData.cpp b/src/PVRIptvData.cpp index b344639b3..8dde7f6ce 100644 --- a/src/PVRIptvData.cpp +++ b/src/PVRIptvData.cpp @@ -38,6 +38,7 @@ #define TVG_INFO_NAME_MARKER "tvg-name=" #define TVG_INFO_LOGO_MARKER "tvg-logo=" #define TVG_INFO_SHIFT_MARKER "tvg-shift=" +#define TVG_INFO_CHNO_MARKER "tvg-chno=" #define GROUP_NAME_MARKER "group-title=" #define RADIO_MARKER "radio=" #define CHANNEL_LOGO_EXTENSION ".png" @@ -362,6 +363,7 @@ bool PVRIptvData::LoadPlayList(void) { bool bRadio = false; double fTvgShift = 0; + std::string strChnlNo = ""; std::string strChnlName = ""; std::string strTvgId = ""; std::string strTvgName = ""; @@ -386,6 +388,7 @@ bool PVRIptvData::LoadPlayList(void) strTvgId = ReadMarkerValue(strInfoLine, TVG_INFO_ID_MARKER); strTvgName = ReadMarkerValue(strInfoLine, TVG_INFO_NAME_MARKER); strTvgLogo = ReadMarkerValue(strInfoLine, TVG_INFO_LOGO_MARKER); + strChnlNo = ReadMarkerValue(strInfoLine, TVG_INFO_CHNO_MARKER); strGroupName = ReadMarkerValue(strInfoLine, GROUP_NAME_MARKER); strRadio = ReadMarkerValue(strInfoLine, RADIO_MARKER); fTvgShift = atof(ReadMarkerValue(strInfoLine, TVG_INFO_SHIFT_MARKER).c_str()); @@ -401,6 +404,11 @@ bool PVRIptvData::LoadPlayList(void) strTvgLogo = strChnlName; } + if (!strChnlNo.empty()) + { + iChannelNum = atoi(strChnlNo.c_str()); + } + bRadio = !StringUtils::CompareNoCase(strRadio, "true"); tmpChannel.strTvgId = strTvgId; tmpChannel.strTvgName = XBMC->UnknownToUTF8(strTvgName.c_str()); @@ -439,7 +447,7 @@ bool PVRIptvData::LoadPlayList(void) { PVRIptvChannel channel; channel.iUniqueId = GetChannelId(tmpChannel.strChannelName.c_str(), strLine.c_str()); - channel.iChannelNumber = iChannelNum++; + channel.iChannelNumber = iChannelNum; channel.strTvgId = tmpChannel.strTvgId; channel.strChannelName = tmpChannel.strChannelName; channel.strTvgName = tmpChannel.strTvgName; @@ -449,6 +457,8 @@ bool PVRIptvData::LoadPlayList(void) channel.strStreamURL = strLine; channel.iEncryptionSystem = 0; + iChannelNum++; + if (iCurrentGroupId > 0) { channel.bRadio = m_groups.at(iCurrentGroupId - 1).bRadio; From d22e11974d2a8a70d47ebb83c2f3994703acc28a Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Sat, 26 Nov 2016 13:55:30 +0100 Subject: [PATCH 039/100] adapt to api change - SeekTime --- src/client.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/client.cpp b/src/client.cpp index f804e9056..930263687 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -485,7 +485,7 @@ bool IsTimeshifting(void) { return false; } bool IsRealTimeStream(void) { return true; } void PauseStream(bool bPaused) {} bool CanSeekStream(void) { return false; } -bool SeekTime(int,bool,double*) { return false; } +bool SeekTime(double,bool,double*) { return false; } void SetSpeed(int) {}; time_t GetPlayingTime() { return 0; } time_t GetBufferTimeStart() { return 0; } From d69778ea39a9b09e442985a780c39610c67aab9d Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Sat, 26 Nov 2016 13:55:58 +0100 Subject: [PATCH 040/100] bump version to 2.4.5 --- pvr.iptvsimple/addon.xml.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index 43df29890..222d2c41d 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,12 +1,12 @@ - + Date: Mon, 28 Nov 2016 09:13:01 +0900 Subject: [PATCH 041/100] Modify source code style to suit guidelines --- src/PVRIptvData.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/PVRIptvData.cpp b/src/PVRIptvData.cpp index 8dde7f6ce..ce6052121 100644 --- a/src/PVRIptvData.cpp +++ b/src/PVRIptvData.cpp @@ -38,7 +38,7 @@ #define TVG_INFO_NAME_MARKER "tvg-name=" #define TVG_INFO_LOGO_MARKER "tvg-logo=" #define TVG_INFO_SHIFT_MARKER "tvg-shift=" -#define TVG_INFO_CHNO_MARKER "tvg-chno=" +#define TVG_INFO_CHNO_MARKER "tvg-chno=" #define GROUP_NAME_MARKER "group-title=" #define RADIO_MARKER "radio=" #define CHANNEL_LOGO_EXTENSION ".png" @@ -403,11 +403,10 @@ bool PVRIptvData::LoadPlayList(void) { strTvgLogo = strChnlName; } - if (!strChnlNo.empty()) - { + { iChannelNum = atoi(strChnlNo.c_str()); - } + } bRadio = !StringUtils::CompareNoCase(strRadio, "true"); tmpChannel.strTvgId = strTvgId; From 85866f96896bda5e5df85597cbfcbf8f7347cee1 Mon Sep 17 00:00:00 2001 From: Kai Sommerfeld Date: Mon, 5 Dec 2016 14:24:06 +0100 Subject: [PATCH 042/100] Initial Kodi v18 version. --- pvr.iptvsimple/addon.xml.in | 2 +- pvr.iptvsimple/changelog.txt | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index 222d2c41d..41eb51f3e 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,7 +1,7 @@ diff --git a/pvr.iptvsimple/changelog.txt b/pvr.iptvsimple/changelog.txt index 086c8d9ab..9a814c811 100644 --- a/pvr.iptvsimple/changelog.txt +++ b/pvr.iptvsimple/changelog.txt @@ -1,3 +1,6 @@ +v3.0.0 +- Initial Kodi v18 version + v2.4.4 - Fix: Handle time offset in EPG programme start and end times. From b19850dd51f5be384f6269f16a03c1c6acced6af Mon Sep 17 00:00:00 2001 From: txtranslation Date: Mon, 12 Dec 2016 16:06:09 +0000 Subject: [PATCH 043/100] [lang] updated language files from Transifex --- pvr.iptvsimple/addon.xml.in | 26 ++++--- .../resource.language.bg_bg/strings.po | 8 ++ .../resource.language.ca_es/strings.po | 20 ++--- .../resource.language.es_mx/strings.po | 68 +++++++++++++++++ .../resource.language.fi_fi/strings.po | 26 +++---- .../resource.language.fr_fr/strings.po | 4 +- .../language/resource.language.szl/strings.po | 76 +++++++++++++++++++ .../resource.language.zh_tw/strings.po | 74 +++++++++++++++++- 8 files changed, 267 insertions(+), 35 deletions(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index 41eb51f3e..8ea008ae3 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,7 +1,7 @@ @@ -27,7 +27,8 @@ Kodi PVR addon for IPTV support. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Addon Kodi PVR para soporte IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Kodi PVR addon para soporte IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home - Kodin PVR-lisäosa IPTV-tuella. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home + Complemento Kodi PVR para soporte de IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home + Kodin IPTV-lisäosa. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Addiciel de numériscope Kodi pour la prise en charge de IPTV https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Extension enregistreur vidéo (PVR) pour la gestion IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Complemento PVR do Kodi de soporte á IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home @@ -46,7 +47,7 @@ PVR addon ta' Kodi għall-IPTV. 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 Kodi PVR add-on voor IPTV ondersteuning. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home - Klient telewizyjny dla telewizji internetowej. Więcej informacji o dodatku: https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home + Klient telewizji dla telewizji internetowej. Więcej informacji o dodatku: 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 Add-on Kodi PVR para suporte a IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Supliment PVR Kodi pentru suport IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home @@ -56,12 +57,14 @@ Kodi PVR додатни програм за IPTV подршку. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Kodi PVR dodatni program za IPTV podršku. 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 + Klijynt telewizyjny dlŏ telewizyje internetowyj. Wiyncyj informacyji ô przidŏwku: 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 PVR надбудова Kodi для підтримки 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 + 支援IPTV的Kodi PVR附加元件。https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home IPTV Simple PVR kliënt ondersteun M3U speellyste, stroom van lewendige TV vir multisaai / unisaai bronne, luister na radio kanale en EPG. IPTV обикновен ПВР клиент. Поддържа m3u плейлисти, поточна телевизия за мултикаст/уникаст източници, слушане на радио канали и електронен програмен справочник. - Client senzill per a IPTV PVR compatible amb les llistes de reproducció m3u, streaming de TV en directe multicast/unicast, reproducció de canals de ràdio i EPG. + Client senzill per a IPTV PVR compatible amb les llistes de reproducció m3u, transmissions en línia de TV en directe per als orígens difusió única o múltiple, escolta d'emissores de ràdio i guia electrònica de programació (EPG). IPTV Simple PVR Client podporuje m3u playlisty, streemování TV pro multicast/unicast zdroje, poslouchání Radia a EPG. Cleient IPTV Simple PVR Mae'n cynnal rhestrau m3u, ffrydio Teledu Byw o ffynonellau darlledu eang ac unigol, gwrando ar sianeli Radio ac Amserlen Rhaglenni. IPTV Simpel PVR klient understøttelse M3U-afspilningslister, streaming af direkte tv til multicast/unicast kilder, lytte til radio kanaler og EPG. @@ -73,7 +76,8 @@ IPTV Simple PVR Client support m3u playlists, streaming of Live TV for multicast/unicast sources, listening to Radio channels and EPG. Cliente simple PVR IPTV. Reproduce de TV en Vivo multicast/unicast y listas m3u8 . reproduce tambien canales de radio y GEP El cliente PVR IPTV Simple soporta listas M3U, reproducción de TV en Vivo para origenes multicast/unicast, escucha de canales de radio y EPG - IPTV Simple PVR Client tukee m3u-toistolistoja, multicast/unicast-tv-lähetysten toistoa, radiokanavia ja ohjelmaopasta. + IPTV Simple PVR Client soporta listas de reproducción m3u, streaming de Live TV para fuentes multicast / unicast, escuchando para canales de radio y EPG. + IPTV-lisäosa tukee m3u-toistolistoja, multicast/unicast-tv-lähetysten toistoa, radiokanavia ja ohjelmaopasta. Client de numériscope simple pour IPTV, prenant en charge les listes de lecture m3u, la diffusion en continu des télés en direct pour les sources de multidiffusion et de monodiffusion, l'écoute de chaînes radio, et le GÉP. Le client enregistreur vidéo (PVR) IPTV Simple gère les listes de lecture M3U, la diffusion en continu de la TV en direct en mono ou multidiffusion, l'écoute des chaînes radio et le guide électronique des programmes TV. O cliente PVR simple de IPTV soporta listaxes m3u, transmisión de TV en directo para fontes multicast/unicast, escoita de canles de Radio e Guía. @@ -92,7 +96,7 @@ IPTV Simple PVR Client jiflaħ għal playlists m3u, streaming ta' TV Lajv għal sorsi multicast/unicast, smiegħ ta' stazzjonijiet tar-Radju u EPG. IPTV Simple PVR klient støtter m3u spillelister, strømming av Live TV, lytting til radiokanaler og programguider. IPTV simpele PVR cliënt ondersteunt m3u afspeellijsten, streaming van live TV voor multicast/unicast bronnen, luisteren naar radiozenders en EPG. - Klient telewizji dla telewizji internetowej obsługuje listy odtwarzania m3u, strumieniowanie kanałów radiowych i telewizyjnych ze źródeł punktowych i grupowych oraz funkcje przewodnika telewizyjnego. + Klient telewizji dla telewizji internetowej obsługuje listy odtwarzania m3u, transmisję kanałów radiowych i telewizyjnych ze źródeł punktowych i grupowych oraz funkcje przewodnika telewizyjnego. O cliente de PVR IPTV Simple Client oferece suporte para listas m3u, transmissão de TV ao vivo de fontes multicast/unicast, transmissão de rádios e, ainda, suporte a guia de programação eletrônico - EPG. Cliente IPTV Simple PVR com suporte a listas de reprodução m3u, transmissão de TV em direto de fontes multidifusão/unidifusão, ouvir estações de rádio e EPG. PVR Client IPTV suporta liste m3u, redare TV în direct pentru surse de multicast/unicast, ascultare canale radio si EPG. @@ -102,11 +106,13 @@ IPTV Једноставан PVR Клијент подржава m3u листе за репродукцију, стримовање ТВ Уживо за multicast/unicast изворе, слушање Радио канала и EPG. IPTV Jednostavan PVR Klijent podržava m3u liste za reprodukciju, strimovanje TV Uživo za multicast/unicast izvore, slušanje Radio kanala i EPG. IPTV Simple PVR Client stöder m3u-spellistor, strömmande Live-TV för multicast/unicast-källor, radiolyssning och EPG. + Klijynt telewizyje dlŏ telewizyje internetowyj ôbsuguje wykŏzy ôdtwŏrzaniŏ m3u, szpricowanie kanałōw radyjowych i telewizyjnych ze źrōdeł pōnktowych i skupinowych, a tyż fōnkcyje EPG. IPTV Basit PVR İstemcisi m3u çalma listeleri, multicast/unicast kaynaklar için Canlı TV akışı, radyo kanallarını dinleme ve EPG destekler. IPTV 简单 PVR 前端支持 m3u 播放列表、多播/单播源直播电视、收听电台和电子节目单。 + IPTV Simple PVR 用戶端支援m3u 播放列表,來自multicast/unicast 的即時電視串流,收聽廣播及電子節目表。 Hierdie is onstabiele sagteware! Die outeurs is op geen manier verantwoordelik vir gefaalde spele, inkorrekte EPG tye, vermorsde ure, of enige ander ongewensde effekte. Тази програма е нестабилна! Авторите не носят отговорност за неуспешно възпроизвеждане, некоректни часове в електронния програмен справочник, пропиляното време и други нежелани ефекти. - Aquest programari és inestable! Els autors no es fan responsables de reproduccions fallides, horaris incorrectes a l'EPG, hores perdudes o qualsevol altre efecte no desitjat. + Aquest programari és inestable! Els autors no es fan responsables de reproduccions fallides, horaris incorrectes a la guia electrònica de programació (EPG), hores perdudes o qualsevol altre efecte no desitjat. Tento software není stabilní. Autoři nejsou žádným způsobem zodpovědní za selhání při nahrávání, neplatné časovače, ztracený čas, či jakékoliv jiné nežádoucí události... Mae hwn yn feddalwedd ansad! Nid yw'r awduron yn gyfrifol mewn unrhyw ffordd am fethu recordio, amseru gwallus, oriau wedi eu gwastraffu nac effeithiau anymunol eraill. Dette er ustabil software! Ophavsmændene er på ingen måde ansvarlig for mislykkede afspilninger, forkerte EPG tider, spildte timer, eller andre bivirkninger. @@ -118,7 +124,8 @@ This is unstable software! The authors are in no way responsible for failed playings, incorrect EPG times, wasted hours, or any other undesirable effects. Este es un software inestable. El autor no se hace responsable por reproducciones fallidas, datos de GEP incorrectos, horas perdidas o cualquier otro efecto indeseable. Este es un software inestable! El autor no se hace responsable de reproducciones fallidas, datos de EPG incorrectos, horas perdidas o cualquier otro efecto indeseado. - Tämä on epävakaa ohjelma! Ohjelman kirjoittajat eivät vastaa millään tavalla epäonnistuneista toistoista, vääristä EPG-ajoista, hukatusta ajasta tai muista ei-halutuista tapahtumista. + ¡Este es un software inestable! Los autores no son responsables en absoluto de reproducciones fallidas, tiempos EPG incorrectos, desperdicio de horas, o cualquier otro efecto indeseable. + Tämä on epävakaa ohjelma! Sen tekijät eivät ole millään muotoa vastuussa epäonnistuneista tallennuksista, virheellisistä ajastuksista, haaskatusta ajasta, verenpaineen noususta tai mistään muusta epäsuotuisasta vaikutuksesta. Ce logiciel est instable! Les auteurs ne sont aucunement responsables des lectures défaillantes, d'horaires erronés du GÉP, des heures perdues ou tout autre effet indésirable. Logiciel en cours d'élaboration ! Les auteurs ne sont en aucun cas responsables de l'échec des enregistrements, programmations défectueuses, temps perdu ou autres effets indésirables. Este software non é estábel! Os autores non se fan responsábeis dos erros na reproducción, horarios incorrectos na Guía, horas vencidas, e otros efectos non desexados. @@ -140,7 +147,7 @@ Oprogramowanie nadal jest w fazie rozwoju i jest niestabilne! Autorzy w żaden sposób nie są odpowiedzialni za nieudane nagrania, błędy w harmonogramie nagrań, zmarnowany czas ani jakiekolwiek inne niepożądane efekty. Este é um software instável! Os autores não são responsáveis por falhas nas reproduções, horários incorretos no EPG, horas perdidas ou quaisquer outros efeitos indesejáveis. Este software é instável! Os autores não podem ser responsabilizados por gravações falhadas, temporizadores incorretos, horas desperdiçadas ou qualquer outro tipo de efeitos indesejáveis... - Acest software este instabil! Autorii nu sunt responsabili în nici un fel pentru înregistrări eșuate, cronometrări EPG incorecte, ore pierdute sau orice alte efecte nedorite. + Această parte din program nu este stabilă! Autorii nu sunt responsabili în nici un fel pentru înregistrări eșuate, cronometrări EPG incorecte, ore pierdute sau orice alte efecte nedorite. Это нестабильная программа! Авторы не несут ответственности за неудачные воспроизведение, неверные время EPG, потраченное время и прочие нежелательные эффекты. Toto je nestabilný softvér! Autori nie sú v žiadnom prípade zodpovední za chybné prehrávanie, nesprávne časy EPG, premrhané hodiny alebo akékoľvek iné nežiadúce účinky. To je nestabilna programska oprema! Avtorji niso odgovorni za neuspela predvajanja, nepravilne čase v EPG, zapravljen čas in katerikoli drug neželen učinek. @@ -150,6 +157,7 @@ To je niystabilny softwer! Autōry niy sōm ôdpedzialne za niypodarzōne graniy, niynŏleżne godziny EPG, stracōne godziny i inksze niychciane efekty. Bu kararsız bir yazılımdır! Yazanlar oynatma hatası, yanlış EPG zamanları, harcanmış saatler ya da diğer etkilerden sorumlu değildir. 这是不稳定版的软件!作者不对录像失败、错误定时造成时间浪费或其它不良影响负责。 + 這是測試中的軟體!原創作者無法針對以下情況負責:包括播放失敗,不正確的電子節目表,多餘的時數,或任何不可預期的不良影響。 @PLATFORM@ diff --git a/pvr.iptvsimple/resources/language/resource.language.bg_bg/strings.po b/pvr.iptvsimple/resources/language/resource.language.bg_bg/strings.po index 691cd27c7..a05aec27a 100644 --- a/pvr.iptvsimple/resources/language/resource.language.bg_bg/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.bg_bg/strings.po @@ -84,6 +84,14 @@ msgctxt "#30032" msgid "Channels Logos Base URL" msgstr "Връзка към базата с логата на каналите" +msgctxt "#30040" +msgid "XMLTV Logos Options" +msgstr "XMLTV настройки за Лога" + +msgctxt "#30041" +msgid "Channels Logos from XMLTV" +msgstr "Лога на каналите от XMLTV" + msgctxt "#30042" msgid "Ignore" msgstr "Игнорирай" diff --git a/pvr.iptvsimple/resources/language/resource.language.ca_es/strings.po b/pvr.iptvsimple/resources/language/resource.language.ca_es/strings.po index 2b1402a90..3607e76d5 100644 --- a/pvr.iptvsimple/resources/language/resource.language.ca_es/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.ca_es/strings.po @@ -34,7 +34,7 @@ msgstr "General" msgctxt "#30011" msgid "M3U Play List Path" -msgstr "Camí de llista de reproducció M3U" +msgstr "Camí a la llista de reproducció M3U" msgctxt "#30012" msgid "M3U Play List URL" @@ -50,7 +50,7 @@ msgstr "Ajusts de l'EPG" msgctxt "#30021" msgid "XMLTV Path" -msgstr "Camí de XMLTV" +msgstr "Camí a XMLTV" msgctxt "#30022" msgid "XMLTV URL" @@ -58,11 +58,11 @@ msgstr "URL de XMLTV" msgctxt "#30023" msgid "Apply Time Shift To All Channels" -msgstr "Aplicar Time Shift a tots els canals" +msgstr "Aplica Time Shift a tots els canals" msgctxt "#30024" msgid "EPG Time Shift (hours)" -msgstr "Time Shift de l'EPG (en hores)" +msgstr "Time Shift d'EPG (hores)" msgctxt "#30025" msgid "Cache m3u at local storage" @@ -78,19 +78,19 @@ msgstr "Logos dels canals" msgctxt "#30031" msgid "Channels Logos Folder" -msgstr "Carpeta de logos de canals" +msgstr "Carpeta dels logos dels canals" msgctxt "#30032" msgid "Channels Logos Base URL" -msgstr "URL base per a logos de canals" +msgstr "URL base dels logos dels canals" msgctxt "#30040" msgid "XMLTV Logos Options" -msgstr "Opcions de logos XMLTV" +msgstr "Opcions dels logos de XMLTV" msgctxt "#30041" msgid "Channels Logos from XMLTV" -msgstr "Logos de canals de XMLTV" +msgstr "Logos dels canals des de XMLTV" msgctxt "#30042" msgid "Ignore" @@ -98,8 +98,8 @@ msgstr "Ignora" msgctxt "#30043" msgid "Prefer M3U" -msgstr "Preferir M3U" +msgstr "Prefereix M3U" msgctxt "#30044" msgid "Prefer XMLTV" -msgstr "XMLTV preferit" +msgstr "Prefereix XMLTV" diff --git a/pvr.iptvsimple/resources/language/resource.language.es_mx/strings.po b/pvr.iptvsimple/resources/language/resource.language.es_mx/strings.po index 0297259ac..c91ebd10d 100644 --- a/pvr.iptvsimple/resources/language/resource.language.es_mx/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.es_mx/strings.po @@ -20,18 +20,86 @@ msgctxt "#30000" msgid "Location" msgstr "Ubicación" +msgctxt "#30001" +msgid "Local Path (include Local Network)" +msgstr "Ruta local (incluye red local)" + +msgctxt "#30002" +msgid "Remote Path (Internet address)" +msgstr "Ruta remota (dirección de Internet)" + msgctxt "#30010" msgid "General" msgstr "General" +msgctxt "#30011" +msgid "M3U Play List Path" +msgstr "Ruta de la lista de reproducción M3U" + +msgctxt "#30012" +msgid "M3U Play List URL" +msgstr "URL de la lista de reproducción M3U" + +msgctxt "#30013" +msgid "Numbering channels starts at" +msgstr "Numerando canales empieza en" + +msgctxt "#30020" +msgid "EPG Settings" +msgstr "Configuración de EPG" + +msgctxt "#30021" +msgid "XMLTV Path" +msgstr "Ruta XMLTV" + +msgctxt "#30022" +msgid "XMLTV URL" +msgstr "URL XMLTV" + +msgctxt "#30023" +msgid "Apply Time Shift To All Channels" +msgstr "Aplicar tiempo de desplazamiento a todos los canales" + +msgctxt "#30024" +msgid "EPG Time Shift (hours)" +msgstr "EPG Cambio de hora (horas)" + +msgctxt "#30025" +msgid "Cache m3u at local storage" +msgstr "Caché m3u en el almacenamiento local" + +msgctxt "#30026" +msgid "Cache XMLTV at local storage" +msgstr "Caché XLMTV en el almacenamiento local" + msgctxt "#30030" msgid "Channels Logos" msgstr "Logos de canal" +msgctxt "#30031" +msgid "Channels Logos Folder" +msgstr "Carpeta de Logos de Canales" + +msgctxt "#30032" +msgid "Channels Logos Base URL" +msgstr "URL de los logotipos de los canales" + +msgctxt "#30040" +msgid "XMLTV Logos Options" +msgstr "XMLTV Opciones de logos" + +msgctxt "#30041" +msgid "Channels Logos from XMLTV" +msgstr "Logos de canales de XMLTV" + msgctxt "#30042" msgid "Ignore" msgstr "Ignorar" +msgctxt "#30043" +msgid "Prefer M3U" +msgstr "M3U Prefiero" + msgctxt "#30044" msgid "Prefer XMLTV" msgstr "XMLTV preferido" diff --git a/pvr.iptvsimple/resources/language/resource.language.fi_fi/strings.po b/pvr.iptvsimple/resources/language/resource.language.fi_fi/strings.po index 408021cfb..d7615b3cd 100644 --- a/pvr.iptvsimple/resources/language/resource.language.fi_fi/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.fi_fi/strings.po @@ -22,11 +22,11 @@ msgstr "Sijainti" msgctxt "#30001" msgid "Local Path (include Local Network)" -msgstr "Paikallinen polku (sisältää lähiverkon)" +msgstr "Paikallinen sijainti (sisältää lähiverkon)" msgctxt "#30002" msgid "Remote Path (Internet address)" -msgstr "Verkkopolku (Internet-osoite)" +msgstr "Ulkoinen sijainti (Internet-osoite)" msgctxt "#30010" msgid "General" @@ -38,39 +38,39 @@ msgstr "M3U-soittolistan polku" msgctxt "#30012" msgid "M3U Play List URL" -msgstr "M3U-soittolistan URL" +msgstr "M3U-soittolistan URL-osoite" msgctxt "#30013" msgid "Numbering channels starts at" -msgstr "Kanavien numerointi alkaa" +msgstr "Ensimmäisen kanavan numero" msgctxt "#30020" msgid "EPG Settings" -msgstr "EPG-asetukset" +msgstr "Ohjelmaopas" msgctxt "#30021" msgid "XMLTV Path" -msgstr "XMLTV:n polku" +msgstr "XMLTV-tiedoston polku" msgctxt "#30022" msgid "XMLTV URL" -msgstr "XMLTV:n URL" +msgstr "XMLTV-tiedoston URL-osoite" msgctxt "#30023" msgid "Apply Time Shift To All Channels" -msgstr "Käytä ajansiirtoa kaikilla kanavilla" +msgstr "Siirrä kaikkien kanavien aikoja" msgctxt "#30024" msgid "EPG Time Shift (hours)" -msgstr "EPG-ajansiirto (tuntia)" +msgstr "Ohjelmaoppaan aikojen siirto (tunteina)" msgctxt "#30025" msgid "Cache m3u at local storage" -msgstr "Käytä paikallista levyä m3u-tiedostojen välimuistina." +msgstr "Tallenna m3u-tiedostot paikalliselle levylle" msgctxt "#30026" msgid "Cache XMLTV at local storage" -msgstr "Käytä paikallista levyä XMLTV-tiedostojen välimuistina." +msgstr "Tallenna XMLTV-tiedostot paikalliselle levylle" msgctxt "#30030" msgid "Channels Logos" @@ -82,7 +82,7 @@ msgstr "Kanavalogojen kansio" msgctxt "#30032" msgid "Channels Logos Base URL" -msgstr "Kanavalogojen URL" +msgstr "Kanavalogojen URL-osoite" msgctxt "#30040" msgid "XMLTV Logos Options" @@ -90,7 +90,7 @@ msgstr "XMLTV-logojen asetukset" msgctxt "#30041" msgid "Channels Logos from XMLTV" -msgstr "Kanavalogot XMLTV:stä" +msgstr "XMLTV:n kanavalogot" msgctxt "#30042" msgid "Ignore" diff --git a/pvr.iptvsimple/resources/language/resource.language.fr_fr/strings.po b/pvr.iptvsimple/resources/language/resource.language.fr_fr/strings.po index e417fa4ba..95a86c761 100644 --- a/pvr.iptvsimple/resources/language/resource.language.fr_fr/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.fr_fr/strings.po @@ -66,11 +66,11 @@ msgstr "Différé du guide des programmes (heures)" msgctxt "#30025" msgid "Cache m3u at local storage" -msgstr "Cacher le M3U sur le stockage local" +msgstr "Placer le M3U en cache sur le stockage local" msgctxt "#30026" msgid "Cache XMLTV at local storage" -msgstr "Cacher le XMLTV sur le stockage local" +msgstr "Placer le XMLTV en cache sur le stockage local" msgctxt "#30030" msgid "Channels Logos" diff --git a/pvr.iptvsimple/resources/language/resource.language.szl/strings.po b/pvr.iptvsimple/resources/language/resource.language.szl/strings.po index 44f248aed..b4f466db5 100644 --- a/pvr.iptvsimple/resources/language/resource.language.szl/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.szl/strings.po @@ -20,10 +20,86 @@ msgctxt "#30000" msgid "Location" msgstr "Plac" +msgctxt "#30001" +msgid "Local Path (include Local Network)" +msgstr "Cesta lokalnŏ (ôbyjmuje lokalny nec)" + +msgctxt "#30002" +msgid "Remote Path (Internet address)" +msgstr "Cesta zdŏlnŏ (adresa internetowŏ)" + msgctxt "#30010" msgid "General" msgstr "Głōwnŏ" +msgctxt "#30011" +msgid "M3U Play List Path" +msgstr "Cesta wykŏzu ôdtwŏrzaniŏ M3U" + +msgctxt "#30012" +msgid "M3U Play List URL" +msgstr "Adresa URL wykŏzu ôdtwŏrzaniŏ M3U" + +msgctxt "#30013" +msgid "Numbering channels starts at" +msgstr "Numeracyjŏ kanałōw napoczynŏ sie ôd" + +msgctxt "#30020" +msgid "EPG Settings" +msgstr "Sztelōnki EPG" + +msgctxt "#30021" +msgid "XMLTV Path" +msgstr "Cesta XMLTV " + +msgctxt "#30022" +msgid "XMLTV URL" +msgstr "Adresa URL XMLTV" + +msgctxt "#30023" +msgid "Apply Time Shift To All Channels" +msgstr "Napasuj timeshift dlŏ wszyjskich kanałōw " + +msgctxt "#30024" +msgid "EPG Time Shift (hours)" +msgstr "Timeshift EPG (godziny) " + +msgctxt "#30025" +msgid "Cache m3u at local storage" +msgstr "Buforuj lokalnie wykŏz M3U" + +msgctxt "#30026" +msgid "Cache XMLTV at local storage" +msgstr "Buforuj lokalnie daty XMLTV " + +msgctxt "#30030" +msgid "Channels Logos" +msgstr "Loga kanałōw " + +msgctxt "#30031" +msgid "Channels Logos Folder" +msgstr "Folder z logami kanałōw " + +msgctxt "#30032" +msgid "Channels Logos Base URL" +msgstr "Bazowŏ adresa URL z logami kanałōw " + +msgctxt "#30040" +msgid "XMLTV Logos Options" +msgstr "Ôpcyje logōw dlŏ XMLTV" + +msgctxt "#30041" +msgid "Channels Logos from XMLTV" +msgstr "Loga kanałōw ze źrōdła XMLTV" + msgctxt "#30042" msgid "Ignore" msgstr "Ignoruj" + +msgctxt "#30043" +msgid "Prefer M3U" +msgstr "Preferuj wykŏz M3U" + +msgctxt "#30044" +msgid "Prefer XMLTV" +msgstr "Preferuj XMLTV" diff --git a/pvr.iptvsimple/resources/language/resource.language.zh_tw/strings.po b/pvr.iptvsimple/resources/language/resource.language.zh_tw/strings.po index e75c54baf..7a25df5d2 100644 --- a/pvr.iptvsimple/resources/language/resource.language.zh_tw/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.zh_tw/strings.po @@ -20,14 +20,86 @@ msgctxt "#30000" msgid "Location" msgstr "位置" +msgctxt "#30001" +msgid "Local Path (include Local Network)" +msgstr "本地路徑 (包括區域網路)" + +msgctxt "#30002" +msgid "Remote Path (Internet address)" +msgstr "遠端路徑 (網址)" + msgctxt "#30010" msgid "General" msgstr "一般設定" +msgctxt "#30011" +msgid "M3U Play List Path" +msgstr "M3U 播放列表路徑" + +msgctxt "#30012" +msgid "M3U Play List URL" +msgstr "M3U 播放列表網址" + +msgctxt "#30013" +msgid "Numbering channels starts at" +msgstr "編號頻道開始自" + +msgctxt "#30020" +msgid "EPG Settings" +msgstr "電子節目表設定" + +msgctxt "#30021" +msgid "XMLTV Path" +msgstr "XMLTV 路徑" + msgctxt "#30022" msgid "XMLTV URL" -msgstr "XMLTV URL" +msgstr "XMLTV 網址" + +msgctxt "#30023" +msgid "Apply Time Shift To All Channels" +msgstr "套用時間憑移至所有頻道" + +msgctxt "#30024" +msgid "EPG Time Shift (hours)" +msgstr "電子節目表時間平移 (小時)" + +msgctxt "#30025" +msgid "Cache m3u at local storage" +msgstr "在本地端儲存m3u快取" + +msgctxt "#30026" +msgid "Cache XMLTV at local storage" +msgstr "在本地端儲存XMLTV快取" + +msgctxt "#30030" +msgid "Channels Logos" +msgstr "頻道商標" + +msgctxt "#30031" +msgid "Channels Logos Folder" +msgstr "頻道商標資料夾" + +msgctxt "#30032" +msgid "Channels Logos Base URL" +msgstr "頻道商標基礎網址" + +msgctxt "#30040" +msgid "XMLTV Logos Options" +msgstr "XMLTV商標選項" + +msgctxt "#30041" +msgid "Channels Logos from XMLTV" +msgstr "來自XMLTV的頻道商標" msgctxt "#30042" msgid "Ignore" msgstr "忽略" + +msgctxt "#30043" +msgid "Prefer M3U" +msgstr "M3U優先" + +msgctxt "#30044" +msgid "Prefer XMLTV" +msgstr "XMLTV優先" From 1cfcd05927df59fcf9e9081f62721e71adfa9ae0 Mon Sep 17 00:00:00 2001 From: Gal Golan Date: Fri, 13 Jan 2017 16:38:04 +0200 Subject: [PATCH 044/100] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 85037a8ef..10d22cafc 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ IPTV Live TV and Radio PVR client addon for [Kodi] (http://kodi.tv) 1. `git clone https://github.com/xbmc/xbmc.git` 2. `git clone https://github.com/kodi-pvr/pvr.iptvsimple.git` 3. `cd pvr.iptvsimple && mkdir build && cd build` -4. `cmake -DADDONS_TO_BUILD=pvr.iptvsimple -DADDON_SRC_PREFIX=../.. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=../../xbmc/addons -DPACKAGE_ZIP=1 ../../xbmc/project/cmake/addons` +4. `cmake -DADDONS_TO_BUILD=pvr.iptvsimple -DADDON_SRC_PREFIX=../.. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=../../xbmc/addons -DPACKAGE_ZIP=1 ../../xbmc/cmake/addons` 5. `make` ##### Useful links From 6ebc37c07fa428a4d11c90d7b0df983d6d75bc71 Mon Sep 17 00:00:00 2001 From: MrYadro Date: Tue, 17 Jan 2017 20:00:27 +0700 Subject: [PATCH 045/100] fix tvg-shift=0 --- src/PVRIptvData.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/PVRIptvData.cpp b/src/PVRIptvData.cpp index ebc6baa6d..65790208a 100644 --- a/src/PVRIptvData.cpp +++ b/src/PVRIptvData.cpp @@ -372,6 +372,7 @@ bool PVRIptvData::LoadPlayList(void) std::string strTvgId = ""; std::string strTvgName = ""; std::string strTvgLogo = ""; + std::string strTvgShift = ""; std::string strGroupName = ""; std::string strRadio = ""; @@ -395,7 +396,7 @@ bool PVRIptvData::LoadPlayList(void) strChnlNo = ReadMarkerValue(strInfoLine, TVG_INFO_CHNO_MARKER); strGroupName = ReadMarkerValue(strInfoLine, GROUP_NAME_MARKER); strRadio = ReadMarkerValue(strInfoLine, RADIO_MARKER); - fTvgShift = atof(ReadMarkerValue(strInfoLine, TVG_INFO_SHIFT_MARKER).c_str()); + strTvgShift = ReadMarkerValue(strInfoLine, TVG_INFO_SHIFT_MARKER); if (strTvgId.empty()) { @@ -411,6 +412,7 @@ bool PVRIptvData::LoadPlayList(void) { iChannelNum = atoi(strChnlNo.c_str()); } + fTvgShift = atof(strTvgShift.c_str()); bRadio = !StringUtils::CompareNoCase(strRadio, "true"); tmpChannel.strTvgId = strTvgId; @@ -419,7 +421,7 @@ bool PVRIptvData::LoadPlayList(void) tmpChannel.iTvgShift = (int)(fTvgShift * 3600.0); tmpChannel.bRadio = bRadio; - if (tmpChannel.iTvgShift == 0 && iEPGTimeShift != 0) + if (strTvgShift.empty()) { tmpChannel.iTvgShift = iEPGTimeShift; } From 75ca25f8cb3beaf8ba8f42b559d0ca4e959c6ab0 Mon Sep 17 00:00:00 2001 From: MrYadro Date: Tue, 17 Jan 2017 20:30:36 +0700 Subject: [PATCH 046/100] Fix trailing spaces and travis CI --- .travis.yml | 12 +-- src/PVRIptvData.cpp | 178 ++++++++++++++++++++++---------------------- 2 files changed, 95 insertions(+), 95 deletions(-) diff --git a/.travis.yml b/.travis.yml index 1a95af741..a310674a1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,18 +3,18 @@ language: cpp # # Define the build matrix # -# Travis defaults to building on Ubuntu Precise when building on -# Linux. We need Trusty in order to get up to date versions of +# Travis defaults to building on Ubuntu Precise when building on +# Linux. We need Trusty in order to get up to date versions of # cmake and g++. # matrix: include: - os: linux - dist: trusty + dist: trusty sudo: required compiler: gcc - os: linux - dist: trusty + dist: trusty sudo: required compiler: clang - os: osx @@ -23,7 +23,7 @@ matrix: osx_image: xcode6.1 # -# Some of the OS X images don't have cmake, contrary to what people +# Some of the OS X images don't have cmake, contrary to what people # on the Internet say # before_install: @@ -38,6 +38,6 @@ before_script: - cd $TRAVIS_BUILD_DIR/.. - git clone --depth=1 https://github.com/xbmc/xbmc.git - cd pvr.iptvsimple && mkdir build && cd build - - cmake -DADDONS_TO_BUILD=pvr.iptvsimple -DADDON_SRC_PREFIX=$TRAVIS_BUILD_DIR/.. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=$TRAVIS_BUILD_DIR/../xbmc/addons -DPACKAGE_ZIP=1 $TRAVIS_BUILD_DIR/../xbmc/project/cmake/addons + - cmake -DADDONS_TO_BUILD=pvr.iptvsimple -DADDON_SRC_PREFIX=$TRAVIS_BUILD_DIR/.. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=$TRAVIS_BUILD_DIR/../xbmc/addons -DPACKAGE_ZIP=1 $TRAVIS_BUILD_DIR/../xbmc/cmake/addons script: make diff --git a/src/PVRIptvData.cpp b/src/PVRIptvData.cpp index ebc6baa6d..4acd737ee 100644 --- a/src/PVRIptvData.cpp +++ b/src/PVRIptvData.cpp @@ -104,7 +104,7 @@ PVRIptvData::~PVRIptvData(void) m_genres.clear(); } -bool PVRIptvData::LoadEPG(time_t iStart, time_t iEnd) +bool PVRIptvData::LoadEPG(time_t iStart, time_t iEnd) { if (m_strXMLTVUrl.empty()) { @@ -119,7 +119,7 @@ bool PVRIptvData::LoadEPG(time_t iStart, time_t iEnd) int iCount = 0; while(iCount < 3) // max 3 tries { - if ((iReaded = GetCachedFileContents(TVG_FILE_NAME, m_strXMLTVUrl, data, g_bCacheEPG)) != 0) + if ((iReaded = GetCachedFileContents(TVG_FILE_NAME, m_strXMLTVUrl, data, g_bCacheEPG)) != 0) { break; } @@ -129,7 +129,7 @@ bool PVRIptvData::LoadEPG(time_t iStart, time_t iEnd) usleep(2 * 1000 * 1000); // sleep 2 sec before next try. } } - + if (iReaded == 0) { XBMC->Log(LOG_ERROR, "Unable to load EPG file '%s': file is missing or empty. After %d tries.", m_strXMLTVUrl.c_str(), iCount); @@ -139,7 +139,7 @@ bool PVRIptvData::LoadEPG(time_t iStart, time_t iEnd) char * buffer; // gzip packed - if (data[0] == '\x1F' && data[1] == '\x8B' && data[2] == '\x08') + if (data[0] == '\x1F' && data[1] == '\x8B' && data[2] == '\x08') { if (!GzipInflate(data, decompressed)) { @@ -170,11 +170,11 @@ bool PVRIptvData::LoadEPG(time_t iStart, time_t iEnd) } xml_document<> xmlDoc; - try + try { xmlDoc.parse<0>(buffer); - } - catch(parse_error p) + } + catch(parse_error p) { XBMC->Log(LOG_ERROR, "Unable parse EPG XML: %s", p.what()); return false; @@ -188,7 +188,7 @@ bool PVRIptvData::LoadEPG(time_t iStart, time_t iEnd) } // clear previously loaded epg - if (m_epg.size() > 0) + if (m_epg.size() > 0) m_epg.clear(); int iBroadCastId = 0; @@ -216,12 +216,12 @@ bool PVRIptvData::LoadEPG(time_t iStart, time_t iEnd) m_epg.push_back(epgChannel); } - if (m_epg.size() == 0) + if (m_epg.size() == 0) { XBMC->Log(LOG_ERROR, "EPG channels not found."); return false; } - + int iMinShiftTime = m_iEPGTimeShift; int iMaxShiftTime = m_iEPGTimeShift; if (!m_bTSOverride) @@ -253,14 +253,14 @@ bool PVRIptvData::LoadEPG(time_t iStart, time_t iEnd) } std::string strStart, strStop; - if ( !GetAttributeValue(pChannelNode, "start", strStart) - || !GetAttributeValue(pChannelNode, "stop", strStop)) + if ( !GetAttributeValue(pChannelNode, "start", strStart) + || !GetAttributeValue(pChannelNode, "stop", strStop)) continue; int iTmpStart = ParseDateTime(strStart); int iTmpEnd = ParseDateTime(strStop); - if ( (iTmpEnd + iMaxShiftTime < iStart) + if ( (iTmpEnd + iMaxShiftTime < iStart) || (iTmpStart + iMinShiftTime > iEnd)) continue; @@ -294,7 +294,7 @@ bool PVRIptvData::LoadEPG(time_t iStart, time_t iEnd) return true; } -bool PVRIptvData::LoadPlayList(void) +bool PVRIptvData::LoadPlayList(void) { if (m_strM3uUrl.empty()) { @@ -328,7 +328,7 @@ bool PVRIptvData::LoadPlayList(void) tmpChannel.iTvgShift = 0; char szLine[1024]; - while(stream.getline(szLine, 1024)) + while(stream.getline(szLine, 1024)) { std::string strLine(szLine); strLine = StringUtils::TrimRight(strLine, " \t\r\n"); @@ -341,7 +341,7 @@ bool PVRIptvData::LoadPlayList(void) continue; } - if (bFirst) + if (bFirst) { bFirst = false; if (StringUtils::Left(strLine, 3) == "\xEF\xBB\xBF") @@ -378,7 +378,7 @@ bool PVRIptvData::LoadPlayList(void) // parse line int iColon = (int)strLine.find(':'); int iComma = (int)strLine.rfind(','); - if (iColon >= 0 && iComma >= 0 && iComma > iColon) + if (iColon >= 0 && iComma >= 0 && iComma > iColon) { // parse name iComma++; @@ -407,7 +407,7 @@ bool PVRIptvData::LoadPlayList(void) { strTvgLogo = strChnlName; } - if (!strChnlNo.empty()) + if (!strChnlNo.empty()) { iChannelNum = atoi(strChnlNo.c_str()); } @@ -445,7 +445,7 @@ bool PVRIptvData::LoadPlayList(void) } } } - } + } else if (strLine[0] != '#') { XBMC->Log(LOG_DEBUG, @@ -466,7 +466,7 @@ bool PVRIptvData::LoadPlayList(void) iChannelNum++; - if (iCurrentGroupId > 0) + if (iCurrentGroupId > 0) { channel.bRadio = m_groups.at(iCurrentGroupId - 1).bRadio; m_groups.at(iCurrentGroupId - 1).members.push_back(iChannelIndex); @@ -483,7 +483,7 @@ bool PVRIptvData::LoadPlayList(void) tmpChannel.bRadio = false; } } - + stream.clear(); if (m_channels.size() == 0) @@ -672,7 +672,7 @@ PVR_ERROR PVRIptvData::GetEPGForChannel(ADDON_HANDLE handle, const PVR_CHANNEL & if (myChannel->iUniqueId != (int) channel.iUniqueId) continue; - if (iStart > m_iLastStart || iEnd > m_iLastEnd) + if (iStart > m_iLastStart || iEnd > m_iLastEnd) { // reload EPG for new time interval only LoadEPG(iStart, iEnd); @@ -692,7 +692,7 @@ PVR_ERROR PVRIptvData::GetEPGForChannel(ADDON_HANDLE handle, const PVR_CHANNEL & std::vector::iterator myTag; for (myTag = epg->epg.begin(); myTag < epg->epg.end(); ++myTag) { - if ((myTag->endTime + iShift) < iStart) + if ((myTag->endTime + iShift) < iStart) continue; int iGenreType, iGenreSubType; @@ -787,9 +787,9 @@ int PVRIptvData::ParseDateTime(std::string& strDate, bool iDateFormat) #else _get_timezone(&offset); #endif // TARGET_WINDOWS - + long offset_of_date = (hours * 60 * 60) + (minutes * 60); - if (sign == '-') + if (sign == '-') { offset_of_date = -offset_of_date; } @@ -808,7 +808,7 @@ PVRIptvChannel * PVRIptvData::FindChannel(const std::string &strId, const std::s if (it->strTvgId == strId) return &*it; - if (strTvgName == "") + if (strTvgName == "") continue; if (it->strTvgName == strTvgName) @@ -890,7 +890,7 @@ bool PVRIptvData::FindEpgGenre(const std::string& strGenre, int& iType, int& iSu * Author: Andrew Lim Chong Liang * http://windrealm.org */ -bool PVRIptvData::GzipInflate( const std::string& compressedBytes, std::string& uncompressedBytes ) { +bool PVRIptvData::GzipInflate( const std::string& compressedBytes, std::string& uncompressedBytes ) { #define HANDLE_CALL_ZLIB(status) { \ if(status != Z_OK) { \ @@ -899,68 +899,68 @@ bool PVRIptvData::GzipInflate( const std::string& compressedBytes, std::string& } \ } - if ( compressedBytes.size() == 0 ) - { - uncompressedBytes = compressedBytes ; - return true ; - } - - uncompressedBytes.clear() ; - - unsigned full_length = compressedBytes.size() ; - unsigned half_length = compressedBytes.size() / 2; - - unsigned uncompLength = full_length ; - char* uncomp = (char*) calloc( sizeof(char), uncompLength ); - - z_stream strm; - strm.next_in = (Bytef *) compressedBytes.c_str(); - strm.avail_in = compressedBytes.size() ; - strm.total_out = 0; - strm.zalloc = Z_NULL; - strm.zfree = Z_NULL; - - bool done = false ; - + if ( compressedBytes.size() == 0 ) + { + uncompressedBytes = compressedBytes ; + return true ; + } + + uncompressedBytes.clear() ; + + unsigned full_length = compressedBytes.size() ; + unsigned half_length = compressedBytes.size() / 2; + + unsigned uncompLength = full_length ; + char* uncomp = (char*) calloc( sizeof(char), uncompLength ); + + z_stream strm; + strm.next_in = (Bytef *) compressedBytes.c_str(); + strm.avail_in = compressedBytes.size() ; + strm.total_out = 0; + strm.zalloc = Z_NULL; + strm.zfree = Z_NULL; + + bool done = false ; + HANDLE_CALL_ZLIB(inflateInit2(&strm, (16+MAX_WBITS))); - - while (!done) - { - // If our output buffer is too small - if (strm.total_out >= uncompLength ) + + while (!done) + { + // If our output buffer is too small + if (strm.total_out >= uncompLength ) { - // Increase size of output buffer + // Increase size of output buffer uncomp = (char *) realloc(uncomp, uncompLength + half_length); if (uncomp == NULL) return false; - uncompLength += half_length ; - } - - strm.next_out = (Bytef *) (uncomp + strm.total_out); - strm.avail_out = uncompLength - strm.total_out; - - // Inflate another chunk. - int err = inflate (&strm, Z_SYNC_FLUSH); - if (err == Z_STREAM_END) - done = true; - else if (err != Z_OK) - { - break; - } - } - + uncompLength += half_length ; + } + + strm.next_out = (Bytef *) (uncomp + strm.total_out); + strm.avail_out = uncompLength - strm.total_out; + + // Inflate another chunk. + int err = inflate (&strm, Z_SYNC_FLUSH); + if (err == Z_STREAM_END) + done = true; + else if (err != Z_OK) + { + break; + } + } + HANDLE_CALL_ZLIB(inflateEnd (&strm)); - - for ( size_t i=0; iFileExists(strCachedPath.c_str(), false)) + if (bUseCache && XBMC->FileExists(strCachedPath.c_str(), false)) { struct __stat64 statCached; struct __stat64 statOrig; @@ -977,16 +977,16 @@ int PVRIptvData::GetCachedFileContents(const std::string &strCachedName, const s XBMC->StatFile(strFilePath.c_str(), &statOrig); bNeedReload = statCached.st_mtime < statOrig.st_mtime || statOrig.st_mtime == 0; - } - else + } + else bNeedReload = true; - if (bNeedReload) + if (bNeedReload) { GetFileContents(strFilePath, strContents); // write to cache - if (bUseCache && strContents.length() > 0) + if (bUseCache && strContents.length() > 0) { void* fileHandle = XBMC->OpenFileForWrite(strCachedPath.c_str(), true); if (fileHandle) @@ -996,7 +996,7 @@ int PVRIptvData::GetCachedFileContents(const std::string &strCachedName, const s } } return strContents.length(); - } + } return GetFileContents(strCachedPath, strContents); } @@ -1008,7 +1008,7 @@ void PVRIptvData::ApplyChannelsLogos() { if (!channel->strTvgLogo.empty()) { - if (!m_strLogoPath.empty() + if (!m_strLogoPath.empty() // special proto && channel->strTvgLogo.find("://") == std::string::npos) channel->strLogoPath = PathCombine(m_strLogoPath, channel->strTvgLogo); @@ -1117,7 +1117,7 @@ std::string PVRIptvData::ReadMarkerValue(std::string &strLine, const char* strMa return std::string(""); } -int PVRIptvData::GetChannelId(const char * strChannelName, const char * strStreamUrl) +int PVRIptvData::GetChannelId(const char * strChannelName, const char * strStreamUrl) { std::string concat(strChannelName); concat.append(strStreamUrl); From cc5db367bd2d51119ff4f2e4c5f2481d70cadce9 Mon Sep 17 00:00:00 2001 From: Shani-08 Date: Mon, 30 Jan 2017 18:00:53 +0000 Subject: [PATCH 047/100] Increase Line Length to standard 4k Some of the Urls with ,ore than 1000 characters are being ignored. redoing this PR as the other one had multiple commits. --- src/PVRIptvData.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/PVRIptvData.cpp b/src/PVRIptvData.cpp index f0605f744..c9819bab3 100644 --- a/src/PVRIptvData.cpp +++ b/src/PVRIptvData.cpp @@ -327,8 +327,8 @@ bool PVRIptvData::LoadPlayList(void) tmpChannel.strTvgLogo = ""; tmpChannel.iTvgShift = 0; - char szLine[1024]; - while(stream.getline(szLine, 1024)) + char szLine[4096]; + while(stream.getline(szLine, 4096)) { std::string strLine(szLine); strLine = StringUtils::TrimRight(strLine, " \t\r\n"); From 050657ec98311557cd768d82bbd6580b7eff0702 Mon Sep 17 00:00:00 2001 From: Shani-08 Date: Tue, 31 Jan 2017 09:45:32 +0000 Subject: [PATCH 048/100] Updated Version for Line length change --- pvr.iptvsimple/addon.xml.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index 8ea008ae3..d9450d5f8 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,7 +1,7 @@ From 58b16dc02b23519335dd6155584d26a7b49ca7d6 Mon Sep 17 00:00:00 2001 From: Shani-08 Date: Tue, 31 Jan 2017 10:00:24 +0000 Subject: [PATCH 049/100] Update changelog.txt --- pvr.iptvsimple/changelog.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pvr.iptvsimple/changelog.txt b/pvr.iptvsimple/changelog.txt index 9a814c811..cb0118071 100644 --- a/pvr.iptvsimple/changelog.txt +++ b/pvr.iptvsimple/changelog.txt @@ -1,3 +1,6 @@ +v3.0.2 +- Fix: Change the line lenght to 4k + v3.0.0 - Initial Kodi v18 version From 0b41d6b66cf47086b5fec75d3b401c8e68f488fc Mon Sep 17 00:00:00 2001 From: "Michael T. DeGuzis" Date: Thu, 23 Feb 2017 23:50:47 -0500 Subject: [PATCH 050/100] fix install path fix install path fix install path simplify installation file --- debian/kodi-pvr-iptvsimple.install | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/kodi-pvr-iptvsimple.install b/debian/kodi-pvr-iptvsimple.install index a32115901..db2d2dc76 100644 --- a/debian/kodi-pvr-iptvsimple.install +++ b/debian/kodi-pvr-iptvsimple.install @@ -1,2 +1,2 @@ -usr/lib/*/addons/pvr.iptvsimple/pvr.iptvsimple.so* usr/lib/kodi/addons/pvr.iptvsimple -usr/share/kodi/addons/pvr.iptvsimple +usr/lib/* +usr/share/* From f848065f230b4f25c078f41687e4c9f4d6199b17 Mon Sep 17 00:00:00 2001 From: Alwin Esch Date: Wed, 26 Apr 2017 16:37:10 +0200 Subject: [PATCH 051/100] Remove not used part --- src/client.cpp | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/src/client.cpp b/src/client.cpp index 930263687..8cbe6ba05 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -225,16 +225,6 @@ void ADDON_Destroy() m_CurStatus = ADDON_STATUS_UNKNOWN; } -bool ADDON_HasSettings() -{ - return true; -} - -unsigned int ADDON_GetSettings(ADDON_StructSetting ***sSet) -{ - return 0; -} - ADDON_STATUS ADDON_SetSetting(const char *settingName, const void *settingValue) { // reset cache and restart addon @@ -266,10 +256,6 @@ void ADDON_Stop() { } -void ADDON_FreeSettings() -{ -} - /*********************************************************** * PVR Client AddOn specific public library functions ***********************************************************/ From 5110352d9346853fe5a63e66d9cfee41c831a17e Mon Sep 17 00:00:00 2001 From: Alwin Esch Date: Sat, 29 Apr 2017 10:07:14 +0200 Subject: [PATCH 052/100] libXBMC_codec.h removed and changed to libXBMC_pvr.h --- pvr.iptvsimple/addon.xml.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index d9450d5f8..5127c3f3f 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -6,7 +6,7 @@ provider-name="nightik"> - + Date: Sat, 29 Apr 2017 14:49:53 +0200 Subject: [PATCH 053/100] change to automatic interface version set --- pvr.iptvsimple/addon.xml.in | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index 5127c3f3f..996eac8d6 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,12 +1,13 @@ - + + Date: Tue, 2 May 2017 10:39:24 +0200 Subject: [PATCH 054/100] Revert "change to automatic interface version set" --- pvr.iptvsimple/addon.xml.in | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index 996eac8d6..5127c3f3f 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,13 +1,12 @@ - - + Date: Wed, 10 May 2017 17:03:12 +0200 Subject: [PATCH 055/100] change to automatic depends set on addon.xml --- CMakeLists.txt | 3 +++ pvr.iptvsimple/addon.xml.in | 7 ++----- pvr.iptvsimple/changelog.txt | 5 +++++ 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4d8f08043..a1eaddee4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -23,6 +23,9 @@ message(STATUS "ZLIB_LIBRARIES: ${ZLIB_LIBRARIES}") set(IPTV_SOURCES src/client.cpp src/PVRIptvData.cpp) +set(IPTV_HEADERS src/client.h + src/PVRIptvData.h) + build_addon(pvr.iptvsimple IPTV DEPLIBS) include(CPack) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index 5127c3f3f..58404fea8 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,13 +1,10 @@ - - - - + @ADDON_DEPENDS@ diff --git a/pvr.iptvsimple/changelog.txt b/pvr.iptvsimple/changelog.txt index cb0118071..cdaf06290 100644 --- a/pvr.iptvsimple/changelog.txt +++ b/pvr.iptvsimple/changelog.txt @@ -1,3 +1,8 @@ +v3.0.3 +- set dependency versions automatic during build +- removed never used kodi to addon functions +- build system fixes + v3.0.2 - Fix: Change the line lenght to 4k From 6a42b330a594e9dc8fc1ffb29d6e45326528e246 Mon Sep 17 00:00:00 2001 From: Alwin Esch Date: Tue, 16 May 2017 21:40:32 +0200 Subject: [PATCH 056/100] remove no more needed version functions --- pvr.iptvsimple/addon.xml.in | 2 +- pvr.iptvsimple/changelog.txt | 3 +++ src/client.cpp | 24 +----------------------- 3 files changed, 5 insertions(+), 24 deletions(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index 58404fea8..063d2ae89 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ diff --git a/pvr.iptvsimple/changelog.txt b/pvr.iptvsimple/changelog.txt index cdaf06290..fad1a275b 100644 --- a/pvr.iptvsimple/changelog.txt +++ b/pvr.iptvsimple/changelog.txt @@ -1,3 +1,6 @@ +v3.0.4 +- Removed old no more needed version functions + v3.0.3 - set dependency versions automatic during build - removed never used kodi to addon functions diff --git a/src/client.cpp b/src/client.cpp index 8cbe6ba05..7b09ad9a5 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -276,28 +276,6 @@ void OnPowerSavingDeactivated() { } -const char* GetPVRAPIVersion(void) -{ - static const char *strApiVersion = XBMC_PVR_API_VERSION; - return strApiVersion; -} - -const char* GetMininumPVRAPIVersion(void) -{ - static const char *strMinApiVersion = XBMC_PVR_MIN_API_VERSION; - return strMinApiVersion; -} - -const char* GetGUIAPIVersion(void) -{ - return ""; // GUI API not used -} - -const char* GetMininumGUIAPIVersion(void) -{ - return ""; // GUI API not used -} - PVR_ERROR GetAddonCapabilities(PVR_ADDON_CAPABILITIES* pCapabilities) { pCapabilities->bSupportsEPG = true; @@ -317,7 +295,7 @@ const char *GetBackendName(void) const char *GetBackendVersion(void) { - static std::string strBackendVersion = XBMC_PVR_API_VERSION; + static std::string strBackendVersion = STR(IPTV_VERSION); return strBackendVersion.c_str(); } From 5a5ec6f8059c55726ebe6b6f67b0ca76a956c317 Mon Sep 17 00:00:00 2001 From: Alwin Esch Date: Wed, 17 May 2017 14:42:27 +0200 Subject: [PATCH 057/100] update debian control --- debian/control | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/control b/debian/control index dd39bfabc..a28d436c9 100644 --- a/debian/control +++ b/debian/control @@ -1,8 +1,8 @@ Source: kodi-pvr-iptvsimple Priority: extra Maintainer: Anton Fedchin -Build-Depends: debhelper (>= 9.0.0), cmake, kodi-pvr-dev, - libkodiplatform-dev (>= 16.0.0), kodi-addon-dev, zlib1g-dev +Build-Depends: debhelper (>= 9.0.0), cmake, libkodiplatform-dev (>= 16.0.0), + kodi-addon-dev, zlib1g-dev Standards-Version: 3.9.4 Section: libs From 735c18182adf5be25eebd9d09b00989e29ba0a83 Mon Sep 17 00:00:00 2001 From: Alwin Esch Date: Wed, 17 May 2017 15:16:14 +0200 Subject: [PATCH 058/100] version increase after callback lib changes --- pvr.iptvsimple/addon.xml.in | 2 +- pvr.iptvsimple/changelog.txt | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index 063d2ae89..9e86431b4 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ diff --git a/pvr.iptvsimple/changelog.txt b/pvr.iptvsimple/changelog.txt index fad1a275b..d8310f767 100644 --- a/pvr.iptvsimple/changelog.txt +++ b/pvr.iptvsimple/changelog.txt @@ -1,3 +1,7 @@ +v3.0.5 +- Update Debian package control +- PVR addon callback way changes + v3.0.4 - Removed old no more needed version functions From 15df955e20541d613e5357a16003dd44151f5aa6 Mon Sep 17 00:00:00 2001 From: Alwin Esch Date: Mon, 22 May 2017 04:11:52 +0200 Subject: [PATCH 059/100] Update on kodi to addon interface --- pvr.iptvsimple/addon.xml.in | 2 +- pvr.iptvsimple/changelog.txt | 3 +++ src/client.cpp | 4 ---- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index 9e86431b4..285b45372 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ diff --git a/pvr.iptvsimple/changelog.txt b/pvr.iptvsimple/changelog.txt index d8310f767..868eaee5b 100644 --- a/pvr.iptvsimple/changelog.txt +++ b/pvr.iptvsimple/changelog.txt @@ -1,3 +1,6 @@ +v3.0.6 +- Remove of never used addon interface function + v3.0.5 - Update Debian package control - PVR addon callback way changes diff --git a/src/client.cpp b/src/client.cpp index 7b09ad9a5..cdde4491b 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -252,10 +252,6 @@ ADDON_STATUS ADDON_SetSetting(const char *settingName, const void *settingValue) return ADDON_STATUS_NEED_RESTART; } -void ADDON_Stop() -{ -} - /*********************************************************** * PVR Client AddOn specific public library functions ***********************************************************/ From 548adfb4da0a6ec7ca2c6bf713e1a43b4bc50b2d Mon Sep 17 00:00:00 2001 From: Kai Sommerfeld Date: Fri, 7 Jul 2017 11:51:49 +0200 Subject: [PATCH 060/100] Added minimalistic support for PVR Addon API 5.3.0 --- pvr.iptvsimple/addon.xml.in | 2 +- pvr.iptvsimple/changelog.txt | 3 +++ src/client.cpp | 5 +++++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index 285b45372..4fedce42f 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ diff --git a/pvr.iptvsimple/changelog.txt b/pvr.iptvsimple/changelog.txt index 868eaee5b..b1ebc2d8c 100644 --- a/pvr.iptvsimple/changelog.txt +++ b/pvr.iptvsimple/changelog.txt @@ -1,3 +1,6 @@ +v3.1.0 +- Updated to PVR addon API v5.3.0 + v3.0.6 - Remove of never used addon interface function diff --git a/src/client.cpp b/src/client.cpp index cdde4491b..7fd8fc2cd 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -279,6 +279,9 @@ PVR_ERROR GetAddonCapabilities(PVR_ADDON_CAPABILITIES* pCapabilities) pCapabilities->bSupportsRadio = true; pCapabilities->bSupportsChannelGroups = true; pCapabilities->bSupportsRecordings = false; + pCapabilities->bSupportsRecordingsRename = false; + pCapabilities->bSupportsRecordingsLifetimeChange = false; + pCapabilities->bSupportsDescrambleInfo = false; return PVR_ERROR_NO_ERROR; } @@ -453,4 +456,6 @@ 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; } PVR_ERROR SetEPGTimeFrame(int) { return PVR_ERROR_NOT_IMPLEMENTED; } +PVR_ERROR GetDescrambleInfo(PVR_DESCRAMBLE_INFO*) { return PVR_ERROR_NOT_IMPLEMENTED; } +PVR_ERROR SetRecordingLifetime(const PVR_RECORDING*) { return PVR_ERROR_NOT_IMPLEMENTED; } } From 09cb9d2d4051e598249f226f9f01ad4f23c0c3a3 Mon Sep 17 00:00:00 2001 From: Sam Stenvall Date: Sun, 6 Aug 2017 20:40:06 +0300 Subject: [PATCH 061/100] Ignore cmake-debug-build/, CLion creates it automatically unless configured --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index f8be080e6..c9fb2cde6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ # build artifacts build/ +cmake-build-debug/ debian/changelog debian/files debian/kodi-pvr-iptvsimple-dbg.debhelper.log From cc7cdd2abdae84ba523f408fcd91470f5538322a Mon Sep 17 00:00:00 2001 From: Sam Stenvall Date: Sun, 6 Aug 2017 20:24:25 +0300 Subject: [PATCH 062/100] Merge pull request #133 from badgeling/Krypton Remove limitation size for m3u importation in one line. --- src/PVRIptvData.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/PVRIptvData.cpp b/src/PVRIptvData.cpp index c9819bab3..646574bfd 100644 --- a/src/PVRIptvData.cpp +++ b/src/PVRIptvData.cpp @@ -327,10 +327,9 @@ bool PVRIptvData::LoadPlayList(void) tmpChannel.strTvgLogo = ""; tmpChannel.iTvgShift = 0; - char szLine[4096]; - while(stream.getline(szLine, 4096)) + std::string strLine; + while(std::getline(stream, strLine)) { - std::string strLine(szLine); strLine = StringUtils::TrimRight(strLine, " \t\r\n"); strLine = StringUtils::TrimLeft(strLine, " \t"); From 7071c192920c3de055f74ba89fdec4f884640127 Mon Sep 17 00:00:00 2001 From: Sam Stenvall Date: Sun, 6 Aug 2017 20:48:30 +0300 Subject: [PATCH 063/100] Bump version to v3.1.1 --- pvr.iptvsimple/addon.xml.in | 2 +- pvr.iptvsimple/changelog.txt | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index 4fedce42f..4410e0ee3 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ diff --git a/pvr.iptvsimple/changelog.txt b/pvr.iptvsimple/changelog.txt index b1ebc2d8c..7c8ef2c8c 100644 --- a/pvr.iptvsimple/changelog.txt +++ b/pvr.iptvsimple/changelog.txt @@ -1,3 +1,6 @@ +v3.1.1 +- removed line length limitation when parsing M3U files + v3.1.0 - Updated to PVR addon API v5.3.0 From efd96c4ebfce9186281cac6fa30095747649534d Mon Sep 17 00:00:00 2001 From: Sam Stenvall Date: Sun, 6 Aug 2017 21:00:46 +0300 Subject: [PATCH 064/100] Remove GetChannelSwitchDelay() method --- src/client.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/client.cpp b/src/client.cpp index 7fd8fc2cd..a6882d5e3 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -443,7 +443,6 @@ PVR_ERROR DeleteTimer(const PVR_TIMER &timer, bool bForceDelete) { return PVR_ER PVR_ERROR UpdateTimer(const PVR_TIMER &timer) { return PVR_ERROR_NOT_IMPLEMENTED; } void DemuxAbort(void) {} DemuxPacket* DemuxRead(void) { return NULL; } -unsigned int GetChannelSwitchDelay(void) { return 0; } bool IsTimeshifting(void) { return false; } bool IsRealTimeStream(void) { return true; } void PauseStream(bool bPaused) {} From 0c1a09bda3b09c601063f087ba5e0dff5cffdb4b Mon Sep 17 00:00:00 2001 From: Sam Stenvall Date: Sun, 6 Aug 2017 21:01:44 +0300 Subject: [PATCH 065/100] Add unimplemented GetStreamTimes() method --- src/client.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/client.cpp b/src/client.cpp index a6882d5e3..c11a4cb04 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -457,4 +457,5 @@ PVR_ERROR DeleteAllRecordingsFromTrash() { return PVR_ERROR_NOT_IMPLEMENTED; } PVR_ERROR SetEPGTimeFrame(int) { return PVR_ERROR_NOT_IMPLEMENTED; } PVR_ERROR GetDescrambleInfo(PVR_DESCRAMBLE_INFO*) { return PVR_ERROR_NOT_IMPLEMENTED; } PVR_ERROR SetRecordingLifetime(const PVR_RECORDING*) { return PVR_ERROR_NOT_IMPLEMENTED; } +PVR_ERROR GetStreamTimes(PVR_STREAM_TIMES *times) { return PVR_ERROR_NOT_IMPLEMENTED; } } From 28d6248249e2c6f50ac5c522856baa1478b36fca Mon Sep 17 00:00:00 2001 From: Sam Stenvall Date: Sun, 6 Aug 2017 22:04:50 +0300 Subject: [PATCH 066/100] Implement GetLiveStreamURL() to restore live TV playback functionality --- pvr.iptvsimple/addon.xml.in | 2 +- pvr.iptvsimple/changelog.txt | 3 +++ src/PVRIptvData.cpp | 1 - src/client.cpp | 32 ++++++-------------------------- 4 files changed, 10 insertions(+), 28 deletions(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index 4410e0ee3..efdb28b46 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ diff --git a/pvr.iptvsimple/changelog.txt b/pvr.iptvsimple/changelog.txt index 7c8ef2c8c..f45d9cdb8 100644 --- a/pvr.iptvsimple/changelog.txt +++ b/pvr.iptvsimple/changelog.txt @@ -1,3 +1,6 @@ +v3.2.0 +- Updated to PVR addon API v5.5.0 + v3.1.1 - removed line length limitation when parsing M3U files diff --git a/src/PVRIptvData.cpp b/src/PVRIptvData.cpp index 646574bfd..cc106de7c 100644 --- a/src/PVRIptvData.cpp +++ b/src/PVRIptvData.cpp @@ -579,7 +579,6 @@ PVR_ERROR PVRIptvData::GetChannels(ADDON_HANDLE handle, bool bRadio) xbmcChannel.bIsRadio = channel.bRadio; xbmcChannel.iChannelNumber = channel.iChannelNumber; strncpy(xbmcChannel.strChannelName, channel.strChannelName.c_str(), sizeof(xbmcChannel.strChannelName) - 1); - strncpy(xbmcChannel.strStreamURL, channel.strStreamURL.c_str(), sizeof(xbmcChannel.strStreamURL) - 1); xbmcChannel.iEncryptionSystem = channel.iEncryptionSystem; strncpy(xbmcChannel.strIconPath, channel.strLogoPath.c_str(), sizeof(xbmcChannel.strIconPath) - 1); xbmcChannel.bIsHidden = false; diff --git a/src/client.cpp b/src/client.cpp index c11a4cb04..7cd838f74 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -36,7 +36,6 @@ using namespace ADDON; bool m_bCreated = false; ADDON_STATUS m_CurStatus = ADDON_STATUS_UNKNOWN; PVRIptvData *m_data = NULL; -bool m_bIsPlaying = false; PVRIptvChannel m_currentChannel; /* User adjustable settings are saved here. @@ -340,32 +339,12 @@ PVR_ERROR GetChannels(ADDON_HANDLE handle, bool bRadio) return PVR_ERROR_SERVER_ERROR; } -bool OpenLiveStream(const PVR_CHANNEL &channel) +const char *GetLiveStreamURL(const PVR_CHANNEL &channel) { - if (m_data) - { - CloseLiveStream(); - - if (m_data->GetChannel(channel, m_currentChannel)) - { - m_bIsPlaying = true; - return true; - } - } - - return false; -} - -void CloseLiveStream(void) -{ - m_bIsPlaying = false; -} + if (m_data && m_data->GetChannel(channel, m_currentChannel)) + return m_currentChannel.strStreamURL.c_str(); -bool SwitchChannel(const PVR_CHANNEL &channel) -{ - CloseLiveStream(); - - return OpenLiveStream(channel); + return ""; } PVR_ERROR GetStreamProperties(PVR_STREAM_PROPERTIES* pProperties) @@ -406,7 +385,6 @@ PVR_ERROR SignalStatus(PVR_SIGNAL_STATUS &signalStatus) } /** 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; } @@ -417,7 +395,9 @@ PVR_ERROR RenameChannel(const PVR_CHANNEL &channel) { return PVR_ERROR_NOT_IMPLE 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; } +void CloseLiveStream(void) { } bool OpenRecordedStream(const PVR_RECORDING &recording) { return false; } +bool OpenLiveStream(const PVR_CHANNEL &channel) { return false; } void CloseRecordedStream(void) {} int ReadRecordedStream(unsigned char *pBuffer, unsigned int iBufferSize) { return 0; } long long SeekRecordedStream(long long iPosition, int iWhence /* = SEEK_SET */) { return 0; } From aff4226ffd42b510def74f0835c7b007e2add5f7 Mon Sep 17 00:00:00 2001 From: mttronc Date: Mon, 10 Apr 2017 23:59:06 +0200 Subject: [PATCH 067/100] Support multiple groups per channel --- src/PVRIptvData.cpp | 41 ++++++++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/src/PVRIptvData.cpp b/src/PVRIptvData.cpp index cc106de7c..1a9b6822c 100644 --- a/src/PVRIptvData.cpp +++ b/src/PVRIptvData.cpp @@ -316,9 +316,9 @@ bool PVRIptvData::LoadPlayList(void) int iChannelIndex = 0; int iUniqueGroupId = 0; - int iCurrentGroupId = 0; int iChannelNum = g_iStartNumber; int iEPGTimeShift = 0; + std::vector iCurrentGroupId; PVRIptvChannel tmpChannel; tmpChannel.strTvgId = ""; @@ -427,22 +427,28 @@ bool PVRIptvData::LoadPlayList(void) if (!strGroupName.empty()) { - strGroupName = XBMC->UnknownToUTF8(strGroupName.c_str()); - + std::stringstream streamGroups(strGroupName); PVRIptvChannelGroup * pGroup; - if ((pGroup = FindGroup(strGroupName)) == NULL) - { - PVRIptvChannelGroup group; - group.strGroupName = strGroupName; - group.iGroupId = ++iUniqueGroupId; - group.bRadio = bRadio; + iCurrentGroupId.clear(); - m_groups.push_back(group); - iCurrentGroupId = iUniqueGroupId; - } - else + while(std::getline(streamGroups, strGroupName, ';')) { - iCurrentGroupId = pGroup->iGroupId; + strGroupName = XBMC->UnknownToUTF8(strGroupName.c_str()); + + if ((pGroup = FindGroup(strGroupName)) == NULL) + { + PVRIptvChannelGroup group; + group.strGroupName = strGroupName; + group.iGroupId = ++iUniqueGroupId; + group.bRadio = bRadio; + + m_groups.push_back(group); + iCurrentGroupId.push_back(iUniqueGroupId); + } + else + { + iCurrentGroupId.push_back(pGroup->iGroupId); + } } } } @@ -467,10 +473,11 @@ bool PVRIptvData::LoadPlayList(void) iChannelNum++; - if (iCurrentGroupId > 0) + std::vector::iterator it; + for (auto it = iCurrentGroupId.begin(); it != iCurrentGroupId.end(); ++it) { - channel.bRadio = m_groups.at(iCurrentGroupId - 1).bRadio; - m_groups.at(iCurrentGroupId - 1).members.push_back(iChannelIndex); + channel.bRadio = m_groups.at(*it - 1).bRadio; + m_groups.at(*it - 1).members.push_back(iChannelIndex); } m_channels.push_back(channel); From 620f4b4e493d9047207eee82bd0c1188a5f801c1 Mon Sep 17 00:00:00 2001 From: mttronc Date: Sun, 6 Aug 2017 23:19:55 +0200 Subject: [PATCH 068/100] Bump version to 3.2.1 & update changelog --- pvr.iptvsimple/addon.xml.in | 2 +- pvr.iptvsimple/changelog.txt | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index efdb28b46..990ae112a 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ diff --git a/pvr.iptvsimple/changelog.txt b/pvr.iptvsimple/changelog.txt index f45d9cdb8..15c9aafe5 100644 --- a/pvr.iptvsimple/changelog.txt +++ b/pvr.iptvsimple/changelog.txt @@ -1,3 +1,6 @@ +v3.2.1 +- Added support for multiple groups per channel, separated by semicolon + v3.2.0 - Updated to PVR addon API v5.5.0 From bf43104ed830732eac5c7cd71560bc9c4cacecb5 Mon Sep 17 00:00:00 2001 From: Anton Fedchin Date: Mon, 7 Aug 2017 09:35:29 +0300 Subject: [PATCH 069/100] [win10] do not include StdString header (not used actually) --- src/PVRIptvData.cpp | 7 +++++-- src/PVRIptvData.h | 4 ++-- src/client.cpp | 1 - 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/PVRIptvData.cpp b/src/PVRIptvData.cpp index cc106de7c..06395b64d 100644 --- a/src/PVRIptvData.cpp +++ b/src/PVRIptvData.cpp @@ -22,15 +22,18 @@ * */ -#include -#include +#include #include #include +#include #include +#include + #include "zlib.h" #include "rapidxml/rapidxml.hpp" #include "PVRIptvData.h" #include "p8-platform/util/StringUtils.h" +#include "client.h" #define M3U_START_MARKER "#EXTM3U" #define M3U_INFO_MARKER "#EXTINF" diff --git a/src/PVRIptvData.h b/src/PVRIptvData.h index b14765048..b87dfdc16 100644 --- a/src/PVRIptvData.h +++ b/src/PVRIptvData.h @@ -24,8 +24,8 @@ */ #include -#include "p8-platform/util/StdString.h" -#include "client.h" +#include "p8-platform/os.h" +#include "libXBMC_pvr.h" #include "p8-platform/threads/threads.h" struct PVRIptvEpgEntry diff --git a/src/client.cpp b/src/client.cpp index 7cd838f74..bce87b0e5 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -23,7 +23,6 @@ */ #include "client.h" -#include "xbmc_pvr_dll.h" #include "PVRIptvData.h" #include "p8-platform/util/util.h" From 23419f33f0470bebce9f116c1730f22b86ed27f2 Mon Sep 17 00:00:00 2001 From: Anton Fedchin Date: Mon, 7 Aug 2017 11:18:04 +0300 Subject: [PATCH 070/100] [win32] drop direct calls to WinAPI --- src/client.cpp | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/src/client.cpp b/src/client.cpp index bce87b0e5..44f18ff05 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -30,6 +30,12 @@ using namespace ADDON; #ifdef TARGET_WINDOWS #define snprintf _snprintf +#ifdef CreateDirectory +#undef CreateDirectory +#endif +#ifdef DeleteFile +#undef DeleteFile +#endif #endif bool m_bCreated = false; @@ -195,11 +201,7 @@ ADDON_STATUS ADDON_Create(void* hdl, void* props) if (!XBMC->DirectoryExists(g_strUserPath.c_str())) { -#ifdef TARGET_WINDOWS - CreateDirectory(g_strUserPath.c_str(), NULL); -#else XBMC->CreateDirectory(g_strUserPath.c_str()); -#endif } ADDON_ReadSettings(); @@ -230,21 +232,13 @@ ADDON_STATUS ADDON_SetSetting(const char *settingName, const void *settingValue) std::string strFile = GetUserFilePath(M3U_FILE_NAME); if (XBMC->FileExists(strFile.c_str(), false)) { -#ifdef TARGET_WINDOWS - DeleteFile(strFile.c_str()); -#else XBMC->DeleteFile(strFile.c_str()); -#endif } strFile = GetUserFilePath(TVG_FILE_NAME); if (XBMC->FileExists(strFile.c_str(), false)) { -#ifdef TARGET_WINDOWS - DeleteFile(strFile.c_str()); -#else XBMC->DeleteFile(strFile.c_str()); -#endif } return ADDON_STATUS_NEED_RESTART; From 29af69f382acda91e77ab3053cc16ffb94d3eca2 Mon Sep 17 00:00:00 2001 From: Anton Fedchin Date: Tue, 8 Aug 2017 15:33:54 +0300 Subject: [PATCH 071/100] fix undefined symbol: get_addon after #147 --- src/client.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/client.cpp b/src/client.cpp index 44f18ff05..6324926fb 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -23,6 +23,7 @@ */ #include "client.h" +#include "xbmc_pvr_dll.h" #include "PVRIptvData.h" #include "p8-platform/util/util.h" From 22866129d36c2aa622641abc0ba3426ba2f3bf4f Mon Sep 17 00:00:00 2001 From: Sam Stenvall Date: Sun, 13 Aug 2017 10:57:06 +0300 Subject: [PATCH 072/100] Fix links in the README (closes #145) --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 10d22cafc..35e348cd6 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,8 @@ [![Coverity Scan Build Status](https://scan.coverity.com/projects/5120/badge.svg)](https://scan.coverity.com/projects/5120) # IPTV Simple PVR -IPTV Live TV and Radio PVR client addon for [Kodi] (http://kodi.tv) + +IPTV Live TV and Radio PVR client addon for [Kodi](http://kodi.tv) ## Build instructions @@ -16,5 +17,5 @@ IPTV Live TV and Radio PVR client addon for [Kodi] (http://kodi.tv) ##### Useful links -* [Kodi's PVR user support] (http://forum.kodi.tv/forumdisplay.php?fid=167) -* [Kodi's PVR development support] (http://forum.kodi.tv/forumdisplay.php?fid=136) +* [Kodi's PVR user support](http://forum.kodi.tv/forumdisplay.php?fid=167) +* [Kodi's PVR development support](http://forum.kodi.tv/forumdisplay.php?fid=136) From 220349aff79211203605b572da7d13ece2de2d38 Mon Sep 17 00:00:00 2001 From: Kai Sommerfeld Date: Sun, 13 Aug 2017 23:13:54 +0200 Subject: [PATCH 073/100] PVR API 5.6.0: Remove GetLiveStreamURL. Remove PVR_RECORDING::strStreamURL. Add GetChannelStreamProperties. Add GetRecordingStreamProperties. --- pvr.iptvsimple/addon.xml.in | 2 +- pvr.iptvsimple/changelog.txt | 3 +++ src/client.cpp | 29 +++++++++++++++++++---------- 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index 990ae112a..21bb1ebd0 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ diff --git a/pvr.iptvsimple/changelog.txt b/pvr.iptvsimple/changelog.txt index 15c9aafe5..b0b2bcd98 100644 --- a/pvr.iptvsimple/changelog.txt +++ b/pvr.iptvsimple/changelog.txt @@ -1,3 +1,6 @@ +v3.2.2 +- Updated to PVR addon API v5.6.0 + v3.2.1 - Added support for multiple groups per channel, separated by semicolon diff --git a/src/client.cpp b/src/client.cpp index 6324926fb..d7450787a 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -333,17 +333,23 @@ PVR_ERROR GetChannels(ADDON_HANDLE handle, bool bRadio) return PVR_ERROR_SERVER_ERROR; } -const char *GetLiveStreamURL(const PVR_CHANNEL &channel) +PVR_ERROR GetChannelStreamProperties(const PVR_CHANNEL* channel, PVR_NAMED_VALUE* properties, unsigned int* iPropertiesCount) { - if (m_data && m_data->GetChannel(channel, m_currentChannel)) - return m_currentChannel.strStreamURL.c_str(); + if (!channel || !properties || !iPropertiesCount) + return PVR_ERROR_SERVER_ERROR; - return ""; -} + if (*iPropertiesCount < 1) + return PVR_ERROR_INVALID_PARAMETERS; -PVR_ERROR GetStreamProperties(PVR_STREAM_PROPERTIES* pProperties) -{ - return PVR_ERROR_NOT_IMPLEMENTED; + if (m_data && m_data->GetChannel(*channel, m_currentChannel)) + { + strncpy(properties[0].strName, PVR_STREAM_PROPERTY_STREAMURL, sizeof(properties[0].strName) - 1); + strncpy(properties[0].strValue, m_currentChannel.strStreamURL.c_str(), sizeof(properties[0].strValue) - 1); + *iPropertiesCount = 1; + return PVR_ERROR_NO_ERROR; + } + + return PVR_ERROR_SERVER_ERROR; } int GetChannelGroupsAmount(void) @@ -382,6 +388,7 @@ PVR_ERROR SignalStatus(PVR_SIGNAL_STATUS &signalStatus) 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 GetRecordingStreamProperties(const PVR_RECORDING*, PVR_NAMED_VALUE*, unsigned int*) { return PVR_ERROR_NOT_IMPLEMENTED; } PVR_ERROR OpenDialogChannelScan(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; } @@ -431,5 +438,7 @@ PVR_ERROR DeleteAllRecordingsFromTrash() { return PVR_ERROR_NOT_IMPLEMENTED; } PVR_ERROR SetEPGTimeFrame(int) { return PVR_ERROR_NOT_IMPLEMENTED; } PVR_ERROR GetDescrambleInfo(PVR_DESCRAMBLE_INFO*) { return PVR_ERROR_NOT_IMPLEMENTED; } PVR_ERROR SetRecordingLifetime(const PVR_RECORDING*) { return PVR_ERROR_NOT_IMPLEMENTED; } -PVR_ERROR GetStreamTimes(PVR_STREAM_TIMES *times) { return PVR_ERROR_NOT_IMPLEMENTED; } -} +PVR_ERROR GetStreamTimes(PVR_STREAM_TIMES*) { return PVR_ERROR_NOT_IMPLEMENTED; } +PVR_ERROR GetStreamProperties(PVR_STREAM_PROPERTIES*) { return PVR_ERROR_NOT_IMPLEMENTED; } + +} // extern "C" From 00f19965d03db9b6cf7fbef98ed34c87b0d6bf4b Mon Sep 17 00:00:00 2001 From: Kai Sommerfeld Date: Wed, 23 Aug 2017 22:38:48 +0200 Subject: [PATCH 074/100] PVR API 5.7.0: Add IsEPGTagRecordable, IsEPGTagPlayable, GetEPGTagStreamProperties. --- pvr.iptvsimple/addon.xml.in | 2 +- pvr.iptvsimple/changelog.txt | 3 +++ src/PVRIptvData.cpp | 3 ++- src/client.cpp | 3 +++ 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index 21bb1ebd0..5c3f8a0e7 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ diff --git a/pvr.iptvsimple/changelog.txt b/pvr.iptvsimple/changelog.txt index b0b2bcd98..ec5818435 100644 --- a/pvr.iptvsimple/changelog.txt +++ b/pvr.iptvsimple/changelog.txt @@ -1,3 +1,6 @@ +v3.3.0 +- Updated to PVR addon API v5.7.0 + v3.2.2 - Updated to PVR addon API v5.6.0 diff --git a/src/PVRIptvData.cpp b/src/PVRIptvData.cpp index 1fb662877..17a5b8920 100644 --- a/src/PVRIptvData.cpp +++ b/src/PVRIptvData.cpp @@ -269,6 +269,7 @@ bool PVRIptvData::LoadEPG(time_t iStart, time_t iEnd) PVRIptvEpgEntry entry; entry.iBroadcastId = ++iBroadCastId; + entry.iChannelId = atoi(strId.c_str()); entry.iGenreType = 0; entry.iGenreSubType = 0; entry.strPlotOutline = ""; @@ -712,7 +713,7 @@ PVR_ERROR PVRIptvData::GetEPGForChannel(ADDON_HANDLE handle, const PVR_CHANNEL & tag.iUniqueBroadcastId = myTag->iBroadcastId; tag.strTitle = myTag->strTitle.c_str(); - tag.iChannelNumber = myTag->iChannelId; + tag.iUniqueChannelId = channel.iUniqueId; tag.startTime = myTag->startTime + iShift; tag.endTime = myTag->endTime + iShift; tag.strPlotOutline = myTag->strPlotOutline.c_str(); diff --git a/src/client.cpp b/src/client.cpp index d7450787a..e79fa1bf1 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -440,5 +440,8 @@ PVR_ERROR GetDescrambleInfo(PVR_DESCRAMBLE_INFO*) { return PVR_ERROR_NOT_IMPLEME PVR_ERROR SetRecordingLifetime(const PVR_RECORDING*) { return PVR_ERROR_NOT_IMPLEMENTED; } PVR_ERROR GetStreamTimes(PVR_STREAM_TIMES*) { return PVR_ERROR_NOT_IMPLEMENTED; } PVR_ERROR GetStreamProperties(PVR_STREAM_PROPERTIES*) { return PVR_ERROR_NOT_IMPLEMENTED; } +PVR_ERROR IsEPGTagRecordable(const EPG_TAG*, bool*) { return PVR_ERROR_NOT_IMPLEMENTED; } +PVR_ERROR IsEPGTagPlayable(const EPG_TAG*, bool*) { return PVR_ERROR_NOT_IMPLEMENTED; } +PVR_ERROR GetEPGTagStreamProperties(const EPG_TAG*, PVR_NAMED_VALUE*, unsigned int*) { return PVR_ERROR_NOT_IMPLEMENTED; } } // extern "C" From ac4f4bd3b61cc122f53bb85f4601d34e1d656e5c Mon Sep 17 00:00:00 2001 From: txtranslation Date: Sun, 27 Aug 2017 13:05:38 +0100 Subject: [PATCH 075/100] [lang] updated language files from Transifex --- pvr.iptvsimple/addon.xml.in | 19 ++--- .../resource.language.ar_sa/strings.po | 76 +++++++++++++++++++ .../resource.language.ca_es/strings.po | 2 +- .../resource.language.cs_cz/strings.po | 32 ++++---- .../resource.language.nb_no/strings.po | 2 +- .../resource.language.sv_se/strings.po | 4 +- 6 files changed, 106 insertions(+), 29 deletions(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index 5c3f8a0e7..4171de1f1 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ @@ -13,7 +13,7 @@ IPTV dəstəyi üçün Kodi PVR əlavəsini yükləyin. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Kodi ПВР добавка за поддръжка на IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Complement PVR de Kodi per al suport d'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 + Doplněk PVR Kodi pro podporu IPTV. 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 Kodi PVR Addon für IPTV Unterstützung. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home @@ -25,6 +25,7 @@ Addon Kodi PVR para soporte IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Kodi PVR addon para soporte IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Complemento Kodi PVR para soporte de IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home + Kodi PVR'i lisamoodul IPTV toele. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Kodin IPTV-lisäosa. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Addiciel de numériscope Kodi pour la prise en charge de IPTV https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Extension enregistreur vidéo (PVR) pour la gestion IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home @@ -42,11 +43,11 @@ Kodi PVR додаток за IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Tambahan PVR Kodi untuk sokongan IPTV https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home PVR addon ta' Kodi għall-IPTV. 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 + Kodi PVR-tillegg for IPTV-støtte. 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 Klient telewizji dla telewizji internetowej. Więcej informacji o dodatku: 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 - Add-on Kodi PVR para suporte a IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home + Add-on PVR do Kodi para suporte de IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Supliment PVR Kodi 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 @@ -62,7 +63,7 @@ IPTV Simple PVR kliënt ondersteun M3U speellyste, stroom van lewendige TV vir multisaai / unisaai bronne, luister na radio kanale en EPG. IPTV обикновен ПВР клиент. Поддържа m3u плейлисти, поточна телевизия за мултикаст/уникаст източници, слушане на радио канали и електронен програмен справочник. Client senzill per a IPTV PVR compatible amb les llistes de reproducció m3u, transmissions en línia de TV en directe per als orígens difusió única o múltiple, escolta d'emissores de ràdio i guia electrònica de programació (EPG). - IPTV Simple PVR Client podporuje m3u playlisty, streemování TV pro multicast/unicast zdroje, poslouchání Radia a EPG. + Jednoduchý klient PVR pro IPTV podporuje seznamy stop m3u, streamování živého vysílání pro zdroje vícesměrového nebo jednosměrového vysílání, poslech rozhlasových stanic a televizní program. Cleient IPTV Simple PVR Mae'n cynnal rhestrau m3u, ffrydio Teledu Byw o ffynonellau darlledu eang ac unigol, gwrando ar sianeli Radio ac Amserlen Rhaglenni. IPTV Simpel PVR klient understøttelse M3U-afspilningslister, streaming af direkte tv til multicast/unicast kilder, lytte til radio kanaler og EPG. IPTV Simple PVR Client unterstützt m3u Wiedergabelisten, Streaming von Live TV für Multicast/Unicast Quellen, Radiosender und EPG. @@ -82,7 +83,7 @@ IPTV Simple PVR klijent podržava m3u popise izvođenja, streamanje TV programa s više ili jednog izvora, slušanje radio programa i elektronski programski vodič (EPG). Az IPTV PVR kiegészítő támogatja m3u listák lejátszását, élő TV adások hálózati streamelését, rádióadók hallgatását EPG adatok kezelésével. IPTV, klien PTV sederhana yang mendukung playlist m3u, pengaliran siaran TV langsung untuk sumber multicast/unicast, mendengarkan radio dan EPG. - Einfaldur upptökubiðlari fyrir IPTV sem styður m3u spilunarlista, streymingu af beinum atburðum frá multicast/unicast þjónustum, hlustun á útvarpsrásir og rafræna dagskrárvísa + Einfaldur upptökubiðlari fyrir IPTV sem styður m3u spilunarlista, streymingu af beinum útsendingum frá multicast/unicast þjónustum, hlustun á útvarpsrásir og rafræna dagskrárvísa Il client IPTV Simple PVR supporta playlist m3u, streaming della Live TV per sorgenti multicast/unicast e ascoltare canali Radio ed EPG. IPTV シンプル PVR クライアントは、m3u プレイリスト、マルチキャスト/ユニキャストのライブ TV ストリーミング、ラジオチャンネルや EPG の視聴をサポートしています。 IPTV Simple PVR 클라이언트는 m3u 재생목록, 스트리밍, 멀티캐스트/유니캐스트 소스의 TV 시청, 라디오 채널과 EPG를 통한 청취를 지원합니다. @@ -91,7 +92,7 @@ IPTV Simple PVR Client поддржува m3u листи, гледање на Live TV од multicast/unicast извори, слушање Радио канали и EPG. Klien PVR IPTV Simple menyokong senarai audio visual m3u, penstriman TV Langsung untuk sumber satu siaran/berbilang-siaran, mendengar saluran Radio dan EPG. IPTV Simple PVR Client jiflaħ għal playlists m3u, streaming ta' TV Lajv għal sorsi multicast/unicast, smiegħ ta' stazzjonijiet tar-Radju u EPG. - IPTV Simple PVR klient støtter m3u spillelister, strømming av Live TV, lytting til radiokanaler og programguider. + IPTV Simple PVR-klient støtter m3u-spillelister, strømming av direkte-TV, lytting til radiokanaler og programguider. IPTV simpele PVR cliënt ondersteunt m3u afspeellijsten, streaming van live TV voor multicast/unicast bronnen, luisteren naar radiozenders en EPG. Klient telewizji dla telewizji internetowej obsługuje listy odtwarzania m3u, transmisję kanałów radiowych i telewizyjnych ze źródeł punktowych i grupowych oraz funkcje przewodnika telewizyjnego. O cliente de PVR IPTV Simple Client oferece suporte para listas m3u, transmissão de TV ao vivo de fontes multicast/unicast, transmissão de rádios e, ainda, suporte a guia de programação eletrônico - EPG. @@ -110,7 +111,7 @@ Hierdie is onstabiele sagteware! Die outeurs is op geen manier verantwoordelik vir gefaalde spele, inkorrekte EPG tye, vermorsde ure, of enige ander ongewensde effekte. Тази програма е нестабилна! Авторите не носят отговорност за неуспешно възпроизвеждане, некоректни часове в електронния програмен справочник, пропиляното време и други нежелани ефекти. Aquest programari és inestable! Els autors no es fan responsables de reproduccions fallides, horaris incorrectes a la guia electrònica de programació (EPG), hores perdudes o qualsevol altre efecte no desitjat. - Tento software není stabilní. Autoři nejsou žádným způsobem zodpovědní za selhání při nahrávání, neplatné časovače, ztracený čas, či jakékoliv jiné nežádoucí události... + Tento software není stabilní! Autoři nejsou žádným způsobem zodpovědní za neúspěšná nahrávání, chybné časy televizního programu, ztracený čas nebo jakékoliv jiné nežádoucí výsledky... Mae hwn yn feddalwedd ansad! Nid yw'r awduron yn gyfrifol mewn unrhyw ffordd am fethu recordio, amseru gwallus, oriau wedi eu gwastraffu nac effeithiau anymunol eraill. Dette er ustabil software! Ophavsmændene er på ingen måde ansvarlig for mislykkede afspilninger, forkerte EPG tider, spildte timer, eller andre bivirkninger. Dies ist instabile Software! Die Autoren sind in keiner Weise verantwortlich für fehlgeschlagene Wiedergaben, falsche EPG Zeiten, verschwendete Zeit oder unerwünschte Effekte jeglicher Art. @@ -139,7 +140,7 @@ Ова е нестабилен софтвер! Авторите во никој случај не се одговорни за неуспешно гледање, неточни времиња во EPG, вашето потрошено време или било кои непосакувани ефекти. Perisian ini tidak stabi! Pengarang tidak bertanggungjawab atas kegagalan memainkan, pemasa EPG yang tidak betul, pembaziran masa atau sebarang kesan tidak diingini. Dan il-programm mhuwiex stabbli! L-awturi m'huma bl-ebda mod responsabbli għal daqq li ma jirnexxiex, ħinijiet tal-EPG żbaljati, siegħat moħlija jew kwalunkwe effet ieħor mhux mixtieq. - Dette er et ustabilt program! Skaperne er på ingen måte ansvarlig for feil ved avspilling, feil programguide tide, bortkastede timer eller andre uønskede ting. + Dette er et ustabilt program! Skaperne er på ingen måte ansvarlig for feil ved avspilling, feil programguidetider, bortkastede timer eller andre uønskede ting. Deze software is niet 100% stabiel! De auteurs zijn op geen enkele wijze aansprakelijk voor mislukte opnames, incorrecte EPG tijden, verspilde uren, of enig ander ongewild neveneffect.. Oprogramowanie nadal jest w fazie rozwoju i jest niestabilne! Autorzy w żaden sposób nie są odpowiedzialni za nieudane nagrania, błędy w harmonogramie nagrań, zmarnowany czas ani jakiekolwiek inne niepożądane efekty. Este é um software instável! Os autores não são responsáveis por falhas nas reproduções, horários incorretos no EPG, horas perdidas ou quaisquer outros efeitos indesejáveis. diff --git a/pvr.iptvsimple/resources/language/resource.language.ar_sa/strings.po b/pvr.iptvsimple/resources/language/resource.language.ar_sa/strings.po index 5854ca0f2..335493759 100644 --- a/pvr.iptvsimple/resources/language/resource.language.ar_sa/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.ar_sa/strings.po @@ -20,10 +20,86 @@ msgctxt "#30000" msgid "Location" msgstr "الموقع" +msgctxt "#30001" +msgid "Local Path (include Local Network)" +msgstr "مسار محلي (يتضمن الشبكة المحلية)" + +msgctxt "#30002" +msgid "Remote Path (Internet address)" +msgstr "مسار بعيد (عنوان انترنت)" + msgctxt "#30010" msgid "General" msgstr "عام" +msgctxt "#30011" +msgid "M3U Play List Path" +msgstr "قائمة تشغيل M3U" + +msgctxt "#30012" +msgid "M3U Play List URL" +msgstr "عنوانن قائمة تشغيل M3U" + +msgctxt "#30013" +msgid "Numbering channels starts at" +msgstr "ترقيم القنوات يبدأ مت" + +msgctxt "#30020" +msgid "EPG Settings" +msgstr "EPG اعدادات الدليل" + +msgctxt "#30021" +msgid "XMLTV Path" +msgstr "مسار XMLTV" + +msgctxt "#30022" +msgid "XMLTV URL" +msgstr "عنوان XMLTV" + +msgctxt "#30023" +msgid "Apply Time Shift To All Channels" +msgstr "تطبيق التايم شيفت على جميع القنوات" + +msgctxt "#30024" +msgid "EPG Time Shift (hours)" +msgstr "التايم شيفت للدليل (ساعات)" + +msgctxt "#30025" +msgid "Cache m3u at local storage" +msgstr "تخزين مؤقت لملفات m3u في الذاكره المعلية" + +msgctxt "#30026" +msgid "Cache XMLTV at local storage" +msgstr "تخزين مؤقت لملفات XMLTV في الذاكره المعلية" + +msgctxt "#30030" +msgid "Channels Logos" +msgstr "شعارات القنوات" + +msgctxt "#30031" +msgid "Channels Logos Folder" +msgstr "مجلد شعارات القنوات" + +msgctxt "#30032" +msgid "Channels Logos Base URL" +msgstr "العنوان الأساسي لشعارات القنوات" + +msgctxt "#30040" +msgid "XMLTV Logos Options" +msgstr "خيارات شعارات XMLTV" + +msgctxt "#30041" +msgid "Channels Logos from XMLTV" +msgstr "شعارات القنوات من XMLTV" + msgctxt "#30042" msgid "Ignore" msgstr "تجاهل" + +msgctxt "#30043" +msgid "Prefer M3U" +msgstr "M3U المفضل" + +msgctxt "#30044" +msgid "Prefer XMLTV" +msgstr "XMLTV المفضل" diff --git a/pvr.iptvsimple/resources/language/resource.language.ca_es/strings.po b/pvr.iptvsimple/resources/language/resource.language.ca_es/strings.po index 3607e76d5..4f522cc21 100644 --- a/pvr.iptvsimple/resources/language/resource.language.ca_es/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.ca_es/strings.po @@ -46,7 +46,7 @@ msgstr "La numeració de canals comença al" msgctxt "#30020" msgid "EPG Settings" -msgstr "Ajusts de l'EPG" +msgstr "Opcions de l'EPG" msgctxt "#30021" msgid "XMLTV Path" diff --git a/pvr.iptvsimple/resources/language/resource.language.cs_cz/strings.po b/pvr.iptvsimple/resources/language/resource.language.cs_cz/strings.po index d74ff7ac8..0a325d201 100644 --- a/pvr.iptvsimple/resources/language/resource.language.cs_cz/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.cs_cz/strings.po @@ -22,7 +22,7 @@ msgstr "Umístění" msgctxt "#30001" msgid "Local Path (include Local Network)" -msgstr "Místní cesta (včetně LAN)" +msgstr "Místní cesta (včetně místní sítě)" msgctxt "#30002" msgid "Remote Path (Internet address)" @@ -34,19 +34,19 @@ msgstr "Obecné" msgctxt "#30011" msgid "M3U Play List Path" -msgstr "Cesta k M3U playlistu" +msgstr "Cesta k seznamu stop M3U" msgctxt "#30012" msgid "M3U Play List URL" -msgstr "URL pro M3U playlist" +msgstr "URL seznamu stop M3U" msgctxt "#30013" msgid "Numbering channels starts at" -msgstr "Číslování programů začíná na" +msgstr "Číslování kanálů začíná od" msgctxt "#30020" msgid "EPG Settings" -msgstr "Nastavení EPG" +msgstr "Nastavení televizního programu" msgctxt "#30021" msgid "XMLTV Path" @@ -54,39 +54,39 @@ msgstr "Cesta k XMLTV" msgctxt "#30022" msgid "XMLTV URL" -msgstr "XMLTV URL" +msgstr "URL XMLTV" msgctxt "#30023" msgid "Apply Time Shift To All Channels" -msgstr "Použij Time Shift na všechny programy" +msgstr "Použít časový posun na všechny kanály" msgctxt "#30024" msgid "EPG Time Shift (hours)" -msgstr "EPG Time Shift (hodiny)" +msgstr "Časový posun televizního programu (hodiny)" msgctxt "#30025" msgid "Cache m3u at local storage" -msgstr "Vytvoř cache pro m3u na místním disku." +msgstr "Zapisovat M3U do mezipaměti na místním úložišti." msgctxt "#30026" msgid "Cache XMLTV at local storage" -msgstr "Vytvoř cache pro XMLTV na místním disku." +msgstr "Zapisovat XMLTV do mezipaměti na místním úložišti." msgctxt "#30030" msgid "Channels Logos" -msgstr "Loga programů" +msgstr "Loga kanálů" msgctxt "#30031" msgid "Channels Logos Folder" -msgstr "Složka pro loga programů" +msgstr "Složka pro loga kanálů" msgctxt "#30032" msgid "Channels Logos Base URL" -msgstr "URL pro přístup k logům programů" +msgstr "Základní URL pro loga kanálů" msgctxt "#30040" msgid "XMLTV Logos Options" -msgstr "Nastavení log XMLTV" +msgstr "Možnosti log XMLTV" msgctxt "#30041" msgid "Channels Logos from XMLTV" @@ -98,8 +98,8 @@ msgstr "Ignorovat" msgctxt "#30043" msgid "Prefer M3U" -msgstr "Preferovat M3U" +msgstr "Upřednostňovat M3U" msgctxt "#30044" msgid "Prefer XMLTV" -msgstr "Preferovat XMLTV" +msgstr "Upřednostňovat XMLTV" diff --git a/pvr.iptvsimple/resources/language/resource.language.nb_no/strings.po b/pvr.iptvsimple/resources/language/resource.language.nb_no/strings.po index d31e585c1..0823b79d5 100644 --- a/pvr.iptvsimple/resources/language/resource.language.nb_no/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.nb_no/strings.po @@ -62,7 +62,7 @@ msgstr "Aktiver tidshopp til alle kanaler" msgctxt "#30024" msgid "EPG Time Shift (hours)" -msgstr "Programguide tidshopp (timer)" +msgstr "Programguide-tidshopp (timer)" msgctxt "#30025" msgid "Cache m3u at local storage" diff --git a/pvr.iptvsimple/resources/language/resource.language.sv_se/strings.po b/pvr.iptvsimple/resources/language/resource.language.sv_se/strings.po index 08c947428..85f972ad7 100644 --- a/pvr.iptvsimple/resources/language/resource.language.sv_se/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.sv_se/strings.po @@ -66,11 +66,11 @@ msgstr "Tidsförskjutning för EPG (timmar)" msgctxt "#30025" msgid "Cache m3u at local storage" -msgstr "Buffra m3u på lokalt utrymme" +msgstr "Cacha m3u på lokalt utrymme" msgctxt "#30026" msgid "Cache XMLTV at local storage" -msgstr "Buffra XMLTV på lokalt utrymme" +msgstr "Cacha XMLTV på lokalt utrymme" msgctxt "#30030" msgid "Channels Logos" From 53f94ec2f778a9da0118184a2392a2a935c702de Mon Sep 17 00:00:00 2001 From: txtranslation Date: Fri, 15 Dec 2017 14:10:36 +0000 Subject: [PATCH 076/100] [lang] updated language files from Transifex --- pvr.iptvsimple/addon.xml.in | 12 +++---- .../resource.language.nl_nl/strings.po | 32 +++++++++---------- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index 4171de1f1..35da6fdda 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ @@ -44,7 +44,7 @@ Tambahan PVR Kodi untuk sokongan IPTV https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home PVR addon ta' Kodi għall-IPTV. 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 - Kodi PVR add-on voor IPTV ondersteuning. 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 Klient telewizji dla telewizji internetowej. Więcej informacji o dodatku: 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 Add-on PVR do Kodi para suporte de IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home @@ -76,7 +76,7 @@ El cliente PVR IPTV Simple soporta listas M3U, reproducción de TV en Vivo para origenes multicast/unicast, escucha de canales de radio y EPG IPTV Simple PVR Client soporta listas de reproducción m3u, streaming de Live TV para fuentes multicast / unicast, escuchando para canales de radio y EPG. IPTV-lisäosa tukee m3u-toistolistoja, multicast/unicast-tv-lähetysten toistoa, radiokanavia ja ohjelmaopasta. - Client de numériscope simple pour IPTV, prenant en charge les listes de lecture m3u, la diffusion en continu des télés en direct pour les sources de multidiffusion et de monodiffusion, l'écoute de chaînes radio, et le GÉP. + Client de numériscope simple pour IPTV, prenant en charge les listes de lecture m3u, la diffusion en continu des télés en direct pour les sources de multidiffusion et de monodiffusion, l’écoute de chaînes radio, et le GÉP. Le client enregistreur vidéo (PVR) IPTV Simple gère les listes de lecture M3U, la diffusion en continu de la TV en direct en mono ou multidiffusion, l'écoute des chaînes radio et le guide électronique des programmes TV. O cliente PVR simple de IPTV soporta listaxes m3u, transmisión de TV en directo para fontes multicast/unicast, escoita de canles de Radio e Guía. לקוח טלוויזיה חיה IPTV Simple תומך ברשימות m3u, הזרמת שידורים חיים ממקור מרובב/ סטרים בודד, האזנה לתחנות רדיו והצגת לוח שידורים. @@ -93,7 +93,7 @@ Klien PVR IPTV Simple menyokong senarai audio visual m3u, penstriman TV Langsung untuk sumber satu siaran/berbilang-siaran, mendengar saluran Radio dan EPG. IPTV Simple PVR Client jiflaħ għal playlists m3u, streaming ta' TV Lajv għal sorsi multicast/unicast, smiegħ ta' stazzjonijiet tar-Radju u EPG. IPTV Simple PVR-klient støtter m3u-spillelister, strømming av direkte-TV, lytting til radiokanaler og programguider. - IPTV simpele PVR cliënt ondersteunt m3u afspeellijsten, streaming van live TV voor multicast/unicast bronnen, luisteren naar radiozenders en EPG. + IPTV Simple PVR cliënt ondersteunt m3u-afspeellijsten, streaming van live-TV voor multicast/unicastbronnen, luisteren naar radiozenders en EPG. Klient telewizji dla telewizji internetowej obsługuje listy odtwarzania m3u, transmisję kanałów radiowych i telewizyjnych ze źródeł punktowych i grupowych oraz funkcje przewodnika telewizyjnego. O cliente de PVR IPTV Simple Client oferece suporte para listas m3u, transmissão de TV ao vivo de fontes multicast/unicast, transmissão de rádios e, ainda, suporte a guia de programação eletrônico - EPG. Cliente IPTV Simple PVR com suporte a listas de reprodução m3u, transmissão de TV em direto de fontes multidifusão/unidifusão, ouvir estações de rádio e EPG. @@ -124,7 +124,7 @@ Este es un software inestable! El autor no se hace responsable de reproducciones fallidas, datos de EPG incorrectos, horas perdidas o cualquier otro efecto indeseado. ¡Este es un software inestable! Los autores no son responsables en absoluto de reproducciones fallidas, tiempos EPG incorrectos, desperdicio de horas, o cualquier otro efecto indeseable. Tämä on epävakaa ohjelma! Sen tekijät eivät ole millään muotoa vastuussa epäonnistuneista tallennuksista, virheellisistä ajastuksista, haaskatusta ajasta, verenpaineen noususta tai mistään muusta epäsuotuisasta vaikutuksesta. - Ce logiciel est instable! Les auteurs ne sont aucunement responsables des lectures défaillantes, d'horaires erronés du GÉP, des heures perdues ou tout autre effet indésirable. + Ce logiciel est instable! Les auteurs ne sont aucunement responsables des lectures défaillantes, d’horaires erronés du GÉP, des heures perdues ou tout autre effet indésirable. Logiciel en cours d'élaboration ! Les auteurs ne sont en aucun cas responsables de l'échec des enregistrements, programmations défectueuses, temps perdu ou autres effets indésirables. Este software non é estábel! Os autores non se fan responsábeis dos erros na reproducción, horarios incorrectos na Guía, horas vencidas, e otros efectos non desexados. זוהי איננה הרחבה יציבה! המפתחים אינם אחראים על כשלון בניגון, זמנים שגויים במדריך השידורים, שעות מבוזבזות או כל תופעה לא רצויה אחרת. @@ -141,7 +141,7 @@ Perisian ini tidak stabi! Pengarang tidak bertanggungjawab atas kegagalan memainkan, pemasa EPG yang tidak betul, pembaziran masa atau sebarang kesan tidak diingini. Dan il-programm mhuwiex stabbli! L-awturi m'huma bl-ebda mod responsabbli għal daqq li ma jirnexxiex, ħinijiet tal-EPG żbaljati, siegħat moħlija jew kwalunkwe effet ieħor mhux mixtieq. Dette er et ustabilt program! Skaperne er på ingen måte ansvarlig for feil ved avspilling, feil programguidetider, bortkastede timer eller andre uønskede ting. - Deze software is niet 100% stabiel! De auteurs zijn op geen enkele wijze aansprakelijk voor mislukte opnames, incorrecte EPG tijden, verspilde uren, of enig ander ongewild neveneffect.. + Deze software is niet 100% stabiel! De auteurs zijn op geen enkele wijze aansprakelijk voor mislukte opnames, incorrecte EPG-tijden, verspilde uren, of enig ander ongewild neveneffect.. Oprogramowanie nadal jest w fazie rozwoju i jest niestabilne! Autorzy w żaden sposób nie są odpowiedzialni za nieudane nagrania, błędy w harmonogramie nagrań, zmarnowany czas ani jakiekolwiek inne niepożądane efekty. Este é um software instável! Os autores não são responsáveis por falhas nas reproduções, horários incorretos no EPG, horas perdidas ou quaisquer outros efeitos indesejáveis. Este software é instável! Os autores não podem ser responsabilizados por gravações falhadas, temporizadores incorretos, horas desperdiçadas ou qualquer outro tipo de efeitos indesejáveis... diff --git a/pvr.iptvsimple/resources/language/resource.language.nl_nl/strings.po b/pvr.iptvsimple/resources/language/resource.language.nl_nl/strings.po index d542b02ca..f00d60847 100644 --- a/pvr.iptvsimple/resources/language/resource.language.nl_nl/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.nl_nl/strings.po @@ -26,7 +26,7 @@ msgstr "Lokale locatie (inclusief lokaal netwerk)" msgctxt "#30002" msgid "Remote Path (Internet address)" -msgstr "Lokatie op afstand (Internet adres)" +msgstr "Lokatie op afstand (internetadres)" msgctxt "#30010" msgid "General" @@ -34,35 +34,35 @@ msgstr "Algemeen" msgctxt "#30011" msgid "M3U Play List Path" -msgstr "M3U afspeellijstlocatie" +msgstr "M3U-afspeellijstlocatie" msgctxt "#30012" msgid "M3U Play List URL" -msgstr "M3U afspeellijst URL" +msgstr "M3U-afspeellijst-URL" msgctxt "#30013" msgid "Numbering channels starts at" -msgstr "Nummeren kanalen start op" +msgstr "Kanalennummering start vanaf" msgctxt "#30020" msgid "EPG Settings" -msgstr "EPG instellingen" +msgstr "EPG-instellingen" msgctxt "#30021" msgid "XMLTV Path" -msgstr "XMLTV locatie" +msgstr "XMLTV-locatie" msgctxt "#30022" msgid "XMLTV URL" -msgstr "XMLTV URL" +msgstr "XMLTV-URL" msgctxt "#30023" msgid "Apply Time Shift To All Channels" -msgstr "Voer tijdsprong toe aan alle kanalen" +msgstr "Tijdsprong aan alle kanalen toepassen" msgctxt "#30024" msgid "EPG Time Shift (hours)" -msgstr "EPG tijdsprong (uren)" +msgstr "EPG-tijdsprong (uren)" msgctxt "#30025" msgid "Cache m3u at local storage" @@ -70,23 +70,23 @@ msgstr "Buffer m3u op lokale opslag" msgctxt "#30026" msgid "Cache XMLTV at local storage" -msgstr "buffer XMLTV op lokale opslag" +msgstr "Buffer XMLTV op lokale opslag" msgctxt "#30030" msgid "Channels Logos" -msgstr "Kanalen logo`s" +msgstr "Kanalenlogo's" msgctxt "#30031" msgid "Channels Logos Folder" -msgstr "Kanalen logo`s map" +msgstr "Map voor kanalenlogo's" msgctxt "#30032" msgid "Channels Logos Base URL" -msgstr "Kanalen logo`s basis URL" +msgstr "Kanalenlogo's basis-URL" msgctxt "#30040" msgid "XMLTV Logos Options" -msgstr "XMLTV logo's opties" +msgstr "XMLTV logo-opties" msgctxt "#30041" msgid "Channels Logos from XMLTV" @@ -98,8 +98,8 @@ msgstr "Negeren" msgctxt "#30043" msgid "Prefer M3U" -msgstr "M3U voorkeur" +msgstr "M3U-voorkeur" msgctxt "#30044" msgid "Prefer XMLTV" -msgstr "XMLTV voorkeur" +msgstr "XMLTV-voorkeur" From ec3974e88c72e8f5073441bca0dd63c40e611ab8 Mon Sep 17 00:00:00 2001 From: Wolfgang Haupt Date: Thu, 21 Dec 2017 22:29:24 +0100 Subject: [PATCH 077/100] Fix multithreading issues --- src/PVRIptvData.cpp | 10 ++++++++++ src/PVRIptvData.h | 1 + 2 files changed, 11 insertions(+) diff --git a/src/PVRIptvData.cpp b/src/PVRIptvData.cpp index 17a5b8920..db91774ed 100644 --- a/src/PVRIptvData.cpp +++ b/src/PVRIptvData.cpp @@ -573,11 +573,13 @@ bool PVRIptvData::LoadGenres(void) int PVRIptvData::GetChannelsAmount(void) { + P8PLATFORM::CLockObject lock(m_mutex); return m_channels.size(); } PVR_ERROR PVRIptvData::GetChannels(ADDON_HANDLE handle, bool bRadio) { + P8PLATFORM::CLockObject lock(m_mutex); for (unsigned int iChannelPtr = 0; iChannelPtr < m_channels.size(); iChannelPtr++) { PVRIptvChannel &channel = m_channels.at(iChannelPtr); @@ -603,6 +605,7 @@ PVR_ERROR PVRIptvData::GetChannels(ADDON_HANDLE handle, bool bRadio) bool PVRIptvData::GetChannel(const PVR_CHANNEL &channel, PVRIptvChannel &myChannel) { + P8PLATFORM::CLockObject lock(m_mutex); for (unsigned int iChannelPtr = 0; iChannelPtr < m_channels.size(); iChannelPtr++) { PVRIptvChannel &thisChannel = m_channels.at(iChannelPtr); @@ -625,11 +628,13 @@ bool PVRIptvData::GetChannel(const PVR_CHANNEL &channel, PVRIptvChannel &myChann int PVRIptvData::GetChannelGroupsAmount(void) { + P8PLATFORM::CLockObject lock(m_mutex); return m_groups.size(); } PVR_ERROR PVRIptvData::GetChannelGroups(ADDON_HANDLE handle, bool bRadio) { + P8PLATFORM::CLockObject lock(m_mutex); std::vector::iterator it; for (it = m_groups.begin(); it != m_groups.end(); ++it) { @@ -651,6 +656,7 @@ PVR_ERROR PVRIptvData::GetChannelGroups(ADDON_HANDLE handle, bool bRadio) PVR_ERROR PVRIptvData::GetChannelGroupMembers(ADDON_HANDLE handle, const PVR_CHANNEL_GROUP &group) { + P8PLATFORM::CLockObject lock(m_mutex); PVRIptvChannelGroup *myGroup; if ((myGroup = FindGroup(group.strGroupName)) != NULL) { @@ -677,6 +683,7 @@ PVR_ERROR PVRIptvData::GetChannelGroupMembers(ADDON_HANDLE handle, const PVR_CHA PVR_ERROR PVRIptvData::GetEPGForChannel(ADDON_HANDLE handle, const PVR_CHANNEL &channel, time_t iStart, time_t iEnd) { + P8PLATFORM::CLockObject lock(m_mutex); std::vector::iterator myChannel; for (myChannel = m_channels.begin(); myChannel < m_channels.end(); ++myChannel) { @@ -1058,6 +1065,7 @@ void PVRIptvData::ApplyChannelsLogosFromEPG() void PVRIptvData::ReaplyChannelsLogos(const char * strNewPath) { + P8PLATFORM::CLockObject lock(m_mutex); if (strlen(strNewPath) > 0) { m_strLogoPath = strNewPath; @@ -1070,6 +1078,7 @@ void PVRIptvData::ReaplyChannelsLogos(const char * strNewPath) void PVRIptvData::ReloadEPG(const char * strNewPath) { + P8PLATFORM::CLockObject lock(m_mutex); if (strNewPath != m_strXMLTVUrl) { m_strXMLTVUrl = strNewPath; @@ -1088,6 +1097,7 @@ void PVRIptvData::ReloadEPG(const char * strNewPath) void PVRIptvData::ReloadPlayList(const char * strNewPath) { + P8PLATFORM::CLockObject lock(m_mutex); if (strNewPath != m_strM3uUrl) { m_strM3uUrl = strNewPath; diff --git a/src/PVRIptvData.h b/src/PVRIptvData.h index b87dfdc16..d9b2074cb 100644 --- a/src/PVRIptvData.h +++ b/src/PVRIptvData.h @@ -132,4 +132,5 @@ class PVRIptvData : public P8PLATFORM::CThread std::vector m_channels; std::vector m_epg; std::vector m_genres; + P8PLATFORM::CMutex m_mutex; }; From 58448c44bdc39ae42251b9838503185126b8a96c Mon Sep 17 00:00:00 2001 From: Wolfgang Haupt Date: Fri, 22 Dec 2017 16:13:36 +0100 Subject: [PATCH 078/100] Bump version to 3.3.3 --- pvr.iptvsimple/addon.xml.in | 2 +- pvr.iptvsimple/changelog.txt | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index 35da6fdda..cfc8880d7 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ diff --git a/pvr.iptvsimple/changelog.txt b/pvr.iptvsimple/changelog.txt index ec5818435..b646bc56a 100644 --- a/pvr.iptvsimple/changelog.txt +++ b/pvr.iptvsimple/changelog.txt @@ -1,3 +1,6 @@ +v3.3.3 +- Fixed multithreading issues + v3.3.0 - Updated to PVR addon API v5.7.0 From 7c2f269cec38f080f916ce529dbb467e5c33ebb2 Mon Sep 17 00:00:00 2001 From: Kai Sommerfeld Date: Fri, 22 Dec 2017 21:54:43 +0100 Subject: [PATCH 079/100] PVR API 5.8.0 --- pvr.iptvsimple/addon.xml.in | 2 +- pvr.iptvsimple/changelog.txt | 3 +++ src/client.cpp | 6 ------ 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index cfc8880d7..952a120d2 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ diff --git a/pvr.iptvsimple/changelog.txt b/pvr.iptvsimple/changelog.txt index b646bc56a..6bb2e6ae7 100644 --- a/pvr.iptvsimple/changelog.txt +++ b/pvr.iptvsimple/changelog.txt @@ -1,3 +1,6 @@ +v3.4.0 +- Updated to PVR addon API v5.8.0 + v3.3.3 - Fixed multithreading issues diff --git a/src/client.cpp b/src/client.cpp index e79fa1bf1..8e64872a4 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -393,7 +393,6 @@ PVR_ERROR OpenDialogChannelScan(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; } void CloseLiveStream(void) { } @@ -402,13 +401,11 @@ bool OpenLiveStream(const PVR_CHANNEL &channel) { return false; } void CloseRecordedStream(void) {} int ReadRecordedStream(unsigned char *pBuffer, unsigned int iBufferSize) { return 0; } long long SeekRecordedStream(long long iPosition, int iWhence /* = SEEK_SET */) { return 0; } -long long PositionRecordedStream(void) { return -1; } long long LengthRecordedStream(void) { return 0; } void DemuxReset(void) {} void DemuxFlush(void) {} int ReadLiveStream(unsigned char *pBuffer, unsigned int iBufferSize) { return 0; } long long SeekLiveStream(long long iPosition, int iWhence /* = SEEK_SET */) { return -1; } -long long PositionLiveStream(void) { return -1; } long long LengthLiveStream(void) { return -1; } PVR_ERROR DeleteRecording(const PVR_RECORDING &recording) { return PVR_ERROR_NOT_IMPLEMENTED; } PVR_ERROR RenameRecording(const PVR_RECORDING &recording) { return PVR_ERROR_NOT_IMPLEMENTED; } @@ -430,9 +427,6 @@ void PauseStream(bool bPaused) {} bool CanSeekStream(void) { return false; } bool SeekTime(double,bool,double*) { return false; } void SetSpeed(int) {}; -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; } PVR_ERROR SetEPGTimeFrame(int) { return PVR_ERROR_NOT_IMPLEMENTED; } From e5e98ef7393f286ae610b6df70f001a8069eb215 Mon Sep 17 00:00:00 2001 From: Arne Morten Kvarving Date: Mon, 15 Jan 2018 12:00:52 +0100 Subject: [PATCH 080/100] added: pass on kodi properties from m3u in particular this allows for inputstream.adaptive streams (dash etc) --- pvr.iptvsimple/addon.xml.in | 2 +- pvr.iptvsimple/changelog.txt | 3 +++ src/PVRIptvData.cpp | 14 ++++++++++++++ src/PVRIptvData.h | 2 ++ src/client.cpp | 11 +++++++++++ 5 files changed, 31 insertions(+), 1 deletion(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index 952a120d2..cd85e81e7 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ diff --git a/pvr.iptvsimple/changelog.txt b/pvr.iptvsimple/changelog.txt index 6bb2e6ae7..0462a2d85 100644 --- a/pvr.iptvsimple/changelog.txt +++ b/pvr.iptvsimple/changelog.txt @@ -1,3 +1,6 @@ +v3.4.1 +- Add support for KODIPROP in M3U (for inputstream.adaptive) + v3.4.0 - Updated to PVR addon API v5.8.0 diff --git a/src/PVRIptvData.cpp b/src/PVRIptvData.cpp index db91774ed..b37ff50d7 100644 --- a/src/PVRIptvData.cpp +++ b/src/PVRIptvData.cpp @@ -43,6 +43,7 @@ #define TVG_INFO_SHIFT_MARKER "tvg-shift=" #define TVG_INFO_CHNO_MARKER "tvg-chno=" #define GROUP_NAME_MARKER "group-title=" +#define KODIPROP_MARKER "#KODIPROP:" #define RADIO_MARKER "radio=" #define CHANNEL_LOGO_EXTENSION ".png" #define SECONDS_IN_DAY 86400 @@ -457,6 +458,17 @@ bool PVRIptvData::LoadPlayList(void) } } } + else if (StringUtils::Left(strLine, (int)strlen(KODIPROP_MARKER)) == KODIPROP_MARKER) + { + std::string value = ReadMarkerValue(strLine, KODIPROP_MARKER); + auto pos = value.find('='); + if (pos != std::string::npos) + { + std::string prop = value.substr(0,pos); + std::string propValue = value.substr(pos+1); + tmpChannel.properties.insert({prop, propValue}); + } + } else if (strLine[0] != '#') { XBMC->Log(LOG_DEBUG, @@ -472,6 +484,7 @@ bool PVRIptvData::LoadPlayList(void) channel.strTvgLogo = tmpChannel.strTvgLogo; channel.iTvgShift = tmpChannel.iTvgShift; channel.bRadio = tmpChannel.bRadio; + channel.properties = tmpChannel.properties; channel.strStreamURL = strLine; channel.iEncryptionSystem = 0; @@ -618,6 +631,7 @@ bool PVRIptvData::GetChannel(const PVR_CHANNEL &channel, PVRIptvChannel &myChann myChannel.strChannelName = thisChannel.strChannelName; myChannel.strLogoPath = thisChannel.strLogoPath; myChannel.strStreamURL = thisChannel.strStreamURL; + myChannel.properties = thisChannel.properties; return true; } diff --git a/src/PVRIptvData.h b/src/PVRIptvData.h index d9b2074cb..0523364b2 100644 --- a/src/PVRIptvData.h +++ b/src/PVRIptvData.h @@ -23,6 +23,7 @@ * */ +#include #include #include "p8-platform/os.h" #include "libXBMC_pvr.h" @@ -64,6 +65,7 @@ struct PVRIptvChannel std::string strTvgId; std::string strTvgName; std::string strTvgLogo; + std::map properties; }; struct PVRIptvChannelGroup diff --git a/src/client.cpp b/src/client.cpp index 8e64872a4..8924b3788 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -346,6 +346,17 @@ PVR_ERROR GetChannelStreamProperties(const PVR_CHANNEL* channel, PVR_NAMED_VALUE strncpy(properties[0].strName, PVR_STREAM_PROPERTY_STREAMURL, sizeof(properties[0].strName) - 1); strncpy(properties[0].strValue, m_currentChannel.strStreamURL.c_str(), sizeof(properties[0].strValue) - 1); *iPropertiesCount = 1; + if (!m_currentChannel.properties.empty()) + { + for (auto& prop : m_currentChannel.properties) + { + strncpy(properties[*iPropertiesCount].strName, prop.first.c_str(), + sizeof(properties[*iPropertiesCount].strName) - 1); + strncpy(properties[*iPropertiesCount].strValue, prop.second.c_str(), + sizeof(properties[*iPropertiesCount].strName) - 1); + (*iPropertiesCount)++; + } + } return PVR_ERROR_NO_ERROR; } From 933a5c4043ffba9ac05d4f0a4687bc8f61d5a9a2 Mon Sep 17 00:00:00 2001 From: txtranslation Date: Mon, 5 Feb 2018 08:22:58 +0000 Subject: [PATCH 081/100] [lang] updated language files from Transifex --- pvr.iptvsimple/addon.xml.in | 2 +- .../resources/language/resource.language.cs_cz/strings.po | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index cd85e81e7..55a415ccb 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ diff --git a/pvr.iptvsimple/resources/language/resource.language.cs_cz/strings.po b/pvr.iptvsimple/resources/language/resource.language.cs_cz/strings.po index 0a325d201..138fb042f 100644 --- a/pvr.iptvsimple/resources/language/resource.language.cs_cz/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.cs_cz/strings.po @@ -26,7 +26,7 @@ msgstr "Místní cesta (včetně místní sítě)" msgctxt "#30002" msgid "Remote Path (Internet address)" -msgstr "Vzdálená cesta (internetová adresa)" +msgstr "Popis vzdáleného umístění (internetová adresa)" msgctxt "#30010" msgid "General" @@ -82,7 +82,7 @@ msgstr "Složka pro loga kanálů" msgctxt "#30032" msgid "Channels Logos Base URL" -msgstr "Základní URL pro loga kanálů" +msgstr "Základ URL adres log kanálů" msgctxt "#30040" msgid "XMLTV Logos Options" From 754057130acddc6c62e9a4a8351f1dc982a219fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20B=C3=BChlmann?= Date: Tue, 3 Apr 2018 23:24:26 +0200 Subject: [PATCH 082/100] PVR API 5.9.0 --- pvr.iptvsimple/addon.xml.in | 2 +- pvr.iptvsimple/changelog.txt | 3 +++ src/client.cpp | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index 55a415ccb..308174c16 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ diff --git a/pvr.iptvsimple/changelog.txt b/pvr.iptvsimple/changelog.txt index 0462a2d85..f88828548 100644 --- a/pvr.iptvsimple/changelog.txt +++ b/pvr.iptvsimple/changelog.txt @@ -1,3 +1,6 @@ +v3.4.3 +- Updated to PVR addon API v5.9.0 + v3.4.1 - Add support for KODIPROP in M3U (for inputstream.adaptive) diff --git a/src/client.cpp b/src/client.cpp index 8924b3788..6332280b7 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -448,5 +448,6 @@ PVR_ERROR GetStreamProperties(PVR_STREAM_PROPERTIES*) { return PVR_ERROR_NOT_IMP PVR_ERROR IsEPGTagRecordable(const EPG_TAG*, bool*) { return PVR_ERROR_NOT_IMPLEMENTED; } PVR_ERROR IsEPGTagPlayable(const EPG_TAG*, bool*) { return PVR_ERROR_NOT_IMPLEMENTED; } PVR_ERROR GetEPGTagStreamProperties(const EPG_TAG*, PVR_NAMED_VALUE*, unsigned int*) { return PVR_ERROR_NOT_IMPLEMENTED; } +PVR_ERROR GetEPGTagEdl(const EPG_TAG* epgTag, PVR_EDL_ENTRY edl[], int *size) { return PVR_ERROR_NOT_IMPLEMENTED; } } // extern "C" From c8356fc54e58886cc99b78c86b81b0676fee9361 Mon Sep 17 00:00:00 2001 From: txtranslation Date: Mon, 14 May 2018 11:43:55 +0000 Subject: [PATCH 083/100] [lang] updated language files from Transifex --- pvr.iptvsimple/addon.xml.in | 6 +++--- .../resources/language/resource.language.bg_bg/strings.po | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index 308174c16..9ecbbcbbe 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ @@ -11,7 +11,7 @@ Kodi PVR byvoegsel vir IPTV ondersteuning. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home IPTV dəstəyi üçün Kodi PVR əlavəsini yükləyin. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home - Kodi ПВР добавка за поддръжка на IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home + Добавка за ПВР за поддръжка на IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Complement PVR de Kodi per al suport d'IPTV https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Doplněk PVR Kodi pro podporu IPTV. 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 @@ -61,7 +61,7 @@ Kodi PVR 插件需要 IPTV 支持。https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home 支援IPTV的Kodi PVR附加元件。https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home IPTV Simple PVR kliënt ondersteun M3U speellyste, stroom van lewendige TV vir multisaai / unisaai bronne, luister na radio kanale en EPG. - IPTV обикновен ПВР клиент. Поддържа m3u плейлисти, поточна телевизия за мултикаст/уникаст източници, слушане на радио канали и електронен програмен справочник. + Прост клиент за ПВР за телевизия по Интернет. Поддържа списъци за възпроизвеждане във формат „m3u“, поточно предавана телевизия от източници с излъчване мултикаст и уникаст, слушане на радио канали и електронен програмен справочник. Client senzill per a IPTV PVR compatible amb les llistes de reproducció m3u, transmissions en línia de TV en directe per als orígens difusió única o múltiple, escolta d'emissores de ràdio i guia electrònica de programació (EPG). Jednoduchý klient PVR pro IPTV podporuje seznamy stop m3u, streamování živého vysílání pro zdroje vícesměrového nebo jednosměrového vysílání, poslech rozhlasových stanic a televizní program. Cleient IPTV Simple PVR Mae'n cynnal rhestrau m3u, ffrydio Teledu Byw o ffynonellau darlledu eang ac unigol, gwrando ar sianeli Radio ac Amserlen Rhaglenni. diff --git a/pvr.iptvsimple/resources/language/resource.language.bg_bg/strings.po b/pvr.iptvsimple/resources/language/resource.language.bg_bg/strings.po index a05aec27a..e52e6c080 100644 --- a/pvr.iptvsimple/resources/language/resource.language.bg_bg/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.bg_bg/strings.po @@ -18,7 +18,7 @@ msgstr "" msgctxt "#30000" msgid "Location" -msgstr "Локация" +msgstr "Местоположение" msgctxt "#30001" msgid "Local Path (include Local Network)" From e22077720dab7fa16fe7ef8bf748ce76c6bcea85 Mon Sep 17 00:00:00 2001 From: txtranslation Date: Tue, 22 May 2018 08:11:46 +0000 Subject: [PATCH 084/100] [lang] updated language files from Transifex --- pvr.iptvsimple/addon.xml.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index 9ecbbcbbe..8ca95d24c 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ @@ -124,7 +124,7 @@ Este es un software inestable! El autor no se hace responsable de reproducciones fallidas, datos de EPG incorrectos, horas perdidas o cualquier otro efecto indeseado. ¡Este es un software inestable! Los autores no son responsables en absoluto de reproducciones fallidas, tiempos EPG incorrectos, desperdicio de horas, o cualquier otro efecto indeseable. Tämä on epävakaa ohjelma! Sen tekijät eivät ole millään muotoa vastuussa epäonnistuneista tallennuksista, virheellisistä ajastuksista, haaskatusta ajasta, verenpaineen noususta tai mistään muusta epäsuotuisasta vaikutuksesta. - Ce logiciel est instable! Les auteurs ne sont aucunement responsables des lectures défaillantes, d’horaires erronés du GÉP, des heures perdues ou tout autre effet indésirable. + Ce logiciel est instable ! Les auteurs ne sont aucunement responsables des lectures défaillantes, d’horaires erronés du GÉP, des heures perdues ou tout autre effet indésirable. Logiciel en cours d'élaboration ! Les auteurs ne sont en aucun cas responsables de l'échec des enregistrements, programmations défectueuses, temps perdu ou autres effets indésirables. Este software non é estábel! Os autores non se fan responsábeis dos erros na reproducción, horarios incorrectos na Guía, horas vencidas, e otros efectos non desexados. זוהי איננה הרחבה יציבה! המפתחים אינם אחראים על כשלון בניגון, זמנים שגויים במדריך השידורים, שעות מבוזבזות או כל תופעה לא רצויה אחרת. From 03394f569eccb40dba18eb85883932f92779d7b5 Mon Sep 17 00:00:00 2001 From: Kai Sommerfeld Date: Fri, 8 Jun 2018 21:25:37 +0200 Subject: [PATCH 085/100] PVR API 5.10.0 --- pvr.iptvsimple/addon.xml.in | 2 +- pvr.iptvsimple/changelog.txt | 3 +++ src/client.cpp | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index 8ca95d24c..e96a58cff 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ diff --git a/pvr.iptvsimple/changelog.txt b/pvr.iptvsimple/changelog.txt index f88828548..77928f314 100644 --- a/pvr.iptvsimple/changelog.txt +++ b/pvr.iptvsimple/changelog.txt @@ -1,3 +1,6 @@ +v3.5.0 +- Updated to PVR addon API v5.10.0 + v3.4.3 - Updated to PVR addon API v5.9.0 diff --git a/src/client.cpp b/src/client.cpp index 6332280b7..e959163dc 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -449,5 +449,6 @@ PVR_ERROR IsEPGTagRecordable(const EPG_TAG*, bool*) { return PVR_ERROR_NOT_IMPLE PVR_ERROR IsEPGTagPlayable(const EPG_TAG*, bool*) { return PVR_ERROR_NOT_IMPLEMENTED; } PVR_ERROR GetEPGTagStreamProperties(const EPG_TAG*, PVR_NAMED_VALUE*, unsigned int*) { return PVR_ERROR_NOT_IMPLEMENTED; } PVR_ERROR GetEPGTagEdl(const EPG_TAG* epgTag, PVR_EDL_ENTRY edl[], int *size) { return PVR_ERROR_NOT_IMPLEMENTED; } +PVR_ERROR GetStreamReadChunkSize(int* chunksize) { return PVR_ERROR_NOT_IMPLEMENTED; } } // extern "C" From d8d34b2d863d45cc85ee058ff8c93178b0ddd05b Mon Sep 17 00:00:00 2001 From: Kai Sommerfeld Date: Tue, 19 Jun 2018 14:56:59 +0200 Subject: [PATCH 086/100] PVR API 5.10.1 --- pvr.iptvsimple/addon.xml.in | 2 +- pvr.iptvsimple/changelog.txt | 3 +++ src/client.cpp | 6 ++++-- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index e96a58cff..633285216 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ diff --git a/pvr.iptvsimple/changelog.txt b/pvr.iptvsimple/changelog.txt index 77928f314..8b2def8f2 100644 --- a/pvr.iptvsimple/changelog.txt +++ b/pvr.iptvsimple/changelog.txt @@ -1,3 +1,6 @@ +v3.5.1 +- Updated to PVR addon API v5.10.1 + v3.5.0 - Updated to PVR addon API v5.10.0 diff --git a/src/client.cpp b/src/client.cpp index e959163dc..fc8515786 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -338,14 +338,16 @@ PVR_ERROR GetChannelStreamProperties(const PVR_CHANNEL* channel, PVR_NAMED_VALUE if (!channel || !properties || !iPropertiesCount) return PVR_ERROR_SERVER_ERROR; - if (*iPropertiesCount < 1) + if (*iPropertiesCount < 2) return PVR_ERROR_INVALID_PARAMETERS; if (m_data && m_data->GetChannel(*channel, m_currentChannel)) { strncpy(properties[0].strName, PVR_STREAM_PROPERTY_STREAMURL, sizeof(properties[0].strName) - 1); strncpy(properties[0].strValue, m_currentChannel.strStreamURL.c_str(), sizeof(properties[0].strValue) - 1); - *iPropertiesCount = 1; + strncpy(properties[1].strName, PVR_STREAM_PROPERTY_ISREALTIMESTREAM, sizeof(properties[1].strName) - 1); + strncpy(properties[1].strValue, "true", sizeof(properties[1].strValue) - 1); + *iPropertiesCount = 2; if (!m_currentChannel.properties.empty()) { for (auto& prop : m_currentChannel.properties) From 6e44490841e31e149b1d71348fc29df4a04f89d9 Mon Sep 17 00:00:00 2001 From: Wolfgang Haupt Date: Mon, 25 Jun 2018 23:47:54 +0200 Subject: [PATCH 087/100] Add support for #EXT-X-PLAYLIST-TYPE in M3U If we find a line #EXT-X-PLAYLIST-TYPE:VOD somewhere before the stream definition, we do not flag the item as realtime. If nothing is stated or the line is #EXT-X-PLAYLIST-TYPE:EVENT we flag the channel as realtime. Remove some useless casts along the way. --- pvr.iptvsimple/addon.xml.in | 2 +- pvr.iptvsimple/changelog.txt | 3 +++ src/PVRIptvData.cpp | 19 +++++++++++++++---- src/client.cpp | 6 ++---- 4 files changed, 21 insertions(+), 9 deletions(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index 633285216..c59cf7f25 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ diff --git a/pvr.iptvsimple/changelog.txt b/pvr.iptvsimple/changelog.txt index 8b2def8f2..4956aab4e 100644 --- a/pvr.iptvsimple/changelog.txt +++ b/pvr.iptvsimple/changelog.txt @@ -1,3 +1,6 @@ +v3.5.2 +- Add support for #EXT-X-PLAYLIST-TYPE in M3U + v3.5.1 - Updated to PVR addon API v5.10.1 diff --git a/src/PVRIptvData.cpp b/src/PVRIptvData.cpp index b37ff50d7..a8376bf1a 100644 --- a/src/PVRIptvData.cpp +++ b/src/PVRIptvData.cpp @@ -45,6 +45,7 @@ #define GROUP_NAME_MARKER "group-title=" #define KODIPROP_MARKER "#KODIPROP:" #define RADIO_MARKER "radio=" +#define PLAYLIST_TYPE_MARKER "#EXT-X-PLAYLIST-TYPE:" #define CHANNEL_LOGO_EXTENSION ".png" #define SECONDS_IN_DAY 86400 #define GENRES_MAP_FILENAME "genres.xml" @@ -318,7 +319,7 @@ bool PVRIptvData::LoadPlayList(void) /* load channels */ bool bFirst = true; - + bool bIsRealTime = true; int iChannelIndex = 0; int iUniqueGroupId = 0; int iChannelNum = g_iStartNumber; @@ -352,7 +353,7 @@ bool PVRIptvData::LoadPlayList(void) { strLine.erase(0, 3); } - if (StringUtils::Left(strLine, (int)strlen(M3U_START_MARKER)) == M3U_START_MARKER) + if (StringUtils::Left(strLine, strlen(M3U_START_MARKER)) == M3U_START_MARKER) { double fTvgShift = atof(ReadMarkerValue(strLine, TVG_INFO_SHIFT_MARKER).c_str()); iEPGTimeShift = (int) (fTvgShift * 3600.0); @@ -367,7 +368,7 @@ bool PVRIptvData::LoadPlayList(void) } } - if (StringUtils::Left(strLine, (int)strlen(M3U_INFO_MARKER)) == M3U_INFO_MARKER) + if (StringUtils::Left(strLine, strlen(M3U_INFO_MARKER)) == M3U_INFO_MARKER) { bool bRadio = false; double fTvgShift = 0; @@ -458,7 +459,7 @@ bool PVRIptvData::LoadPlayList(void) } } } - else if (StringUtils::Left(strLine, (int)strlen(KODIPROP_MARKER)) == KODIPROP_MARKER) + else if (StringUtils::Left(strLine, strlen(KODIPROP_MARKER)) == KODIPROP_MARKER) { std::string value = ReadMarkerValue(strLine, KODIPROP_MARKER); auto pos = value.find('='); @@ -469,12 +470,20 @@ bool PVRIptvData::LoadPlayList(void) tmpChannel.properties.insert({prop, propValue}); } } + else if (StringUtils::Left(strLine, strlen(PLAYLIST_TYPE_MARKER)) == PLAYLIST_TYPE_MARKER) + { + if (ReadMarkerValue(strLine, PLAYLIST_TYPE_MARKER) == "VOD") + bIsRealTime = false; + } else if (strLine[0] != '#') { XBMC->Log(LOG_DEBUG, "Found URL: '%s' (current channel name: '%s')", strLine.c_str(), tmpChannel.strChannelName.c_str()); + if (bIsRealTime) + tmpChannel.properties.insert({PVR_STREAM_PROPERTY_ISREALTIMESTREAM, "true"}); + PVRIptvChannel channel; channel.iUniqueId = GetChannelId(tmpChannel.strChannelName.c_str(), strLine.c_str()); channel.iChannelNumber = iChannelNum; @@ -506,6 +515,8 @@ bool PVRIptvData::LoadPlayList(void) tmpChannel.strTvgLogo = ""; tmpChannel.iTvgShift = 0; tmpChannel.bRadio = false; + tmpChannel.properties.clear(); + bIsRealTime = true; } } diff --git a/src/client.cpp b/src/client.cpp index fc8515786..e959163dc 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -338,16 +338,14 @@ PVR_ERROR GetChannelStreamProperties(const PVR_CHANNEL* channel, PVR_NAMED_VALUE if (!channel || !properties || !iPropertiesCount) return PVR_ERROR_SERVER_ERROR; - if (*iPropertiesCount < 2) + if (*iPropertiesCount < 1) return PVR_ERROR_INVALID_PARAMETERS; if (m_data && m_data->GetChannel(*channel, m_currentChannel)) { strncpy(properties[0].strName, PVR_STREAM_PROPERTY_STREAMURL, sizeof(properties[0].strName) - 1); strncpy(properties[0].strValue, m_currentChannel.strStreamURL.c_str(), sizeof(properties[0].strValue) - 1); - strncpy(properties[1].strName, PVR_STREAM_PROPERTY_ISREALTIMESTREAM, sizeof(properties[1].strName) - 1); - strncpy(properties[1].strValue, "true", sizeof(properties[1].strValue) - 1); - *iPropertiesCount = 2; + *iPropertiesCount = 1; if (!m_currentChannel.properties.empty()) { for (auto& prop : m_currentChannel.properties) From c721c034a250f83aa980a99c676bc29083fab375 Mon Sep 17 00:00:00 2001 From: Attila Jakosa Date: Sun, 1 Jul 2018 19:54:47 +0000 Subject: [PATCH 088/100] [lang] updated language files from Transifex --- pvr.iptvsimple/addon.xml.in | 9 +++++---- .../language/resource.language.cs_cz/strings.po | 2 +- .../language/resource.language.cy_gb/strings.po | 16 ++++++++++++++++ 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index 633285216..5068efc2f 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ @@ -13,7 +13,7 @@ IPTV dəstəyi üçün Kodi PVR əlavəsini yükləyin. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Добавка за ПВР за поддръжка на IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Complement PVR de Kodi per al suport d'IPTV https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home - Doplněk PVR Kodi pro podporu IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home + Doplněk do Kodi pro nahrávání (PVR) z IPTV. 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 Kodi PVR Addon für IPTV Unterstützung. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home @@ -64,7 +64,7 @@ Прост клиент за ПВР за телевизия по Интернет. Поддържа списъци за възпроизвеждане във формат „m3u“, поточно предавана телевизия от източници с излъчване мултикаст и уникаст, слушане на радио канали и електронен програмен справочник. Client senzill per a IPTV PVR compatible amb les llistes de reproducció m3u, transmissions en línia de TV en directe per als orígens difusió única o múltiple, escolta d'emissores de ràdio i guia electrònica de programació (EPG). Jednoduchý klient PVR pro IPTV podporuje seznamy stop m3u, streamování živého vysílání pro zdroje vícesměrového nebo jednosměrového vysílání, poslech rozhlasových stanic a televizní program. - Cleient IPTV Simple PVR Mae'n cynnal rhestrau m3u, ffrydio Teledu Byw o ffynonellau darlledu eang ac unigol, gwrando ar sianeli Radio ac Amserlen Rhaglenni. + Mae Cleient IPTV Simple PVR yn cynnal rhestrau m3u, ffrydio Teledu Byw o ffynonellau darlledu eang ac unigol, gwrando ar sianeli Radio ac Amserlen Rhaglenni. IPTV Simpel PVR klient understøttelse M3U-afspilningslister, streaming af direkte tv til multicast/unicast kilder, lytte til radio kanaler og EPG. IPTV Simple PVR Client unterstützt m3u Wiedergabelisten, Streaming von Live TV für Multicast/Unicast Quellen, Radiosender und EPG. Απλός Πελάτης PVR του IPTV, με υποστήριξη λιστών αναπαραγωγής m3u, αναπαραγωγή ροών Live TV για πηγές πολλαπλής/μοναδικής διανομής, ακρόαση ραδιοφωνικών καναλιών και EPG. @@ -112,7 +112,7 @@ Тази програма е нестабилна! Авторите не носят отговорност за неуспешно възпроизвеждане, некоректни часове в електронния програмен справочник, пропиляното време и други нежелани ефекти. Aquest programari és inestable! Els autors no es fan responsables de reproduccions fallides, horaris incorrectes a la guia electrònica de programació (EPG), hores perdudes o qualsevol altre efecte no desitjat. Tento software není stabilní! Autoři nejsou žádným způsobem zodpovědní za neúspěšná nahrávání, chybné časy televizního programu, ztracený čas nebo jakékoliv jiné nežádoucí výsledky... - Mae hwn yn feddalwedd ansad! Nid yw'r awduron yn gyfrifol mewn unrhyw ffordd am fethu recordio, amseru gwallus, oriau wedi eu gwastraffu nac effeithiau anymunol eraill. + Mae'r feddalwedd hon yn fregus! Nid yw'r awduron yn gyfrifol mewn unrhyw ffordd am fethu recordio, amseru gwallus, oriau wedi eu gwastraffu nac effeithiau annymunol eraill. Dette er ustabil software! Ophavsmændene er på ingen måde ansvarlig for mislykkede afspilninger, forkerte EPG tider, spildte timer, eller andre bivirkninger. Dies ist instabile Software! Die Autoren sind in keiner Weise verantwortlich für fehlgeschlagene Wiedergaben, falsche EPG Zeiten, verschwendete Zeit oder unerwünschte Effekte jeglicher Art. Ασταθές πρόγραμμα! Οι δημιουργοί δεν είναι σε καμία περίπτωση υπεύθυνοι για αποτυχημένες εγγραφές, λανθασμένους χρονοδιακόπτες, χαμένες ώρες, ή κάθε είδους ανεπιθύμητα αποτελέσματα. @@ -123,6 +123,7 @@ Este es un software inestable. El autor no se hace responsable por reproducciones fallidas, datos de GEP incorrectos, horas perdidas o cualquier otro efecto indeseable. Este es un software inestable! El autor no se hace responsable de reproducciones fallidas, datos de EPG incorrectos, horas perdidas o cualquier otro efecto indeseado. ¡Este es un software inestable! Los autores no son responsables en absoluto de reproducciones fallidas, tiempos EPG incorrectos, desperdicio de horas, o cualquier otro efecto indeseable. + Software hau ezegonkorra da! Egileak ez dira inolaz ere erantzule editen erreprodukzio akatsez, EPG denbora okerrez, ordu galduez edo beste edozein ondorio ezerosotaz. Tämä on epävakaa ohjelma! Sen tekijät eivät ole millään muotoa vastuussa epäonnistuneista tallennuksista, virheellisistä ajastuksista, haaskatusta ajasta, verenpaineen noususta tai mistään muusta epäsuotuisasta vaikutuksesta. Ce logiciel est instable ! Les auteurs ne sont aucunement responsables des lectures défaillantes, d’horaires erronés du GÉP, des heures perdues ou tout autre effet indésirable. Logiciel en cours d'élaboration ! Les auteurs ne sont en aucun cas responsables de l'échec des enregistrements, programmations défectueuses, temps perdu ou autres effets indésirables. diff --git a/pvr.iptvsimple/resources/language/resource.language.cs_cz/strings.po b/pvr.iptvsimple/resources/language/resource.language.cs_cz/strings.po index 138fb042f..94092f986 100644 --- a/pvr.iptvsimple/resources/language/resource.language.cs_cz/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.cs_cz/strings.po @@ -34,7 +34,7 @@ msgstr "Obecné" msgctxt "#30011" msgid "M3U Play List Path" -msgstr "Cesta k seznamu stop M3U" +msgstr "Popis umístění M3U seznamu stop" msgctxt "#30012" msgid "M3U Play List URL" diff --git a/pvr.iptvsimple/resources/language/resource.language.cy_gb/strings.po b/pvr.iptvsimple/resources/language/resource.language.cy_gb/strings.po index 83392b197..0af69fee2 100644 --- a/pvr.iptvsimple/resources/language/resource.language.cy_gb/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.cy_gb/strings.po @@ -84,6 +84,22 @@ msgctxt "#30032" msgid "Channels Logos Base URL" msgstr "URL Sail Logos y Sianeli" +msgctxt "#30040" +msgid "XMLTV Logos Options" +msgstr "Dewisiadau Logos XMLTV " + +msgctxt "#30041" +msgid "Channels Logos from XMLTV" +msgstr "Logos Sianeli oddi ar XMLTV" + msgctxt "#30042" msgid "Ignore" msgstr "Anwybyddu" + +msgctxt "#30043" +msgid "Prefer M3U" +msgstr "Ffafrio M3U" + +msgctxt "#30044" +msgid "Prefer XMLTV" +msgstr "Ffafrio XMLTV" From e8effadebc349d38f7b8a2c190baa72ebf74b6fe Mon Sep 17 00:00:00 2001 From: Attila Jakosa Date: Sat, 25 Aug 2018 06:06:07 +0000 Subject: [PATCH 089/100] [lang] updated language files from Transifex --- pvr.iptvsimple/addon.xml.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index 5068efc2f..1b40fe98e 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ @@ -111,7 +111,7 @@ Hierdie is onstabiele sagteware! Die outeurs is op geen manier verantwoordelik vir gefaalde spele, inkorrekte EPG tye, vermorsde ure, of enige ander ongewensde effekte. Тази програма е нестабилна! Авторите не носят отговорност за неуспешно възпроизвеждане, некоректни часове в електронния програмен справочник, пропиляното време и други нежелани ефекти. Aquest programari és inestable! Els autors no es fan responsables de reproduccions fallides, horaris incorrectes a la guia electrònica de programació (EPG), hores perdudes o qualsevol altre efecte no desitjat. - Tento software není stabilní! Autoři nejsou žádným způsobem zodpovědní za neúspěšná nahrávání, chybné časy televizního programu, ztracený čas nebo jakékoliv jiné nežádoucí výsledky... + Tento software není stabilní! Autoři nejsou žádným způsobem zodpovědní za neúspěšná nahrávání, chybné časy televizního programu, ztracený čas nebo jakékoliv jiné nežádoucí výsledky… Mae'r feddalwedd hon yn fregus! Nid yw'r awduron yn gyfrifol mewn unrhyw ffordd am fethu recordio, amseru gwallus, oriau wedi eu gwastraffu nac effeithiau annymunol eraill. Dette er ustabil software! Ophavsmændene er på ingen måde ansvarlig for mislykkede afspilninger, forkerte EPG tider, spildte timer, eller andre bivirkninger. Dies ist instabile Software! Die Autoren sind in keiner Weise verantwortlich für fehlgeschlagene Wiedergaben, falsche EPG Zeiten, verschwendete Zeit oder unerwünschte Effekte jeglicher Art. From 754ed122f8791ef748fab4cd76720f82eeaefc39 Mon Sep 17 00:00:00 2001 From: Rechi Date: Tue, 28 Aug 2018 10:00:00 +0200 Subject: [PATCH 090/100] [ci][travis] use ubuntu xenial --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index a310674a1..f858cfe10 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,11 +10,11 @@ language: cpp matrix: include: - os: linux - dist: trusty + dist: xenial sudo: required compiler: gcc - os: linux - dist: trusty + dist: xenial sudo: required compiler: clang - os: osx From 7a8e8257f85b158909ff98373c108ff94998618b Mon Sep 17 00:00:00 2001 From: Rechi Date: Tue, 28 Aug 2018 10:00:00 +0200 Subject: [PATCH 091/100] [ci][travis] use xcode9 --- .travis.yml | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/.travis.yml b/.travis.yml index f858cfe10..4911592df 100644 --- a/.travis.yml +++ b/.travis.yml @@ -18,17 +18,9 @@ matrix: sudo: required compiler: clang - os: osx - osx_image: xcode7.3 + osx_image: xcode9 - os: osx - osx_image: xcode6.1 - -# -# Some of the OS X images don't have cmake, contrary to what people -# on the Internet say -# -before_install: - - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then which cmake || brew update ; fi - - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then which cmake || brew install cmake ; fi + osx_image: xcode9.4 # # The addon source is automatically checked out in $TRAVIS_BUILD_DIR, From 2134467d967ca4fdca280807ff6de776fb0700d9 Mon Sep 17 00:00:00 2001 From: Rechi Date: Sun, 14 Oct 2018 18:19:59 +0200 Subject: [PATCH 092/100] add Jenkinsfile --- Jenkinsfile | 1 + 1 file changed, 1 insertion(+) create mode 100644 Jenkinsfile diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 000000000..a229fa517 --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1 @@ +buildPlugin() From d27b3ed1d379d2f865e95f08bdf2dbf086f8c0ad Mon Sep 17 00:00:00 2001 From: Rechi Date: Tue, 23 Oct 2018 09:13:30 +0200 Subject: [PATCH 093/100] move rapidxml to depends --- CMakeLists.txt | 7 +- FindRapidxml.cmake | 12 + debian/control | 2 +- depends/common/rapidxml/01-fix-windows.patch | 29 + depends/common/rapidxml/CMakeLists.txt | 5 + depends/common/rapidxml/rapidxml.sha256 | 1 + depends/common/rapidxml/rapidxml.txt | 1 + lib/rapidxml/license.txt | 52 - lib/rapidxml/manual.html | 406 --- lib/rapidxml/rapidxml.hpp | 2596 ------------------ lib/rapidxml/rapidxml_iterators.hpp | 175 -- lib/rapidxml/rapidxml_print.hpp | 421 --- lib/rapidxml/rapidxml_utils.hpp | 122 - pvr.iptvsimple/addon.xml.in | 2 +- pvr.iptvsimple/changelog.txt | 3 + 15 files changed, 58 insertions(+), 3776 deletions(-) create mode 100644 FindRapidxml.cmake create mode 100644 depends/common/rapidxml/01-fix-windows.patch create mode 100644 depends/common/rapidxml/CMakeLists.txt create mode 100644 depends/common/rapidxml/rapidxml.sha256 create mode 100644 depends/common/rapidxml/rapidxml.txt delete mode 100644 lib/rapidxml/license.txt delete mode 100644 lib/rapidxml/manual.html delete mode 100644 lib/rapidxml/rapidxml.hpp delete mode 100644 lib/rapidxml/rapidxml_iterators.hpp delete mode 100644 lib/rapidxml/rapidxml_print.hpp delete mode 100644 lib/rapidxml/rapidxml_utils.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index a1eaddee4..64ed74c8e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,18 +2,21 @@ project(pvr.iptvsimple) cmake_minimum_required(VERSION 2.6) +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}) + enable_language(CXX) find_package(Kodi REQUIRED) find_package(kodiplatform REQUIRED) find_package(p8-platform REQUIRED) +find_package(Rapidxml REQUIRED) find_package(ZLIB REQUIRED) include_directories(${kodiplatform_INCLUDE_DIRS} ${p8-platform_INCLUDE_DIRS} ${KODI_INCLUDE_DIR} - ${ZLIB_INCLUDE_DIRS} - ${PROJECT_SOURCE_DIR}/lib) + ${RAPIDXML_INCLUDE_DIRS} + ${ZLIB_INCLUDE_DIRS}) set(DEPLIBS ${p8-platform_LIBRARIES} ${ZLIB_LIBRARIES}) diff --git a/FindRapidxml.cmake b/FindRapidxml.cmake new file mode 100644 index 000000000..674267eca --- /dev/null +++ b/FindRapidxml.cmake @@ -0,0 +1,12 @@ +# - Try to find rapidxml +# Once done this will define +# +# RAPIDXML_FOUND - system has rapidxml +# RAPIDXML_INCLUDE_DIRS - the rapidxml include directory + +find_path(RAPIDXML_INCLUDE_DIRS rapidxml/rapidxml.hpp) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Rapidxml DEFAULT_MSG RAPIDXML_INCLUDE_DIRS) + +mark_as_advanced(RAPIDXML_INCLUDE_DIRS) diff --git a/debian/control b/debian/control index a28d436c9..a1ceb2d25 100644 --- a/debian/control +++ b/debian/control @@ -2,7 +2,7 @@ Source: kodi-pvr-iptvsimple Priority: extra Maintainer: Anton Fedchin Build-Depends: debhelper (>= 9.0.0), cmake, libkodiplatform-dev (>= 16.0.0), - kodi-addon-dev, zlib1g-dev + kodi-addon-dev, librapidxml-dev, zlib1g-dev Standards-Version: 3.9.4 Section: libs diff --git a/depends/common/rapidxml/01-fix-windows.patch b/depends/common/rapidxml/01-fix-windows.patch new file mode 100644 index 000000000..2ff171895 --- /dev/null +++ b/depends/common/rapidxml/01-fix-windows.patch @@ -0,0 +1,29 @@ +--- a/rapidxml.hpp ++++ b/rapidxml.hpp +@@ -382,7 +382,7 @@ + public: + + //! \cond internal +- typedef void *(alloc_func)(std::size_t); // Type of user-defined function used to allocate memory ++ typedef void *(alloc_func_)(std::size_t); // Type of user-defined function used to allocate memory + typedef void (free_func)(void *); // Type of user-defined function used to free memory + //! \endcond + +@@ -549,7 +549,7 @@ namespace rapidxml + //!
+ //! \param af Allocation function, or 0 to restore default function + //! \param ff Free function, or 0 to restore default function +- void set_allocator(alloc_func *af, free_func *ff) ++ void set_allocator(alloc_func_ *af, free_func *ff) + { + assert(m_begin == m_static_memory && m_ptr == align(m_begin)); // Verify that no memory is allocated yet + m_alloc_func = af; +@@ -634,7 +634,7 @@ namespace rapidxml + char *m_ptr; // First free byte in current pool + char *m_end; // One past last available byte in current pool + char m_static_memory[RAPIDXML_STATIC_POOL_SIZE]; // Static raw memory +- alloc_func *m_alloc_func; // Allocator function, or 0 if default is to be used ++ alloc_func_ *m_alloc_func; // Allocator function, or 0 if default is to be used + free_func *m_free_func; // Free function, or 0 if default is to be used + }; + diff --git a/depends/common/rapidxml/CMakeLists.txt b/depends/common/rapidxml/CMakeLists.txt new file mode 100644 index 000000000..d995ad88a --- /dev/null +++ b/depends/common/rapidxml/CMakeLists.txt @@ -0,0 +1,5 @@ +cmake_minimum_required(VERSION 3.5) + +project(rapidxml) + +install(FILES rapidxml.hpp rapidxml_iterators.hpp rapidxml_print.hpp rapidxml_utils.hpp DESTINATION include/rapidxml) diff --git a/depends/common/rapidxml/rapidxml.sha256 b/depends/common/rapidxml/rapidxml.sha256 new file mode 100644 index 000000000..197ee8db2 --- /dev/null +++ b/depends/common/rapidxml/rapidxml.sha256 @@ -0,0 +1 @@ +c3f0b886374981bb20fabcf323d755db4be6dba42064599481da64a85f5b3571 diff --git a/depends/common/rapidxml/rapidxml.txt b/depends/common/rapidxml/rapidxml.txt new file mode 100644 index 000000000..8d0281f01 --- /dev/null +++ b/depends/common/rapidxml/rapidxml.txt @@ -0,0 +1 @@ +rapidxml http://mirrors.kodi.tv/build-deps/sources/rapidxml-1.13.zip diff --git a/lib/rapidxml/license.txt b/lib/rapidxml/license.txt deleted file mode 100644 index 140983180..000000000 --- a/lib/rapidxml/license.txt +++ /dev/null @@ -1,52 +0,0 @@ -Use of this software is granted under one of the following two licenses, -to be chosen freely by the user. - -1. Boost Software License - Version 1.0 - August 17th, 2003 -=============================================================================== - -Copyright (c) 2006, 2007 Marcin Kalicinski - -Permission is hereby granted, free of charge, to any person or organization -obtaining a copy of the software and accompanying documentation covered by -this license (the "Software") to use, reproduce, display, distribute, -execute, and transmit the Software, and to prepare derivative works of the -Software, and to permit third-parties to whom the Software is furnished to -do so, all subject to the following: - -The copyright notices in the Software and this entire statement, including -the above license grant, this restriction and the following disclaimer, -must be included in all copies of the Software, in whole or in part, and -all derivative works of the Software, unless such copies or derivative -works are solely in the form of machine-executable object code generated by -a source language processor. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT -SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE -FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - -2. The MIT License -=============================================================================== - -Copyright (c) 2006, 2007 Marcin Kalicinski - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. diff --git a/lib/rapidxml/manual.html b/lib/rapidxml/manual.html deleted file mode 100644 index 2c422703f..000000000 --- a/lib/rapidxml/manual.html +++ /dev/null @@ -1,406 +0,0 @@ -

RAPIDXML Manual

Version 1.13

Copyright (C) 2006, 2009 Marcin Kalicinski
See accompanying file license.txt for license information.

Table of Contents

1. What is RapidXml?
1.1 Dependencies And Compatibility
1.2 Character Types And Encodings
1.3 Error Handling
1.4 Memory Allocation
1.5 W3C Compliance
1.6 API Design
1.7 Reliability
1.8 Acknowledgements
2. Two Minute Tutorial
2.1 Parsing
2.2 Accessing The DOM Tree
2.3 Modifying The DOM Tree
2.4 Printing XML
3. Differences From Regular XML Parsers
3.1 Lifetime Of Source Text
3.2 Ownership Of Strings
3.3 Destructive Vs Non-Destructive Mode
4. Performance
4.1 Comparison With Other Parsers
5. Reference

1. What is RapidXml?

RapidXml is an attempt to create the fastest XML DOM parser possible, while retaining useability, portability and reasonable W3C compatibility. It is an in-situ parser written in C++, with parsing speed approaching that of strlen() function executed on the same data.

- Entire parser is contained in a single header file, so no building or linking is neccesary. To use it you just need to copy rapidxml.hpp file to a convenient place (such as your project directory), and include it where needed. You may also want to use printing functions contained in header rapidxml_print.hpp.

1.1 Dependencies And Compatibility

RapidXml has no dependencies other than a very small subset of standard C++ library (<cassert>, <cstdlib>, <new> and <exception>, unless exceptions are disabled). It should compile on any reasonably conformant compiler, and was tested on Visual C++ 2003, Visual C++ 2005, Visual C++ 2008, gcc 3, gcc 4, and Comeau 4.3.3. Care was taken that no warnings are produced on these compilers, even with highest warning levels enabled.

1.2 Character Types And Encodings

RapidXml is character type agnostic, and can work both with narrow and wide characters. Current version does not fully support UTF-16 or UTF-32, so use of wide characters is somewhat incapacitated. However, it should succesfully parse wchar_t strings containing UTF-16 or UTF-32 if endianness of the data matches that of the machine. UTF-8 is fully supported, including all numeric character references, which are expanded into appropriate UTF-8 byte sequences (unless you enable parse_no_utf8 flag).

- Note that RapidXml performs no decoding - strings returned by name() and value() functions will contain text encoded using the same encoding as source file. Rapidxml understands and expands the following character references: &apos; &amp; &quot; &lt; &gt; &#...; Other character references are not expanded.

1.3 Error Handling

By default, RapidXml uses C++ exceptions to report errors. If this behaviour is undesirable, RAPIDXML_NO_EXCEPTIONS can be defined to suppress exception code. See parse_error class and parse_error_handler() function for more information.

1.4 Memory Allocation

RapidXml uses a special memory pool object to allocate nodes and attributes, because direct allocation using new operator would be far too slow. Underlying memory allocations performed by the pool can be customized by use of memory_pool::set_allocator() function. See class memory_pool for more information.

1.5 W3C Compliance

RapidXml is not a W3C compliant parser, primarily because it ignores DOCTYPE declarations. There is a number of other, minor incompatibilities as well. Still, it can successfully parse and produce complete trees of all valid XML files in W3C conformance suite (over 1000 files specially designed to find flaws in XML processors). In destructive mode it performs whitespace normalization and character entity substitution for a small set of built-in entities.

1.6 API Design

RapidXml API is minimalistic, to reduce code size as much as possible, and facilitate use in embedded environments. Additional convenience functions are provided in separate headers: rapidxml_utils.hpp and rapidxml_print.hpp. Contents of these headers is not an essential part of the library, and is currently not documented (otherwise than with comments in code).

1.7 Reliability

RapidXml is very robust and comes with a large harness of unit tests. Special care has been taken to ensure stability of the parser no matter what source text is thrown at it. One of the unit tests produces 100,000 randomly corrupted variants of XML document, which (when uncorrupted) contains all constructs recognized by RapidXml. RapidXml passes this test when it correctly recognizes that errors have been introduced, and does not crash or loop indefinitely.

- Another unit test puts RapidXml head-to-head with another, well estabilished XML parser, and verifies that their outputs match across a wide variety of small and large documents.

- Yet another test feeds RapidXml with over 1000 test files from W3C compliance suite, and verifies that correct results are obtained. There are also additional tests that verify each API function separately, and test that various parsing modes work as expected.

1.8 Acknowledgements

I would like to thank Arseny Kapoulkine for his work on pugixml, which was an inspiration for this project. Additional thanks go to Kristen Wegner for creating pugxml, from which pugixml was derived. Janusz Wohlfeil kindly ran RapidXml speed tests on hardware that I did not have access to, allowing me to expand performance comparison table.

2. Two Minute Tutorial

2.1 Parsing

The following code causes RapidXml to parse a zero-terminated string named text:
using namespace rapidxml;
-xml_document<> doc;    // character type defaults to char
-doc.parse<0>(text);    // 0 means default parse flags
-
doc object is now a root of DOM tree containing representation of the parsed XML. Because all RapidXml interface is contained inside namespace rapidxml, users must either bring contents of this namespace into scope, or fully qualify all the names. Class xml_document represents a root of the DOM hierarchy. By means of public inheritance, it is also an xml_node and a memory_pool. Template parameter of xml_document::parse() function is used to specify parsing flags, with which you can fine-tune behaviour of the parser. Note that flags must be a compile-time constant.

2.2 Accessing The DOM Tree

To access the DOM tree, use methods of xml_node and xml_attribute classes:
cout << "Name of my first node is: " << doc.first_node()->name() << "\n";
-xml_node<> *node = doc.first_node("foobar");
-cout << "Node foobar has value " << node->value() << "\n";
-for (xml_attribute<> *attr = node->first_attribute();
-     attr; attr = attr->next_attribute())
-{
-    cout << "Node foobar has attribute " << attr->name() << " ";
-    cout << "with value " << attr->value() << "\n";
-}
-

2.3 Modifying The DOM Tree

DOM tree produced by the parser is fully modifiable. Nodes and attributes can be added/removed, and their contents changed. The below example creates a HTML document, whose sole contents is a link to google.com website:
xml_document<> doc;
-xml_node<> *node = doc.allocate_node(node_element, "a", "Google");
-doc.append_node(node);
-xml_attribute<> *attr = doc.allocate_attribute("href", "google.com");
-node->append_attribute(attr);
-
One quirk is that nodes and attributes do not own the text of their names and values. This is because normally they only store pointers to the source text. So, when assigning a new name or value to the node, care must be taken to ensure proper lifetime of the string. The easiest way to achieve it is to allocate the string from the xml_document memory pool. In the above example this is not necessary, because we are only assigning character constants. But the code below uses memory_pool::allocate_string() function to allocate node name (which will have the same lifetime as the document), and assigns it to a new node:
xml_document<> doc;
-char *node_name = doc.allocate_string(name);        // Allocate string and copy name into it
-xml_node<> *node = doc.allocate_node(node_element, node_name);  // Set node name to node_name
-
Check Reference section for description of the entire interface.

2.4 Printing XML

You can print xml_document and xml_node objects into an XML string. Use print() function or operator <<, which are defined in rapidxml_print.hpp header.
using namespace rapidxml;
-xml_document<> doc;    // character type defaults to char
-// ... some code to fill the document
-
-// Print to stream using operator <<
-std::cout << doc;   
-
-// Print to stream using print function, specifying printing flags
-print(std::cout, doc, 0);   // 0 means default printing flags
-
-// Print to string using output iterator
-std::string s;
-print(std::back_inserter(s), doc, 0);
-
-// Print to memory buffer using output iterator
-char buffer[4096];                      // You are responsible for making the buffer large enough!
-char *end = print(buffer, doc, 0);      // end contains pointer to character after last printed character
-*end = 0;                               // Add string terminator after XML
-

3. Differences From Regular XML Parsers

RapidXml is an in-situ parser, which allows it to achieve very high parsing speed. In-situ means that parser does not make copies of strings. Instead, it places pointers to the source text in the DOM hierarchy.

3.1 Lifetime Of Source Text

In-situ parsing requires that source text lives at least as long as the document object. If source text is destroyed, names and values of nodes in DOM tree will become destroyed as well. Additionally, whitespace processing, character entity translation, and zero-termination of strings require that source text be modified during parsing (but see non-destructive mode). This makes the text useless for further processing once it was parsed by RapidXml.

- In many cases however, these are not serious issues.

3.2 Ownership Of Strings

Nodes and attributes produced by RapidXml do not own their name and value strings. They merely hold the pointers to them. This means you have to be careful when setting these values manually, by using xml_base::name(const Ch *) or xml_base::value(const Ch *) functions. Care must be taken to ensure that lifetime of the string passed is at least as long as lifetime of the node/attribute. The easiest way to achieve it is to allocate the string from memory_pool owned by the document. Use memory_pool::allocate_string() function for this purpose.

3.3 Destructive Vs Non-Destructive Mode

By default, the parser modifies source text during the parsing process. This is required to achieve character entity translation, whitespace normalization, and zero-termination of strings.

- In some cases this behaviour may be undesirable, for example if source text resides in read only memory, or is mapped to memory directly from file. By using appropriate parser flags (parse_non_destructive), source text modifications can be disabled. However, because RapidXml does in-situ parsing, it obviously has the following side-effects:

4. Performance

RapidXml achieves its speed through use of several techniques:
  • In-situ parsing. When building DOM tree, RapidXml does not make copies of string data, such as node names and values. Instead, it stores pointers to interior of the source text.
  • Use of template metaprogramming techniques. This allows it to move much of the work to compile time. Through magic of the templates, C++ compiler generates a separate copy of parsing code for any combination of parser flags you use. In each copy, all possible decisions are made at compile time and all unused code is omitted.
  • Extensive use of lookup tables for parsing.
  • Hand-tuned C++ with profiling done on several most popular CPUs.
This results in a very small and fast code: a parser which is custom tailored to exact needs with each invocation.

4.1 Comparison With Other Parsers

The table below compares speed of RapidXml to some other parsers, and to strlen() function executed on the same data. On a modern CPU (as of 2007), you can expect parsing throughput to be close to 1 GB/s. As a rule of thumb, parsing speed is about 50-100x faster than Xerces DOM, 30-60x faster than TinyXml, 3-12x faster than pugxml, and about 5% - 30% faster than pugixml, the fastest XML parser I know of.
  • The test file is a real-world, 50kB large, moderately dense XML file.
  • All timing is done by using RDTSC instruction present in Pentium-compatible CPUs.
  • No profile-guided optimizations are used.
  • All parsers are running in their fastest modes.
  • The results are given in CPU cycles per character, so frequency of CPUs is irrelevant.
  • The results are minimum values from a large number of runs, to minimize effects of operating system activity, task switching, interrupt handling etc.
  • A single parse of the test file takes about 1/10th of a millisecond, so with large number of runs there is a good chance of hitting at least one no-interrupt streak, and obtaining undisturbed results.
Platform
Compiler
strlen() RapidXml pugixml 0.3 pugxml TinyXml
Pentium 4
MSVC 8.0
2.5
5.4
7.0
61.7
298.8
Pentium 4
gcc 4.1.1
0.8
6.1
9.5
67.0
413.2
Core 2
MSVC 8.0
1.0
4.5
5.0
24.6
154.8
Core 2
gcc 4.1.1
0.6
4.6
5.4
28.3
229.3
Athlon XP
MSVC 8.0
3.1
7.7
8.0
25.5
182.6
Athlon XP
gcc 4.1.1
0.9
8.2
9.2
33.7
265.2
Pentium 3
MSVC 8.0
2.0
6.3
7.0
30.9
211.9
Pentium 3
gcc 4.1.1
1.0
6.7
8.9
35.3
316.0
(*) All results are in CPU cycles per character of source text

5. Reference

This section lists all classes, functions, constants etc. and describes them in detail.
class - template - rapidxml::memory_pool
- constructor - memory_pool()
- destructor - ~memory_pool()
function allocate_node(node_type type, const Ch *name=0, const Ch *value=0, std::size_t name_size=0, std::size_t value_size=0)
function allocate_attribute(const Ch *name=0, const Ch *value=0, std::size_t name_size=0, std::size_t value_size=0)
function allocate_string(const Ch *source=0, std::size_t size=0)
function clone_node(const xml_node< Ch > *source, xml_node< Ch > *result=0)
function clear()
function set_allocator(alloc_func *af, free_func *ff)

class rapidxml::parse_error
- constructor - parse_error(const char *what, void *where)
function what() const
function where() const

class - template - rapidxml::xml_attribute
- constructor - xml_attribute()
function document() const
function previous_attribute(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const
function next_attribute(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const

class - template - rapidxml::xml_base
- constructor - xml_base()
function name() const
function name_size() const
function value() const
function value_size() const
function name(const Ch *name, std::size_t size)
function name(const Ch *name)
function value(const Ch *value, std::size_t size)
function value(const Ch *value)
function parent() const

class - template - rapidxml::xml_document
- constructor - xml_document()
function parse(Ch *text)
function clear()

class - template - rapidxml::xml_node
- constructor - xml_node(node_type type)
function type() const
function document() const
function first_node(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const
function last_node(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const
function previous_sibling(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const
function next_sibling(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const
function first_attribute(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const
function last_attribute(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const
function type(node_type type)
function prepend_node(xml_node< Ch > *child)
function append_node(xml_node< Ch > *child)
function insert_node(xml_node< Ch > *where, xml_node< Ch > *child)
function remove_first_node()
function remove_last_node()
function remove_node(xml_node< Ch > *where)
function remove_all_nodes()
function prepend_attribute(xml_attribute< Ch > *attribute)
function append_attribute(xml_attribute< Ch > *attribute)
function insert_attribute(xml_attribute< Ch > *where, xml_attribute< Ch > *attribute)
function remove_first_attribute()
function remove_last_attribute()
function remove_attribute(xml_attribute< Ch > *where)
function remove_all_attributes()

namespace rapidxml
enum node_type
function parse_error_handler(const char *what, void *where)
function print(OutIt out, const xml_node< Ch > &node, int flags=0)
function print(std::basic_ostream< Ch > &out, const xml_node< Ch > &node, int flags=0)
function operator<<(std::basic_ostream< Ch > &out, const xml_node< Ch > &node)
- constant - parse_no_data_nodes
- constant - parse_no_element_values
- constant - parse_no_string_terminators
- constant - parse_no_entity_translation
- constant - parse_no_utf8
- constant - parse_declaration_node
- constant - parse_comment_nodes
- constant - parse_doctype_node
- constant - parse_pi_nodes
- constant - parse_validate_closing_tags
- constant - parse_trim_whitespace
- constant - parse_normalize_whitespace
- constant - parse_default
- constant - parse_non_destructive
- constant - parse_fastest
- constant - parse_full
- constant - print_no_indenting


class - template - rapidxml::memory_pool

- - Defined in rapidxml.hpp
- Base class for - xml_document

Description

This class is used by the parser to create new nodes and attributes, without overheads of dynamic memory allocation. In most cases, you will not need to use this class directly. However, if you need to create nodes manually or modify names/values of nodes, you are encouraged to use memory_pool of relevant xml_document to allocate the memory. Not only is this faster than allocating them by using new operator, but also their lifetime will be tied to the lifetime of document, possibly simplyfing memory management.

- Call allocate_node() or allocate_attribute() functions to obtain new nodes or attributes from the pool. You can also call allocate_string() function to allocate strings. Such strings can then be used as names or values of nodes without worrying about their lifetime. Note that there is no free() function -- all allocations are freed at once when clear() function is called, or when the pool is destroyed.

- It is also possible to create a standalone memory_pool, and use it to allocate nodes, whose lifetime will not be tied to any document.

- Pool maintains RAPIDXML_STATIC_POOL_SIZE bytes of statically allocated memory. Until static memory is exhausted, no dynamic memory allocations are done. When static memory is exhausted, pool allocates additional blocks of memory of size RAPIDXML_DYNAMIC_POOL_SIZE each, by using global new[] and delete[] operators. This behaviour can be changed by setting custom allocation routines. Use set_allocator() function to set them.

- Allocations for nodes, attributes and strings are aligned at RAPIDXML_ALIGNMENT bytes. This value defaults to the size of pointer on target architecture.

- To obtain absolutely top performance from the parser, it is important that all nodes are allocated from a single, contiguous block of memory. Otherwise, cache misses when jumping between two (or more) disjoint blocks of memory can slow down parsing quite considerably. If required, you can tweak RAPIDXML_STATIC_POOL_SIZE, RAPIDXML_DYNAMIC_POOL_SIZE and RAPIDXML_ALIGNMENT to obtain best wasted memory to performance compromise. To do it, define their values before rapidxml.hpp file is included.

Parameters

Ch
Character type of created nodes.

- constructor - memory_pool::memory_pool

Synopsis

memory_pool(); -

Description

Constructs empty pool with default allocator functions.

- destructor - memory_pool::~memory_pool

Synopsis

~memory_pool(); -

Description

Destroys pool and frees all the memory. This causes memory occupied by nodes allocated by the pool to be freed. Nodes allocated from the pool are no longer valid.

function memory_pool::allocate_node

Synopsis

xml_node<Ch>* allocate_node(node_type type, const Ch *name=0, const Ch *value=0, std::size_t name_size=0, std::size_t value_size=0); -

Description

Allocates a new node from the pool, and optionally assigns name and value to it. If the allocation request cannot be accomodated, this function will throw std::bad_alloc. If exceptions are disabled by defining RAPIDXML_NO_EXCEPTIONS, this function will call rapidxml::parse_error_handler() function.

Parameters

type
Type of node to create.
name
Name to assign to the node, or 0 to assign no name.
value
Value to assign to the node, or 0 to assign no value.
name_size
Size of name to assign, or 0 to automatically calculate size from name string.
value_size
Size of value to assign, or 0 to automatically calculate size from value string.

Returns

Pointer to allocated node. This pointer will never be NULL.

function memory_pool::allocate_attribute

Synopsis

xml_attribute<Ch>* allocate_attribute(const Ch *name=0, const Ch *value=0, std::size_t name_size=0, std::size_t value_size=0); -

Description

Allocates a new attribute from the pool, and optionally assigns name and value to it. If the allocation request cannot be accomodated, this function will throw std::bad_alloc. If exceptions are disabled by defining RAPIDXML_NO_EXCEPTIONS, this function will call rapidxml::parse_error_handler() function.

Parameters

name
Name to assign to the attribute, or 0 to assign no name.
value
Value to assign to the attribute, or 0 to assign no value.
name_size
Size of name to assign, or 0 to automatically calculate size from name string.
value_size
Size of value to assign, or 0 to automatically calculate size from value string.

Returns

Pointer to allocated attribute. This pointer will never be NULL.

function memory_pool::allocate_string

Synopsis

Ch* allocate_string(const Ch *source=0, std::size_t size=0); -

Description

Allocates a char array of given size from the pool, and optionally copies a given string to it. If the allocation request cannot be accomodated, this function will throw std::bad_alloc. If exceptions are disabled by defining RAPIDXML_NO_EXCEPTIONS, this function will call rapidxml::parse_error_handler() function.

Parameters

source
String to initialize the allocated memory with, or 0 to not initialize it.
size
Number of characters to allocate, or zero to calculate it automatically from source string length; if size is 0, source string must be specified and null terminated.

Returns

Pointer to allocated char array. This pointer will never be NULL.

function memory_pool::clone_node

Synopsis

xml_node<Ch>* clone_node(const xml_node< Ch > *source, xml_node< Ch > *result=0); -

Description

Clones an xml_node and its hierarchy of child nodes and attributes. Nodes and attributes are allocated from this memory pool. Names and values are not cloned, they are shared between the clone and the source. Result node can be optionally specified as a second parameter, in which case its contents will be replaced with cloned source node. This is useful when you want to clone entire document.

Parameters

source
Node to clone.
result
Node to put results in, or 0 to automatically allocate result node

Returns

Pointer to cloned node. This pointer will never be NULL.

function memory_pool::clear

Synopsis

void clear(); -

Description

Clears the pool. This causes memory occupied by nodes allocated by the pool to be freed. Any nodes or strings allocated from the pool will no longer be valid.

function memory_pool::set_allocator

Synopsis

void set_allocator(alloc_func *af, free_func *ff); -

Description

Sets or resets the user-defined memory allocation functions for the pool. This can only be called when no memory is allocated from the pool yet, otherwise results are undefined. Allocation function must not return invalid pointer on failure. It should either throw, stop the program, or use longjmp() function to pass control to other place of program. If it returns invalid pointer, results are undefined.

- User defined allocation functions must have the following forms:

-void *allocate(std::size_t size);
-void free(void *pointer);

Parameters

af
Allocation function, or 0 to restore default function
ff
Free function, or 0 to restore default function

class rapidxml::parse_error

- - Defined in rapidxml.hpp

Description

Parse error exception. This exception is thrown by the parser when an error occurs. Use what() function to get human-readable error message. Use where() function to get a pointer to position within source text where error was detected.

- If throwing exceptions by the parser is undesirable, it can be disabled by defining RAPIDXML_NO_EXCEPTIONS macro before rapidxml.hpp is included. This will cause the parser to call rapidxml::parse_error_handler() function instead of throwing an exception. This function must be defined by the user.

- This class derives from std::exception class.

- constructor - parse_error::parse_error

Synopsis

parse_error(const char *what, void *where); -

Description

Constructs parse error.

function parse_error::what

Synopsis

virtual const char* what() const; -

Description

Gets human readable description of error.

Returns

Pointer to null terminated description of the error.

function parse_error::where

Synopsis

Ch* where() const; -

Description

Gets pointer to character data where error happened. Ch should be the same as char type of xml_document that produced the error.

Returns

Pointer to location within the parsed string where error occured.

class - template - rapidxml::xml_attribute

- - Defined in rapidxml.hpp
- Inherits from - xml_base

Description

Class representing attribute node of XML document. Each attribute has name and value strings, which are available through name() and value() functions (inherited from xml_base). Note that after parse, both name and value of attribute will point to interior of source text used for parsing. Thus, this text must persist in memory for the lifetime of attribute.

Parameters

Ch
Character type to use.

- constructor - xml_attribute::xml_attribute

Synopsis

xml_attribute(); -

Description

Constructs an empty attribute with the specified type. Consider using memory_pool of appropriate xml_document if allocating attributes manually.

function xml_attribute::document

Synopsis

xml_document<Ch>* document() const; -

Description

Gets document of which attribute is a child.

Returns

Pointer to document that contains this attribute, or 0 if there is no parent document.

function xml_attribute::previous_attribute

Synopsis

xml_attribute<Ch>* previous_attribute(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const; -

Description

Gets previous attribute, optionally matching attribute name.

Parameters

name
Name of attribute to find, or 0 to return previous attribute regardless of its name; this string doesn't have to be zero-terminated if name_size is non-zero
name_size
Size of name, in characters, or 0 to have size calculated automatically from string
case_sensitive
Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters

Returns

Pointer to found attribute, or 0 if not found.

function xml_attribute::next_attribute

Synopsis

xml_attribute<Ch>* next_attribute(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const; -

Description

Gets next attribute, optionally matching attribute name.

Parameters

name
Name of attribute to find, or 0 to return next attribute regardless of its name; this string doesn't have to be zero-terminated if name_size is non-zero
name_size
Size of name, in characters, or 0 to have size calculated automatically from string
case_sensitive
Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters

Returns

Pointer to found attribute, or 0 if not found.

class - template - rapidxml::xml_base

- - Defined in rapidxml.hpp
- Base class for - xml_attribute xml_node

Description

Base class for xml_node and xml_attribute implementing common functions: name(), name_size(), value(), value_size() and parent().

Parameters

Ch
Character type to use

- constructor - xml_base::xml_base

Synopsis

xml_base(); -

function xml_base::name

Synopsis

Ch* name() const; -

Description

Gets name of the node. Interpretation of name depends on type of node. Note that name will not be zero-terminated if rapidxml::parse_no_string_terminators option was selected during parse.

- Use name_size() function to determine length of the name.

Returns

Name of node, or empty string if node has no name.

function xml_base::name_size

Synopsis

std::size_t name_size() const; -

Description

Gets size of node name, not including terminator character. This function works correctly irrespective of whether name is or is not zero terminated.

Returns

Size of node name, in characters.

function xml_base::value

Synopsis

Ch* value() const; -

Description

Gets value of node. Interpretation of value depends on type of node. Note that value will not be zero-terminated if rapidxml::parse_no_string_terminators option was selected during parse.

- Use value_size() function to determine length of the value.

Returns

Value of node, or empty string if node has no value.

function xml_base::value_size

Synopsis

std::size_t value_size() const; -

Description

Gets size of node value, not including terminator character. This function works correctly irrespective of whether value is or is not zero terminated.

Returns

Size of node value, in characters.

function xml_base::name

Synopsis

void name(const Ch *name, std::size_t size); -

Description

Sets name of node to a non zero-terminated string. See Ownership Of Strings .

- Note that node does not own its name or value, it only stores a pointer to it. It will not delete or otherwise free the pointer on destruction. It is reponsibility of the user to properly manage lifetime of the string. The easiest way to achieve it is to use memory_pool of the document to allocate the string - on destruction of the document the string will be automatically freed.

- Size of name must be specified separately, because name does not have to be zero terminated. Use name(const Ch *) function to have the length automatically calculated (string must be zero terminated).

Parameters

name
Name of node to set. Does not have to be zero terminated.
size
Size of name, in characters. This does not include zero terminator, if one is present.

function xml_base::name

Synopsis

void name(const Ch *name); -

Description

Sets name of node to a zero-terminated string. See also Ownership Of Strings and xml_node::name(const Ch *, std::size_t).

Parameters

name
Name of node to set. Must be zero terminated.

function xml_base::value

Synopsis

void value(const Ch *value, std::size_t size); -

Description

Sets value of node to a non zero-terminated string. See Ownership Of Strings .

- Note that node does not own its name or value, it only stores a pointer to it. It will not delete or otherwise free the pointer on destruction. It is reponsibility of the user to properly manage lifetime of the string. The easiest way to achieve it is to use memory_pool of the document to allocate the string - on destruction of the document the string will be automatically freed.

- Size of value must be specified separately, because it does not have to be zero terminated. Use value(const Ch *) function to have the length automatically calculated (string must be zero terminated).

- If an element has a child node of type node_data, it will take precedence over element value when printing. If you want to manipulate data of elements using values, use parser flag rapidxml::parse_no_data_nodes to prevent creation of data nodes by the parser.

Parameters

value
value of node to set. Does not have to be zero terminated.
size
Size of value, in characters. This does not include zero terminator, if one is present.

function xml_base::value

Synopsis

void value(const Ch *value); -

Description

Sets value of node to a zero-terminated string. See also Ownership Of Strings and xml_node::value(const Ch *, std::size_t).

Parameters

value
Vame of node to set. Must be zero terminated.

function xml_base::parent

Synopsis

xml_node<Ch>* parent() const; -

Description

Gets node parent.

Returns

Pointer to parent node, or 0 if there is no parent.

class - template - rapidxml::xml_document

- - Defined in rapidxml.hpp
- Inherits from - xml_node memory_pool

Description

This class represents root of the DOM hierarchy. It is also an xml_node and a memory_pool through public inheritance. Use parse() function to build a DOM tree from a zero-terminated XML text string. parse() function allocates memory for nodes and attributes by using functions of xml_document, which are inherited from memory_pool. To access root node of the document, use the document itself, as if it was an xml_node.

Parameters

Ch
Character type to use.

- constructor - xml_document::xml_document

Synopsis

xml_document(); -

Description

Constructs empty XML document.

function xml_document::parse

Synopsis

void parse(Ch *text); -

Description

Parses zero-terminated XML string according to given flags. Passed string will be modified by the parser, unless rapidxml::parse_non_destructive flag is used. The string must persist for the lifetime of the document. In case of error, rapidxml::parse_error exception will be thrown.

- If you want to parse contents of a file, you must first load the file into the memory, and pass pointer to its beginning. Make sure that data is zero-terminated.

- Document can be parsed into multiple times. Each new call to parse removes previous nodes and attributes (if any), but does not clear memory pool.

Parameters

text
XML data to parse; pointer is non-const to denote fact that this data may be modified by the parser.

function xml_document::clear

Synopsis

void clear(); -

Description

Clears the document by deleting all nodes and clearing the memory pool. All nodes owned by document pool are destroyed.

class - template - rapidxml::xml_node

- - Defined in rapidxml.hpp
- Inherits from - xml_base
- Base class for - xml_document

Description

Class representing a node of XML document. Each node may have associated name and value strings, which are available through name() and value() functions. Interpretation of name and value depends on type of the node. Type of node can be determined by using type() function.

- Note that after parse, both name and value of node, if any, will point interior of source text used for parsing. Thus, this text must persist in the memory for the lifetime of node.

Parameters

Ch
Character type to use.

- constructor - xml_node::xml_node

Synopsis

xml_node(node_type type); -

Description

Constructs an empty node with the specified type. Consider using memory_pool of appropriate document to allocate nodes manually.

Parameters

type
Type of node to construct.

function xml_node::type

Synopsis

node_type type() const; -

Description

Gets type of node.

Returns

Type of node.

function xml_node::document

Synopsis

xml_document<Ch>* document() const; -

Description

Gets document of which node is a child.

Returns

Pointer to document that contains this node, or 0 if there is no parent document.

function xml_node::first_node

Synopsis

xml_node<Ch>* first_node(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const; -

Description

Gets first child node, optionally matching node name.

Parameters

name
Name of child to find, or 0 to return first child regardless of its name; this string doesn't have to be zero-terminated if name_size is non-zero
name_size
Size of name, in characters, or 0 to have size calculated automatically from string
case_sensitive
Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters

Returns

Pointer to found child, or 0 if not found.

function xml_node::last_node

Synopsis

xml_node<Ch>* last_node(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const; -

Description

Gets last child node, optionally matching node name. Behaviour is undefined if node has no children. Use first_node() to test if node has children.

Parameters

name
Name of child to find, or 0 to return last child regardless of its name; this string doesn't have to be zero-terminated if name_size is non-zero
name_size
Size of name, in characters, or 0 to have size calculated automatically from string
case_sensitive
Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters

Returns

Pointer to found child, or 0 if not found.

function xml_node::previous_sibling

Synopsis

xml_node<Ch>* previous_sibling(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const; -

Description

Gets previous sibling node, optionally matching node name. Behaviour is undefined if node has no parent. Use parent() to test if node has a parent.

Parameters

name
Name of sibling to find, or 0 to return previous sibling regardless of its name; this string doesn't have to be zero-terminated if name_size is non-zero
name_size
Size of name, in characters, or 0 to have size calculated automatically from string
case_sensitive
Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters

Returns

Pointer to found sibling, or 0 if not found.

function xml_node::next_sibling

Synopsis

xml_node<Ch>* next_sibling(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const; -

Description

Gets next sibling node, optionally matching node name. Behaviour is undefined if node has no parent. Use parent() to test if node has a parent.

Parameters

name
Name of sibling to find, or 0 to return next sibling regardless of its name; this string doesn't have to be zero-terminated if name_size is non-zero
name_size
Size of name, in characters, or 0 to have size calculated automatically from string
case_sensitive
Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters

Returns

Pointer to found sibling, or 0 if not found.

function xml_node::first_attribute

Synopsis

xml_attribute<Ch>* first_attribute(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const; -

Description

Gets first attribute of node, optionally matching attribute name.

Parameters

name
Name of attribute to find, or 0 to return first attribute regardless of its name; this string doesn't have to be zero-terminated if name_size is non-zero
name_size
Size of name, in characters, or 0 to have size calculated automatically from string
case_sensitive
Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters

Returns

Pointer to found attribute, or 0 if not found.

function xml_node::last_attribute

Synopsis

xml_attribute<Ch>* last_attribute(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const; -

Description

Gets last attribute of node, optionally matching attribute name.

Parameters

name
Name of attribute to find, or 0 to return last attribute regardless of its name; this string doesn't have to be zero-terminated if name_size is non-zero
name_size
Size of name, in characters, or 0 to have size calculated automatically from string
case_sensitive
Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters

Returns

Pointer to found attribute, or 0 if not found.

function xml_node::type

Synopsis

void type(node_type type); -

Description

Sets type of node.

Parameters

type
Type of node to set.

function xml_node::prepend_node

Synopsis

void prepend_node(xml_node< Ch > *child); -

Description

Prepends a new child node. The prepended child becomes the first child, and all existing children are moved one position back.

Parameters

child
Node to prepend.

function xml_node::append_node

Synopsis

void append_node(xml_node< Ch > *child); -

Description

Appends a new child node. The appended child becomes the last child.

Parameters

child
Node to append.

function xml_node::insert_node

Synopsis

void insert_node(xml_node< Ch > *where, xml_node< Ch > *child); -

Description

Inserts a new child node at specified place inside the node. All children after and including the specified node are moved one position back.

Parameters

where
Place where to insert the child, or 0 to insert at the back.
child
Node to insert.

function xml_node::remove_first_node

Synopsis

void remove_first_node(); -

Description

Removes first child node. If node has no children, behaviour is undefined. Use first_node() to test if node has children.

function xml_node::remove_last_node

Synopsis

void remove_last_node(); -

Description

Removes last child of the node. If node has no children, behaviour is undefined. Use first_node() to test if node has children.

function xml_node::remove_node

Synopsis

void remove_node(xml_node< Ch > *where); -

Description

Removes specified child from the node.

function xml_node::remove_all_nodes

Synopsis

void remove_all_nodes(); -

Description

Removes all child nodes (but not attributes).

function xml_node::prepend_attribute

Synopsis

void prepend_attribute(xml_attribute< Ch > *attribute); -

Description

Prepends a new attribute to the node.

Parameters

attribute
Attribute to prepend.

function xml_node::append_attribute

Synopsis

void append_attribute(xml_attribute< Ch > *attribute); -

Description

Appends a new attribute to the node.

Parameters

attribute
Attribute to append.

function xml_node::insert_attribute

Synopsis

void insert_attribute(xml_attribute< Ch > *where, xml_attribute< Ch > *attribute); -

Description

Inserts a new attribute at specified place inside the node. All attributes after and including the specified attribute are moved one position back.

Parameters

where
Place where to insert the attribute, or 0 to insert at the back.
attribute
Attribute to insert.

function xml_node::remove_first_attribute

Synopsis

void remove_first_attribute(); -

Description

Removes first attribute of the node. If node has no attributes, behaviour is undefined. Use first_attribute() to test if node has attributes.

function xml_node::remove_last_attribute

Synopsis

void remove_last_attribute(); -

Description

Removes last attribute of the node. If node has no attributes, behaviour is undefined. Use first_attribute() to test if node has attributes.

function xml_node::remove_attribute

Synopsis

void remove_attribute(xml_attribute< Ch > *where); -

Description

Removes specified attribute from node.

Parameters

where
Pointer to attribute to be removed.

function xml_node::remove_all_attributes

Synopsis

void remove_all_attributes(); -

Description

Removes all attributes of node.

enum node_type

Description

Enumeration listing all node types produced by the parser. Use xml_node::type() function to query node type.

Values

node_document
A document node. Name and value are empty.
node_element
An element node. Name contains element name. Value contains text of first data node.
node_data
A data node. Name is empty. Value contains data text.
node_cdata
A CDATA node. Name is empty. Value contains data text.
node_comment
A comment node. Name is empty. Value contains comment text.
node_declaration
A declaration node. Name and value are empty. Declaration parameters (version, encoding and standalone) are in node attributes.
node_doctype
A DOCTYPE node. Name is empty. Value contains DOCTYPE text.
node_pi
A PI node. Name contains target. Value contains instructions.

function parse_error_handler

Synopsis

void rapidxml::parse_error_handler(const char *what, void *where); -

Description

When exceptions are disabled by defining RAPIDXML_NO_EXCEPTIONS, this function is called to notify user about the error. It must be defined by the user.

- This function cannot return. If it does, the results are undefined.

- A very simple definition might look like that: - void rapidxml::parse_error_handler(const char *what, void *where) - { - std::cout << "Parse error: " << what << "\n"; - std::abort(); - } -

Parameters

what
Human readable description of the error.
where
Pointer to character data where error was detected.

function print

Synopsis

OutIt rapidxml::print(OutIt out, const xml_node< Ch > &node, int flags=0); -

Description

Prints XML to given output iterator.

Parameters

out
Output iterator to print to.
node
Node to be printed. Pass xml_document to print entire document.
flags
Flags controlling how XML is printed.

Returns

Output iterator pointing to position immediately after last character of printed text.

function print

Synopsis

std::basic_ostream<Ch>& rapidxml::print(std::basic_ostream< Ch > &out, const xml_node< Ch > &node, int flags=0); -

Description

Prints XML to given output stream.

Parameters

out
Output stream to print to.
node
Node to be printed. Pass xml_document to print entire document.
flags
Flags controlling how XML is printed.

Returns

Output stream.

function operator<<

Synopsis

std::basic_ostream<Ch>& rapidxml::operator<<(std::basic_ostream< Ch > &out, const xml_node< Ch > &node); -

Description

Prints formatted XML to given output stream. Uses default printing flags. Use print() function to customize printing process.

Parameters

out
Output stream to print to.
node
Node to be printed.

Returns

Output stream.

- constant - parse_no_data_nodes

Synopsis

const int parse_no_data_nodes - = 0x1; -

Description

Parse flag instructing the parser to not create data nodes. Text of first data node will still be placed in value of parent element, unless rapidxml::parse_no_element_values flag is also specified. Can be combined with other flags by use of | operator.

- See xml_document::parse() function.

- constant - parse_no_element_values

Synopsis

const int parse_no_element_values - = 0x2; -

Description

Parse flag instructing the parser to not use text of first data node as a value of parent element. Can be combined with other flags by use of | operator. Note that child data nodes of element node take precendence over its value when printing. That is, if element has one or more child data nodes and a value, the value will be ignored. Use rapidxml::parse_no_data_nodes flag to prevent creation of data nodes if you want to manipulate data using values of elements.

- See xml_document::parse() function.

- constant - parse_no_string_terminators

Synopsis

const int parse_no_string_terminators - = 0x4; -

Description

Parse flag instructing the parser to not place zero terminators after strings in the source text. By default zero terminators are placed, modifying source text. Can be combined with other flags by use of | operator.

- See xml_document::parse() function.

- constant - parse_no_entity_translation

Synopsis

const int parse_no_entity_translation - = 0x8; -

Description

Parse flag instructing the parser to not translate entities in the source text. By default entities are translated, modifying source text. Can be combined with other flags by use of | operator.

- See xml_document::parse() function.

- constant - parse_no_utf8

Synopsis

const int parse_no_utf8 - = 0x10; -

Description

Parse flag instructing the parser to disable UTF-8 handling and assume plain 8 bit characters. By default, UTF-8 handling is enabled. Can be combined with other flags by use of | operator.

- See xml_document::parse() function.

- constant - parse_declaration_node

Synopsis

const int parse_declaration_node - = 0x20; -

Description

Parse flag instructing the parser to create XML declaration node. By default, declaration node is not created. Can be combined with other flags by use of | operator.

- See xml_document::parse() function.

- constant - parse_comment_nodes

Synopsis

const int parse_comment_nodes - = 0x40; -

Description

Parse flag instructing the parser to create comments nodes. By default, comment nodes are not created. Can be combined with other flags by use of | operator.

- See xml_document::parse() function.

- constant - parse_doctype_node

Synopsis

const int parse_doctype_node - = 0x80; -

Description

Parse flag instructing the parser to create DOCTYPE node. By default, doctype node is not created. Although W3C specification allows at most one DOCTYPE node, RapidXml will silently accept documents with more than one. Can be combined with other flags by use of | operator.

- See xml_document::parse() function.

- constant - parse_pi_nodes

Synopsis

const int parse_pi_nodes - = 0x100; -

Description

Parse flag instructing the parser to create PI nodes. By default, PI nodes are not created. Can be combined with other flags by use of | operator.

- See xml_document::parse() function.

- constant - parse_validate_closing_tags

Synopsis

const int parse_validate_closing_tags - = 0x200; -

Description

Parse flag instructing the parser to validate closing tag names. If not set, name inside closing tag is irrelevant to the parser. By default, closing tags are not validated. Can be combined with other flags by use of | operator.

- See xml_document::parse() function.

- constant - parse_trim_whitespace

Synopsis

const int parse_trim_whitespace - = 0x400; -

Description

Parse flag instructing the parser to trim all leading and trailing whitespace of data nodes. By default, whitespace is not trimmed. This flag does not cause the parser to modify source text. Can be combined with other flags by use of | operator.

- See xml_document::parse() function.

- constant - parse_normalize_whitespace

Synopsis

const int parse_normalize_whitespace - = 0x800; -

Description

Parse flag instructing the parser to condense all whitespace runs of data nodes to a single space character. Trimming of leading and trailing whitespace of data is controlled by rapidxml::parse_trim_whitespace flag. By default, whitespace is not normalized. If this flag is specified, source text will be modified. Can be combined with other flags by use of | operator.

- See xml_document::parse() function.

- constant - parse_default

Synopsis

const int parse_default - = 0; -

Description

Parse flags which represent default behaviour of the parser. This is always equal to 0, so that all other flags can be simply ored together. Normally there is no need to inconveniently disable flags by anding with their negated (~) values. This also means that meaning of each flag is a negation of the default setting. For example, if flag name is rapidxml::parse_no_utf8, it means that utf-8 is enabled by default, and using the flag will disable it.

- See xml_document::parse() function.

- constant - parse_non_destructive

Synopsis

const int parse_non_destructive - = parse_no_string_terminators | parse_no_entity_translation; -

Description

A combination of parse flags that forbids any modifications of the source text. This also results in faster parsing. However, note that the following will occur:
  • names and values of nodes will not be zero terminated, you have to use xml_base::name_size() and xml_base::value_size() functions to determine where name and value ends
  • entities will not be translated
  • whitespace will not be normalized
-See xml_document::parse() function.

- constant - parse_fastest

Synopsis

const int parse_fastest - = parse_non_destructive | parse_no_data_nodes; -

Description

A combination of parse flags resulting in fastest possible parsing, without sacrificing important data.

- See xml_document::parse() function.

- constant - parse_full

Synopsis

const int parse_full - = parse_declaration_node | parse_comment_nodes | parse_doctype_node | parse_pi_nodes | parse_validate_closing_tags; -

Description

A combination of parse flags resulting in largest amount of data being extracted. This usually results in slowest parsing.

- See xml_document::parse() function.

- constant - print_no_indenting

Synopsis

const int print_no_indenting - = 0x1; -

Description

Printer flag instructing the printer to suppress indenting of XML. See print() function.

\ No newline at end of file diff --git a/lib/rapidxml/rapidxml.hpp b/lib/rapidxml/rapidxml.hpp deleted file mode 100644 index fb24a630c..000000000 --- a/lib/rapidxml/rapidxml.hpp +++ /dev/null @@ -1,2596 +0,0 @@ -#ifndef RAPIDXML_HPP_INCLUDED -#define RAPIDXML_HPP_INCLUDED - -// Copyright (C) 2006, 2009 Marcin Kalicinski -// Version 1.13 -// Revision $DateTime: 2009/05/13 01:46:17 $ -//! \file rapidxml.hpp This file contains rapidxml parser and DOM implementation - -// If standard library is disabled, user must provide implementations of required functions and typedefs -//#if !defined(RAPIDXML_NO_STDLIB) - #include // For std::size_t - #include // For assert - #include // For placement new -//#endif - -// On MSVC, disable "conditional expression is constant" warning (level 4). -// This warning is almost impossible to avoid with certain types of templated code -#ifdef _MSC_VER - #pragma warning(push) - #pragma warning(disable:4127) // Conditional expression is constant -#endif - -/////////////////////////////////////////////////////////////////////////// -// RAPIDXML_PARSE_ERROR - -#if defined(RAPIDXML_NO_EXCEPTIONS) - -#define RAPIDXML_PARSE_ERROR(what, where) { parse_error_handler(what, where); assert(0); } - -namespace rapidxml -{ - //! When exceptions are disabled by defining RAPIDXML_NO_EXCEPTIONS, - //! this function is called to notify user about the error. - //! It must be defined by the user. - //!

- //! This function cannot return. If it does, the results are undefined. - //!

- //! A very simple definition might look like that: - //!

-    //! void %rapidxml::%parse_error_handler(const char *what, void *where)
-    //! {
-    //!     std::cout << "Parse error: " << what << "\n";
-    //!     std::abort();
-    //! }
-    //! 
- //! \param what Human readable description of the error. - //! \param where Pointer to character data where error was detected. - void parse_error_handler(const char *what, void *where); -} - -#else - -#include // For std::exception - -#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where) - -namespace rapidxml -{ - - //! Parse error exception. - //! This exception is thrown by the parser when an error occurs. - //! Use what() function to get human-readable error message. - //! Use where() function to get a pointer to position within source text where error was detected. - //!

- //! If throwing exceptions by the parser is undesirable, - //! it can be disabled by defining RAPIDXML_NO_EXCEPTIONS macro before rapidxml.hpp is included. - //! This will cause the parser to call rapidxml::parse_error_handler() function instead of throwing an exception. - //! This function must be defined by the user. - //!

- //! This class derives from std::exception class. - class parse_error: public std::exception - { - - public: - - //! Constructs parse error - parse_error(const char *what, void *where) - : m_what(what) - , m_where(where) - { - } - - //! Gets human readable description of error. - //! \return Pointer to null terminated description of the error. - virtual const char *what() const throw() - { - return m_what; - } - - //! Gets pointer to character data where error happened. - //! Ch should be the same as char type of xml_document that produced the error. - //! \return Pointer to location within the parsed string where error occured. - template - Ch *where() const - { - return reinterpret_cast(m_where); - } - - private: - - const char *m_what; - void *m_where; - - }; -} - -#endif - -/////////////////////////////////////////////////////////////////////////// -// Pool sizes - -#ifndef RAPIDXML_STATIC_POOL_SIZE - // Size of static memory block of memory_pool. - // Define RAPIDXML_STATIC_POOL_SIZE before including rapidxml.hpp if you want to override the default value. - // No dynamic memory allocations are performed by memory_pool until static memory is exhausted. - #define RAPIDXML_STATIC_POOL_SIZE (64 * 1024) -#endif - -#ifndef RAPIDXML_DYNAMIC_POOL_SIZE - // Size of dynamic memory block of memory_pool. - // Define RAPIDXML_DYNAMIC_POOL_SIZE before including rapidxml.hpp if you want to override the default value. - // After the static block is exhausted, dynamic blocks with approximately this size are allocated by memory_pool. - #define RAPIDXML_DYNAMIC_POOL_SIZE (64 * 1024) -#endif - -#ifndef RAPIDXML_ALIGNMENT - // Memory allocation alignment. - // Define RAPIDXML_ALIGNMENT before including rapidxml.hpp if you want to override the default value, which is the size of pointer. - // All memory allocations for nodes, attributes and strings will be aligned to this value. - // This must be a power of 2 and at least 1, otherwise memory_pool will not work. - #define RAPIDXML_ALIGNMENT sizeof(void *) -#endif - -namespace rapidxml -{ - // Forward declarations - template class xml_node; - template class xml_attribute; - template class xml_document; - - //! Enumeration listing all node types produced by the parser. - //! Use xml_node::type() function to query node type. - enum node_type - { - node_document, //!< A document node. Name and value are empty. - node_element, //!< An element node. Name contains element name. Value contains text of first data node. - node_data, //!< A data node. Name is empty. Value contains data text. - node_cdata, //!< A CDATA node. Name is empty. Value contains data text. - node_comment, //!< A comment node. Name is empty. Value contains comment text. - node_declaration, //!< A declaration node. Name and value are empty. Declaration parameters (version, encoding and standalone) are in node attributes. - node_doctype, //!< A DOCTYPE node. Name is empty. Value contains DOCTYPE text. - node_pi //!< A PI node. Name contains target. Value contains instructions. - }; - - /////////////////////////////////////////////////////////////////////// - // Parsing flags - - //! Parse flag instructing the parser to not create data nodes. - //! Text of first data node will still be placed in value of parent element, unless rapidxml::parse_no_element_values flag is also specified. - //! Can be combined with other flags by use of | operator. - //!

- //! See xml_document::parse() function. - const int parse_no_data_nodes = 0x1; - - //! Parse flag instructing the parser to not use text of first data node as a value of parent element. - //! Can be combined with other flags by use of | operator. - //! Note that child data nodes of element node take precendence over its value when printing. - //! That is, if element has one or more child data nodes and a value, the value will be ignored. - //! Use rapidxml::parse_no_data_nodes flag to prevent creation of data nodes if you want to manipulate data using values of elements. - //!

- //! See xml_document::parse() function. - const int parse_no_element_values = 0x2; - - //! Parse flag instructing the parser to not place zero terminators after strings in the source text. - //! By default zero terminators are placed, modifying source text. - //! Can be combined with other flags by use of | operator. - //!

- //! See xml_document::parse() function. - const int parse_no_string_terminators = 0x4; - - //! Parse flag instructing the parser to not translate entities in the source text. - //! By default entities are translated, modifying source text. - //! Can be combined with other flags by use of | operator. - //!

- //! See xml_document::parse() function. - const int parse_no_entity_translation = 0x8; - - //! Parse flag instructing the parser to disable UTF-8 handling and assume plain 8 bit characters. - //! By default, UTF-8 handling is enabled. - //! Can be combined with other flags by use of | operator. - //!

- //! See xml_document::parse() function. - const int parse_no_utf8 = 0x10; - - //! Parse flag instructing the parser to create XML declaration node. - //! By default, declaration node is not created. - //! Can be combined with other flags by use of | operator. - //!

- //! See xml_document::parse() function. - const int parse_declaration_node = 0x20; - - //! Parse flag instructing the parser to create comments nodes. - //! By default, comment nodes are not created. - //! Can be combined with other flags by use of | operator. - //!

- //! See xml_document::parse() function. - const int parse_comment_nodes = 0x40; - - //! Parse flag instructing the parser to create DOCTYPE node. - //! By default, doctype node is not created. - //! Although W3C specification allows at most one DOCTYPE node, RapidXml will silently accept documents with more than one. - //! Can be combined with other flags by use of | operator. - //!

- //! See xml_document::parse() function. - const int parse_doctype_node = 0x80; - - //! Parse flag instructing the parser to create PI nodes. - //! By default, PI nodes are not created. - //! Can be combined with other flags by use of | operator. - //!

- //! See xml_document::parse() function. - const int parse_pi_nodes = 0x100; - - //! Parse flag instructing the parser to validate closing tag names. - //! If not set, name inside closing tag is irrelevant to the parser. - //! By default, closing tags are not validated. - //! Can be combined with other flags by use of | operator. - //!

- //! See xml_document::parse() function. - const int parse_validate_closing_tags = 0x200; - - //! Parse flag instructing the parser to trim all leading and trailing whitespace of data nodes. - //! By default, whitespace is not trimmed. - //! This flag does not cause the parser to modify source text. - //! Can be combined with other flags by use of | operator. - //!

- //! See xml_document::parse() function. - const int parse_trim_whitespace = 0x400; - - //! Parse flag instructing the parser to condense all whitespace runs of data nodes to a single space character. - //! Trimming of leading and trailing whitespace of data is controlled by rapidxml::parse_trim_whitespace flag. - //! By default, whitespace is not normalized. - //! If this flag is specified, source text will be modified. - //! Can be combined with other flags by use of | operator. - //!

- //! See xml_document::parse() function. - const int parse_normalize_whitespace = 0x800; - - // Compound flags - - //! Parse flags which represent default behaviour of the parser. - //! This is always equal to 0, so that all other flags can be simply ored together. - //! Normally there is no need to inconveniently disable flags by anding with their negated (~) values. - //! This also means that meaning of each flag is a negation of the default setting. - //! For example, if flag name is rapidxml::parse_no_utf8, it means that utf-8 is enabled by default, - //! and using the flag will disable it. - //!

- //! See xml_document::parse() function. - const int parse_default = 0; - - //! A combination of parse flags that forbids any modifications of the source text. - //! This also results in faster parsing. However, note that the following will occur: - //!
    - //!
  • names and values of nodes will not be zero terminated, you have to use xml_base::name_size() and xml_base::value_size() functions to determine where name and value ends
  • - //!
  • entities will not be translated
  • - //!
  • whitespace will not be normalized
  • - //!
- //! See xml_document::parse() function. - const int parse_non_destructive = parse_no_string_terminators | parse_no_entity_translation; - - //! A combination of parse flags resulting in fastest possible parsing, without sacrificing important data. - //!

- //! See xml_document::parse() function. - const int parse_fastest = parse_non_destructive | parse_no_data_nodes; - - //! A combination of parse flags resulting in largest amount of data being extracted. - //! This usually results in slowest parsing. - //!

- //! See xml_document::parse() function. - const int parse_full = parse_declaration_node | parse_comment_nodes | parse_doctype_node | parse_pi_nodes | parse_validate_closing_tags; - - /////////////////////////////////////////////////////////////////////// - // Internals - - //! \cond internal - namespace internal - { - - // Struct that contains lookup tables for the parser - // It must be a template to allow correct linking (because it has static data members, which are defined in a header file). - template - struct lookup_tables - { - static const unsigned char lookup_whitespace[256]; // Whitespace table - static const unsigned char lookup_node_name[256]; // Node name table - static const unsigned char lookup_text[256]; // Text table - static const unsigned char lookup_text_pure_no_ws[256]; // Text table - static const unsigned char lookup_text_pure_with_ws[256]; // Text table - static const unsigned char lookup_attribute_name[256]; // Attribute name table - static const unsigned char lookup_attribute_data_1[256]; // Attribute data table with single quote - static const unsigned char lookup_attribute_data_1_pure[256]; // Attribute data table with single quote - static const unsigned char lookup_attribute_data_2[256]; // Attribute data table with double quotes - static const unsigned char lookup_attribute_data_2_pure[256]; // Attribute data table with double quotes - static const unsigned char lookup_digits[256]; // Digits - static const unsigned char lookup_upcase[256]; // To uppercase conversion table for ASCII characters - }; - - // Find length of the string - template - inline std::size_t measure(const Ch *p) - { - const Ch *tmp = p; - while (*tmp) - ++tmp; - return tmp - p; - } - - // Compare strings for equality - template - inline bool compare(const Ch *p1, std::size_t size1, const Ch *p2, std::size_t size2, bool case_sensitive) - { - if (size1 != size2) - return false; - if (case_sensitive) - { - for (const Ch *end = p1 + size1; p1 < end; ++p1, ++p2) - if (*p1 != *p2) - return false; - } - else - { - for (const Ch *end = p1 + size1; p1 < end; ++p1, ++p2) - if (lookup_tables<0>::lookup_upcase[static_cast(*p1)] != lookup_tables<0>::lookup_upcase[static_cast(*p2)]) - return false; - } - return true; - } - } - //! \endcond - - /////////////////////////////////////////////////////////////////////// - // Memory pool - - //! This class is used by the parser to create new nodes and attributes, without overheads of dynamic memory allocation. - //! In most cases, you will not need to use this class directly. - //! However, if you need to create nodes manually or modify names/values of nodes, - //! you are encouraged to use memory_pool of relevant xml_document to allocate the memory. - //! Not only is this faster than allocating them by using new operator, - //! but also their lifetime will be tied to the lifetime of document, - //! possibly simplyfing memory management. - //!

- //! Call allocate_node() or allocate_attribute() functions to obtain new nodes or attributes from the pool. - //! You can also call allocate_string() function to allocate strings. - //! Such strings can then be used as names or values of nodes without worrying about their lifetime. - //! Note that there is no free() function -- all allocations are freed at once when clear() function is called, - //! or when the pool is destroyed. - //!

- //! It is also possible to create a standalone memory_pool, and use it - //! to allocate nodes, whose lifetime will not be tied to any document. - //!

- //! Pool maintains RAPIDXML_STATIC_POOL_SIZE bytes of statically allocated memory. - //! Until static memory is exhausted, no dynamic memory allocations are done. - //! When static memory is exhausted, pool allocates additional blocks of memory of size RAPIDXML_DYNAMIC_POOL_SIZE each, - //! by using global new[] and delete[] operators. - //! This behaviour can be changed by setting custom allocation routines. - //! Use set_allocator() function to set them. - //!

- //! Allocations for nodes, attributes and strings are aligned at RAPIDXML_ALIGNMENT bytes. - //! This value defaults to the size of pointer on target architecture. - //!

- //! To obtain absolutely top performance from the parser, - //! it is important that all nodes are allocated from a single, contiguous block of memory. - //! Otherwise, cache misses when jumping between two (or more) disjoint blocks of memory can slow down parsing quite considerably. - //! If required, you can tweak RAPIDXML_STATIC_POOL_SIZE, RAPIDXML_DYNAMIC_POOL_SIZE and RAPIDXML_ALIGNMENT - //! to obtain best wasted memory to performance compromise. - //! To do it, define their values before rapidxml.hpp file is included. - //! \param Ch Character type of created nodes. - template - class memory_pool - { - - public: - - //! \cond internal - typedef void *(alloc_func1)(std::size_t); // Type of user-defined function used to allocate memory - typedef void (free_func)(void *); // Type of user-defined function used to free memory - //! \endcond - - //! Constructs empty pool with default allocator functions. - memory_pool() - : m_alloc_func(0) - , m_free_func(0) - { - init(); - } - - //! Destroys pool and frees all the memory. - //! This causes memory occupied by nodes allocated by the pool to be freed. - //! Nodes allocated from the pool are no longer valid. - ~memory_pool() - { - clear(); - } - - //! Allocates a new node from the pool, and optionally assigns name and value to it. - //! If the allocation request cannot be accomodated, this function will throw std::bad_alloc. - //! If exceptions are disabled by defining RAPIDXML_NO_EXCEPTIONS, this function - //! will call rapidxml::parse_error_handler() function. - //! \param type Type of node to create. - //! \param name Name to assign to the node, or 0 to assign no name. - //! \param value Value to assign to the node, or 0 to assign no value. - //! \param name_size Size of name to assign, or 0 to automatically calculate size from name string. - //! \param value_size Size of value to assign, or 0 to automatically calculate size from value string. - //! \return Pointer to allocated node. This pointer will never be NULL. - xml_node *allocate_node(node_type type, - const Ch *name = 0, const Ch *value = 0, - std::size_t name_size = 0, std::size_t value_size = 0) - { - void *memory = allocate_aligned(sizeof(xml_node)); - xml_node *node = new(memory) xml_node(type); - if (name) - { - if (name_size > 0) - node->name(name, name_size); - else - node->name(name); - } - if (value) - { - if (value_size > 0) - node->value(value, value_size); - else - node->value(value); - } - return node; - } - - //! Allocates a new attribute from the pool, and optionally assigns name and value to it. - //! If the allocation request cannot be accomodated, this function will throw std::bad_alloc. - //! If exceptions are disabled by defining RAPIDXML_NO_EXCEPTIONS, this function - //! will call rapidxml::parse_error_handler() function. - //! \param name Name to assign to the attribute, or 0 to assign no name. - //! \param value Value to assign to the attribute, or 0 to assign no value. - //! \param name_size Size of name to assign, or 0 to automatically calculate size from name string. - //! \param value_size Size of value to assign, or 0 to automatically calculate size from value string. - //! \return Pointer to allocated attribute. This pointer will never be NULL. - xml_attribute *allocate_attribute(const Ch *name = 0, const Ch *value = 0, - std::size_t name_size = 0, std::size_t value_size = 0) - { - void *memory = allocate_aligned(sizeof(xml_attribute)); - xml_attribute *attribute = new(memory) xml_attribute; - if (name) - { - if (name_size > 0) - attribute->name(name, name_size); - else - attribute->name(name); - } - if (value) - { - if (value_size > 0) - attribute->value(value, value_size); - else - attribute->value(value); - } - return attribute; - } - - //! Allocates a char array of given size from the pool, and optionally copies a given string to it. - //! If the allocation request cannot be accomodated, this function will throw std::bad_alloc. - //! If exceptions are disabled by defining RAPIDXML_NO_EXCEPTIONS, this function - //! will call rapidxml::parse_error_handler() function. - //! \param source String to initialize the allocated memory with, or 0 to not initialize it. - //! \param size Number of characters to allocate, or zero to calculate it automatically from source string length; if size is 0, source string must be specified and null terminated. - //! \return Pointer to allocated char array. This pointer will never be NULL. - Ch *allocate_string(const Ch *source = 0, std::size_t size = 0) - { - assert(source || size); // Either source or size (or both) must be specified - if (size == 0) - size = internal::measure(source) + 1; - Ch *result = static_cast(allocate_aligned(size * sizeof(Ch))); - if (source) - for (std::size_t i = 0; i < size; ++i) - result[i] = source[i]; - return result; - } - - //! Clones an xml_node and its hierarchy of child nodes and attributes. - //! Nodes and attributes are allocated from this memory pool. - //! Names and values are not cloned, they are shared between the clone and the source. - //! Result node can be optionally specified as a second parameter, - //! in which case its contents will be replaced with cloned source node. - //! This is useful when you want to clone entire document. - //! \param source Node to clone. - //! \param result Node to put results in, or 0 to automatically allocate result node - //! \return Pointer to cloned node. This pointer will never be NULL. - xml_node *clone_node(const xml_node *source, xml_node *result = 0) - { - // Prepare result node - if (result) - { - result->remove_all_attributes(); - result->remove_all_nodes(); - result->type(source->type()); - } - else - result = allocate_node(source->type()); - - // Clone name and value - result->name(source->name(), source->name_size()); - result->value(source->value(), source->value_size()); - - // Clone child nodes and attributes - for (xml_node *child = source->first_node(); child; child = child->next_sibling()) - result->append_node(clone_node(child)); - for (xml_attribute *attr = source->first_attribute(); attr; attr = attr->next_attribute()) - result->append_attribute(allocate_attribute(attr->name(), attr->value(), attr->name_size(), attr->value_size())); - - return result; - } - - //! Clears the pool. - //! This causes memory occupied by nodes allocated by the pool to be freed. - //! Any nodes or strings allocated from the pool will no longer be valid. - void clear() - { - while (m_begin != m_static_memory) - { - char *previous_begin = reinterpret_cast
(align(m_begin))->previous_begin; - if (m_free_func) - m_free_func(m_begin); - else - delete[] m_begin; - m_begin = previous_begin; - } - init(); - } - - //! Sets or resets the user-defined memory allocation functions for the pool. - //! This can only be called when no memory is allocated from the pool yet, otherwise results are undefined. - //! Allocation function must not return invalid pointer on failure. It should either throw, - //! stop the program, or use longjmp() function to pass control to other place of program. - //! If it returns invalid pointer, results are undefined. - //!

- //! User defined allocation functions must have the following forms: - //!
- //!
void *allocate(std::size_t size); - //!
void free(void *pointer); - //!

- //! \param af Allocation function, or 0 to restore default function - //! \param ff Free function, or 0 to restore default function - void set_allocator(alloc_func1 *af, free_func *ff) - { - assert(m_begin == m_static_memory && m_ptr == align(m_begin)); // Verify that no memory is allocated yet - m_alloc_func = af; - m_free_func = ff; - } - - private: - - struct header - { - char *previous_begin; - }; - - void init() - { - m_begin = m_static_memory; - m_ptr = align(m_begin); - m_end = m_static_memory + sizeof(m_static_memory); - } - - char *align(char *ptr) - { - std::size_t alignment = ((RAPIDXML_ALIGNMENT - (std::size_t(ptr) & (RAPIDXML_ALIGNMENT - 1))) & (RAPIDXML_ALIGNMENT - 1)); - return ptr + alignment; - } - - char *allocate_raw(std::size_t size) - { - // Allocate - void *memory; - if (m_alloc_func) // Allocate memory using either user-specified allocation function or global operator new[] - { - memory = m_alloc_func(size); - assert(memory); // Allocator is not allowed to return 0, on failure it must either throw, stop the program or use longjmp - } - else - { - memory = new char[size]; -#ifdef RAPIDXML_NO_EXCEPTIONS - if (!memory) // If exceptions are disabled, verify memory allocation, because new will not be able to throw bad_alloc - RAPIDXML_PARSE_ERROR("out of memory", 0); -#endif - } - return static_cast(memory); - } - - void *allocate_aligned(std::size_t size) - { - // Calculate aligned pointer - char *result = align(m_ptr); - - // If not enough memory left in current pool, allocate a new pool - if (result + size > m_end) - { - // Calculate required pool size (may be bigger than RAPIDXML_DYNAMIC_POOL_SIZE) - std::size_t pool_size = RAPIDXML_DYNAMIC_POOL_SIZE; - if (pool_size < size) - pool_size = size; - - // Allocate - std::size_t alloc_size = sizeof(header) + (2 * RAPIDXML_ALIGNMENT - 2) + pool_size; // 2 alignments required in worst case: one for header, one for actual allocation - char *raw_memory = allocate_raw(alloc_size); - - // Setup new pool in allocated memory - char *pool = align(raw_memory); - header *new_header = reinterpret_cast
(pool); - new_header->previous_begin = m_begin; - m_begin = raw_memory; - m_ptr = pool + sizeof(header); - m_end = raw_memory + alloc_size; - - // Calculate aligned pointer again using new pool - result = align(m_ptr); - } - - // Update pool and return aligned pointer - m_ptr = result + size; - return result; - } - - char *m_begin; // Start of raw memory making up current pool - char *m_ptr; // First free byte in current pool - char *m_end; // One past last available byte in current pool - char m_static_memory[RAPIDXML_STATIC_POOL_SIZE]; // Static raw memory - alloc_func1 *m_alloc_func; // Allocator function, or 0 if default is to be used - free_func *m_free_func; // Free function, or 0 if default is to be used - }; - - /////////////////////////////////////////////////////////////////////////// - // XML base - - //! Base class for xml_node and xml_attribute implementing common functions: - //! name(), name_size(), value(), value_size() and parent(). - //! \param Ch Character type to use - template - class xml_base - { - - public: - - /////////////////////////////////////////////////////////////////////////// - // Construction & destruction - - // Construct a base with empty name, value and parent - xml_base() - : m_name(0) - , m_value(0) - , m_parent(0) - { - } - - /////////////////////////////////////////////////////////////////////////// - // Node data access - - //! Gets name of the node. - //! Interpretation of name depends on type of node. - //! Note that name will not be zero-terminated if rapidxml::parse_no_string_terminators option was selected during parse. - //!

- //! Use name_size() function to determine length of the name. - //! \return Name of node, or empty string if node has no name. - Ch *name() const - { - return m_name ? m_name : nullstr(); - } - - //! Gets size of node name, not including terminator character. - //! This function works correctly irrespective of whether name is or is not zero terminated. - //! \return Size of node name, in characters. - std::size_t name_size() const - { - return m_name ? m_name_size : 0; - } - - //! Gets value of node. - //! Interpretation of value depends on type of node. - //! Note that value will not be zero-terminated if rapidxml::parse_no_string_terminators option was selected during parse. - //!

- //! Use value_size() function to determine length of the value. - //! \return Value of node, or empty string if node has no value. - Ch *value() const - { - return m_value ? m_value : nullstr(); - } - - //! Gets size of node value, not including terminator character. - //! This function works correctly irrespective of whether value is or is not zero terminated. - //! \return Size of node value, in characters. - std::size_t value_size() const - { - return m_value ? m_value_size : 0; - } - - /////////////////////////////////////////////////////////////////////////// - // Node modification - - //! Sets name of node to a non zero-terminated string. - //! See \ref ownership_of_strings. - //!

- //! Note that node does not own its name or value, it only stores a pointer to it. - //! It will not delete or otherwise free the pointer on destruction. - //! It is reponsibility of the user to properly manage lifetime of the string. - //! The easiest way to achieve it is to use memory_pool of the document to allocate the string - - //! on destruction of the document the string will be automatically freed. - //!

- //! Size of name must be specified separately, because name does not have to be zero terminated. - //! Use name(const Ch *) function to have the length automatically calculated (string must be zero terminated). - //! \param name Name of node to set. Does not have to be zero terminated. - //! \param size Size of name, in characters. This does not include zero terminator, if one is present. - void name(const Ch *name, std::size_t size) - { - m_name = const_cast(name); - m_name_size = size; - } - - //! Sets name of node to a zero-terminated string. - //! See also \ref ownership_of_strings and xml_node::name(const Ch *, std::size_t). - //! \param name Name of node to set. Must be zero terminated. - void name(const Ch *name) - { - this->name(name, internal::measure(name)); - } - - //! Sets value of node to a non zero-terminated string. - //! See \ref ownership_of_strings. - //!

- //! Note that node does not own its name or value, it only stores a pointer to it. - //! It will not delete or otherwise free the pointer on destruction. - //! It is reponsibility of the user to properly manage lifetime of the string. - //! The easiest way to achieve it is to use memory_pool of the document to allocate the string - - //! on destruction of the document the string will be automatically freed. - //!

- //! Size of value must be specified separately, because it does not have to be zero terminated. - //! Use value(const Ch *) function to have the length automatically calculated (string must be zero terminated). - //!

- //! If an element has a child node of type node_data, it will take precedence over element value when printing. - //! If you want to manipulate data of elements using values, use parser flag rapidxml::parse_no_data_nodes to prevent creation of data nodes by the parser. - //! \param value value of node to set. Does not have to be zero terminated. - //! \param size Size of value, in characters. This does not include zero terminator, if one is present. - void value(const Ch *value, std::size_t size) - { - m_value = const_cast(value); - m_value_size = size; - } - - //! Sets value of node to a zero-terminated string. - //! See also \ref ownership_of_strings and xml_node::value(const Ch *, std::size_t). - //! \param value Vame of node to set. Must be zero terminated. - void value(const Ch *value) - { - this->value(value, internal::measure(value)); - } - - /////////////////////////////////////////////////////////////////////////// - // Related nodes access - - //! Gets node parent. - //! \return Pointer to parent node, or 0 if there is no parent. - xml_node *parent() const - { - return m_parent; - } - - protected: - - // Return empty string - static Ch *nullstr() - { - static Ch zero = Ch('\0'); - return &zero; - } - - Ch *m_name; // Name of node, or 0 if no name - Ch *m_value; // Value of node, or 0 if no value - std::size_t m_name_size; // Length of node name, or undefined of no name - std::size_t m_value_size; // Length of node value, or undefined if no value - xml_node *m_parent; // Pointer to parent node, or 0 if none - - }; - - //! Class representing attribute node of XML document. - //! Each attribute has name and value strings, which are available through name() and value() functions (inherited from xml_base). - //! Note that after parse, both name and value of attribute will point to interior of source text used for parsing. - //! Thus, this text must persist in memory for the lifetime of attribute. - //! \param Ch Character type to use. - template - class xml_attribute: public xml_base - { - - friend class xml_node; - - public: - - /////////////////////////////////////////////////////////////////////////// - // Construction & destruction - - //! Constructs an empty attribute with the specified type. - //! Consider using memory_pool of appropriate xml_document if allocating attributes manually. - xml_attribute() - { - } - - /////////////////////////////////////////////////////////////////////////// - // Related nodes access - - //! Gets document of which attribute is a child. - //! \return Pointer to document that contains this attribute, or 0 if there is no parent document. - xml_document *document() const - { - if (xml_node *node = this->parent()) - { - while (node->parent()) - node = node->parent(); - return node->type() == node_document ? static_cast *>(node) : 0; - } - else - return 0; - } - - //! Gets previous attribute, optionally matching attribute name. - //! \param name Name of attribute to find, or 0 to return previous attribute regardless of its name; this string doesn't have to be zero-terminated if name_size is non-zero - //! \param name_size Size of name, in characters, or 0 to have size calculated automatically from string - //! \param case_sensitive Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters - //! \return Pointer to found attribute, or 0 if not found. - xml_attribute *previous_attribute(const Ch *name = 0, std::size_t name_size = 0, bool case_sensitive = true) const - { - if (name) - { - if (name_size == 0) - name_size = internal::measure(name); - for (xml_attribute *attribute = m_prev_attribute; attribute; attribute = attribute->m_prev_attribute) - if (internal::compare(attribute->name(), attribute->name_size(), name, name_size, case_sensitive)) - return attribute; - return 0; - } - else - return this->m_parent ? m_prev_attribute : 0; - } - - //! Gets next attribute, optionally matching attribute name. - //! \param name Name of attribute to find, or 0 to return next attribute regardless of its name; this string doesn't have to be zero-terminated if name_size is non-zero - //! \param name_size Size of name, in characters, or 0 to have size calculated automatically from string - //! \param case_sensitive Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters - //! \return Pointer to found attribute, or 0 if not found. - xml_attribute *next_attribute(const Ch *name = 0, std::size_t name_size = 0, bool case_sensitive = true) const - { - if (name) - { - if (name_size == 0) - name_size = internal::measure(name); - for (xml_attribute *attribute = m_next_attribute; attribute; attribute = attribute->m_next_attribute) - if (internal::compare(attribute->name(), attribute->name_size(), name, name_size, case_sensitive)) - return attribute; - return 0; - } - else - return this->m_parent ? m_next_attribute : 0; - } - - private: - - xml_attribute *m_prev_attribute; // Pointer to previous sibling of attribute, or 0 if none; only valid if parent is non-zero - xml_attribute *m_next_attribute; // Pointer to next sibling of attribute, or 0 if none; only valid if parent is non-zero - - }; - - /////////////////////////////////////////////////////////////////////////// - // XML node - - //! Class representing a node of XML document. - //! Each node may have associated name and value strings, which are available through name() and value() functions. - //! Interpretation of name and value depends on type of the node. - //! Type of node can be determined by using type() function. - //!

- //! Note that after parse, both name and value of node, if any, will point interior of source text used for parsing. - //! Thus, this text must persist in the memory for the lifetime of node. - //! \param Ch Character type to use. - template - class xml_node: public xml_base - { - - public: - - /////////////////////////////////////////////////////////////////////////// - // Construction & destruction - - //! Constructs an empty node with the specified type. - //! Consider using memory_pool of appropriate document to allocate nodes manually. - //! \param type Type of node to construct. - xml_node(node_type type) - : m_type(type) - , m_first_node(0) - , m_first_attribute(0) - { - } - - /////////////////////////////////////////////////////////////////////////// - // Node data access - - //! Gets type of node. - //! \return Type of node. - node_type type() const - { - return m_type; - } - - /////////////////////////////////////////////////////////////////////////// - // Related nodes access - - //! Gets document of which node is a child. - //! \return Pointer to document that contains this node, or 0 if there is no parent document. - xml_document *document() const - { - xml_node *node = const_cast *>(this); - while (node->parent()) - node = node->parent(); - return node->type() == node_document ? static_cast *>(node) : 0; - } - - //! Gets first child node, optionally matching node name. - //! \param name Name of child to find, or 0 to return first child regardless of its name; this string doesn't have to be zero-terminated if name_size is non-zero - //! \param name_size Size of name, in characters, or 0 to have size calculated automatically from string - //! \param case_sensitive Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters - //! \return Pointer to found child, or 0 if not found. - xml_node *first_node(const Ch *name = 0, std::size_t name_size = 0, bool case_sensitive = true) const - { - if (name) - { - if (name_size == 0) - name_size = internal::measure(name); - for (xml_node *child = m_first_node; child; child = child->next_sibling()) - if (internal::compare(child->name(), child->name_size(), name, name_size, case_sensitive)) - return child; - return 0; - } - else - return m_first_node; - } - - //! Gets last child node, optionally matching node name. - //! Behaviour is undefined if node has no children. - //! Use first_node() to test if node has children. - //! \param name Name of child to find, or 0 to return last child regardless of its name; this string doesn't have to be zero-terminated if name_size is non-zero - //! \param name_size Size of name, in characters, or 0 to have size calculated automatically from string - //! \param case_sensitive Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters - //! \return Pointer to found child, or 0 if not found. - xml_node *last_node(const Ch *name = 0, std::size_t name_size = 0, bool case_sensitive = true) const - { - assert(m_first_node); // Cannot query for last child if node has no children - if (name) - { - if (name_size == 0) - name_size = internal::measure(name); - for (xml_node *child = m_last_node; child; child = child->previous_sibling()) - if (internal::compare(child->name(), child->name_size(), name, name_size, case_sensitive)) - return child; - return 0; - } - else - return m_last_node; - } - - //! Gets previous sibling node, optionally matching node name. - //! Behaviour is undefined if node has no parent. - //! Use parent() to test if node has a parent. - //! \param name Name of sibling to find, or 0 to return previous sibling regardless of its name; this string doesn't have to be zero-terminated if name_size is non-zero - //! \param name_size Size of name, in characters, or 0 to have size calculated automatically from string - //! \param case_sensitive Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters - //! \return Pointer to found sibling, or 0 if not found. - xml_node *previous_sibling(const Ch *name = 0, std::size_t name_size = 0, bool case_sensitive = true) const - { - assert(this->m_parent); // Cannot query for siblings if node has no parent - if (name) - { - if (name_size == 0) - name_size = internal::measure(name); - for (xml_node *sibling = m_prev_sibling; sibling; sibling = sibling->m_prev_sibling) - if (internal::compare(sibling->name(), sibling->name_size(), name, name_size, case_sensitive)) - return sibling; - return 0; - } - else - return m_prev_sibling; - } - - //! Gets next sibling node, optionally matching node name. - //! Behaviour is undefined if node has no parent. - //! Use parent() to test if node has a parent. - //! \param name Name of sibling to find, or 0 to return next sibling regardless of its name; this string doesn't have to be zero-terminated if name_size is non-zero - //! \param name_size Size of name, in characters, or 0 to have size calculated automatically from string - //! \param case_sensitive Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters - //! \return Pointer to found sibling, or 0 if not found. - xml_node *next_sibling(const Ch *name = 0, std::size_t name_size = 0, bool case_sensitive = true) const - { - assert(this->m_parent); // Cannot query for siblings if node has no parent - if (name) - { - if (name_size == 0) - name_size = internal::measure(name); - for (xml_node *sibling = m_next_sibling; sibling; sibling = sibling->m_next_sibling) - if (internal::compare(sibling->name(), sibling->name_size(), name, name_size, case_sensitive)) - return sibling; - return 0; - } - else - return m_next_sibling; - } - - //! Gets first attribute of node, optionally matching attribute name. - //! \param name Name of attribute to find, or 0 to return first attribute regardless of its name; this string doesn't have to be zero-terminated if name_size is non-zero - //! \param name_size Size of name, in characters, or 0 to have size calculated automatically from string - //! \param case_sensitive Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters - //! \return Pointer to found attribute, or 0 if not found. - xml_attribute *first_attribute(const Ch *name = 0, std::size_t name_size = 0, bool case_sensitive = true) const - { - if (name) - { - if (name_size == 0) - name_size = internal::measure(name); - for (xml_attribute *attribute = m_first_attribute; attribute; attribute = attribute->m_next_attribute) - if (internal::compare(attribute->name(), attribute->name_size(), name, name_size, case_sensitive)) - return attribute; - return 0; - } - else - return m_first_attribute; - } - - //! Gets last attribute of node, optionally matching attribute name. - //! \param name Name of attribute to find, or 0 to return last attribute regardless of its name; this string doesn't have to be zero-terminated if name_size is non-zero - //! \param name_size Size of name, in characters, or 0 to have size calculated automatically from string - //! \param case_sensitive Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters - //! \return Pointer to found attribute, or 0 if not found. - xml_attribute *last_attribute(const Ch *name = 0, std::size_t name_size = 0, bool case_sensitive = true) const - { - if (name) - { - if (name_size == 0) - name_size = internal::measure(name); - for (xml_attribute *attribute = m_last_attribute; attribute; attribute = attribute->m_prev_attribute) - if (internal::compare(attribute->name(), attribute->name_size(), name, name_size, case_sensitive)) - return attribute; - return 0; - } - else - return m_first_attribute ? m_last_attribute : 0; - } - - /////////////////////////////////////////////////////////////////////////// - // Node modification - - //! Sets type of node. - //! \param type Type of node to set. - void type(node_type type) - { - m_type = type; - } - - /////////////////////////////////////////////////////////////////////////// - // Node manipulation - - //! Prepends a new child node. - //! The prepended child becomes the first child, and all existing children are moved one position back. - //! \param child Node to prepend. - void prepend_node(xml_node *child) - { - assert(child && !child->parent() && child->type() != node_document); - if (first_node()) - { - child->m_next_sibling = m_first_node; - m_first_node->m_prev_sibling = child; - } - else - { - child->m_next_sibling = 0; - m_last_node = child; - } - m_first_node = child; - child->m_parent = this; - child->m_prev_sibling = 0; - } - - //! Appends a new child node. - //! The appended child becomes the last child. - //! \param child Node to append. - void append_node(xml_node *child) - { - assert(child && !child->parent() && child->type() != node_document); - if (first_node()) - { - child->m_prev_sibling = m_last_node; - m_last_node->m_next_sibling = child; - } - else - { - child->m_prev_sibling = 0; - m_first_node = child; - } - m_last_node = child; - child->m_parent = this; - child->m_next_sibling = 0; - } - - //! Inserts a new child node at specified place inside the node. - //! All children after and including the specified node are moved one position back. - //! \param where Place where to insert the child, or 0 to insert at the back. - //! \param child Node to insert. - void insert_node(xml_node *where, xml_node *child) - { - assert(!where || where->parent() == this); - assert(child && !child->parent() && child->type() != node_document); - if (where == m_first_node) - prepend_node(child); - else if (where == 0) - append_node(child); - else - { - child->m_prev_sibling = where->m_prev_sibling; - child->m_next_sibling = where; - where->m_prev_sibling->m_next_sibling = child; - where->m_prev_sibling = child; - child->m_parent = this; - } - } - - //! Removes first child node. - //! If node has no children, behaviour is undefined. - //! Use first_node() to test if node has children. - void remove_first_node() - { - assert(first_node()); - xml_node *child = m_first_node; - m_first_node = child->m_next_sibling; - if (child->m_next_sibling) - child->m_next_sibling->m_prev_sibling = 0; - else - m_last_node = 0; - child->m_parent = 0; - } - - //! Removes last child of the node. - //! If node has no children, behaviour is undefined. - //! Use first_node() to test if node has children. - void remove_last_node() - { - assert(first_node()); - xml_node *child = m_last_node; - if (child->m_prev_sibling) - { - m_last_node = child->m_prev_sibling; - child->m_prev_sibling->m_next_sibling = 0; - } - else - m_first_node = 0; - child->m_parent = 0; - } - - //! Removes specified child from the node - // \param where Pointer to child to be removed. - void remove_node(xml_node *where) - { - assert(where && where->parent() == this); - assert(first_node()); - if (where == m_first_node) - remove_first_node(); - else if (where == m_last_node) - remove_last_node(); - else - { - where->m_prev_sibling->m_next_sibling = where->m_next_sibling; - where->m_next_sibling->m_prev_sibling = where->m_prev_sibling; - where->m_parent = 0; - } - } - - //! Removes all child nodes (but not attributes). - void remove_all_nodes() - { - for (xml_node *node = first_node(); node; node = node->m_next_sibling) - node->m_parent = 0; - m_first_node = 0; - } - - //! Prepends a new attribute to the node. - //! \param attribute Attribute to prepend. - void prepend_attribute(xml_attribute *attribute) - { - assert(attribute && !attribute->parent()); - if (first_attribute()) - { - attribute->m_next_attribute = m_first_attribute; - m_first_attribute->m_prev_attribute = attribute; - } - else - { - attribute->m_next_attribute = 0; - m_last_attribute = attribute; - } - m_first_attribute = attribute; - attribute->m_parent = this; - attribute->m_prev_attribute = 0; - } - - //! Appends a new attribute to the node. - //! \param attribute Attribute to append. - void append_attribute(xml_attribute *attribute) - { - assert(attribute && !attribute->parent()); - if (first_attribute()) - { - attribute->m_prev_attribute = m_last_attribute; - m_last_attribute->m_next_attribute = attribute; - } - else - { - attribute->m_prev_attribute = 0; - m_first_attribute = attribute; - } - m_last_attribute = attribute; - attribute->m_parent = this; - attribute->m_next_attribute = 0; - } - - //! Inserts a new attribute at specified place inside the node. - //! All attributes after and including the specified attribute are moved one position back. - //! \param where Place where to insert the attribute, or 0 to insert at the back. - //! \param attribute Attribute to insert. - void insert_attribute(xml_attribute *where, xml_attribute *attribute) - { - assert(!where || where->parent() == this); - assert(attribute && !attribute->parent()); - if (where == m_first_attribute) - prepend_attribute(attribute); - else if (where == 0) - append_attribute(attribute); - else - { - attribute->m_prev_attribute = where->m_prev_attribute; - attribute->m_next_attribute = where; - where->m_prev_attribute->m_next_attribute = attribute; - where->m_prev_attribute = attribute; - attribute->m_parent = this; - } - } - - //! Removes first attribute of the node. - //! If node has no attributes, behaviour is undefined. - //! Use first_attribute() to test if node has attributes. - void remove_first_attribute() - { - assert(first_attribute()); - xml_attribute *attribute = m_first_attribute; - if (attribute->m_next_attribute) - { - attribute->m_next_attribute->m_prev_attribute = 0; - } - else - m_last_attribute = 0; - attribute->m_parent = 0; - m_first_attribute = attribute->m_next_attribute; - } - - //! Removes last attribute of the node. - //! If node has no attributes, behaviour is undefined. - //! Use first_attribute() to test if node has attributes. - void remove_last_attribute() - { - assert(first_attribute()); - xml_attribute *attribute = m_last_attribute; - if (attribute->m_prev_attribute) - { - attribute->m_prev_attribute->m_next_attribute = 0; - m_last_attribute = attribute->m_prev_attribute; - } - else - m_first_attribute = 0; - attribute->m_parent = 0; - } - - //! Removes specified attribute from node. - //! \param where Pointer to attribute to be removed. - void remove_attribute(xml_attribute *where) - { - assert(first_attribute() && where->parent() == this); - if (where == m_first_attribute) - remove_first_attribute(); - else if (where == m_last_attribute) - remove_last_attribute(); - else - { - where->m_prev_attribute->m_next_attribute = where->m_next_attribute; - where->m_next_attribute->m_prev_attribute = where->m_prev_attribute; - where->m_parent = 0; - } - } - - //! Removes all attributes of node. - void remove_all_attributes() - { - for (xml_attribute *attribute = first_attribute(); attribute; attribute = attribute->m_next_attribute) - attribute->m_parent = 0; - m_first_attribute = 0; - } - - private: - - /////////////////////////////////////////////////////////////////////////// - // Restrictions - - // No copying - xml_node(const xml_node &); - void operator =(const xml_node &); - - /////////////////////////////////////////////////////////////////////////// - // Data members - - // Note that some of the pointers below have UNDEFINED values if certain other pointers are 0. - // This is required for maximum performance, as it allows the parser to omit initialization of - // unneded/redundant values. - // - // The rules are as follows: - // 1. first_node and first_attribute contain valid pointers, or 0 if node has no children/attributes respectively - // 2. last_node and last_attribute are valid only if node has at least one child/attribute respectively, otherwise they contain garbage - // 3. prev_sibling and next_sibling are valid only if node has a parent, otherwise they contain garbage - - node_type m_type; // Type of node; always valid - xml_node *m_first_node; // Pointer to first child node, or 0 if none; always valid - xml_node *m_last_node; // Pointer to last child node, or 0 if none; this value is only valid if m_first_node is non-zero - xml_attribute *m_first_attribute; // Pointer to first attribute of node, or 0 if none; always valid - xml_attribute *m_last_attribute; // Pointer to last attribute of node, or 0 if none; this value is only valid if m_first_attribute is non-zero - xml_node *m_prev_sibling; // Pointer to previous sibling of node, or 0 if none; this value is only valid if m_parent is non-zero - xml_node *m_next_sibling; // Pointer to next sibling of node, or 0 if none; this value is only valid if m_parent is non-zero - - }; - - /////////////////////////////////////////////////////////////////////////// - // XML document - - //! This class represents root of the DOM hierarchy. - //! It is also an xml_node and a memory_pool through public inheritance. - //! Use parse() function to build a DOM tree from a zero-terminated XML text string. - //! parse() function allocates memory for nodes and attributes by using functions of xml_document, - //! which are inherited from memory_pool. - //! To access root node of the document, use the document itself, as if it was an xml_node. - //! \param Ch Character type to use. - template - class xml_document: public xml_node, public memory_pool - { - - public: - - //! Constructs empty XML document - xml_document() - : xml_node(node_document) - { - } - - //! Parses zero-terminated XML string according to given flags. - //! Passed string will be modified by the parser, unless rapidxml::parse_non_destructive flag is used. - //! The string must persist for the lifetime of the document. - //! In case of error, rapidxml::parse_error exception will be thrown. - //!

- //! If you want to parse contents of a file, you must first load the file into the memory, and pass pointer to its beginning. - //! Make sure that data is zero-terminated. - //!

- //! Document can be parsed into multiple times. - //! Each new call to parse removes previous nodes and attributes (if any), but does not clear memory pool. - //! \param text XML data to parse; pointer is non-const to denote fact that this data may be modified by the parser. - template - void parse(Ch *text) - { - assert(text); - - // Remove current contents - this->remove_all_nodes(); - this->remove_all_attributes(); - - // Parse BOM, if any - parse_bom(text); - - // Parse children - while (1) - { - // Skip whitespace before node - skip(text); - if (*text == 0) - break; - - // Parse and append new child - if (*text == Ch('<')) - { - ++text; // Skip '<' - if (xml_node *node = parse_node(text)) - this->append_node(node); - } - else - RAPIDXML_PARSE_ERROR("expected <", text); - } - - } - - //! Clears the document by deleting all nodes and clearing the memory pool. - //! All nodes owned by document pool are destroyed. - void clear() - { - this->remove_all_nodes(); - this->remove_all_attributes(); - memory_pool::clear(); - } - - private: - - /////////////////////////////////////////////////////////////////////// - // Internal character utility functions - - // Detect whitespace character - struct whitespace_pred - { - static unsigned char test(Ch ch) - { - return internal::lookup_tables<0>::lookup_whitespace[static_cast(ch)]; - } - }; - - // Detect node name character - struct node_name_pred - { - static unsigned char test(Ch ch) - { - return internal::lookup_tables<0>::lookup_node_name[static_cast(ch)]; - } - }; - - // Detect attribute name character - struct attribute_name_pred - { - static unsigned char test(Ch ch) - { - return internal::lookup_tables<0>::lookup_attribute_name[static_cast(ch)]; - } - }; - - // Detect text character (PCDATA) - struct text_pred - { - static unsigned char test(Ch ch) - { - return internal::lookup_tables<0>::lookup_text[static_cast(ch)]; - } - }; - - // Detect text character (PCDATA) that does not require processing - struct text_pure_no_ws_pred - { - static unsigned char test(Ch ch) - { - return internal::lookup_tables<0>::lookup_text_pure_no_ws[static_cast(ch)]; - } - }; - - // Detect text character (PCDATA) that does not require processing - struct text_pure_with_ws_pred - { - static unsigned char test(Ch ch) - { - return internal::lookup_tables<0>::lookup_text_pure_with_ws[static_cast(ch)]; - } - }; - - // Detect attribute value character - template - struct attribute_value_pred - { - static unsigned char test(Ch ch) - { - if (Quote == Ch('\'')) - return internal::lookup_tables<0>::lookup_attribute_data_1[static_cast(ch)]; - if (Quote == Ch('\"')) - return internal::lookup_tables<0>::lookup_attribute_data_2[static_cast(ch)]; - return 0; // Should never be executed, to avoid warnings on Comeau - } - }; - - // Detect attribute value character - template - struct attribute_value_pure_pred - { - static unsigned char test(Ch ch) - { - if (Quote == Ch('\'')) - return internal::lookup_tables<0>::lookup_attribute_data_1_pure[static_cast(ch)]; - if (Quote == Ch('\"')) - return internal::lookup_tables<0>::lookup_attribute_data_2_pure[static_cast(ch)]; - return 0; // Should never be executed, to avoid warnings on Comeau - } - }; - - // Insert coded character, using UTF8 or 8-bit ASCII - template - static void insert_coded_character(Ch *&text, unsigned long code) - { - if (Flags & parse_no_utf8) - { - // Insert 8-bit ASCII character - // Todo: possibly verify that code is less than 256 and use replacement char otherwise? - text[0] = static_cast(code); - text += 1; - } - else - { - // Insert UTF8 sequence - if (code < 0x80) // 1 byte sequence - { - text[0] = static_cast(code); - text += 1; - } - else if (code < 0x800) // 2 byte sequence - { - text[1] = static_cast((code | 0x80) & 0xBF); code >>= 6; - text[0] = static_cast(code | 0xC0); - text += 2; - } - else if (code < 0x10000) // 3 byte sequence - { - text[2] = static_cast((code | 0x80) & 0xBF); code >>= 6; - text[1] = static_cast((code | 0x80) & 0xBF); code >>= 6; - text[0] = static_cast(code | 0xE0); - text += 3; - } - else if (code < 0x110000) // 4 byte sequence - { - text[3] = static_cast((code | 0x80) & 0xBF); code >>= 6; - text[2] = static_cast((code | 0x80) & 0xBF); code >>= 6; - text[1] = static_cast((code | 0x80) & 0xBF); code >>= 6; - text[0] = static_cast(code | 0xF0); - text += 4; - } - else // Invalid, only codes up to 0x10FFFF are allowed in Unicode - { - RAPIDXML_PARSE_ERROR("invalid numeric character entity", text); - } - } - } - - // Skip characters until predicate evaluates to true - template - static void skip(Ch *&text) - { - Ch *tmp = text; - while (StopPred::test(*tmp)) - ++tmp; - text = tmp; - } - - // Skip characters until predicate evaluates to true while doing the following: - // - replacing XML character entity references with proper characters (' & " < > &#...;) - // - condensing whitespace sequences to single space character - template - static Ch *skip_and_expand_character_refs(Ch *&text) - { - // If entity translation, whitespace condense and whitespace trimming is disabled, use plain skip - if (Flags & parse_no_entity_translation && - !(Flags & parse_normalize_whitespace) && - !(Flags & parse_trim_whitespace)) - { - skip(text); - return text; - } - - // Use simple skip until first modification is detected - skip(text); - - // Use translation skip - Ch *src = text; - Ch *dest = src; - while (StopPred::test(*src)) - { - // If entity translation is enabled - if (!(Flags & parse_no_entity_translation)) - { - // Test if replacement is needed - if (src[0] == Ch('&')) - { - switch (src[1]) - { - - // & ' - case Ch('a'): - if (src[2] == Ch('m') && src[3] == Ch('p') && src[4] == Ch(';')) - { - *dest = Ch('&'); - ++dest; - src += 5; - continue; - } - if (src[2] == Ch('p') && src[3] == Ch('o') && src[4] == Ch('s') && src[5] == Ch(';')) - { - *dest = Ch('\''); - ++dest; - src += 6; - continue; - } - break; - - // " - case Ch('q'): - if (src[2] == Ch('u') && src[3] == Ch('o') && src[4] == Ch('t') && src[5] == Ch(';')) - { - *dest = Ch('"'); - ++dest; - src += 6; - continue; - } - break; - - // > - case Ch('g'): - if (src[2] == Ch('t') && src[3] == Ch(';')) - { - *dest = Ch('>'); - ++dest; - src += 4; - continue; - } - break; - - // < - case Ch('l'): - if (src[2] == Ch('t') && src[3] == Ch(';')) - { - *dest = Ch('<'); - ++dest; - src += 4; - continue; - } - break; - - // &#...; - assumes ASCII - case Ch('#'): - if (src[2] == Ch('x')) - { - unsigned long code = 0; - src += 3; // Skip &#x - while (1) - { - unsigned char digit = internal::lookup_tables<0>::lookup_digits[static_cast(*src)]; - if (digit == 0xFF) - break; - code = code * 16 + digit; - ++src; - } - insert_coded_character(dest, code); // Put character in output - } - else - { - unsigned long code = 0; - src += 2; // Skip &# - while (1) - { - unsigned char digit = internal::lookup_tables<0>::lookup_digits[static_cast(*src)]; - if (digit == 0xFF) - break; - code = code * 10 + digit; - ++src; - } - insert_coded_character(dest, code); // Put character in output - } - if (*src == Ch(';')) - ++src; - else - RAPIDXML_PARSE_ERROR("expected ;", src); - continue; - - // Something else - default: - // Ignore, just copy '&' verbatim - break; - - } - } - } - - // If whitespace condensing is enabled - if (Flags & parse_normalize_whitespace) - { - // Test if condensing is needed - if (whitespace_pred::test(*src)) - { - *dest = Ch(' '); ++dest; // Put single space in dest - ++src; // Skip first whitespace char - // Skip remaining whitespace chars - while (whitespace_pred::test(*src)) - ++src; - continue; - } - } - - // No replacement, only copy character - *dest++ = *src++; - - } - - // Return new end - text = src; - return dest; - - } - - /////////////////////////////////////////////////////////////////////// - // Internal parsing functions - - // Parse BOM, if any - template - void parse_bom(Ch *&text) - { - // UTF-8? - if (static_cast(text[0]) == 0xEF && - static_cast(text[1]) == 0xBB && - static_cast(text[2]) == 0xBF) - { - text += 3; // Skup utf-8 bom - } - } - - // Parse XML declaration ( - xml_node *parse_xml_declaration(Ch *&text) - { - // If parsing of declaration is disabled - if (!(Flags & parse_declaration_node)) - { - // Skip until end of declaration - while (text[0] != Ch('?') || text[1] != Ch('>')) - { - if (!text[0]) - RAPIDXML_PARSE_ERROR("unexpected end of data", text); - ++text; - } - text += 2; // Skip '?>' - return 0; - } - - // Create declaration - xml_node *declaration = this->allocate_node(node_declaration); - - // Skip whitespace before attributes or ?> - skip(text); - - // Parse declaration attributes - parse_node_attributes(text, declaration); - - // Skip ?> - if (text[0] != Ch('?') || text[1] != Ch('>')) - RAPIDXML_PARSE_ERROR("expected ?>", text); - text += 2; - - return declaration; - } - - // Parse XML comment (' - return 0; // Do not produce comment node - } - - // Remember value start - Ch *value = text; - - // Skip until end of comment - while (text[0] != Ch('-') || text[1] != Ch('-') || text[2] != Ch('>')) - { - if (!text[0]) - RAPIDXML_PARSE_ERROR("unexpected end of data", text); - ++text; - } - - // Create comment node - xml_node *comment = this->allocate_node(node_comment); - comment->value(value, text - value); - - // Place zero terminator after comment value - if (!(Flags & parse_no_string_terminators)) - *text = Ch('\0'); - - text += 3; // Skip '-->' - return comment; - } - - // Parse DOCTYPE - template - xml_node *parse_doctype(Ch *&text) - { - // Remember value start - Ch *value = text; - - // Skip to > - while (*text != Ch('>')) - { - // Determine character type - switch (*text) - { - - // If '[' encountered, scan for matching ending ']' using naive algorithm with depth - // This works for all W3C test files except for 2 most wicked - case Ch('['): - { - ++text; // Skip '[' - int depth = 1; - while (depth > 0) - { - switch (*text) - { - case Ch('['): ++depth; break; - case Ch(']'): --depth; break; - case 0: RAPIDXML_PARSE_ERROR("unexpected end of data", text); - } - ++text; - } - break; - } - - // Error on end of text - case Ch('\0'): - RAPIDXML_PARSE_ERROR("unexpected end of data", text); - - // Other character, skip it - default: - ++text; - - } - } - - // If DOCTYPE nodes enabled - if (Flags & parse_doctype_node) - { - // Create a new doctype node - xml_node *doctype = this->allocate_node(node_doctype); - doctype->value(value, text - value); - - // Place zero terminator after value - if (!(Flags & parse_no_string_terminators)) - *text = Ch('\0'); - - text += 1; // skip '>' - return doctype; - } - else - { - text += 1; // skip '>' - return 0; - } - - } - - // Parse PI - template - xml_node *parse_pi(Ch *&text) - { - // If creation of PI nodes is enabled - if (Flags & parse_pi_nodes) - { - // Create pi node - xml_node *pi = this->allocate_node(node_pi); - - // Extract PI target name - Ch *name = text; - skip(text); - if (text == name) - RAPIDXML_PARSE_ERROR("expected PI target", text); - pi->name(name, text - name); - - // Skip whitespace between pi target and pi - skip(text); - - // Remember start of pi - Ch *value = text; - - // Skip to '?>' - while (text[0] != Ch('?') || text[1] != Ch('>')) - { - if (*text == Ch('\0')) - RAPIDXML_PARSE_ERROR("unexpected end of data", text); - ++text; - } - - // Set pi value (verbatim, no entity expansion or whitespace normalization) - pi->value(value, text - value); - - // Place zero terminator after name and value - if (!(Flags & parse_no_string_terminators)) - { - pi->name()[pi->name_size()] = Ch('\0'); - pi->value()[pi->value_size()] = Ch('\0'); - } - - text += 2; // Skip '?>' - return pi; - } - else - { - // Skip to '?>' - while (text[0] != Ch('?') || text[1] != Ch('>')) - { - if (*text == Ch('\0')) - RAPIDXML_PARSE_ERROR("unexpected end of data", text); - ++text; - } - text += 2; // Skip '?>' - return 0; - } - } - - // Parse and append data - // Return character that ends data. - // This is necessary because this character might have been overwritten by a terminating 0 - template - Ch parse_and_append_data(xml_node *node, Ch *&text, Ch *contents_start) - { - // Backup to contents start if whitespace trimming is disabled - if (!(Flags & parse_trim_whitespace)) - text = contents_start; - - // Skip until end of data - Ch *value = text, *end; - if (Flags & parse_normalize_whitespace) - end = skip_and_expand_character_refs(text); - else - end = skip_and_expand_character_refs(text); - - // Trim trailing whitespace if flag is set; leading was already trimmed by whitespace skip after > - if (Flags & parse_trim_whitespace) - { - if (Flags & parse_normalize_whitespace) - { - // Whitespace is already condensed to single space characters by skipping function, so just trim 1 char off the end - if (*(end - 1) == Ch(' ')) - --end; - } - else - { - // Backup until non-whitespace character is found - while (whitespace_pred::test(*(end - 1))) - --end; - } - } - - // If characters are still left between end and value (this test is only necessary if normalization is enabled) - // Create new data node - if (!(Flags & parse_no_data_nodes)) - { - xml_node *data = this->allocate_node(node_data); - data->value(value, end - value); - node->append_node(data); - } - - // Add data to parent node if no data exists yet - if (!(Flags & parse_no_element_values)) - if (*node->value() == Ch('\0')) - node->value(value, end - value); - - // Place zero terminator after value - if (!(Flags & parse_no_string_terminators)) - { - Ch ch = *text; - *end = Ch('\0'); - return ch; // Return character that ends data; this is required because zero terminator overwritten it - } - - // Return character that ends data - return *text; - } - - // Parse CDATA - template - xml_node *parse_cdata(Ch *&text) - { - // If CDATA is disabled - if (Flags & parse_no_data_nodes) - { - // Skip until end of cdata - while (text[0] != Ch(']') || text[1] != Ch(']') || text[2] != Ch('>')) - { - if (!text[0]) - RAPIDXML_PARSE_ERROR("unexpected end of data", text); - ++text; - } - text += 3; // Skip ]]> - return 0; // Do not produce CDATA node - } - - // Skip until end of cdata - Ch *value = text; - while (text[0] != Ch(']') || text[1] != Ch(']') || text[2] != Ch('>')) - { - if (!text[0]) - RAPIDXML_PARSE_ERROR("unexpected end of data", text); - ++text; - } - - // Create new cdata node - xml_node *cdata = this->allocate_node(node_cdata); - cdata->value(value, text - value); - - // Place zero terminator after value - if (!(Flags & parse_no_string_terminators)) - *text = Ch('\0'); - - text += 3; // Skip ]]> - return cdata; - } - - // Parse element node - template - xml_node *parse_element(Ch *&text) - { - // Create element node - xml_node *element = this->allocate_node(node_element); - - // Extract element name - Ch *name = text; - skip(text); - if (text == name) - RAPIDXML_PARSE_ERROR("expected element name", text); - element->name(name, text - name); - - // Skip whitespace between element name and attributes or > - skip(text); - - // Parse attributes, if any - parse_node_attributes(text, element); - - // Determine ending type - if (*text == Ch('>')) - { - ++text; - parse_node_contents(text, element); - } - else if (*text == Ch('/')) - { - ++text; - if (*text != Ch('>')) - RAPIDXML_PARSE_ERROR("expected >", text); - ++text; - } - else - RAPIDXML_PARSE_ERROR("expected >", text); - - // Place zero terminator after name - if (!(Flags & parse_no_string_terminators)) - element->name()[element->name_size()] = Ch('\0'); - - // Return parsed element - return element; - } - - // Determine node type, and parse it - template - xml_node *parse_node(Ch *&text) - { - // Parse proper node type - switch (text[0]) - { - - // <... - default: - // Parse and append element node - return parse_element(text); - - // (text); - } - else - { - // Parse PI - return parse_pi(text); - } - - // (text); - } - break; - - // (text); - } - break; - - // (text); - } - - } // switch - - // Attempt to skip other, unrecognized node types starting with ')) - { - if (*text == 0) - RAPIDXML_PARSE_ERROR("unexpected end of data", text); - ++text; - } - ++text; // Skip '>' - return 0; // No node recognized - - } - } - - // Parse contents of the node - children, data etc. - template - void parse_node_contents(Ch *&text, xml_node *node) - { - // For all children and text - while (1) - { - // Skip whitespace between > and node contents - Ch *contents_start = text; // Store start of node contents before whitespace is skipped - skip(text); - Ch next_char = *text; - - // After data nodes, instead of continuing the loop, control jumps here. - // This is because zero termination inside parse_and_append_data() function - // would wreak havoc with the above code. - // Also, skipping whitespace after data nodes is unnecessary. - after_data_node: - - // Determine what comes next: node closing, child node, data node, or 0? - switch (next_char) - { - - // Node closing or child node - case Ch('<'): - if (text[1] == Ch('/')) - { - // Node closing - text += 2; // Skip '(text); - if (!internal::compare(node->name(), node->name_size(), closing_name, text - closing_name, true)) - RAPIDXML_PARSE_ERROR("invalid closing tag name", text); - } - else - { - // No validation, just skip name - skip(text); - } - // Skip remaining whitespace after node name - skip(text); - if (*text != Ch('>')) - RAPIDXML_PARSE_ERROR("expected >", text); - ++text; // Skip '>' - return; // Node closed, finished parsing contents - } - else - { - // Child node - ++text; // Skip '<' - if (xml_node *child = parse_node(text)) - node->append_node(child); - } - break; - - // End of data - error - case Ch('\0'): - RAPIDXML_PARSE_ERROR("unexpected end of data", text); - - // Data node - default: - next_char = parse_and_append_data(node, text, contents_start); - goto after_data_node; // Bypass regular processing after data nodes - - } - } - } - - // Parse XML attributes of the node - template - void parse_node_attributes(Ch *&text, xml_node *node) - { - // For all attributes - while (attribute_name_pred::test(*text)) - { - // Extract attribute name - Ch *name = text; - ++text; // Skip first character of attribute name - skip(text); - if (text == name) - RAPIDXML_PARSE_ERROR("expected attribute name", name); - - // Create new attribute - xml_attribute *attribute = this->allocate_attribute(); - attribute->name(name, text - name); - node->append_attribute(attribute); - - // Skip whitespace after attribute name - skip(text); - - // Skip = - if (*text != Ch('=')) - RAPIDXML_PARSE_ERROR("expected =", text); - ++text; - - // Add terminating zero after name - if (!(Flags & parse_no_string_terminators)) - attribute->name()[attribute->name_size()] = 0; - - // Skip whitespace after = - skip(text); - - // Skip quote and remember if it was ' or " - Ch quote = *text; - if (quote != Ch('\'') && quote != Ch('"')) - RAPIDXML_PARSE_ERROR("expected ' or \"", text); - ++text; - - // Extract attribute value and expand char refs in it - Ch *value = text, *end; - const int AttFlags = Flags & ~parse_normalize_whitespace; // No whitespace normalization in attributes - if (quote == Ch('\'')) - end = skip_and_expand_character_refs, attribute_value_pure_pred, AttFlags>(text); - else - end = skip_and_expand_character_refs, attribute_value_pure_pred, AttFlags>(text); - - // Set attribute value - attribute->value(value, end - value); - - // Make sure that end quote is present - if (*text != quote) - RAPIDXML_PARSE_ERROR("expected ' or \"", text); - ++text; // Skip quote - - // Add terminating zero after value - if (!(Flags & parse_no_string_terminators)) - attribute->value()[attribute->value_size()] = 0; - - // Skip whitespace after attribute value - skip(text); - } - } - - }; - - //! \cond internal - namespace internal - { - - // Whitespace (space \n \r \t) - template - const unsigned char lookup_tables::lookup_whitespace[256] = - { - // 0 1 2 3 4 5 6 7 8 9 A B C D E F - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, // 0 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 1 - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 2 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 3 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 4 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 5 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 6 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 7 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 8 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 9 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // A - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // B - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // C - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // D - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // E - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 // F - }; - - // Node name (anything but space \n \r \t / > ? \0) - template - const unsigned char lookup_tables::lookup_node_name[256] = - { - // 0 1 2 3 4 5 6 7 8 9 A B C D E F - 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, // 0 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 1 - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, // 2 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, // 3 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 4 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 5 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 6 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 7 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 8 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 9 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // A - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // B - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // C - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // D - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // E - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 // F - }; - - // Text (i.e. PCDATA) (anything but < \0) - template - const unsigned char lookup_tables::lookup_text[256] = - { - // 0 1 2 3 4 5 6 7 8 9 A B C D E F - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 1 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 2 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, // 3 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 4 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 5 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 6 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 7 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 8 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 9 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // A - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // B - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // C - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // D - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // E - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 // F - }; - - // Text (i.e. PCDATA) that does not require processing when ws normalization is disabled - // (anything but < \0 &) - template - const unsigned char lookup_tables::lookup_text_pure_no_ws[256] = - { - // 0 1 2 3 4 5 6 7 8 9 A B C D E F - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 1 - 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 2 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, // 3 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 4 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 5 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 6 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 7 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 8 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 9 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // A - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // B - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // C - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // D - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // E - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 // F - }; - - // Text (i.e. PCDATA) that does not require processing when ws normalizationis is enabled - // (anything but < \0 & space \n \r \t) - template - const unsigned char lookup_tables::lookup_text_pure_with_ws[256] = - { - // 0 1 2 3 4 5 6 7 8 9 A B C D E F - 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, // 0 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 1 - 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 2 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, // 3 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 4 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 5 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 6 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 7 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 8 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 9 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // A - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // B - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // C - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // D - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // E - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 // F - }; - - // Attribute name (anything but space \n \r \t / < > = ? ! \0) - template - const unsigned char lookup_tables::lookup_attribute_name[256] = - { - // 0 1 2 3 4 5 6 7 8 9 A B C D E F - 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, // 0 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 1 - 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, // 2 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, // 3 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 4 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 5 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 6 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 7 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 8 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 9 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // A - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // B - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // C - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // D - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // E - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 // F - }; - - // Attribute data with single quote (anything but ' \0) - template - const unsigned char lookup_tables::lookup_attribute_data_1[256] = - { - // 0 1 2 3 4 5 6 7 8 9 A B C D E F - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 1 - 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, // 2 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 3 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 4 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 5 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 6 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 7 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 8 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 9 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // A - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // B - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // C - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // D - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // E - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 // F - }; - - // Attribute data with single quote that does not require processing (anything but ' \0 &) - template - const unsigned char lookup_tables::lookup_attribute_data_1_pure[256] = - { - // 0 1 2 3 4 5 6 7 8 9 A B C D E F - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 1 - 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, // 2 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 3 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 4 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 5 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 6 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 7 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 8 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 9 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // A - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // B - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // C - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // D - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // E - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 // F - }; - - // Attribute data with double quote (anything but " \0) - template - const unsigned char lookup_tables::lookup_attribute_data_2[256] = - { - // 0 1 2 3 4 5 6 7 8 9 A B C D E F - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 1 - 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 2 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 3 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 4 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 5 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 6 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 7 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 8 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 9 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // A - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // B - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // C - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // D - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // E - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 // F - }; - - // Attribute data with double quote that does not require processing (anything but " \0 &) - template - const unsigned char lookup_tables::lookup_attribute_data_2_pure[256] = - { - // 0 1 2 3 4 5 6 7 8 9 A B C D E F - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 1 - 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 2 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 3 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 4 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 5 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 6 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 7 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 8 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 9 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // A - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // B - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // C - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // D - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // E - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 // F - }; - - // Digits (dec and hex, 255 denotes end of numeric character reference) - template - const unsigned char lookup_tables::lookup_digits[256] = - { - // 0 1 2 3 4 5 6 7 8 9 A B C D E F - 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, // 0 - 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, // 1 - 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, // 2 - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,255,255,255,255,255,255, // 3 - 255, 10, 11, 12, 13, 14, 15,255,255,255,255,255,255,255,255,255, // 4 - 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, // 5 - 255, 10, 11, 12, 13, 14, 15,255,255,255,255,255,255,255,255,255, // 6 - 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, // 7 - 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, // 8 - 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, // 9 - 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, // A - 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, // B - 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, // C - 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, // D - 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, // E - 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255 // F - }; - - // Upper case conversion - template - const unsigned char lookup_tables::lookup_upcase[256] = - { - // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A B C D E F - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, // 0 - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, // 1 - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, // 2 - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, // 3 - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, // 4 - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, // 5 - 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, // 6 - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 123,124,125,126,127, // 7 - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, // 8 - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, // 9 - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, // A - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, // B - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, // C - 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223, // D - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, // E - 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 // F - }; - } - //! \endcond - -} - -// Undefine internal macros -#undef RAPIDXML_PARSE_ERROR - -// On MSVC, restore warnings state -#ifdef _MSC_VER - #pragma warning(pop) -#endif - -#endif diff --git a/lib/rapidxml/rapidxml_iterators.hpp b/lib/rapidxml/rapidxml_iterators.hpp deleted file mode 100644 index a827e9381..000000000 --- a/lib/rapidxml/rapidxml_iterators.hpp +++ /dev/null @@ -1,175 +0,0 @@ -#ifndef RAPIDXML_ITERATORS_HPP_INCLUDED -#define RAPIDXML_ITERATORS_HPP_INCLUDED - -// Copyright (C) 2006, 2009 Marcin Kalicinski -// Version 1.13 -// Revision $DateTime: 2009/05/13 01:46:17 $ -//! \file rapidxml_iterators.hpp This file contains rapidxml iterators - -#include -#include "rapidxml.hpp" - -namespace rapidxml -{ - - //! Iterator of child nodes of xml_node - template - class node_iterator - { - - public: - - typedef typename xml_node value_type; - typedef typename xml_node &reference; - typedef typename xml_node *pointer; - typedef std::ptrdiff_t difference_type; - typedef std::bidirectional_iterator_tag iterator_category; - - node_iterator() - : m_node(0) - { - } - - node_iterator(xml_node *node) - : m_node(node->first_node()) - { - } - - reference operator *() const - { - assert(m_node); - return *m_node; - } - - pointer operator->() const - { - assert(m_node); - return m_node; - } - - node_iterator& operator++() - { - assert(m_node); - m_node = m_node->next_sibling(); - return *this; - } - - node_iterator operator++(int) - { - node_iterator tmp = *this; - ++this; - return tmp; - } - - node_iterator& operator--() - { - assert(m_node && m_node->previous_sibling()); - m_node = m_node->previous_sibling(); - return *this; - } - - node_iterator operator--(int) - { - node_iterator tmp = *this; - ++this; - return tmp; - } - - bool operator ==(const node_iterator &rhs) - { - return m_node == rhs.m_node; - } - - bool operator !=(const node_iterator &rhs) - { - return m_node != rhs.m_node; - } - - private: - - xml_node *m_node; - - }; - - //! Iterator of child attributes of xml_node - template - class attribute_iterator - { - - public: - - typedef typename xml_attribute value_type; - typedef typename xml_attribute &reference; - typedef typename xml_attribute *pointer; - typedef std::ptrdiff_t difference_type; - typedef std::bidirectional_iterator_tag iterator_category; - - attribute_iterator() - : m_attribute(0) - { - } - - attribute_iterator(xml_node *node) - : m_attribute(node->first_attribute()) - { - } - - reference operator *() const - { - assert(m_attribute); - return *m_attribute; - } - - pointer operator->() const - { - assert(m_attribute); - return m_attribute; - } - - attribute_iterator& operator++() - { - assert(m_attribute); - m_attribute = m_attribute->next_attribute(); - return *this; - } - - attribute_iterator operator++(int) - { - attribute_iterator tmp = *this; - ++this; - return tmp; - } - - attribute_iterator& operator--() - { - assert(m_attribute && m_attribute->previous_attribute()); - m_attribute = m_attribute->previous_attribute(); - return *this; - } - - attribute_iterator operator--(int) - { - attribute_iterator tmp = *this; - ++this; - return tmp; - } - - bool operator ==(const attribute_iterator &rhs) - { - return m_attribute == rhs.m_attribute; - } - - bool operator !=(const attribute_iterator &rhs) - { - return m_attribute != rhs.m_attribute; - } - - private: - - xml_attribute *m_attribute; - - }; - -} - -#endif diff --git a/lib/rapidxml/rapidxml_print.hpp b/lib/rapidxml/rapidxml_print.hpp deleted file mode 100644 index 0ae2b14fa..000000000 --- a/lib/rapidxml/rapidxml_print.hpp +++ /dev/null @@ -1,421 +0,0 @@ -#ifndef RAPIDXML_PRINT_HPP_INCLUDED -#define RAPIDXML_PRINT_HPP_INCLUDED - -// Copyright (C) 2006, 2009 Marcin Kalicinski -// Version 1.13 -// Revision $DateTime: 2009/05/13 01:46:17 $ -//! \file rapidxml_print.hpp This file contains rapidxml printer implementation - -#include "rapidxml.hpp" - -// Only include streams if not disabled -#ifndef RAPIDXML_NO_STREAMS - #include - #include -#endif - -namespace rapidxml -{ - - /////////////////////////////////////////////////////////////////////// - // Printing flags - - const int print_no_indenting = 0x1; //!< Printer flag instructing the printer to suppress indenting of XML. See print() function. - - /////////////////////////////////////////////////////////////////////// - // Internal - - //! \cond internal - namespace internal - { - - /////////////////////////////////////////////////////////////////////////// - // Internal character operations - - // Copy characters from given range to given output iterator - template - inline OutIt copy_chars(const Ch *begin, const Ch *end, OutIt out) - { - while (begin != end) - *out++ = *begin++; - return out; - } - - // Copy characters from given range to given output iterator and expand - // characters into references (< > ' " &) - template - inline OutIt copy_and_expand_chars(const Ch *begin, const Ch *end, Ch noexpand, OutIt out) - { - while (begin != end) - { - if (*begin == noexpand) - { - *out++ = *begin; // No expansion, copy character - } - else - { - switch (*begin) - { - case Ch('<'): - *out++ = Ch('&'); *out++ = Ch('l'); *out++ = Ch('t'); *out++ = Ch(';'); - break; - case Ch('>'): - *out++ = Ch('&'); *out++ = Ch('g'); *out++ = Ch('t'); *out++ = Ch(';'); - break; - case Ch('\''): - *out++ = Ch('&'); *out++ = Ch('a'); *out++ = Ch('p'); *out++ = Ch('o'); *out++ = Ch('s'); *out++ = Ch(';'); - break; - case Ch('"'): - *out++ = Ch('&'); *out++ = Ch('q'); *out++ = Ch('u'); *out++ = Ch('o'); *out++ = Ch('t'); *out++ = Ch(';'); - break; - case Ch('&'): - *out++ = Ch('&'); *out++ = Ch('a'); *out++ = Ch('m'); *out++ = Ch('p'); *out++ = Ch(';'); - break; - default: - *out++ = *begin; // No expansion, copy character - } - } - ++begin; // Step to next character - } - return out; - } - - // Fill given output iterator with repetitions of the same character - template - inline OutIt fill_chars(OutIt out, int n, Ch ch) - { - for (int i = 0; i < n; ++i) - *out++ = ch; - return out; - } - - // Find character - template - inline bool find_char(const Ch *begin, const Ch *end) - { - while (begin != end) - if (*begin++ == ch) - return true; - return false; - } - - /////////////////////////////////////////////////////////////////////////// - // Internal printing operations - - // Print node - template - inline OutIt print_node(OutIt out, const xml_node *node, int flags, int indent) - { - // Print proper node type - switch (node->type()) - { - - // Document - case node_document: - out = print_children(out, node, flags, indent); - break; - - // Element - case node_element: - out = print_element_node(out, node, flags, indent); - break; - - // Data - case node_data: - out = print_data_node(out, node, flags, indent); - break; - - // CDATA - case node_cdata: - out = print_cdata_node(out, node, flags, indent); - break; - - // Declaration - case node_declaration: - out = print_declaration_node(out, node, flags, indent); - break; - - // Comment - case node_comment: - out = print_comment_node(out, node, flags, indent); - break; - - // Doctype - case node_doctype: - out = print_doctype_node(out, node, flags, indent); - break; - - // Pi - case node_pi: - out = print_pi_node(out, node, flags, indent); - break; - - // Unknown - default: - assert(0); - break; - } - - // If indenting not disabled, add line break after node - if (!(flags & print_no_indenting)) - *out = Ch('\n'), ++out; - - // Return modified iterator - return out; - } - - // Print children of the node - template - inline OutIt print_children(OutIt out, const xml_node *node, int flags, int indent) - { - for (xml_node *child = node->first_node(); child; child = child->next_sibling()) - out = print_node(out, child, flags, indent); - return out; - } - - // Print attributes of the node - template - inline OutIt print_attributes(OutIt out, const xml_node *node, int flags) - { - for (xml_attribute *attribute = node->first_attribute(); attribute; attribute = attribute->next_attribute()) - { - if (attribute->name() && attribute->value()) - { - // Print attribute name - *out = Ch(' '), ++out; - out = copy_chars(attribute->name(), attribute->name() + attribute->name_size(), out); - *out = Ch('='), ++out; - // Print attribute value using appropriate quote type - if (find_char(attribute->value(), attribute->value() + attribute->value_size())) - { - *out = Ch('\''), ++out; - out = copy_and_expand_chars(attribute->value(), attribute->value() + attribute->value_size(), Ch('"'), out); - *out = Ch('\''), ++out; - } - else - { - *out = Ch('"'), ++out; - out = copy_and_expand_chars(attribute->value(), attribute->value() + attribute->value_size(), Ch('\''), out); - *out = Ch('"'), ++out; - } - } - } - return out; - } - - // Print data node - template - inline OutIt print_data_node(OutIt out, const xml_node *node, int flags, int indent) - { - assert(node->type() == node_data); - if (!(flags & print_no_indenting)) - out = fill_chars(out, indent, Ch('\t')); - out = copy_and_expand_chars(node->value(), node->value() + node->value_size(), Ch(0), out); - return out; - } - - // Print data node - template - inline OutIt print_cdata_node(OutIt out, const xml_node *node, int flags, int indent) - { - assert(node->type() == node_cdata); - if (!(flags & print_no_indenting)) - out = fill_chars(out, indent, Ch('\t')); - *out = Ch('<'); ++out; - *out = Ch('!'); ++out; - *out = Ch('['); ++out; - *out = Ch('C'); ++out; - *out = Ch('D'); ++out; - *out = Ch('A'); ++out; - *out = Ch('T'); ++out; - *out = Ch('A'); ++out; - *out = Ch('['); ++out; - out = copy_chars(node->value(), node->value() + node->value_size(), out); - *out = Ch(']'); ++out; - *out = Ch(']'); ++out; - *out = Ch('>'); ++out; - return out; - } - - // Print element node - template - inline OutIt print_element_node(OutIt out, const xml_node *node, int flags, int indent) - { - assert(node->type() == node_element); - - // Print element name and attributes, if any - if (!(flags & print_no_indenting)) - out = fill_chars(out, indent, Ch('\t')); - *out = Ch('<'), ++out; - out = copy_chars(node->name(), node->name() + node->name_size(), out); - out = print_attributes(out, node, flags); - - // If node is childless - if (node->value_size() == 0 && !node->first_node()) - { - // Print childless node tag ending - *out = Ch('/'), ++out; - *out = Ch('>'), ++out; - } - else - { - // Print normal node tag ending - *out = Ch('>'), ++out; - - // Test if node contains a single data node only (and no other nodes) - xml_node *child = node->first_node(); - if (!child) - { - // If node has no children, only print its value without indenting - out = copy_and_expand_chars(node->value(), node->value() + node->value_size(), Ch(0), out); - } - else if (child->next_sibling() == 0 && child->type() == node_data) - { - // If node has a sole data child, only print its value without indenting - out = copy_and_expand_chars(child->value(), child->value() + child->value_size(), Ch(0), out); - } - else - { - // Print all children with full indenting - if (!(flags & print_no_indenting)) - *out = Ch('\n'), ++out; - out = print_children(out, node, flags, indent + 1); - if (!(flags & print_no_indenting)) - out = fill_chars(out, indent, Ch('\t')); - } - - // Print node end - *out = Ch('<'), ++out; - *out = Ch('/'), ++out; - out = copy_chars(node->name(), node->name() + node->name_size(), out); - *out = Ch('>'), ++out; - } - return out; - } - - // Print declaration node - template - inline OutIt print_declaration_node(OutIt out, const xml_node *node, int flags, int indent) - { - // Print declaration start - if (!(flags & print_no_indenting)) - out = fill_chars(out, indent, Ch('\t')); - *out = Ch('<'), ++out; - *out = Ch('?'), ++out; - *out = Ch('x'), ++out; - *out = Ch('m'), ++out; - *out = Ch('l'), ++out; - - // Print attributes - out = print_attributes(out, node, flags); - - // Print declaration end - *out = Ch('?'), ++out; - *out = Ch('>'), ++out; - - return out; - } - - // Print comment node - template - inline OutIt print_comment_node(OutIt out, const xml_node *node, int flags, int indent) - { - assert(node->type() == node_comment); - if (!(flags & print_no_indenting)) - out = fill_chars(out, indent, Ch('\t')); - *out = Ch('<'), ++out; - *out = Ch('!'), ++out; - *out = Ch('-'), ++out; - *out = Ch('-'), ++out; - out = copy_chars(node->value(), node->value() + node->value_size(), out); - *out = Ch('-'), ++out; - *out = Ch('-'), ++out; - *out = Ch('>'), ++out; - return out; - } - - // Print doctype node - template - inline OutIt print_doctype_node(OutIt out, const xml_node *node, int flags, int indent) - { - assert(node->type() == node_doctype); - if (!(flags & print_no_indenting)) - out = fill_chars(out, indent, Ch('\t')); - *out = Ch('<'), ++out; - *out = Ch('!'), ++out; - *out = Ch('D'), ++out; - *out = Ch('O'), ++out; - *out = Ch('C'), ++out; - *out = Ch('T'), ++out; - *out = Ch('Y'), ++out; - *out = Ch('P'), ++out; - *out = Ch('E'), ++out; - *out = Ch(' '), ++out; - out = copy_chars(node->value(), node->value() + node->value_size(), out); - *out = Ch('>'), ++out; - return out; - } - - // Print pi node - template - inline OutIt print_pi_node(OutIt out, const xml_node *node, int flags, int indent) - { - assert(node->type() == node_pi); - if (!(flags & print_no_indenting)) - out = fill_chars(out, indent, Ch('\t')); - *out = Ch('<'), ++out; - *out = Ch('?'), ++out; - out = copy_chars(node->name(), node->name() + node->name_size(), out); - *out = Ch(' '), ++out; - out = copy_chars(node->value(), node->value() + node->value_size(), out); - *out = Ch('?'), ++out; - *out = Ch('>'), ++out; - return out; - } - - } - //! \endcond - - /////////////////////////////////////////////////////////////////////////// - // Printing - - //! Prints XML to given output iterator. - //! \param out Output iterator to print to. - //! \param node Node to be printed. Pass xml_document to print entire document. - //! \param flags Flags controlling how XML is printed. - //! \return Output iterator pointing to position immediately after last character of printed text. - template - inline OutIt print(OutIt out, const xml_node &node, int flags = 0) - { - return internal::print_node(out, &node, flags, 0); - } - -#ifndef RAPIDXML_NO_STREAMS - - //! Prints XML to given output stream. - //! \param out Output stream to print to. - //! \param node Node to be printed. Pass xml_document to print entire document. - //! \param flags Flags controlling how XML is printed. - //! \return Output stream. - template - inline std::basic_ostream &print(std::basic_ostream &out, const xml_node &node, int flags = 0) - { - print(std::ostream_iterator(out), node, flags); - return out; - } - - //! Prints formatted XML to given output stream. Uses default printing flags. Use print() function to customize printing process. - //! \param out Output stream to print to. - //! \param node Node to be printed. - //! \return Output stream. - template - inline std::basic_ostream &operator <<(std::basic_ostream &out, const xml_node &node) - { - return print(out, node); - } - -#endif - -} - -#endif diff --git a/lib/rapidxml/rapidxml_utils.hpp b/lib/rapidxml/rapidxml_utils.hpp deleted file mode 100644 index 37c29535f..000000000 --- a/lib/rapidxml/rapidxml_utils.hpp +++ /dev/null @@ -1,122 +0,0 @@ -#ifndef RAPIDXML_UTILS_HPP_INCLUDED -#define RAPIDXML_UTILS_HPP_INCLUDED - -// Copyright (C) 2006, 2009 Marcin Kalicinski -// Version 1.13 -// Revision $DateTime: 2009/05/13 01:46:17 $ -//! \file rapidxml_utils.hpp This file contains high-level rapidxml utilities that can be useful -//! in certain simple scenarios. They should probably not be used if maximizing performance is the main objective. - -#include "rapidxml.hpp" -#include -#include -#include -#include - -namespace rapidxml -{ - - //! Represents data loaded from a file - template - class file - { - - public: - - //! Loads file into the memory. Data will be automatically destroyed by the destructor. - //! \param filename Filename to load. - file(const char *filename) - { - using namespace std; - - // Open stream - basic_ifstream stream(filename, ios::binary); - if (!stream) - throw runtime_error(string("cannot open file ") + filename); - stream.unsetf(ios::skipws); - - // Determine stream size - stream.seekg(0, ios::end); - size_t size = stream.tellg(); - stream.seekg(0); - - // Load data and add terminating 0 - m_data.resize(size + 1); - stream.read(&m_data.front(), static_cast(size)); - m_data[size] = 0; - } - - //! Loads file into the memory. Data will be automatically destroyed by the destructor - //! \param stream Stream to load from - file(std::basic_istream &stream) - { - using namespace std; - - // Load data and add terminating 0 - stream.unsetf(ios::skipws); - m_data.assign(istreambuf_iterator(stream), istreambuf_iterator()); - if (stream.fail() || stream.bad()) - throw runtime_error("error reading stream"); - m_data.push_back(0); - } - - //! Gets file data. - //! \return Pointer to data of file. - Ch *data() - { - return &m_data.front(); - } - - //! Gets file data. - //! \return Pointer to data of file. - const Ch *data() const - { - return &m_data.front(); - } - - //! Gets file data size. - //! \return Size of file data, in characters. - std::size_t size() const - { - return m_data.size(); - } - - private: - - std::vector m_data; // File data - - }; - - //! Counts children of node. Time complexity is O(n). - //! \return Number of children of node - template - inline std::size_t count_children(xml_node *node) - { - xml_node *child = node->first_node(); - std::size_t count = 0; - while (child) - { - ++count; - child = child->next_sibling(); - } - return count; - } - - //! Counts attributes of node. Time complexity is O(n). - //! \return Number of attributes of node - template - inline std::size_t count_attributes(xml_node *node) - { - xml_attribute *attr = node->first_attribute(); - std::size_t count = 0; - while (attr) - { - ++count; - attr = attr->next_attribute(); - } - return count; - } - -} - -#endif diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index 1b40fe98e..b8434cef2 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ diff --git a/pvr.iptvsimple/changelog.txt b/pvr.iptvsimple/changelog.txt index 4956aab4e..7ca6c719e 100644 --- a/pvr.iptvsimple/changelog.txt +++ b/pvr.iptvsimple/changelog.txt @@ -1,3 +1,6 @@ +v3.5.4 +- Remove bundled rapidxml + v3.5.2 - Add support for #EXT-X-PLAYLIST-TYPE in M3U From f9cc6bb5c16f3d7be75d0467d522b6d153193725 Mon Sep 17 00:00:00 2001 From: Rechi Date: Wed, 24 Oct 2018 16:07:30 +0200 Subject: [PATCH 094/100] [depends] rapidxml: convert patch to crlf line endings --- depends/common/rapidxml/01-fix-windows.patch | 58 ++++++++++---------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/depends/common/rapidxml/01-fix-windows.patch b/depends/common/rapidxml/01-fix-windows.patch index 2ff171895..68db22de9 100644 --- a/depends/common/rapidxml/01-fix-windows.patch +++ b/depends/common/rapidxml/01-fix-windows.patch @@ -1,29 +1,29 @@ ---- a/rapidxml.hpp -+++ b/rapidxml.hpp -@@ -382,7 +382,7 @@ - public: - - //! \cond internal -- typedef void *(alloc_func)(std::size_t); // Type of user-defined function used to allocate memory -+ typedef void *(alloc_func_)(std::size_t); // Type of user-defined function used to allocate memory - typedef void (free_func)(void *); // Type of user-defined function used to free memory - //! \endcond - -@@ -549,7 +549,7 @@ namespace rapidxml - //!
- //! \param af Allocation function, or 0 to restore default function - //! \param ff Free function, or 0 to restore default function -- void set_allocator(alloc_func *af, free_func *ff) -+ void set_allocator(alloc_func_ *af, free_func *ff) - { - assert(m_begin == m_static_memory && m_ptr == align(m_begin)); // Verify that no memory is allocated yet - m_alloc_func = af; -@@ -634,7 +634,7 @@ namespace rapidxml - char *m_ptr; // First free byte in current pool - char *m_end; // One past last available byte in current pool - char m_static_memory[RAPIDXML_STATIC_POOL_SIZE]; // Static raw memory -- alloc_func *m_alloc_func; // Allocator function, or 0 if default is to be used -+ alloc_func_ *m_alloc_func; // Allocator function, or 0 if default is to be used - free_func *m_free_func; // Free function, or 0 if default is to be used - }; - +--- a/rapidxml.hpp ++++ b/rapidxml.hpp +@@ -382,7 +382,7 @@ + public: + + //! \cond internal +- typedef void *(alloc_func)(std::size_t); // Type of user-defined function used to allocate memory ++ typedef void *(alloc_func_)(std::size_t); // Type of user-defined function used to allocate memory + typedef void (free_func)(void *); // Type of user-defined function used to free memory + //! \endcond + +@@ -549,7 +549,7 @@ namespace rapidxml + //!
+ //! \param af Allocation function, or 0 to restore default function + //! \param ff Free function, or 0 to restore default function +- void set_allocator(alloc_func *af, free_func *ff) ++ void set_allocator(alloc_func_ *af, free_func *ff) + { + assert(m_begin == m_static_memory && m_ptr == align(m_begin)); // Verify that no memory is allocated yet + m_alloc_func = af; +@@ -634,7 +634,7 @@ namespace rapidxml + char *m_ptr; // First free byte in current pool + char *m_end; // One past last available byte in current pool + char m_static_memory[RAPIDXML_STATIC_POOL_SIZE]; // Static raw memory +- alloc_func *m_alloc_func; // Allocator function, or 0 if default is to be used ++ alloc_func_ *m_alloc_func; // Allocator function, or 0 if default is to be used + free_func *m_free_func; // Free function, or 0 if default is to be used + }; + From 73622be03ce30b9f52fe087b27f16e2c8a18367c Mon Sep 17 00:00:00 2001 From: Rechi Date: Fri, 26 Oct 2018 13:09:02 +0200 Subject: [PATCH 095/100] [ci][travis] add ADDONS_DEFINITION_DIR --- .travis.yml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 4911592df..44da0d73e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,6 +7,10 @@ language: cpp # Linux. We need Trusty in order to get up to date versions of # cmake and g++. # +env: + global: + - app_id=pvr.iptvsimple + matrix: include: - os: linux @@ -29,7 +33,9 @@ matrix: before_script: - cd $TRAVIS_BUILD_DIR/.. - git clone --depth=1 https://github.com/xbmc/xbmc.git - - cd pvr.iptvsimple && mkdir build && cd build - - cmake -DADDONS_TO_BUILD=pvr.iptvsimple -DADDON_SRC_PREFIX=$TRAVIS_BUILD_DIR/.. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=$TRAVIS_BUILD_DIR/../xbmc/addons -DPACKAGE_ZIP=1 $TRAVIS_BUILD_DIR/../xbmc/cmake/addons + - cd ${app_id} && mkdir build && cd build + - mkdir -p definition/${app_id} + - echo ${app_id} $TRAVIS_BUILD_DIR $TRAVIS_COMMIT > definition/${app_id}/${app_id}.txt + - cmake -DADDONS_TO_BUILD=${app_id} -DADDON_SRC_PREFIX=$TRAVIS_BUILD_DIR/.. -DADDONS_DEFINITION_DIR=$TRAVIS_BUILD_DIR/build/definition -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=$TRAVIS_BUILD_DIR/../xbmc/addons -DPACKAGE_ZIP=1 $TRAVIS_BUILD_DIR/../xbmc/cmake/addons script: make From 98694e524c192344e9f50aeb0bf6d47c31ecb815 Mon Sep 17 00:00:00 2001 From: Rechi Date: Mon, 29 Oct 2018 12:22:17 +0100 Subject: [PATCH 096/100] [depends] bump zlib to 1.2.11 --- depends/common/zlib/01-build-static.patch | 36 ++++ depends/common/zlib/CMakeLists.txt | 224 ---------------------- depends/common/zlib/zlib.sha256 | 1 + depends/common/zlib/zlib.txt | 2 +- pvr.iptvsimple/addon.xml.in | 2 +- pvr.iptvsimple/changelog.txt | 3 + 6 files changed, 42 insertions(+), 226 deletions(-) create mode 100644 depends/common/zlib/01-build-static.patch delete mode 100644 depends/common/zlib/CMakeLists.txt create mode 100644 depends/common/zlib/zlib.sha256 diff --git a/depends/common/zlib/01-build-static.patch b/depends/common/zlib/01-build-static.patch new file mode 100644 index 000000000..8cc3cfc36 --- /dev/null +++ b/depends/common/zlib/01-build-static.patch @@ -0,0 +1,36 @@ +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -183,10 +183,11 @@ + set(ZLIB_DLL_SRCS ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj) + endif(MINGW) + +-add_library(zlib SHARED ${ZLIB_SRCS} ${ZLIB_ASMS} ${ZLIB_DLL_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS}) +-add_library(zlibstatic STATIC ${ZLIB_SRCS} ${ZLIB_ASMS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS}) +-set_target_properties(zlib PROPERTIES DEFINE_SYMBOL ZLIB_DLL) +-set_target_properties(zlib PROPERTIES SOVERSION 1) ++add_library(zlib ${ZLIB_SRCS} ${ZLIB_ASMS} ${ZLIB_DLL_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS}) ++if(BUILD_SHARED_LIBS) ++ set_target_properties(zlib PROPERTIES DEFINE_SYMBOL ZLIB_DLL) ++ set_target_properties(zlib PROPERTIES SOVERSION 1) ++endif() + + if(NOT CYGWIN) + # This property causes shared libraries on Linux to have the full version +@@ -201,7 +202,7 @@ + + if(UNIX) + # On unix-like platforms the library is almost always called libz +- set_target_properties(zlib zlibstatic PROPERTIES OUTPUT_NAME z) ++ set_target_properties(zlib PROPERTIES OUTPUT_NAME z) + if(NOT APPLE) + set_target_properties(zlib PROPERTIES LINK_FLAGS "-Wl,--version-script,\"${CMAKE_CURRENT_SOURCE_DIR}/zlib.map\"") + endif() +@@ -211,7 +212,7 @@ + endif() + + if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL ) +- install(TARGETS zlib zlibstatic ++ install(TARGETS zlib + RUNTIME DESTINATION "${INSTALL_BIN_DIR}" + ARCHIVE DESTINATION "${INSTALL_LIB_DIR}" + LIBRARY DESTINATION "${INSTALL_LIB_DIR}" ) diff --git a/depends/common/zlib/CMakeLists.txt b/depends/common/zlib/CMakeLists.txt deleted file mode 100644 index ca9c020cf..000000000 --- a/depends/common/zlib/CMakeLists.txt +++ /dev/null @@ -1,224 +0,0 @@ -cmake_minimum_required(VERSION 2.4.4) -set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON) - -project(zlib C) - -set(VERSION "1.2.7") - -set(INSTALL_BIN_DIR "${CMAKE_INSTALL_PREFIX}/bin" CACHE PATH "Installation directory for executables") -set(INSTALL_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib" CACHE PATH "Installation directory for libraries") -set(INSTALL_INC_DIR "${CMAKE_INSTALL_PREFIX}/include" CACHE PATH "Installation directory for headers") -set(INSTALL_MAN_DIR "${CMAKE_INSTALL_PREFIX}/share/man" CACHE PATH "Installation directory for manual pages") -set(INSTALL_PKGCONFIG_DIR "${CMAKE_INSTALL_PREFIX}/share/pkgconfig" CACHE PATH "Installation directory for pkgconfig (.pc) files") - -include(CheckTypeSize) -include(CheckFunctionExists) -include(CheckIncludeFile) -include(CheckCSourceCompiles) -enable_testing() - -check_include_file(sys/types.h HAVE_SYS_TYPES_H) -check_include_file(stdint.h HAVE_STDINT_H) -check_include_file(stddef.h HAVE_STDDEF_H) - -# -# Check to see if we have large file support -# -set(CMAKE_REQUIRED_DEFINITIONS -D_LARGEFILE64_SOURCE=1) -# We add these other definitions here because CheckTypeSize.cmake -# in CMake 2.4.x does not automatically do so and we want -# compatibility with CMake 2.4.x. -if(HAVE_SYS_TYPES_H) - list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_SYS_TYPES_H) -endif() -if(HAVE_STDINT_H) - list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_STDINT_H) -endif() -if(HAVE_STDDEF_H) - list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_STDDEF_H) -endif() -check_type_size(off64_t OFF64_T) -if(HAVE_OFF64_T) - add_definitions(-D_LARGEFILE64_SOURCE=1) -endif() -set(CMAKE_REQUIRED_DEFINITIONS) # clear variable - -# -# Check for fseeko -# -check_function_exists(fseeko HAVE_FSEEKO) -if(NOT HAVE_FSEEKO) - add_definitions(-DNO_FSEEKO) -endif() - -# -# Check for unistd.h -# -check_include_file(unistd.h Z_HAVE_UNISTD_H) - -if(MSVC) - set(CMAKE_DEBUG_POSTFIX "d") - add_definitions(-D_CRT_SECURE_NO_DEPRECATE) - add_definitions(-D_CRT_NONSTDC_NO_DEPRECATE) - include_directories(${CMAKE_CURRENT_SOURCE_DIR}) -endif() - -if(NOT CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR) - # If we're doing an out of source build and the user has a zconf.h - # in their source tree... - if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h) - message(STATUS "Renaming") - message(STATUS " ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h") - message(STATUS "to 'zconf.h.included' because this file is included with zlib") - message(STATUS "but CMake generates it automatically in the build directory.") - file(RENAME ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h.included) - endif() -endif() - -set(ZLIB_PC ${CMAKE_CURRENT_BINARY_DIR}/zlib.pc) -configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/zlib.pc.cmakein - ${ZLIB_PC} @ONLY) -configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h.cmakein - ${CMAKE_CURRENT_BINARY_DIR}/zconf.h @ONLY) -include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_SOURCE_DIR}) - - -#============================================================================ -# zlib -#============================================================================ - -set(ZLIB_PUBLIC_HDRS - ${CMAKE_CURRENT_BINARY_DIR}/zconf.h - zlib.h -) -set(ZLIB_PRIVATE_HDRS - crc32.h - deflate.h - gzguts.h - inffast.h - inffixed.h - inflate.h - inftrees.h - trees.h - zutil.h -) -set(ZLIB_SRCS - adler32.c - compress.c - crc32.c - deflate.c - gzclose.c - gzlib.c - gzread.c - gzwrite.c - inflate.c - infback.c - inftrees.c - inffast.c - trees.c - uncompr.c - zutil.c -) - -if(NOT MINGW) - set(ZLIB_SRCS ${ZLIB_SRCS} - win32/zlib1.rc # If present will override custom build rule below. - ) -endif() - -# parse the full version number from zlib.h and include in ZLIB_FULL_VERSION -file(READ ${CMAKE_CURRENT_SOURCE_DIR}/zlib.h _zlib_h_contents) -string(REGEX REPLACE ".*#define[ \t]+ZLIB_VERSION[ \t]+\"([-0-9A-Za-z.]+)\".*" - "\\1" ZLIB_FULL_VERSION ${_zlib_h_contents}) - -if(MINGW) - # This gets us DLL resource information when compiling on MinGW. - if(NOT CMAKE_RC_COMPILER) - SET(CMAKE_RC_COMPILER windres.exe) - endif() - - add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj - COMMAND ${CMAKE_RC_COMPILER} - -D GCC_WINDRES - -I ${CMAKE_CURRENT_SOURCE_DIR} - -I ${CMAKE_CURRENT_BINARY_DIR} - -o ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj - -i ${CMAKE_CURRENT_SOURCE_DIR}/win32/zlib1.rc) - set(ZLIB_SRCS ${ZLIB_SRCS} ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj) -endif(MINGW) - -if(BUILD_SHARED_LIBS) - add_library(zlib SHARED ${ZLIB_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS}) - add_library(zlibstatic STATIC ${ZLIB_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS}) - set_target_properties(zlib PROPERTIES DEFINE_SYMBOL ZLIB_DLL) - set_target_properties(zlib PROPERTIES SOVERSION 1) -else(BUILD_SHARED_LIBS) - add_library(zlib STATIC ${ZLIB_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS}) -endif(BUILD_SHARED_LIBS) - -if(NOT CYGWIN) - # This property causes shared libraries on Linux to have the full version - # encoded into their final filename. We disable this on Cygwin because - # it causes cygz-${ZLIB_FULL_VERSION}.dll to be created when cygz.dll - # seems to be the default. - # - # This has no effect with MSVC, on that platform the version info for - # the DLL comes from the resource file win32/zlib1.rc - set_target_properties(zlib PROPERTIES VERSION ${ZLIB_FULL_VERSION}) -endif() - -if(UNIX) - # On unix-like platforms the library is almost always called libz - set_target_properties(zlib PROPERTIES OUTPUT_NAME z) - if(BUILD_SHARED_LIBS) - set_target_properties(zlibstatic PROPERTIES OUTPUT_NAME z) - endif(BUILD_SHARED_LIBS) - set_target_properties(zlib PROPERTIES LINK_FLAGS "-Wl,--version-script,${CMAKE_CURRENT_SOURCE_DIR}/zlib.map") -elseif(BUILD_SHARED_LIBS AND WIN32) - # Creates zlib1.dll when building shared library version - set_target_properties(zlib PROPERTIES SUFFIX "1.dll") -endif() - -if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL ) - install(TARGETS zlib - RUNTIME DESTINATION "${INSTALL_BIN_DIR}" - ARCHIVE DESTINATION "${INSTALL_LIB_DIR}" - LIBRARY DESTINATION "${INSTALL_LIB_DIR}" ) - if(BUILD_SHARED_LIBS) - install(TARGETS zlibstatic - RUNTIME DESTINATION "${INSTALL_BIN_DIR}" - ARCHIVE DESTINATION "${INSTALL_LIB_DIR}" - LIBRARY DESTINATION "${INSTALL_LIB_DIR}" ) - endif(BUILD_SHARED_LIBS) -endif() -if(NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL ) - install(FILES ${ZLIB_PUBLIC_HDRS} DESTINATION "${INSTALL_INC_DIR}") -endif() -if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL ) - install(FILES zlib.3 DESTINATION "${INSTALL_MAN_DIR}/man3") -endif() -if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL ) - install(FILES ${ZLIB_PC} DESTINATION "${INSTALL_PKGCONFIG_DIR}") -endif() - -#============================================================================ -# Example binaries -#============================================================================ - -add_executable(example test/example.c) -target_link_libraries(example zlib) -add_test(example example) - -add_executable(minigzip test/minigzip.c) -target_link_libraries(minigzip zlib) - -if(HAVE_OFF64_T) - add_executable(example64 test/example.c) - target_link_libraries(example64 zlib) - set_target_properties(example64 PROPERTIES COMPILE_FLAGS "-D_FILE_OFFSET_BITS=64") - add_test(example64 example64) - - add_executable(minigzip64 test/minigzip.c) - target_link_libraries(minigzip64 zlib) - set_target_properties(minigzip64 PROPERTIES COMPILE_FLAGS "-D_FILE_OFFSET_BITS=64") -endif() diff --git a/depends/common/zlib/zlib.sha256 b/depends/common/zlib/zlib.sha256 new file mode 100644 index 000000000..ec1ba07f2 --- /dev/null +++ b/depends/common/zlib/zlib.sha256 @@ -0,0 +1 @@ +c3e5e9fdd5004dcb542feda5ee4f0ff0744628baf8ed2dd5d66f8ca1197cb1a1 diff --git a/depends/common/zlib/zlib.txt b/depends/common/zlib/zlib.txt index 91cd5ddbb..4bf364501 100644 --- a/depends/common/zlib/zlib.txt +++ b/depends/common/zlib/zlib.txt @@ -1 +1 @@ -zlib http://mirrors.xbmc.org/build-deps/sources/zlib-1.2.7.tar.gz \ No newline at end of file +zlib http://mirrors.kodi.tv/build-deps/sources/zlib-1.2.11.tar.gz diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index b8434cef2..4f9f4518b 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ diff --git a/pvr.iptvsimple/changelog.txt b/pvr.iptvsimple/changelog.txt index 7ca6c719e..04a4bdd14 100644 --- a/pvr.iptvsimple/changelog.txt +++ b/pvr.iptvsimple/changelog.txt @@ -1,3 +1,6 @@ +v3.5.5 +- Bump zlib to version 1.2.11 + v3.5.4 - Remove bundled rapidxml From 90a8d6f3b0b65ed3f61dfcbfbd4d75175688bec0 Mon Sep 17 00:00:00 2001 From: Attila Jakosa Date: Sun, 4 Nov 2018 07:24:56 +0000 Subject: [PATCH 097/100] [lang] automatic syntax corrections for the en_GB language file --- .../resources/language/resource.language.en_gb/strings.po | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pvr.iptvsimple/resources/language/resource.language.en_gb/strings.po b/pvr.iptvsimple/resources/language/resource.language.en_gb/strings.po index 7dff73367..11064619f 100644 --- a/pvr.iptvsimple/resources/language/resource.language.en_gb/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.en_gb/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" From 362c7e0705cb09328109b297ad2bfdcc15be95bb Mon Sep 17 00:00:00 2001 From: Attila Jakosa Date: Tue, 15 Jan 2019 11:22:58 +0000 Subject: [PATCH 098/100] [lang] updated language files from Transifex --- pvr.iptvsimple/addon.xml.in | 6 +++--- .../resources/language/resource.language.af_za/strings.po | 2 +- .../resources/language/resource.language.am_et/strings.po | 2 +- .../resources/language/resource.language.ar_sa/strings.po | 2 +- .../resources/language/resource.language.az_az/strings.po | 2 +- .../resources/language/resource.language.be_by/strings.po | 2 +- .../resources/language/resource.language.bg_bg/strings.po | 2 +- .../resources/language/resource.language.bs_ba/strings.po | 2 +- .../resources/language/resource.language.ca_es/strings.po | 2 +- .../resources/language/resource.language.cs_cz/strings.po | 6 +++--- .../resources/language/resource.language.cy_gb/strings.po | 2 +- .../resources/language/resource.language.da_dk/strings.po | 2 +- .../resources/language/resource.language.de_de/strings.po | 2 +- .../resources/language/resource.language.el_gr/strings.po | 2 +- .../resources/language/resource.language.en_au/strings.po | 2 +- .../resources/language/resource.language.en_nz/strings.po | 2 +- .../resources/language/resource.language.en_us/strings.po | 2 +- .../resources/language/resource.language.eo/strings.po | 2 +- .../resources/language/resource.language.es_ar/strings.po | 2 +- .../resources/language/resource.language.es_es/strings.po | 2 +- .../resources/language/resource.language.es_mx/strings.po | 2 +- .../resources/language/resource.language.et_ee/strings.po | 2 +- .../resources/language/resource.language.eu_es/strings.po | 2 +- .../resources/language/resource.language.fa_af/strings.po | 2 +- .../resources/language/resource.language.fa_ir/strings.po | 2 +- .../resources/language/resource.language.fi_fi/strings.po | 2 +- .../resources/language/resource.language.fo_fo/strings.po | 2 +- .../resources/language/resource.language.fr_ca/strings.po | 2 +- .../resources/language/resource.language.fr_fr/strings.po | 2 +- .../resources/language/resource.language.gl_es/strings.po | 2 +- .../resources/language/resource.language.he_il/strings.po | 2 +- .../resources/language/resource.language.hi_in/strings.po | 2 +- .../resources/language/resource.language.hr_hr/strings.po | 2 +- .../resources/language/resource.language.hu_hu/strings.po | 2 +- .../resources/language/resource.language.hy_am/strings.po | 2 +- .../resources/language/resource.language.id_id/strings.po | 2 +- .../resources/language/resource.language.is_is/strings.po | 2 +- .../resources/language/resource.language.it_it/strings.po | 2 +- .../resources/language/resource.language.ja_jp/strings.po | 2 +- .../resources/language/resource.language.ko_kr/strings.po | 2 +- .../resources/language/resource.language.lt_lt/strings.po | 2 +- .../resources/language/resource.language.lv_lv/strings.po | 2 +- .../resources/language/resource.language.mi/strings.po | 2 +- .../resources/language/resource.language.mk_mk/strings.po | 2 +- .../resources/language/resource.language.ml_in/strings.po | 2 +- .../resources/language/resource.language.mn_mn/strings.po | 2 +- .../resources/language/resource.language.ms_my/strings.po | 2 +- .../resources/language/resource.language.mt_mt/strings.po | 2 +- .../resources/language/resource.language.my_mm/strings.po | 2 +- .../resources/language/resource.language.nb_no/strings.po | 2 +- .../resources/language/resource.language.nl_nl/strings.po | 2 +- .../resources/language/resource.language.pl_pl/strings.po | 2 +- .../resources/language/resource.language.pt_br/strings.po | 2 +- .../resources/language/resource.language.pt_pt/strings.po | 2 +- .../resources/language/resource.language.ro_ro/strings.po | 2 +- .../resources/language/resource.language.ru_ru/strings.po | 2 +- .../resources/language/resource.language.si_lk/strings.po | 2 +- .../resources/language/resource.language.sk_sk/strings.po | 2 +- .../resources/language/resource.language.sl_si/strings.po | 2 +- .../resources/language/resource.language.sq_al/strings.po | 2 +- .../resources/language/resource.language.sr_rs/strings.po | 2 +- .../language/resource.language.sr_rs@latin/strings.po | 2 +- .../resources/language/resource.language.sv_se/strings.po | 2 +- .../resources/language/resource.language.szl/strings.po | 2 +- .../resources/language/resource.language.ta_in/strings.po | 2 +- .../resources/language/resource.language.te_in/strings.po | 2 +- .../resources/language/resource.language.tg_tj/strings.po | 2 +- .../resources/language/resource.language.th_th/strings.po | 2 +- .../resources/language/resource.language.tr_tr/strings.po | 2 +- .../resources/language/resource.language.uk_ua/strings.po | 2 +- .../resources/language/resource.language.uz_uz/strings.po | 2 +- .../resources/language/resource.language.vi_vn/strings.po | 2 +- .../resources/language/resource.language.zh_cn/strings.po | 2 +- .../resources/language/resource.language.zh_tw/strings.po | 2 +- 74 files changed, 78 insertions(+), 78 deletions(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index 4f9f4518b..4aaa1f282 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ @@ -13,7 +13,7 @@ IPTV dəstəyi üçün Kodi PVR əlavəsini yükləyin. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Добавка за ПВР за поддръжка на IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home Complement PVR de Kodi per al suport d'IPTV https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home - Doplněk do Kodi pro nahrávání (PVR) z IPTV. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home + IPTV PVR doplněk pro Kodi. 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 Kodi PVR Addon für IPTV Unterstützung. https://github.com/afedchin/Kodi-addon-iptvsimple/wiki/IPTV-Simple-Home @@ -111,7 +111,7 @@ Hierdie is onstabiele sagteware! Die outeurs is op geen manier verantwoordelik vir gefaalde spele, inkorrekte EPG tye, vermorsde ure, of enige ander ongewensde effekte. Тази програма е нестабилна! Авторите не носят отговорност за неуспешно възпроизвеждане, некоректни часове в електронния програмен справочник, пропиляното време и други нежелани ефекти. Aquest programari és inestable! Els autors no es fan responsables de reproduccions fallides, horaris incorrectes a la guia electrònica de programació (EPG), hores perdudes o qualsevol altre efecte no desitjat. - Tento software není stabilní! Autoři nejsou žádným způsobem zodpovědní za neúspěšná nahrávání, chybné časy televizního programu, ztracený čas nebo jakékoliv jiné nežádoucí výsledky… + Tento software není stabilní! Autoři nejsou žádným způsobem zodpovědní za neúspěšná přehrávání, chybné časy televizního programu, ztracený čas nebo jakékoliv jiné nežádoucí efekty. Mae'r feddalwedd hon yn fregus! Nid yw'r awduron yn gyfrifol mewn unrhyw ffordd am fethu recordio, amseru gwallus, oriau wedi eu gwastraffu nac effeithiau annymunol eraill. Dette er ustabil software! Ophavsmændene er på ingen måde ansvarlig for mislykkede afspilninger, forkerte EPG tider, spildte timer, eller andre bivirkninger. Dies ist instabile Software! Die Autoren sind in keiner Weise verantwortlich für fehlgeschlagene Wiedergaben, falsche EPG Zeiten, verschwendete Zeit oder unerwünschte Effekte jeglicher Art. diff --git a/pvr.iptvsimple/resources/language/resource.language.af_za/strings.po b/pvr.iptvsimple/resources/language/resource.language.af_za/strings.po index 59ceb5c68..4fdc04210 100644 --- a/pvr.iptvsimple/resources/language/resource.language.af_za/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.af_za/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.am_et/strings.po b/pvr.iptvsimple/resources/language/resource.language.am_et/strings.po index 8dd618e22..471bd9794 100644 --- a/pvr.iptvsimple/resources/language/resource.language.am_et/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.am_et/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.ar_sa/strings.po b/pvr.iptvsimple/resources/language/resource.language.ar_sa/strings.po index 335493759..373ff5779 100644 --- a/pvr.iptvsimple/resources/language/resource.language.ar_sa/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.ar_sa/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.az_az/strings.po b/pvr.iptvsimple/resources/language/resource.language.az_az/strings.po index 4fb23d2d5..1a40898f5 100644 --- a/pvr.iptvsimple/resources/language/resource.language.az_az/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.az_az/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.be_by/strings.po b/pvr.iptvsimple/resources/language/resource.language.be_by/strings.po index d18e3b03c..d55ef08cb 100644 --- a/pvr.iptvsimple/resources/language/resource.language.be_by/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.be_by/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.bg_bg/strings.po b/pvr.iptvsimple/resources/language/resource.language.bg_bg/strings.po index e52e6c080..7b0d457b6 100644 --- a/pvr.iptvsimple/resources/language/resource.language.bg_bg/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.bg_bg/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.bs_ba/strings.po b/pvr.iptvsimple/resources/language/resource.language.bs_ba/strings.po index ccfd9da9e..52566eb4c 100644 --- a/pvr.iptvsimple/resources/language/resource.language.bs_ba/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.bs_ba/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.ca_es/strings.po b/pvr.iptvsimple/resources/language/resource.language.ca_es/strings.po index 4f522cc21..3dc58b83c 100644 --- a/pvr.iptvsimple/resources/language/resource.language.ca_es/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.ca_es/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.cs_cz/strings.po b/pvr.iptvsimple/resources/language/resource.language.cs_cz/strings.po index 94092f986..e912747a7 100644 --- a/pvr.iptvsimple/resources/language/resource.language.cs_cz/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.cs_cz/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" @@ -26,7 +26,7 @@ msgstr "Místní cesta (včetně místní sítě)" msgctxt "#30002" msgid "Remote Path (Internet address)" -msgstr "Popis vzdáleného umístění (internetová adresa)" +msgstr "Cesta vzdáleného umístění (Internetová adresa)" msgctxt "#30010" msgid "General" @@ -34,7 +34,7 @@ msgstr "Obecné" msgctxt "#30011" msgid "M3U Play List Path" -msgstr "Popis umístění M3U seznamu stop" +msgstr "Cesta umístění M3U seznamu stop" msgctxt "#30012" msgid "M3U Play List URL" diff --git a/pvr.iptvsimple/resources/language/resource.language.cy_gb/strings.po b/pvr.iptvsimple/resources/language/resource.language.cy_gb/strings.po index 0af69fee2..cd0101e2a 100644 --- a/pvr.iptvsimple/resources/language/resource.language.cy_gb/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.cy_gb/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.da_dk/strings.po b/pvr.iptvsimple/resources/language/resource.language.da_dk/strings.po index 2997f602d..2c00e8589 100644 --- a/pvr.iptvsimple/resources/language/resource.language.da_dk/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.da_dk/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.de_de/strings.po b/pvr.iptvsimple/resources/language/resource.language.de_de/strings.po index e36878730..56ab81cf1 100644 --- a/pvr.iptvsimple/resources/language/resource.language.de_de/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.de_de/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.el_gr/strings.po b/pvr.iptvsimple/resources/language/resource.language.el_gr/strings.po index d726cc0b6..baec770ae 100644 --- a/pvr.iptvsimple/resources/language/resource.language.el_gr/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.el_gr/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.en_au/strings.po b/pvr.iptvsimple/resources/language/resource.language.en_au/strings.po index 3b758512d..3f65c2864 100644 --- a/pvr.iptvsimple/resources/language/resource.language.en_au/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.en_au/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.en_nz/strings.po b/pvr.iptvsimple/resources/language/resource.language.en_nz/strings.po index ca3219a1f..6ae258c92 100644 --- a/pvr.iptvsimple/resources/language/resource.language.en_nz/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.en_nz/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.en_us/strings.po b/pvr.iptvsimple/resources/language/resource.language.en_us/strings.po index 13acf2f95..99a321049 100644 --- a/pvr.iptvsimple/resources/language/resource.language.en_us/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.en_us/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.eo/strings.po b/pvr.iptvsimple/resources/language/resource.language.eo/strings.po index 3fd90fb22..3b613b310 100644 --- a/pvr.iptvsimple/resources/language/resource.language.eo/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.eo/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.es_ar/strings.po b/pvr.iptvsimple/resources/language/resource.language.es_ar/strings.po index 51030553d..e1589efa8 100644 --- a/pvr.iptvsimple/resources/language/resource.language.es_ar/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.es_ar/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.es_es/strings.po b/pvr.iptvsimple/resources/language/resource.language.es_es/strings.po index 68c3ff619..8c44a5627 100644 --- a/pvr.iptvsimple/resources/language/resource.language.es_es/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.es_es/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.es_mx/strings.po b/pvr.iptvsimple/resources/language/resource.language.es_mx/strings.po index c91ebd10d..21cdeccbe 100644 --- a/pvr.iptvsimple/resources/language/resource.language.es_mx/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.es_mx/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.et_ee/strings.po b/pvr.iptvsimple/resources/language/resource.language.et_ee/strings.po index add59b361..04a0c00d1 100644 --- a/pvr.iptvsimple/resources/language/resource.language.et_ee/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.et_ee/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.eu_es/strings.po b/pvr.iptvsimple/resources/language/resource.language.eu_es/strings.po index d49b6c3c4..ab05c1fca 100644 --- a/pvr.iptvsimple/resources/language/resource.language.eu_es/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.eu_es/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.fa_af/strings.po b/pvr.iptvsimple/resources/language/resource.language.fa_af/strings.po index 99c9d021f..fa60107d6 100644 --- a/pvr.iptvsimple/resources/language/resource.language.fa_af/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.fa_af/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.fa_ir/strings.po b/pvr.iptvsimple/resources/language/resource.language.fa_ir/strings.po index 777d7c0ff..34a932ffe 100644 --- a/pvr.iptvsimple/resources/language/resource.language.fa_ir/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.fa_ir/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.fi_fi/strings.po b/pvr.iptvsimple/resources/language/resource.language.fi_fi/strings.po index d7615b3cd..dd6309641 100644 --- a/pvr.iptvsimple/resources/language/resource.language.fi_fi/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.fi_fi/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.fo_fo/strings.po b/pvr.iptvsimple/resources/language/resource.language.fo_fo/strings.po index 5f4b92d6a..40041e23e 100644 --- a/pvr.iptvsimple/resources/language/resource.language.fo_fo/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.fo_fo/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.fr_ca/strings.po b/pvr.iptvsimple/resources/language/resource.language.fr_ca/strings.po index 08e20c885..4370f3b0f 100644 --- a/pvr.iptvsimple/resources/language/resource.language.fr_ca/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.fr_ca/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.fr_fr/strings.po b/pvr.iptvsimple/resources/language/resource.language.fr_fr/strings.po index 95a86c761..f37998248 100644 --- a/pvr.iptvsimple/resources/language/resource.language.fr_fr/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.fr_fr/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.gl_es/strings.po b/pvr.iptvsimple/resources/language/resource.language.gl_es/strings.po index 52dfaac5d..16dbeb8e4 100644 --- a/pvr.iptvsimple/resources/language/resource.language.gl_es/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.gl_es/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.he_il/strings.po b/pvr.iptvsimple/resources/language/resource.language.he_il/strings.po index d75a9e757..9a295cbeb 100644 --- a/pvr.iptvsimple/resources/language/resource.language.he_il/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.he_il/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.hi_in/strings.po b/pvr.iptvsimple/resources/language/resource.language.hi_in/strings.po index 7c0aa1dae..b59adffff 100644 --- a/pvr.iptvsimple/resources/language/resource.language.hi_in/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.hi_in/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.hr_hr/strings.po b/pvr.iptvsimple/resources/language/resource.language.hr_hr/strings.po index e980c3fcb..e3f518c01 100644 --- a/pvr.iptvsimple/resources/language/resource.language.hr_hr/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.hr_hr/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.hu_hu/strings.po b/pvr.iptvsimple/resources/language/resource.language.hu_hu/strings.po index a6ebf4701..87447d544 100644 --- a/pvr.iptvsimple/resources/language/resource.language.hu_hu/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.hu_hu/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.hy_am/strings.po b/pvr.iptvsimple/resources/language/resource.language.hy_am/strings.po index 32434f5ea..9d3d5c636 100644 --- a/pvr.iptvsimple/resources/language/resource.language.hy_am/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.hy_am/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.id_id/strings.po b/pvr.iptvsimple/resources/language/resource.language.id_id/strings.po index e08d83a20..08fbf86a5 100644 --- a/pvr.iptvsimple/resources/language/resource.language.id_id/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.id_id/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.is_is/strings.po b/pvr.iptvsimple/resources/language/resource.language.is_is/strings.po index 4fd960cce..0d54762b2 100644 --- a/pvr.iptvsimple/resources/language/resource.language.is_is/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.is_is/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.it_it/strings.po b/pvr.iptvsimple/resources/language/resource.language.it_it/strings.po index 24928a74c..56d3a63b3 100644 --- a/pvr.iptvsimple/resources/language/resource.language.it_it/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.it_it/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.ja_jp/strings.po b/pvr.iptvsimple/resources/language/resource.language.ja_jp/strings.po index 90b933bdc..fb8c6165d 100644 --- a/pvr.iptvsimple/resources/language/resource.language.ja_jp/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.ja_jp/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.ko_kr/strings.po b/pvr.iptvsimple/resources/language/resource.language.ko_kr/strings.po index 0de3715d6..648206831 100644 --- a/pvr.iptvsimple/resources/language/resource.language.ko_kr/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.ko_kr/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.lt_lt/strings.po b/pvr.iptvsimple/resources/language/resource.language.lt_lt/strings.po index bb8e4a04e..6f0cb078c 100644 --- a/pvr.iptvsimple/resources/language/resource.language.lt_lt/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.lt_lt/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.lv_lv/strings.po b/pvr.iptvsimple/resources/language/resource.language.lv_lv/strings.po index d9b7c1659..5ccf3d6f2 100644 --- a/pvr.iptvsimple/resources/language/resource.language.lv_lv/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.lv_lv/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.mi/strings.po b/pvr.iptvsimple/resources/language/resource.language.mi/strings.po index 9d44a7783..382ae9aa2 100644 --- a/pvr.iptvsimple/resources/language/resource.language.mi/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.mi/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.mk_mk/strings.po b/pvr.iptvsimple/resources/language/resource.language.mk_mk/strings.po index fc1f7d134..1cdfea7db 100644 --- a/pvr.iptvsimple/resources/language/resource.language.mk_mk/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.mk_mk/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.ml_in/strings.po b/pvr.iptvsimple/resources/language/resource.language.ml_in/strings.po index c7da7796d..dddb000b0 100644 --- a/pvr.iptvsimple/resources/language/resource.language.ml_in/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.ml_in/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.mn_mn/strings.po b/pvr.iptvsimple/resources/language/resource.language.mn_mn/strings.po index 80ae19d53..2184fd2eb 100644 --- a/pvr.iptvsimple/resources/language/resource.language.mn_mn/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.mn_mn/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.ms_my/strings.po b/pvr.iptvsimple/resources/language/resource.language.ms_my/strings.po index fd194deaf..d99a75bf2 100644 --- a/pvr.iptvsimple/resources/language/resource.language.ms_my/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.ms_my/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.mt_mt/strings.po b/pvr.iptvsimple/resources/language/resource.language.mt_mt/strings.po index 51e9e35b2..ff6a752fe 100644 --- a/pvr.iptvsimple/resources/language/resource.language.mt_mt/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.mt_mt/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.my_mm/strings.po b/pvr.iptvsimple/resources/language/resource.language.my_mm/strings.po index ad701131e..ab47a18ba 100644 --- a/pvr.iptvsimple/resources/language/resource.language.my_mm/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.my_mm/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.nb_no/strings.po b/pvr.iptvsimple/resources/language/resource.language.nb_no/strings.po index 0823b79d5..41ca51f32 100644 --- a/pvr.iptvsimple/resources/language/resource.language.nb_no/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.nb_no/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.nl_nl/strings.po b/pvr.iptvsimple/resources/language/resource.language.nl_nl/strings.po index f00d60847..91a8da0e5 100644 --- a/pvr.iptvsimple/resources/language/resource.language.nl_nl/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.nl_nl/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.pl_pl/strings.po b/pvr.iptvsimple/resources/language/resource.language.pl_pl/strings.po index 4f4e7abf5..8dfed18c4 100644 --- a/pvr.iptvsimple/resources/language/resource.language.pl_pl/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.pl_pl/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.pt_br/strings.po b/pvr.iptvsimple/resources/language/resource.language.pt_br/strings.po index 20732cb95..df5629c2c 100644 --- a/pvr.iptvsimple/resources/language/resource.language.pt_br/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.pt_br/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.pt_pt/strings.po b/pvr.iptvsimple/resources/language/resource.language.pt_pt/strings.po index e4a4f79d8..0aa13ceb6 100644 --- a/pvr.iptvsimple/resources/language/resource.language.pt_pt/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.pt_pt/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.ro_ro/strings.po b/pvr.iptvsimple/resources/language/resource.language.ro_ro/strings.po index c047d12f6..d4fa3e7e7 100644 --- a/pvr.iptvsimple/resources/language/resource.language.ro_ro/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.ro_ro/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.ru_ru/strings.po b/pvr.iptvsimple/resources/language/resource.language.ru_ru/strings.po index 477b71068..108b46caf 100644 --- a/pvr.iptvsimple/resources/language/resource.language.ru_ru/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.ru_ru/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.si_lk/strings.po b/pvr.iptvsimple/resources/language/resource.language.si_lk/strings.po index 3a63790fa..0d1a1f638 100644 --- a/pvr.iptvsimple/resources/language/resource.language.si_lk/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.si_lk/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.sk_sk/strings.po b/pvr.iptvsimple/resources/language/resource.language.sk_sk/strings.po index 4617a0cbe..2c0e45a19 100644 --- a/pvr.iptvsimple/resources/language/resource.language.sk_sk/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.sk_sk/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.sl_si/strings.po b/pvr.iptvsimple/resources/language/resource.language.sl_si/strings.po index ff9539c71..6eb13cd65 100644 --- a/pvr.iptvsimple/resources/language/resource.language.sl_si/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.sl_si/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.sq_al/strings.po b/pvr.iptvsimple/resources/language/resource.language.sq_al/strings.po index ead8f4acb..b432c4d3e 100644 --- a/pvr.iptvsimple/resources/language/resource.language.sq_al/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.sq_al/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.sr_rs/strings.po b/pvr.iptvsimple/resources/language/resource.language.sr_rs/strings.po index 5e3223bbd..caa608e94 100644 --- a/pvr.iptvsimple/resources/language/resource.language.sr_rs/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.sr_rs/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.sr_rs@latin/strings.po b/pvr.iptvsimple/resources/language/resource.language.sr_rs@latin/strings.po index f37872966..999fac938 100644 --- a/pvr.iptvsimple/resources/language/resource.language.sr_rs@latin/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.sr_rs@latin/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.sv_se/strings.po b/pvr.iptvsimple/resources/language/resource.language.sv_se/strings.po index 85f972ad7..db6d1a7c6 100644 --- a/pvr.iptvsimple/resources/language/resource.language.sv_se/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.sv_se/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.szl/strings.po b/pvr.iptvsimple/resources/language/resource.language.szl/strings.po index b4f466db5..82b25224b 100644 --- a/pvr.iptvsimple/resources/language/resource.language.szl/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.szl/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.ta_in/strings.po b/pvr.iptvsimple/resources/language/resource.language.ta_in/strings.po index d30fa4b8d..a268832a9 100644 --- a/pvr.iptvsimple/resources/language/resource.language.ta_in/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.ta_in/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.te_in/strings.po b/pvr.iptvsimple/resources/language/resource.language.te_in/strings.po index 7571372cb..8ef4887eb 100644 --- a/pvr.iptvsimple/resources/language/resource.language.te_in/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.te_in/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.tg_tj/strings.po b/pvr.iptvsimple/resources/language/resource.language.tg_tj/strings.po index 3406fe9d2..9a4f571b7 100644 --- a/pvr.iptvsimple/resources/language/resource.language.tg_tj/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.tg_tj/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.th_th/strings.po b/pvr.iptvsimple/resources/language/resource.language.th_th/strings.po index 14aacd8a8..8f78334d8 100644 --- a/pvr.iptvsimple/resources/language/resource.language.th_th/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.th_th/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.tr_tr/strings.po b/pvr.iptvsimple/resources/language/resource.language.tr_tr/strings.po index 81fb01c13..479b4c1c6 100644 --- a/pvr.iptvsimple/resources/language/resource.language.tr_tr/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.tr_tr/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.uk_ua/strings.po b/pvr.iptvsimple/resources/language/resource.language.uk_ua/strings.po index 1a6e80e9a..6e20a6502 100644 --- a/pvr.iptvsimple/resources/language/resource.language.uk_ua/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.uk_ua/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.uz_uz/strings.po b/pvr.iptvsimple/resources/language/resource.language.uz_uz/strings.po index 7b74579c6..17a1d3283 100644 --- a/pvr.iptvsimple/resources/language/resource.language.uz_uz/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.uz_uz/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.vi_vn/strings.po b/pvr.iptvsimple/resources/language/resource.language.vi_vn/strings.po index a18fd4070..530d0f2bd 100644 --- a/pvr.iptvsimple/resources/language/resource.language.vi_vn/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.vi_vn/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.zh_cn/strings.po b/pvr.iptvsimple/resources/language/resource.language.zh_cn/strings.po index 7f0dc86e0..d09663937 100644 --- a/pvr.iptvsimple/resources/language/resource.language.zh_cn/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.zh_cn/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" diff --git a/pvr.iptvsimple/resources/language/resource.language.zh_tw/strings.po b/pvr.iptvsimple/resources/language/resource.language.zh_tw/strings.po index 7a25df5d2..d0ddce893 100644 --- a/pvr.iptvsimple/resources/language/resource.language.zh_tw/strings.po +++ b/pvr.iptvsimple/resources/language/resource.language.zh_tw/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\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" From aad9d007c9cd8f10a188f758bdb3ff1e0a523869 Mon Sep 17 00:00:00 2001 From: vpeter4 Date: Wed, 31 Oct 2018 16:55:49 +0100 Subject: [PATCH 099/100] Fix build version shown in Kodi from Version: IPTV_VERSION to Version: 3.5.5 --- CMakeLists.txt | 3 +++ pvr.iptvsimple/addon.xml.in | 2 +- pvr.iptvsimple/changelog.txt | 3 +++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 64ed74c8e..e1686fb33 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -29,6 +29,9 @@ set(IPTV_SOURCES src/client.cpp set(IPTV_HEADERS src/client.h src/PVRIptvData.h) +addon_version(pvr.iptvsimple IPTV) +add_definitions(-DIPTV_VERSION=${IPTV_VERSION}) + build_addon(pvr.iptvsimple IPTV DEPLIBS) include(CPack) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index 4f9f4518b..b58279609 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ diff --git a/pvr.iptvsimple/changelog.txt b/pvr.iptvsimple/changelog.txt index 04a4bdd14..4c445c428 100644 --- a/pvr.iptvsimple/changelog.txt +++ b/pvr.iptvsimple/changelog.txt @@ -1,3 +1,6 @@ +v3.5.6 +- Correctly show build version in Kodi + v3.5.5 - Bump zlib to version 1.2.11 From 1ad9c3471ecd261f6aae9ae5c6c5f502d0ef526a Mon Sep 17 00:00:00 2001 From: Kai Sommerfeld Date: Tue, 15 Jan 2019 14:42:53 +0100 Subject: [PATCH 100/100] Fix version number/changelog. --- pvr.iptvsimple/addon.xml.in | 2 +- pvr.iptvsimple/changelog.txt | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/pvr.iptvsimple/addon.xml.in b/pvr.iptvsimple/addon.xml.in index 4aaa1f282..a5b6af016 100644 --- a/pvr.iptvsimple/addon.xml.in +++ b/pvr.iptvsimple/addon.xml.in @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ diff --git a/pvr.iptvsimple/changelog.txt b/pvr.iptvsimple/changelog.txt index 4c445c428..6fa5db94a 100644 --- a/pvr.iptvsimple/changelog.txt +++ b/pvr.iptvsimple/changelog.txt @@ -1,6 +1,10 @@ -v3.5.6 + +v3.5.7 - Correctly show build version in Kodi +v3.5.6 +- Updated language files from Transifex + v3.5.5 - Bump zlib to version 1.2.11