diff options
85 files changed, 884 insertions, 177 deletions
diff --git a/addons/repository.xbmc.org/addon.xml b/addons/repository.xbmc.org/addon.xml index e9e7a2d8df..436d5e5c97 100644 --- a/addons/repository.xbmc.org/addon.xml +++ b/addons/repository.xbmc.org/addon.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <addon id="repository.xbmc.org" name="Kodi Add-on repository" - version="3.2.4" + version="3.2.5" provider-name="Team Kodi"> <requires> <import addon="xbmc.addon" version="12.0.0"/> @@ -122,7 +122,7 @@ <description lang="sl_SI">Prenos in namestitev dodatkov iz uradnega skladišča Kodi.tv.[CR] Z uporabo uradnega skladišča, boste lahko izkoristili hitrejšo povezavo, ki bo izbrana glede na vašo lokacijo.[CR] Vsi dodatki tega skladišča so bili osnovno stestirani, če pa boste našli pokvarjen ali nedelujoč dodatek, to sporočite ekipi Kodi, da bomo lahko odpravili napake.</description> <description lang="sr_RS">Преузмите и инсталирајте додатке из Званичног Kodi.tv спремишта додатака.[CR] Коришћењем званичног Спремишта моћићете да искористите предности нашег сервиса копија фајлова који ће вам помоћи приликом бржег преузимања из региона ближег вашој локацији.[CR] Сви додаци у овом спремишту прошли су основно тестирање, у случају да пронађете неисправан додатак молимо вас да то пријавите Kodi тиму који ће затим предузети неопходне мере.</description> <description lang="sr_RS@latin">Preuzmi i instaliraj dodatne programe iz Zvaničnog Kodi.tv spremišta za dodatne programe.[CR] Korišćenjem zvaničnog Spremišta moći ćete da iskoristite prednosti našeg servisa kopija fajlova koji će vam pomoći prilikom bržeg preuzimanja iz regiona bližeg vašoj lokaciji.[CR] Svi dodatni programi u ovom spremištu prošli su osnovno testiranje, u slučaju da pronađete neispravan dodatni program molimo vas da to prijavite Kodi timu koji će zatim preduzeti neophodne mere.</description> - <description lang="sv_SE">Ladda ner och installera tillägg från det officiella Kodi.tv tilläggsförrådet.[CR] Genom att använda det officiella förrådet kommer du att få fördelen att kunna använda vår omfattande spegeltjänst som kommer att hjälpa dig till snabbare nedladdningar från en plats nära dig.[CR] Alla tillägg i detta förråd har genomgått grundläggande tester. Hittar du ett trasigt eller icke fungerande tillägg, vänligen meddela detta till Team Kodi så att vi kan vidta nödvändiga åtgärder.</description> + <description lang="sv_SE">Hämta och installera tillägg från det officiella Kodi.tv tilläggsförrådet.[CR] Genom att använda det officiella förrådet kommer du att få fördelen att kunna använda vår omfattande spegeltjänst som kommer att hjälpa dig till snabbare hämtningar från en plats nära dig.[CR] Alla tillägg i detta förråd har genomgått grundläggande tester. Hittar du ett trasigt eller icke fungerande tillägg, vänligen meddela detta till Team Kodi så att vi kan vidta nödvändiga åtgärder.</description> <description lang="szl">Sebiyrej i insztaluj przidŏwki z ôficjalnygo repozytoriōm Kodi.tv.[CR] Przi Używaniu ôficjalnygo repozytoriōm używŏsz serwerōw zdrzadłowych, rozsianych po calistym świecie. Ôbiyrany je tyn, kery je nŏjbliżyj ciebie, co istuje srogõ wartkość skuplowaniŏ.[CR]Wszyjske przidŏwki w tym repozytoriōm sōm testowane, ale mogōm pokŏzać sie popszniōne. Zgłoś wtynczŏs feler, coby ekipa Kodi mogła go sprŏwić.</description> <description lang="tg_TJ">Барномаҳои иловагиро аз анбори нармафзори Kodi.tv боргирӣ кунед ва насб намоед.[CR] Аз истифодаи анбори нармафзори расмии мо ба шумо имконият пайдо мешавад, ки тавонед шароити мусофидро аз хидмати оинаи файлии васеъ ба даст оред ва нармафзори лозимиро аз сервери минтакаи ба шумо наздиктар бо суръати баланд боргирӣ кунед.[CR] Ҳамаи барномаҳо аз анбори нармафзори мо дар ҳолати санҷишӣ мебошанд, бинобар ин агар ягон барномаи иловагии нуқсондор ё вайроншударо ёбед, лутфан дар бораи он барнома ва нуқсон пайдошуда ба гурӯҳи кории Kodi гузориш диҳед, то ин ки мо тавонем ҳамаи камбудиҳои барномаҳои моро ҳал кунем.</description> <description lang="th_TH">ดาวน์โหลดและติดตั้งส่วนเสริม จากแหล่งข้อมูลโปรแกรมของ Kodi.tv อย่างเป็นทางการ.[CR] โดยการใช้งานแหล่งข้อมูลโปรแกรมอย่างเป็นทางการ คุณสามารถใช้ประโยชน์จากบริการแฟ้มมิเรอร์ที่กว้างขวางของเรา ที่จะช่วยให้การดาวน์โหลดของคุณเร็วขึ้นจากภูมิภาคที่ใกล้ที่สุด.[CR] ส่วนเสริม ทั้งหมดในแหล่งเก็บข้อมูลนี้ อยู่ภายใต้การทดสอบขั้นพื้นฐานแล้ว ถ้าคุณพบส่วนเสริมที่เสียหายหรือไม่ทำงาน กรุณาแจ้งทีมงาน Kodi เพื่อให้เราสามารถดำเนินการใด ๆ ที่จำเป็น.</description> diff --git a/addons/resource.language.en_gb/resources/strings.po b/addons/resource.language.en_gb/resources/strings.po index 6ef9804027..c12198109c 100644 --- a/addons/resource.language.en_gb/resources/strings.po +++ b/addons/resource.language.en_gb/resources/strings.po @@ -2039,14 +2039,16 @@ msgctxt "#434" msgid "From {0:s} at {1:d} {2:s}" msgstr "" +#. Headline of a dialog that pops up when a user tries to play a video that is located on an optical disc (Blu-ray, DVD) but the current KODI device doesn't have the according drive #: xbmc/Application.cpp msgctxt "#435" msgid "No optical disc drive detected" msgstr "" -#: xbmc/Application.cpp +#. Message body of a dialog that pops up when a user tries to play a video that is located on an optical disc (Blu-ray, DVD) but the current KODI device doesn't have the according drive +#: xbmc/storage/MediaManager.cpp msgctxt "#436" -msgid "You need an optical disc drive to play this video" +msgid "This video is stored on an optical disc (e.g. DVD, Blu-ray) and cannot be played as your device does not have an appropriate drive." msgstr "" msgctxt "#437" @@ -9597,7 +9599,11 @@ msgctxt "#19071" msgid "Update interval" msgstr "" -#empty string with id 19072 +#. Dialog warning text for invalid timer setting +#: xbmc/pvr/dialogs/GUIDialogPVRTimerSettings.cpp +msgctxt "#19072" +msgid "In order to add/update a timer the end date and time must be greater than the start date and time." +msgstr "" #. pvr settings "delay channel switch" setting label #: system/settings/settings.xml diff --git a/addons/screensaver.xbmc.builtin.dim/addon.xml b/addons/screensaver.xbmc.builtin.dim/addon.xml index 6b56735a18..9549c320cd 100644 --- a/addons/screensaver.xbmc.builtin.dim/addon.xml +++ b/addons/screensaver.xbmc.builtin.dim/addon.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <addon id="screensaver.xbmc.builtin.dim" name="Dim" - version="1.0.62" + version="1.0.63" provider-name="Team Kodi"> <extension point="xbmc.ui.screensaver" library="dummy.so"/> <extension point="xbmc.addon.metadata"> @@ -26,7 +26,7 @@ <summary lang="et_EE">Ekraanisäästja, mis hämardab ekraani</summary> <summary lang="eu_ES">Pantaila iluntzen duen pantaila-babeslea</summary> <summary lang="fa_IR">محافظ تاریک کننده صفحه نمایش</summary> - <summary lang="fi_FI">Ruudun himmennys</summary> + <summary lang="fi_FI">Näytönsäästäjä, joka himmentää näytön</summary> <summary lang="fr_CA">Un économiseur d’écran qui baisse la luminosité de votre écran</summary> <summary lang="fr_FR">Un économiseur qui assombrit l'écran</summary> <summary lang="gl_ES">O protector de pantalla atenúa a súa pantalla</summary> @@ -36,7 +36,7 @@ <summary lang="id_ID">Penyelamat layar yang meredupkan layar Anda</summary> <summary lang="is_IS">Skjáhvíla sem lækkar birtustigið á skjánum</summary> <summary lang="it_IT">Salvaschermo che oscura lo schermo</summary> - <summary lang="ja_JP">画面を薄暗くするスクリーンセーバー</summary> + <summary lang="ja_JP">スクリーンセーバー モード</summary> <summary lang="ko_KR">화면을 어둡게 하는 화면 보호기</summary> <summary lang="lt_LT">Ekrano vaizdas pritemdantis foną Jūsų ekrane</summary> <summary lang="lv_LV">Ekrānsaudzētājs, kas aptumšo jūsu ekrānu</summary> diff --git a/addons/screensaver.xbmc.builtin.dim/resources/language/resource.language.bg_bg/strings.po b/addons/screensaver.xbmc.builtin.dim/resources/language/resource.language.bg_bg/strings.po index 538ca96e4e..d9d14adc71 100644 --- a/addons/screensaver.xbmc.builtin.dim/resources/language/resource.language.bg_bg/strings.po +++ b/addons/screensaver.xbmc.builtin.dim/resources/language/resource.language.bg_bg/strings.po @@ -16,6 +16,14 @@ msgstr "" "Language: bg_BG\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +msgctxt "#30000" +msgid "Brightness level" +msgstr "Ниво на яркост" + +msgctxt "#30001" +msgid "Level in percent of how strongly the screen remains illuminated." +msgstr "Ниво (в проценти) на това колко осветен да остане екранът." + msgctxt "#30002" msgid "Preferences" msgstr "Предпочитания" diff --git a/addons/screensaver.xbmc.builtin.dim/resources/language/resource.language.en_us/strings.po b/addons/screensaver.xbmc.builtin.dim/resources/language/resource.language.en_us/strings.po index 0a077a735e..1b6ba4630a 100644 --- a/addons/screensaver.xbmc.builtin.dim/resources/language/resource.language.en_us/strings.po +++ b/addons/screensaver.xbmc.builtin.dim/resources/language/resource.language.en_us/strings.po @@ -16,6 +16,14 @@ msgstr "" "Language: en_US\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +msgctxt "#30000" +msgid "Brightness level" +msgstr "Brightness level" + +msgctxt "#30001" +msgid "Level in percent of how strongly the screen remains illuminated." +msgstr "Level in percent of how strongly the screen remains illuminated." + msgctxt "#30002" msgid "Preferences" msgstr "Preferences" diff --git a/addons/screensaver.xbmc.builtin.dim/resources/language/resource.language.es_es/strings.po b/addons/screensaver.xbmc.builtin.dim/resources/language/resource.language.es_es/strings.po index 70da4efdab..694522d517 100644 --- a/addons/screensaver.xbmc.builtin.dim/resources/language/resource.language.es_es/strings.po +++ b/addons/screensaver.xbmc.builtin.dim/resources/language/resource.language.es_es/strings.po @@ -16,6 +16,14 @@ msgstr "" "Language: es_ES\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +msgctxt "#30000" +msgid "Brightness level" +msgstr "Nivel de brillo" + +msgctxt "#30001" +msgid "Level in percent of how strongly the screen remains illuminated." +msgstr "Nivel en porcentaje de cómo de iluminada se queda la pantalla." + msgctxt "#30002" msgid "Preferences" msgstr "Preferencias" diff --git a/addons/screensaver.xbmc.builtin.dim/resources/language/resource.language.fi_fi/strings.po b/addons/screensaver.xbmc.builtin.dim/resources/language/resource.language.fi_fi/strings.po index 6cb65350f6..3d9b78da87 100644 --- a/addons/screensaver.xbmc.builtin.dim/resources/language/resource.language.fi_fi/strings.po +++ b/addons/screensaver.xbmc.builtin.dim/resources/language/resource.language.fi_fi/strings.po @@ -16,6 +16,14 @@ msgstr "" "Language: fi_FI\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +msgctxt "#30000" +msgid "Brightness level" +msgstr "Kirkkauden taso" + +msgctxt "#30001" +msgid "Level in percent of how strongly the screen remains illuminated." +msgstr "Näytön valaistuksen vahvuuden taso prosenttiarvona." + msgctxt "#30002" msgid "Preferences" msgstr "Asetukset" diff --git a/addons/screensaver.xbmc.builtin.dim/resources/language/resource.language.gl_es/strings.po b/addons/screensaver.xbmc.builtin.dim/resources/language/resource.language.gl_es/strings.po index a2fd969960..cd3c096adf 100644 --- a/addons/screensaver.xbmc.builtin.dim/resources/language/resource.language.gl_es/strings.po +++ b/addons/screensaver.xbmc.builtin.dim/resources/language/resource.language.gl_es/strings.po @@ -16,6 +16,14 @@ msgstr "" "Language: gl_ES\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +msgctxt "#30000" +msgid "Brightness level" +msgstr "Nivel de brillo" + +msgctxt "#30001" +msgid "Level in percent of how strongly the screen remains illuminated." +msgstr "Nivel de porcentaxe na intensidade na que a pantalla permanece iluminada." + msgctxt "#30002" msgid "Preferences" msgstr "Preferencias" diff --git a/addons/screensaver.xbmc.builtin.dim/resources/language/resource.language.hu_hu/strings.po b/addons/screensaver.xbmc.builtin.dim/resources/language/resource.language.hu_hu/strings.po index 3681cdca4c..e8583272ea 100644 --- a/addons/screensaver.xbmc.builtin.dim/resources/language/resource.language.hu_hu/strings.po +++ b/addons/screensaver.xbmc.builtin.dim/resources/language/resource.language.hu_hu/strings.po @@ -16,6 +16,14 @@ msgstr "" "Language: hu_HU\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +msgctxt "#30000" +msgid "Brightness level" +msgstr "Fényerő szintje" + +msgctxt "#30001" +msgid "Level in percent of how strongly the screen remains illuminated." +msgstr "A képernyő megvilágításának erőssége százalékosan." + msgctxt "#30002" msgid "Preferences" msgstr "Beállítások" diff --git a/addons/screensaver.xbmc.builtin.dim/resources/language/resource.language.is_is/strings.po b/addons/screensaver.xbmc.builtin.dim/resources/language/resource.language.is_is/strings.po index dad7ffc4b0..20b40d2ea9 100644 --- a/addons/screensaver.xbmc.builtin.dim/resources/language/resource.language.is_is/strings.po +++ b/addons/screensaver.xbmc.builtin.dim/resources/language/resource.language.is_is/strings.po @@ -16,6 +16,14 @@ msgstr "" "Language: is_IS\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +msgctxt "#30000" +msgid "Brightness level" +msgstr "Birtustig" + +msgctxt "#30001" +msgid "Level in percent of how strongly the screen remains illuminated." +msgstr "Styrkur í prósentum hve skjár verður með mikla birtu." + msgctxt "#30002" msgid "Preferences" msgstr "Kjörstillingar" diff --git a/addons/screensaver.xbmc.builtin.dim/resources/language/resource.language.ja_jp/strings.po b/addons/screensaver.xbmc.builtin.dim/resources/language/resource.language.ja_jp/strings.po index 0b5e48acaa..4ea1fdf591 100644 --- a/addons/screensaver.xbmc.builtin.dim/resources/language/resource.language.ja_jp/strings.po +++ b/addons/screensaver.xbmc.builtin.dim/resources/language/resource.language.ja_jp/strings.po @@ -17,5 +17,13 @@ msgstr "" "Plural-Forms: nplurals=1; plural=0;\n" msgctxt "#30000" -msgid "Dim level" -msgstr "Dim レベル" +msgid "Brightness level" +msgstr "輝度" + +msgctxt "#30001" +msgid "Level in percent of how strongly the screen remains illuminated." +msgstr "画面の輝度レベルをパーセントの比率で表しています。" + +msgctxt "#30002" +msgid "Preferences" +msgstr "環境設定" diff --git a/addons/screensaver.xbmc.builtin.dim/resources/language/resource.language.pt_br/strings.po b/addons/screensaver.xbmc.builtin.dim/resources/language/resource.language.pt_br/strings.po index 989c9557f1..c0d3f149d7 100644 --- a/addons/screensaver.xbmc.builtin.dim/resources/language/resource.language.pt_br/strings.po +++ b/addons/screensaver.xbmc.builtin.dim/resources/language/resource.language.pt_br/strings.po @@ -16,6 +16,14 @@ msgstr "" "Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" +msgctxt "#30000" +msgid "Brightness level" +msgstr "Nível de brilho" + +msgctxt "#30001" +msgid "Level in percent of how strongly the screen remains illuminated." +msgstr "Nível em porcentagem de quão fortemente a tela permanece iluminada." + msgctxt "#30002" msgid "Preferences" msgstr "Preferências" diff --git a/addons/screensaver.xbmc.builtin.dim/resources/language/resource.language.sl_si/strings.po b/addons/screensaver.xbmc.builtin.dim/resources/language/resource.language.sl_si/strings.po index d930c5962f..c2a8bc0ecd 100644 --- a/addons/screensaver.xbmc.builtin.dim/resources/language/resource.language.sl_si/strings.po +++ b/addons/screensaver.xbmc.builtin.dim/resources/language/resource.language.sl_si/strings.po @@ -17,5 +17,13 @@ msgstr "" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" msgctxt "#30000" -msgid "Dim level" -msgstr "Nivo zatemnitve" +msgid "Brightness level" +msgstr "Stopnja svetlosti" + +msgctxt "#30001" +msgid "Level in percent of how strongly the screen remains illuminated." +msgstr "Stopnja jakosti osvetlitve zaslona v procentih." + +msgctxt "#30002" +msgid "Preferences" +msgstr "Prednostne Nastavitve" diff --git a/addons/screensaver.xbmc.builtin.dim/resources/language/resource.language.tr_tr/strings.po b/addons/screensaver.xbmc.builtin.dim/resources/language/resource.language.tr_tr/strings.po index 0684b69023..1575f6c4d8 100644 --- a/addons/screensaver.xbmc.builtin.dim/resources/language/resource.language.tr_tr/strings.po +++ b/addons/screensaver.xbmc.builtin.dim/resources/language/resource.language.tr_tr/strings.po @@ -16,6 +16,10 @@ msgstr "" "Language: tr_TR\n" "Plural-Forms: nplurals=1; plural=0;\n" +msgctxt "#30000" +msgid "Brightness level" +msgstr "Parlaklık düzeyi" + msgctxt "#30002" msgid "Preferences" msgstr "Tercihler" diff --git a/addons/screensaver.xbmc.builtin.dim/resources/language/resource.language.zh_cn/strings.po b/addons/screensaver.xbmc.builtin.dim/resources/language/resource.language.zh_cn/strings.po index 5475c53f08..8c70c6a6d1 100644 --- a/addons/screensaver.xbmc.builtin.dim/resources/language/resource.language.zh_cn/strings.po +++ b/addons/screensaver.xbmc.builtin.dim/resources/language/resource.language.zh_cn/strings.po @@ -16,6 +16,14 @@ msgstr "" "Language: zh_CN\n" "Plural-Forms: nplurals=1; plural=0;\n" +msgctxt "#30000" +msgid "Brightness level" +msgstr "亮度等级" + +msgctxt "#30001" +msgid "Level in percent of how strongly the screen remains illuminated." +msgstr "等级,以百分比表示屏幕保持照明的强度。" + msgctxt "#30002" msgid "Preferences" msgstr "偏好设置" diff --git a/addons/skin.estouchy/addon.xml b/addons/skin.estouchy/addon.xml index eaef6953e9..f5bac2d8c2 100644 --- a/addons/skin.estouchy/addon.xml +++ b/addons/skin.estouchy/addon.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<addon id="skin.estouchy" version="3.0.4" name="Estouchy" provider-name="Team Kodi"> +<addon id="skin.estouchy" version="3.0.5" name="Estouchy" provider-name="Team Kodi"> <requires> <import addon="xbmc.gui" version="5.15.0"/> </requires> diff --git a/addons/skin.estouchy/language/resource.language.bg_bg/strings.po b/addons/skin.estouchy/language/resource.language.bg_bg/strings.po index dbd38c1186..48a364eb6c 100644 --- a/addons/skin.estouchy/language/resource.language.bg_bg/strings.po +++ b/addons/skin.estouchy/language/resource.language.bg_bg/strings.po @@ -100,6 +100,14 @@ msgctxt "#31039" msgid "Updated:" msgstr "Обновено:" +msgctxt "#31040" +msgid "Select + X" +msgstr "Select + X" + +msgctxt "#31042" +msgid "Select + Start" +msgstr "Select + Start" + msgctxt "#31043" msgid "PAUSED" msgstr "НА ПАУЗА" diff --git a/addons/skin.estouchy/language/resource.language.de_de/strings.po b/addons/skin.estouchy/language/resource.language.de_de/strings.po index e6d50b762f..392b751f72 100644 --- a/addons/skin.estouchy/language/resource.language.de_de/strings.po +++ b/addons/skin.estouchy/language/resource.language.de_de/strings.po @@ -56,6 +56,10 @@ msgctxt "#31014" msgid "Episodes" msgstr "Episoden" +msgctxt "#31015" +msgid "Player info" +msgstr "Spieler-Information" + msgctxt "#31016" msgid "Albums" msgstr "Alben" @@ -96,6 +100,18 @@ msgctxt "#31039" msgid "Updated:" msgstr "Aktualisiert:" +msgctxt "#31040" +msgid "Select + X" +msgstr "Select + X" + +msgctxt "#31041" +msgid "Select + B" +msgstr "Select + B" + +msgctxt "#31042" +msgid "Select + Start" +msgstr "Select + Start" + msgctxt "#31043" msgid "PAUSED" msgstr "PAUSE" diff --git a/addons/skin.estouchy/language/resource.language.gl_es/strings.po b/addons/skin.estouchy/language/resource.language.gl_es/strings.po index cc57729d86..cb75189c06 100644 --- a/addons/skin.estouchy/language/resource.language.gl_es/strings.po +++ b/addons/skin.estouchy/language/resource.language.gl_es/strings.po @@ -100,6 +100,18 @@ msgctxt "#31039" msgid "Updated:" msgstr "Actualizado:" +msgctxt "#31040" +msgid "Select + X" +msgstr "Select + X" + +msgctxt "#31041" +msgid "Select + B" +msgstr "Select + B" + +msgctxt "#31042" +msgid "Select + Start" +msgstr "Select + Inicio" + msgctxt "#31043" msgid "PAUSED" msgstr "EN PAUSA" @@ -198,7 +210,7 @@ msgstr "Teletexto" msgctxt "#31390" msgid "Skin default" -msgstr "Pel por defecto" +msgstr "Pel predefinida" msgctxt "#31391" msgid "Arial based" diff --git a/addons/skin.estouchy/language/resource.language.is_is/strings.po b/addons/skin.estouchy/language/resource.language.is_is/strings.po index bf299864cb..62a0124396 100644 --- a/addons/skin.estouchy/language/resource.language.is_is/strings.po +++ b/addons/skin.estouchy/language/resource.language.is_is/strings.po @@ -100,6 +100,18 @@ msgctxt "#31039" msgid "Updated:" msgstr "Uppfært:" +msgctxt "#31040" +msgid "Select + X" +msgstr "Val + X" + +msgctxt "#31041" +msgid "Select + B" +msgstr "Val + B" + +msgctxt "#31042" +msgid "Select + Start" +msgstr "Val + Start" + msgctxt "#31043" msgid "PAUSED" msgstr "Í BIÐ" diff --git a/addons/skin.estouchy/language/resource.language.ja_jp/strings.po b/addons/skin.estouchy/language/resource.language.ja_jp/strings.po index 81a8b6cf4c..b68c1f5506 100644 --- a/addons/skin.estouchy/language/resource.language.ja_jp/strings.po +++ b/addons/skin.estouchy/language/resource.language.ja_jp/strings.po @@ -104,6 +104,10 @@ msgctxt "#31040" msgid "Select + X" msgstr "セレクト + X" +msgctxt "#31041" +msgid "Select + B" +msgstr "セレクト + B" + msgctxt "#31042" msgid "Select + Start" msgstr "セレクト + スタート" diff --git a/addons/skin.estouchy/language/resource.language.sv_se/strings.po b/addons/skin.estouchy/language/resource.language.sv_se/strings.po index f02d74e5b5..31251e4cb8 100644 --- a/addons/skin.estouchy/language/resource.language.sv_se/strings.po +++ b/addons/skin.estouchy/language/resource.language.sv_se/strings.po @@ -46,7 +46,7 @@ msgstr "Arbetar..." msgctxt "#31011" msgid "Recent" -msgstr "Senaste" +msgstr "Nyligen" msgctxt "#31013" msgid "Movies" @@ -190,7 +190,7 @@ msgstr "Videomeny" msgctxt "#31356" msgid "Download Subtitles" -msgstr "Ladda ner undertexter" +msgstr "Hämta undertexter" msgctxt "#31358" msgid "Teletext" @@ -222,11 +222,11 @@ msgstr "Hantera dina installerade tillägg · Bläddra efter och installera till msgctxt "#31408" msgid "Configure actions that can be used during playback · Configure how media content is played" -msgstr "Konfigurera åtgärder som kan användas under uppspelning · Konfigurera hur medieinnehåll spelas" +msgstr "Konfigurera åtgärder som kan användas under uppspelning · Konfigurera hur mediainnehåll spelas" msgctxt "#31409" msgid "Configure library sources · Show the media lists display content · Configure how library lists are navigated" -msgstr "Konfigurera bibliotekskällor · Visa medielistor displayinnehåll · Konfigurera hur bibliotekslistor navigeras" +msgstr "Konfigurera bibliotekskällor · Visa medialistor displayinnehåll · Konfigurera hur bibliotekslistor navigeras" msgctxt "#31410" msgid "Configure skin · Configure region · Configure control · Configure screensaver · Configure master lock" @@ -306,7 +306,7 @@ msgstr "Döp om grupp" msgctxt "#31563" msgid "Delete Group" -msgstr "Radera grupp" +msgstr "Ta bort grupp" msgctxt "#31564" msgid "Show hidden" diff --git a/addons/skin.estuary/addon.xml b/addons/skin.estuary/addon.xml index b946bb81e3..45c0ded857 100644 --- a/addons/skin.estuary/addon.xml +++ b/addons/skin.estuary/addon.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<addon id="skin.estuary" version="3.0.3" name="Estuary" provider-name="phil65, Ichabod Fletchman"> +<addon id="skin.estuary" version="3.0.4" name="Estuary" provider-name="phil65, Ichabod Fletchman"> <requires> <import addon="xbmc.gui" version="5.15.0"/> </requires> diff --git a/addons/skin.estuary/language/resource.language.bg_bg/strings.po b/addons/skin.estuary/language/resource.language.bg_bg/strings.po index d6b8b7276a..caed7eac4f 100644 --- a/addons/skin.estuary/language/resource.language.bg_bg/strings.po +++ b/addons/skin.estuary/language/resource.language.bg_bg/strings.po @@ -124,6 +124,10 @@ msgctxt "#31026" msgid "Timeshift" msgstr "Изместване във времето" +msgctxt "#31027" +msgid "Next aired" +msgstr "Следващо излъчване" + msgctxt "#31028" msgid "Show fanart" msgstr "Фен-арт" @@ -208,6 +212,14 @@ msgctxt "#31053" msgid "Arial based" msgstr "Основан на Arial" +msgctxt "#31054" +msgid "Press [B]Left[/B] to step back, or [B]Right[/B] to step forward" +msgstr "Натиснете [B]Наляво[/B] за стъпка назад или [B]Надясно[/B] – за напред" + +msgctxt "#31055" +msgid "Press [B]Right[/B] to frame advance" +msgstr "Натиснете [B]Надясно[/B], за да преминете към следващия кадър" + msgctxt "#31056" msgid "Go to playlist" msgstr "Към плейлиста" @@ -220,6 +232,14 @@ msgctxt "#31058" msgid "Automatic Login on startup" msgstr "Автоматично влизане след стартиране" +msgctxt "#31059" +msgid "Select + X" +msgstr "Select + X" + +msgctxt "#31060" +msgid "Select + Start" +msgstr "Select + Start" + msgctxt "#31061" msgid "Main menu items" msgstr "Елементи в менюто" @@ -448,6 +468,10 @@ msgctxt "#31134" msgid "Remaining" msgstr "Остава" +msgctxt "#31135" +msgid "Binary" +msgstr "Двоично" + msgctxt "#31136" msgid "Click here to see latest changes..." msgstr "Последни промени…" @@ -488,6 +512,14 @@ msgctxt "#31145" msgid "Search add-ons" msgstr "Търси в добавките" +msgctxt "#31146" +msgid "In cinemas" +msgstr "В кината" + +msgctxt "#31147" +msgid "In cinemas soon" +msgstr "Скоро в кината" + msgctxt "#31148" msgid "Categories" msgstr "Категории" @@ -496,6 +528,10 @@ msgctxt "#31149" msgid "Select genre fanart pack" msgstr "Избор на пакет с фен-арт за категориите " +msgctxt "#31150" +msgid "Origin" +msgstr "Произход" + msgctxt "#31151" msgid "Unwatched music videos" msgstr "Негледани музикални клипове" @@ -563,3 +599,11 @@ msgstr "Снимка на профила" msgctxt "#31167" msgid "Animate background" msgstr "Анимиране на фон" + +msgctxt "#31168" +msgid "Show posters instead of thumbs for musicvideos" +msgstr "Показване на плакати вместо миниатюри за музикалните видеа" + +msgctxt "#31169" +msgid "Artwork related settings." +msgstr "Категорията съдържа настройки свързани с изображенията." diff --git a/addons/skin.estuary/language/resource.language.de_de/strings.po b/addons/skin.estuary/language/resource.language.de_de/strings.po index 57203702e0..10f723a65d 100644 --- a/addons/skin.estuary/language/resource.language.de_de/strings.po +++ b/addons/skin.estuary/language/resource.language.de_de/strings.po @@ -124,6 +124,10 @@ msgctxt "#31026" msgid "Timeshift" msgstr "Timeshift" +msgctxt "#31027" +msgid "Next aired" +msgstr "Nächste Folgen" + msgctxt "#31028" msgid "Show fanart" msgstr "Fanart zeigen" @@ -160,6 +164,10 @@ msgctxt "#31036" msgid "items" msgstr "Einträge" +msgctxt "#31037" +msgid "Selected track" +msgstr "Ausgwählter Titel" + msgctxt "#31038" msgid "Rewind" msgstr "Rücklauf" @@ -204,6 +212,14 @@ msgctxt "#31053" msgid "Arial based" msgstr "Arial-basiert" +msgctxt "#31054" +msgid "Press [B]Left[/B] to step back, or [B]Right[/B] to step forward" +msgstr "[B]Links[/B] für einen Schritt zurück, [B]Rechts[/B] für einen Schritt vorwärts drücken" + +msgctxt "#31055" +msgid "Press [B]Right[/B] to frame advance" +msgstr "[B]Rechts[/B] für einen Frame weiter drücken" + msgctxt "#31056" msgid "Go to playlist" msgstr "Zur Wiedergabeliste ..." @@ -216,6 +232,14 @@ msgctxt "#31058" msgid "Automatic Login on startup" msgstr "Automatischer Login beim Programmstart" +msgctxt "#31059" +msgid "Select + X" +msgstr "Select + X" + +msgctxt "#31060" +msgid "Select + Start" +msgstr "Select + Start" + msgctxt "#31061" msgid "Main menu items" msgstr "Hauptmenüeinträge" @@ -444,6 +468,10 @@ msgctxt "#31134" msgid "Remaining" msgstr "Restzeit" +msgctxt "#31135" +msgid "Binary" +msgstr "Binär" + msgctxt "#31136" msgid "Click here to see latest changes..." msgstr "Hier klicken, um die letzten Änderungen zu sehen ..." @@ -484,6 +512,14 @@ msgctxt "#31145" msgid "Search add-ons" msgstr "Addons durchsuchen" +msgctxt "#31146" +msgid "In cinemas" +msgstr "In den Kinos" + +msgctxt "#31147" +msgid "In cinemas soon" +msgstr "Demnächst in den Kinos" + msgctxt "#31148" msgid "Categories" msgstr "Kategorien" @@ -492,6 +528,10 @@ msgctxt "#31149" msgid "Select genre fanart pack" msgstr "Genre-Fanart-Pack auswählen" +msgctxt "#31150" +msgid "Origin" +msgstr "Herkunft" + msgctxt "#31151" msgid "Unwatched music videos" msgstr "Ungesehene Musikvideos" @@ -559,3 +599,11 @@ msgstr "Profil-Avatar" msgctxt "#31167" msgid "Animate background" msgstr "Hintergrund animieren" + +msgctxt "#31168" +msgid "Show posters instead of thumbs for musicvideos" +msgstr "Für Musikvideos Poster anstelle von Vorschaulbildern zeigen" + +msgctxt "#31169" +msgid "Artwork related settings." +msgstr "Einstellungen für Artwork" diff --git a/addons/skin.estuary/language/resource.language.en_us/strings.po b/addons/skin.estuary/language/resource.language.en_us/strings.po index 9f4ed8bca8..2df0959841 100644 --- a/addons/skin.estuary/language/resource.language.en_us/strings.po +++ b/addons/skin.estuary/language/resource.language.en_us/strings.po @@ -212,6 +212,14 @@ msgctxt "#31053" msgid "Arial based" msgstr "Arial based" +msgctxt "#31054" +msgid "Press [B]Left[/B] to step back, or [B]Right[/B] to step forward" +msgstr "Press [B]Left[/B] to step back, or [B]Right[/B] to step forward" + +msgctxt "#31055" +msgid "Press [B]Right[/B] to frame advance" +msgstr "Press [B]Right[/B] to frame advance" + msgctxt "#31056" msgid "Go to playlist" msgstr "Go to playlist" @@ -460,6 +468,10 @@ msgctxt "#31134" msgid "Remaining" msgstr "Remaining" +msgctxt "#31135" +msgid "Binary" +msgstr "Binary" + msgctxt "#31136" msgid "Click here to see latest changes..." msgstr "Click here to see latest changes..." @@ -516,6 +528,10 @@ msgctxt "#31149" msgid "Select genre fanart pack" msgstr "Select genre fanart pack" +msgctxt "#31150" +msgid "Origin" +msgstr "Origin" + msgctxt "#31151" msgid "Unwatched music videos" msgstr "Unwatched music videos" @@ -583,3 +599,11 @@ msgstr "Profile avatar" msgctxt "#31167" msgid "Animate background" msgstr "Animate background" + +msgctxt "#31168" +msgid "Show posters instead of thumbs for musicvideos" +msgstr "Show posters instead of thumbs for musicvideos" + +msgctxt "#31169" +msgid "Artwork related settings." +msgstr "Artwork related settings." diff --git a/addons/skin.estuary/language/resource.language.es_es/strings.po b/addons/skin.estuary/language/resource.language.es_es/strings.po index 44e2b692e6..939447d08a 100644 --- a/addons/skin.estuary/language/resource.language.es_es/strings.po +++ b/addons/skin.estuary/language/resource.language.es_es/strings.po @@ -212,6 +212,14 @@ msgctxt "#31053" msgid "Arial based" msgstr "Basada en Arial" +msgctxt "#31054" +msgid "Press [B]Left[/B] to step back, or [B]Right[/B] to step forward" +msgstr "Presione [B]Izquierda[/B] para retroceder, o [B]Derecha[/B] para avanzar" + +msgctxt "#31055" +msgid "Press [B]Right[/B] to frame advance" +msgstr "Presione [B]Derecha[/B] para avanzar" + msgctxt "#31056" msgid "Go to playlist" msgstr "Ir a lista de reproducción" @@ -246,7 +254,7 @@ msgstr "Secciones" msgctxt "#31065" msgid "Video playlist" -msgstr "Lista de reproducción de video" +msgstr "Lista de reproducción de vídeo" msgctxt "#31066" msgid "Music playlist" @@ -310,7 +318,7 @@ msgstr "Grupos disponibles" msgctxt "#31092" msgid "Video menu" -msgstr "Menú de video" +msgstr "Menú de vídeo" msgctxt "#31093" msgid "Show weather info in top bar" @@ -330,7 +338,7 @@ msgstr "Opciones de canal" msgctxt "#31098" msgid "Select your Kodi user profile[CR]to login and continue" -msgstr "Seleccione su perfil de usuario de Kodi[CR]para ingresar y continuar" +msgstr "Seleccione su perfil de usuario de Kodi[CR]para iniciar sesión y continuar" msgctxt "#31099" msgid "IconWall" @@ -354,11 +362,11 @@ msgstr "Introduzca el texto aquí..." msgctxt "#31104" msgid "Your library is currently empty. In order to populate it with your personal media, enter \"Files\" section, add a media source and configure it. After the source has been added and indexed you will be able to browse your library." -msgstr "Su colección se encuentra vacía. Para proveerla de contenidos, entre en la sección \"Archivos\", añada un origen de contenido y configúrelo. Después de que se añada e indexe esta nueva fuente, podrá navegar por su colección." +msgstr "Su biblioteca está actualmente vacía. Para llenarlo con sus medios personales, ingrese a la sección \"Archivos\", agregue una fuente de medios y configúrelo. Una vez agregada e indexada la fuente, podrá navegar por su biblioteca." msgctxt "#31105" msgid "Add video sources and set the appropriate content type in order to populate your video libraries." -msgstr "Añada fuentes de vídeo y configure el tipo de contenido apropiado para poblar las colecciones de vídeo." +msgstr "Agregue fuentes de video y establezca el tipo de contenido apropiado para llenar sus bibliotecas de vídeo." msgctxt "#31106" msgid "Teletext" @@ -460,6 +468,10 @@ msgctxt "#31134" msgid "Remaining" msgstr "Restante" +msgctxt "#31135" +msgid "Binary" +msgstr "Binario" + msgctxt "#31136" msgid "Click here to see latest changes..." msgstr "Pulse aquí para ver los cambios más recientes..." @@ -516,6 +528,10 @@ msgctxt "#31149" msgid "Select genre fanart pack" msgstr "Elegir pack de fanart para los géneros" +msgctxt "#31150" +msgid "Origin" +msgstr "Origen" + msgctxt "#31151" msgid "Unwatched music videos" msgstr "Vídeos musicales no vistos" @@ -550,11 +566,11 @@ msgstr "Modo táctil" msgctxt "#31159" msgid "Artwork" -msgstr "Grafismo" +msgstr "Ilustraciones" msgctxt "#31160" msgid "Show media flags" -msgstr "Mostrar marcas de contenido" +msgstr "Mostrar indicadores de contenido" msgctxt "#31161" msgid "Numeric pad" @@ -583,3 +599,11 @@ msgstr "Avatar de perfil" msgctxt "#31167" msgid "Animate background" msgstr "Animar fondo" + +msgctxt "#31168" +msgid "Show posters instead of thumbs for musicvideos" +msgstr "Mostrar carteles en lugar de miniaturas para vídeos musicales" + +msgctxt "#31169" +msgid "Artwork related settings." +msgstr "Ajustes relacionado con ilustraciones" diff --git a/addons/skin.estuary/language/resource.language.et_ee/strings.po b/addons/skin.estuary/language/resource.language.et_ee/strings.po index aa8b45757e..402bdebeb3 100644 --- a/addons/skin.estuary/language/resource.language.et_ee/strings.po +++ b/addons/skin.estuary/language/resource.language.et_ee/strings.po @@ -70,7 +70,7 @@ msgstr "Juhuslik album" msgctxt "#31013" msgid "Random artists" -msgstr "Juhuslik artist" +msgstr "Juhuslik esitaja" msgctxt "#31014" msgid "Unplayed albums" @@ -152,6 +152,10 @@ msgctxt "#31033" msgid "Your rating" msgstr "Minu hinne" +msgctxt "#31034" +msgid "Extended info" +msgstr "Laiendatud info" + msgctxt "#31035" msgid "Pages" msgstr "Lehed" @@ -208,6 +212,10 @@ msgctxt "#31053" msgid "Arial based" msgstr "Arial-il põhinev" +msgctxt "#31054" +msgid "Press [B]Left[/B] to step back, or [B]Right[/B] to step forward" +msgstr "Tagasihüppeks vajuta [B]vasakut[/B] või edasihüppeks [B]paremat[/B] klahvi" + msgctxt "#31056" msgid "Go to playlist" msgstr "Mine esitusloendisse" @@ -522,7 +530,7 @@ msgstr "Juhuslik muusikavideo" msgctxt "#31153" msgid "You do not have any add-ons of this type installed. Enter the add-on browser to download add-ons created by our community." -msgstr "Seda tüüpi lisamooduleid pole paigaldatud. Meie kasutajate poolt loodud lisamoodulite alla laadimiseks, mine lisamoodulite brauserisse." +msgstr "Seda tüüpi lisamooduleid pole paigaldatud. Meie kasutajate poolt loodud lisamoodulite allalaadimiseks mine lisamoodulite brauserisse." msgctxt "#31154" msgid "Press OK to switch between locations" @@ -579,3 +587,7 @@ msgstr "Profiili avatar" msgctxt "#31167" msgid "Animate background" msgstr "Tausta animeerimine" + +msgctxt "#31168" +msgid "Show posters instead of thumbs for musicvideos" +msgstr "Kuva muusikavideote jaoks postereid mitte pisipilte" diff --git a/addons/skin.estuary/language/resource.language.fi_fi/strings.po b/addons/skin.estuary/language/resource.language.fi_fi/strings.po index 68f6465c12..e1dbbe1ac6 100644 --- a/addons/skin.estuary/language/resource.language.fi_fi/strings.po +++ b/addons/skin.estuary/language/resource.language.fi_fi/strings.po @@ -212,6 +212,14 @@ msgctxt "#31053" msgid "Arial based" msgstr "Arial-pohjainen" +msgctxt "#31054" +msgid "Press [B]Left[/B] to step back, or [B]Right[/B] to step forward" +msgstr "Paina [B]Vasen[/B] palataksesi takaisinpäin tai [B]Oikea[/B] edetäksesi eteenpäin" + +msgctxt "#31055" +msgid "Press [B]Right[/B] to frame advance" +msgstr "Paina [B]Oikea[/B] edetäksesi kuva kerrallaan" + msgctxt "#31056" msgid "Go to playlist" msgstr "Avaa toistolista" @@ -460,6 +468,10 @@ msgctxt "#31134" msgid "Remaining" msgstr "Jäljellä" +msgctxt "#31135" +msgid "Binary" +msgstr "Binääri" + msgctxt "#31136" msgid "Click here to see latest changes..." msgstr "Valitse nähdäksesi viimeisimmät muutokset..." @@ -516,6 +528,10 @@ msgctxt "#31149" msgid "Select genre fanart pack" msgstr "Valitse lajityyppien taustakuvapaketti" +msgctxt "#31150" +msgid "Origin" +msgstr "Alkuperä" + msgctxt "#31151" msgid "Unwatched music videos" msgstr "Katsomattomat musiikkivideot" @@ -583,3 +599,11 @@ msgstr "Profiilin kuva" msgctxt "#31167" msgid "Animate background" msgstr "Animoitu taustakuva" + +msgctxt "#31168" +msgid "Show posters instead of thumbs for musicvideos" +msgstr "Näytä musiikkivideoille julisteet pienkuvien sijaan" + +msgctxt "#31169" +msgid "Artwork related settings." +msgstr "Mediakuvitukseen liittyvät asetukset." diff --git a/addons/skin.estuary/language/resource.language.fr_fr/strings.po b/addons/skin.estuary/language/resource.language.fr_fr/strings.po index 802e7ab4e8..5d2c8ee8db 100644 --- a/addons/skin.estuary/language/resource.language.fr_fr/strings.po +++ b/addons/skin.estuary/language/resource.language.fr_fr/strings.po @@ -234,7 +234,7 @@ msgstr "Identification auto. au démarrage" msgctxt "#31059" msgid "Select + X" -msgstr "Sélectionner" +msgstr "Sélectionner + X" msgctxt "#31060" msgid "Select + Start" diff --git a/addons/skin.estuary/language/resource.language.gl_es/strings.po b/addons/skin.estuary/language/resource.language.gl_es/strings.po index 60830d2aeb..d7717fa745 100644 --- a/addons/skin.estuary/language/resource.language.gl_es/strings.po +++ b/addons/skin.estuary/language/resource.language.gl_es/strings.po @@ -124,6 +124,10 @@ msgctxt "#31026" msgid "Timeshift" msgstr "Timeshift" +msgctxt "#31027" +msgid "Next aired" +msgstr "Vindeira emisión" + msgctxt "#31028" msgid "Show fanart" msgstr "Amosar fanart" @@ -160,6 +164,10 @@ msgctxt "#31036" msgid "items" msgstr "Elementos" +msgctxt "#31037" +msgid "Selected track" +msgstr "Seleccionar pista" + msgctxt "#31038" msgid "Rewind" msgstr "Atrás" @@ -204,6 +212,14 @@ msgctxt "#31053" msgid "Arial based" msgstr "Baseado en Arial" +msgctxt "#31054" +msgid "Press [B]Left[/B] to step back, or [B]Right[/B] to step forward" +msgstr "Premer [B]Esquerda[/B] para rebobinar, ou [B]Dereita[/B] para avanzar" + +msgctxt "#31055" +msgid "Press [B]Right[/B] to frame advance" +msgstr "Premer [B]Dereita[/B] para avanzar un marco" + msgctxt "#31056" msgid "Go to playlist" msgstr "Ir á listaxe de reprodución" @@ -216,6 +232,14 @@ msgctxt "#31058" msgid "Automatic Login on startup" msgstr "Amosar o inicio de sesión ao arrancar" +msgctxt "#31059" +msgid "Select + X" +msgstr "Select + X" + +msgctxt "#31060" +msgid "Select + Start" +msgstr "Select + Inicio" + msgctxt "#31061" msgid "Main menu items" msgstr "Elementos do menú principal" @@ -256,6 +280,10 @@ msgctxt "#31072" msgid "Power Options" msgstr "Opcións de enerxía" +msgctxt "#31073" +msgid "Total length" +msgstr "Duración total" + msgctxt "#31074" msgid "Total duration" msgstr "Duración total" @@ -440,6 +468,10 @@ msgctxt "#31134" msgid "Remaining" msgstr "Restante" +msgctxt "#31135" +msgid "Binary" +msgstr "Binario" + msgctxt "#31136" msgid "Click here to see latest changes..." msgstr "Premer aquí para ver os últimos cambios..." @@ -480,6 +512,14 @@ msgctxt "#31145" msgid "Search add-ons" msgstr "Buscar complementos" +msgctxt "#31146" +msgid "In cinemas" +msgstr "Nos cinemas" + +msgctxt "#31147" +msgid "In cinemas soon" +msgstr "Nos cinemas proximamente" + msgctxt "#31148" msgid "Categories" msgstr "Categorías" @@ -488,6 +528,10 @@ msgctxt "#31149" msgid "Select genre fanart pack" msgstr "Seleccionar o paquete fanart de xéneros" +msgctxt "#31150" +msgid "Origin" +msgstr "Orixe" + msgctxt "#31151" msgid "Unwatched music videos" msgstr "Vídeos musicais sen ver" @@ -555,3 +599,11 @@ msgstr "Avatar do perfil" msgctxt "#31167" msgid "Animate background" msgstr "Animar o fondo" + +msgctxt "#31168" +msgid "Show posters instead of thumbs for musicvideos" +msgstr "Amosar pósters no canto de miniaturas para musicvideos" + +msgctxt "#31169" +msgid "Artwork related settings." +msgstr "Axustes relacionados cas Imaxes" diff --git a/addons/skin.estuary/language/resource.language.hu_hu/strings.po b/addons/skin.estuary/language/resource.language.hu_hu/strings.po index 7a46c77882..99aec02b6a 100644 --- a/addons/skin.estuary/language/resource.language.hu_hu/strings.po +++ b/addons/skin.estuary/language/resource.language.hu_hu/strings.po @@ -212,6 +212,14 @@ msgctxt "#31053" msgid "Arial based" msgstr "Arial betűkészlet" +msgctxt "#31054" +msgid "Press [B]Left[/B] to step back, or [B]Right[/B] to step forward" +msgstr "Nyomja meg a [B]Bal[/B] gombot a vissza-, vagy a [B]Jobb[/B] gombot az előrelépéshez" + +msgctxt "#31055" +msgid "Press [B]Right[/B] to frame advance" +msgstr "Nyomja meg a [B]Jobb[/B] gombot a képkocka léptetéséhez" + msgctxt "#31056" msgid "Go to playlist" msgstr "Lejátszólistához" @@ -460,6 +468,10 @@ msgctxt "#31134" msgid "Remaining" msgstr "Hátralévő" +msgctxt "#31135" +msgid "Binary" +msgstr "Bináris" + msgctxt "#31136" msgid "Click here to see latest changes..." msgstr "Legfrissebb változtatások..." @@ -516,6 +528,10 @@ msgctxt "#31149" msgid "Select genre fanart pack" msgstr "Műfaj illusztrációs csomag kiválasztása" +msgctxt "#31150" +msgid "Origin" +msgstr "Eredet" + msgctxt "#31151" msgid "Unwatched music videos" msgstr "Nem látott videóklipek" @@ -583,3 +599,11 @@ msgstr "Profil avatar" msgctxt "#31167" msgid "Animate background" msgstr "Animált háttér" + +msgctxt "#31168" +msgid "Show posters instead of thumbs for musicvideos" +msgstr "Poszterek megjelenítése bélyegképek helyett a zenei videóknál" + +msgctxt "#31169" +msgid "Artwork related settings." +msgstr "Illusztrációval kapcsolatos beállítások." diff --git a/addons/skin.estuary/language/resource.language.is_is/strings.po b/addons/skin.estuary/language/resource.language.is_is/strings.po index 6a4dddb6c4..f5f04cd14f 100644 --- a/addons/skin.estuary/language/resource.language.is_is/strings.po +++ b/addons/skin.estuary/language/resource.language.is_is/strings.po @@ -124,6 +124,10 @@ msgctxt "#31026" msgid "Timeshift" msgstr "Tímaflakk" +msgctxt "#31027" +msgid "Next aired" +msgstr "Næst sýnt" + msgctxt "#31028" msgid "Show fanart" msgstr "Birta aðdáendamyndir" @@ -160,6 +164,10 @@ msgctxt "#31036" msgid "items" msgstr "atriði" +msgctxt "#31037" +msgid "Selected track" +msgstr "Valin rás" + msgctxt "#31038" msgid "Rewind" msgstr "Til baka" @@ -204,6 +212,10 @@ msgctxt "#31053" msgid "Arial based" msgstr "Byggt á Arial" +msgctxt "#31054" +msgid "Press [B]Left[/B] to step back, or [B]Right[/B] to step forward" +msgstr "Ýttu á [B]Vinstri[/B] til að hoppa til baka, eða [B]Hægri[/B] til að hoppa áfram" + msgctxt "#31056" msgid "Go to playlist" msgstr "Fara í spilunarlista" @@ -216,6 +228,14 @@ msgctxt "#31058" msgid "Automatic Login on startup" msgstr "Sjálfvirk innskráning í ræsingu" +msgctxt "#31059" +msgid "Select + X" +msgstr "Val + X" + +msgctxt "#31060" +msgid "Select + Start" +msgstr "Val + Start" + msgctxt "#31061" msgid "Main menu items" msgstr "Atriði í aðalvalmynd" @@ -256,6 +276,10 @@ msgctxt "#31072" msgid "Power Options" msgstr "Valkostir orkustýringar" +msgctxt "#31073" +msgid "Total length" +msgstr "Heildarlengd" + msgctxt "#31074" msgid "Total duration" msgstr "Heildar tímalengd" @@ -480,6 +504,14 @@ msgctxt "#31145" msgid "Search add-ons" msgstr "Leita að viðbótum" +msgctxt "#31146" +msgid "In cinemas" +msgstr "Í kvikmyndahúsum" + +msgctxt "#31147" +msgid "In cinemas soon" +msgstr "Bráðlega í kvikmyndahúsum" + msgctxt "#31148" msgid "Categories" msgstr "Flokkar" diff --git a/addons/skin.estuary/language/resource.language.ja_jp/strings.po b/addons/skin.estuary/language/resource.language.ja_jp/strings.po index 111b27a1ab..fb154e25e2 100644 --- a/addons/skin.estuary/language/resource.language.ja_jp/strings.po +++ b/addons/skin.estuary/language/resource.language.ja_jp/strings.po @@ -212,6 +212,14 @@ msgctxt "#31053" msgid "Arial based" msgstr "Arialベース" +msgctxt "#31054" +msgid "Press [B]Left[/B] to step back, or [B]Right[/B] to step forward" +msgstr "[B]左[/B] を押してバックか、[B右[/B] を押してフォワード" + +msgctxt "#31055" +msgid "Press [B]Right[/B] to frame advance" +msgstr "[B]右[/B] を押してフレームを進める" + msgctxt "#31056" msgid "Go to playlist" msgstr "プレイリストに移動" @@ -460,6 +468,10 @@ msgctxt "#31134" msgid "Remaining" msgstr "残り" +msgctxt "#31135" +msgid "Binary" +msgstr "バイナリー" + msgctxt "#31136" msgid "Click here to see latest changes..." msgstr "ここをクリックして最近の変更を見る..." @@ -516,6 +528,10 @@ msgctxt "#31149" msgid "Select genre fanart pack" msgstr "ジャンルのファンアートパック選択" +msgctxt "#31150" +msgid "Origin" +msgstr "オリジン" + msgctxt "#31151" msgid "Unwatched music videos" msgstr "未視聴なミュージックビデオ" @@ -583,3 +599,11 @@ msgstr "プロファイルアバター" msgctxt "#31167" msgid "Animate background" msgstr "アニメーション背景" + +msgctxt "#31168" +msgid "Show posters instead of thumbs for musicvideos" +msgstr "ミュージックビデオのサムネイルの代わりにポスターを表示する" + +msgctxt "#31169" +msgid "Artwork related settings." +msgstr "アートワーク関連の設定。" diff --git a/addons/skin.estuary/language/resource.language.pt_br/strings.po b/addons/skin.estuary/language/resource.language.pt_br/strings.po index 12e594734c..6577bb2162 100644 --- a/addons/skin.estuary/language/resource.language.pt_br/strings.po +++ b/addons/skin.estuary/language/resource.language.pt_br/strings.po @@ -212,6 +212,14 @@ msgctxt "#31053" msgid "Arial based" msgstr "Baseado na Arial" +msgctxt "#31054" +msgid "Press [B]Left[/B] to step back, or [B]Right[/B] to step forward" +msgstr "Pressione [B]Esquerda[/B] para recuar ou [B]Direita[/B] para avançar" + +msgctxt "#31055" +msgid "Press [B]Right[/B] to frame advance" +msgstr "Pressione [B]Direita[/B] para avançar quadro" + msgctxt "#31056" msgid "Go to playlist" msgstr "Ir para playlist" @@ -460,6 +468,10 @@ msgctxt "#31134" msgid "Remaining" msgstr "Remanescente" +msgctxt "#31135" +msgid "Binary" +msgstr "Binário" + msgctxt "#31136" msgid "Click here to see latest changes..." msgstr "Clique aqui para visualizar as últimas alterações..." @@ -516,6 +528,10 @@ msgctxt "#31149" msgid "Select genre fanart pack" msgstr "Selecione o pacote de fanart de gêneros" +msgctxt "#31150" +msgid "Origin" +msgstr "Origem" + msgctxt "#31151" msgid "Unwatched music videos" msgstr "Videoclipes a assistir" @@ -583,3 +599,11 @@ msgstr "Imagem do perfil" msgctxt "#31167" msgid "Animate background" msgstr "Pano de Fundo animado" + +msgctxt "#31168" +msgid "Show posters instead of thumbs for musicvideos" +msgstr "Mostrar pôsteres ao invés de miniaturas para concertos" + +msgctxt "#31169" +msgid "Artwork related settings." +msgstr "Ajustes relacionados a artes" diff --git a/addons/skin.estuary/language/resource.language.sl_si/strings.po b/addons/skin.estuary/language/resource.language.sl_si/strings.po index 67da8f9557..aaf7da4f3e 100644 --- a/addons/skin.estuary/language/resource.language.sl_si/strings.po +++ b/addons/skin.estuary/language/resource.language.sl_si/strings.po @@ -128,6 +128,10 @@ msgctxt "#31053" msgid "Arial based" msgstr "Arial" +msgctxt "#31066" +msgid "Music playlist" +msgstr "Seznam predvajanja glasbe" + msgctxt "#31067" msgid "Event log" msgstr "Zapisnik dogodkov" diff --git a/addons/skin.estuary/language/resource.language.sv_se/strings.po b/addons/skin.estuary/language/resource.language.sv_se/strings.po index 9a5f5e2a04..dabf26cf01 100644 --- a/addons/skin.estuary/language/resource.language.sv_se/strings.po +++ b/addons/skin.estuary/language/resource.language.sv_se/strings.po @@ -54,7 +54,7 @@ msgstr "Aktivera gränssnittskomponenter för kategorier" msgctxt "#31009" msgid "Download icons" -msgstr "Ladda ner ikoner" +msgstr "Hämtar ikoner" msgctxt "#31010" msgid "In progress movies" @@ -82,7 +82,7 @@ msgstr "Nya inspelningar" msgctxt "#31016" msgid "Recently played channels" -msgstr "Senast spelade kanaler" +msgstr "Nyligen spelade kanaler" msgctxt "#31017" msgid "Rated" @@ -90,7 +90,7 @@ msgstr "Betygsatt" msgctxt "#31018" msgid "Recently played channels" -msgstr "Senast spelade kanaler" +msgstr "Nyligen spelade kanaler" msgctxt "#31019" msgid "Forecast" @@ -166,7 +166,7 @@ msgstr "objekt" msgctxt "#31037" msgid "Selected track" -msgstr "Valda spår" +msgstr "Markerat spår" msgctxt "#31038" msgid "Rewind" @@ -198,7 +198,7 @@ msgstr "Byt namn på grupp" msgctxt "#31046" msgid "Delete group" -msgstr "Radera grupp" +msgstr "Ta bort grupp" msgctxt "#31048" msgid "Available" @@ -246,7 +246,7 @@ msgstr "Spellista för musik" msgctxt "#31067" msgid "Event log" -msgstr "Eventlogg" +msgstr "Händelselogg" msgctxt "#31068" msgid "Choose presets" @@ -286,11 +286,11 @@ msgstr "Slutar" msgctxt "#31082" msgid "Lyrics add-on" -msgstr "Sångtexter tillägg" +msgstr "Tillägg för sångtexter" msgctxt "#31083" msgid "Lyrics add-on settings" -msgstr "Sångtexter tilläggsinställningar" +msgstr "Inställningar för sångtexttillägg" msgctxt "#31084" msgid "Visualisation settings" @@ -366,7 +366,7 @@ msgstr "Gå till filsektionen" msgctxt "#31111" msgid "View your personal pictures or download one of the many image add-ons from the official repository." -msgstr "Visa dina personliga bilder eller ladda ner en av de många bild tilläggen från det officiella förrådet." +msgstr "Visa dina personliga bilder eller hämta en av de många bild tilläggen från det officiella förrådet." msgctxt "#31112" msgid "Toggle audio stream" @@ -394,7 +394,7 @@ msgstr "Gå till tilläggsutforskaren" msgctxt "#31119" msgid "You do not have any add-ons installed yet. Visit our add-on browser to browse through our collection and improve your Kodi experience." -msgstr "Du har inte några tillägg installerade ännu. Besök vår tilläggsutforskare för att bläddra igenom vår samling och förbättra din Kodi upplevelse." +msgstr "Du har inte några tillägg installerade ännu. Besök vår tilläggsutforskare för att bläddra igenom vår samling och förbättra din Kodi-upplevelse." msgctxt "#31120" msgid "You did not set up a weather provider yet. In order to view weather information, choose a weather provider and set up your location." @@ -452,6 +452,10 @@ msgctxt "#31134" msgid "Remaining" msgstr "Återstående" +msgctxt "#31135" +msgid "Binary" +msgstr "Binär" + msgctxt "#31136" msgid "Click here to see latest changes..." msgstr "Klicka här för att se de senaste ändringarna..." @@ -554,7 +558,7 @@ msgstr "Numerisk knappsats" msgctxt "#31162" msgid "Play your personal games or download one of the many game add-ons from the official repository." -msgstr "Spela dina egna spel eller ladda ned någon av de många speltillägg från det officiella förrådet." +msgstr "Spela dina egna spel eller hämta någon av de många speltilläggen från det officiella förrådet." msgctxt "#31163" msgid "Show Fanart background" @@ -575,3 +579,7 @@ msgstr "Profil avatar" msgctxt "#31167" msgid "Animate background" msgstr "Animera bakgrund" + +msgctxt "#31169" +msgid "Artwork related settings." +msgstr "Inställningar för omslag." diff --git a/addons/skin.estuary/language/resource.language.zh_cn/strings.po b/addons/skin.estuary/language/resource.language.zh_cn/strings.po index 581fe86652..7454334eb7 100644 --- a/addons/skin.estuary/language/resource.language.zh_cn/strings.po +++ b/addons/skin.estuary/language/resource.language.zh_cn/strings.po @@ -212,6 +212,14 @@ msgctxt "#31053" msgid "Arial based" msgstr "基于 Arial 字体" +msgctxt "#31054" +msgid "Press [B]Left[/B] to step back, or [B]Right[/B] to step forward" +msgstr "按[B]左[/B]后退,或按[B]右[/B]快进" + +msgctxt "#31055" +msgid "Press [B]Right[/B] to frame advance" +msgstr "按[B]右[/B]以帧快进" + msgctxt "#31056" msgid "Go to playlist" msgstr "进入播放列表" @@ -516,6 +524,10 @@ msgctxt "#31149" msgid "Select genre fanart pack" msgstr "选择类型同人画包" +msgctxt "#31150" +msgid "Origin" +msgstr "原始" + msgctxt "#31151" msgid "Unwatched music videos" msgstr "未观看音乐电视" @@ -583,3 +595,11 @@ msgstr "用户配置头像" msgctxt "#31167" msgid "Animate background" msgstr "动态背景" + +msgctxt "#31168" +msgid "Show posters instead of thumbs for musicvideos" +msgstr "对于音乐电视,显示海报而不是缩略图" + +msgctxt "#31169" +msgid "Artwork related settings." +msgstr "艺术图片相关的设置。" diff --git a/addons/skin.estuary/xml/MusicVisualisation.xml b/addons/skin.estuary/xml/MusicVisualisation.xml index 23a2da5411..fbfd03770b 100644 --- a/addons/skin.estuary/xml/MusicVisualisation.xml +++ b/addons/skin.estuary/xml/MusicVisualisation.xml @@ -94,7 +94,7 @@ <orientation>horizontal</orientation> <itemgap>20</itemgap> <control type="label"> - <width>90</width> + <width>100</width> <height>40</height> <label>$INFO[MusicPlayer.Year]</label> <font>font37</font> diff --git a/tools/buildsteps/jenkins_docs/README.mac b/tools/buildsteps/jenkins_docs/README.mac index e399dfed68..edbf52c761 100644 --- a/tools/buildsteps/jenkins_docs/README.mac +++ b/tools/buildsteps/jenkins_docs/README.mac @@ -4,13 +4,13 @@ This are the steps to be done for configuring a mac for being a build slave to t 1. setup user jenkins as follows: # create jenkins group -NEXT_GID=$((`dscl /Local/Default list /Groups gid | awk '{ print $2 }' | sort -n | grep -v ^[5-9] | tail -n1` + 1)) +NEXT_GID=$((`dscl /Local/Default list /Groups gid | awk '{ print $2 }' | sort -n | grep -v '^[5-9]' | tail -n1` + 1)) sudo dscl /Local/Default create /Groups/jenkins sudo dscl /Local/Default create /Groups/jenkins PrimaryGroupID $NEXT_GID sudo dscl /Local/Default create /Groups/jenkins Password \* sudo dscl /Local/Default create /Groups/jenkins RealName 'Jenkins Node Service' # create jenkins user -NEXT_UID=$((`dscl /Local/Default list /Users uid | awk '{ print $2 }' | sort -n | grep -v ^[5-9] | tail -n1` + 1)) +NEXT_UID=$((`dscl /Local/Default list /Users uid | awk '{ print $2 }' | sort -n | grep -v '^[5-9]' | tail -n1` + 1)) sudo dscl /Local/Default create /Users/jenkins sudo dscl /Local/Default create /Users/jenkins UniqueID $NEXT_UID sudo dscl /Local/Default create /Users/jenkins PrimaryGroupID $NEXT_GID @@ -78,23 +78,23 @@ java -Djava.awt.headless=true -jar slave.jar -jar-cache /Users/Shared/jenkins/ca </dict> </plist> -13. sudo cp /Users/Shared/jenkins/slave/org.jenkins-ci.slave.jnlp.plist /Library/LaunchDaemons/org.jenkins-ci.slave.jnlp.plist +13. sudo mv /Users/Shared/jenkins/slave/org.jenkins-ci.slave.jnlp.plist /Library/LaunchDaemons/org.jenkins-ci.slave.jnlp.plist 14. sudo nano /etc/profile and add PATH=$PATH:/usr/local/bin -15. curl http://jenkins.kodi.tv/jnlpJars/slave.jar -o /Users/Shared/jenkins/slave.jar +15. curl http://jenkins.kodi.tv/jnlpJars/slave.jar -Lo /Users/Shared/jenkins/slave.jar -16. install java JDK +16. install java JDK 8 -17. Install xcode 10.2 to /Applications/Xcode10.2.app (get it from developer.apple.com -> Downloads) and start it once (accept license) +17. Install Xcode (get it from developer.apple.com -> Downloads) and start it once (accept license): +- 10.2 to /Applications/Xcode10.2.app - for macOS and iOS builds +- 11.3.1 to /Applications/Xcode11.3.1.app - for tvOS builds -18. Install xcode 9.0 to /Applications/Xcode9.0.app (get it from developer.apple.com -> Downloads) and start it once (accept license) +18. install brew -19. install brew +19. install ccache via brew (brew install ccache) -20. install ccache via brew (brew install ccache) +20. edit /var/lib/jenkins/.ccache/ccache.conf and set max_size to 20.0G (this file might just appear after the first build done on the node) -21. edit /var/lib/jenkins/.ccache/ccache.conf and set max_size to 15.0G (this file might just appear after the first build done on the node) - -22. load service: +21. load service: sudo launchctl load /Library/LaunchDaemons/org.jenkins-ci.slave.jnlp.plist diff --git a/xbmc/Application.cpp b/xbmc/Application.cpp index 63ecac13bf..e8fd212f15 100644 --- a/xbmc/Application.cpp +++ b/xbmc/Application.cpp @@ -3902,6 +3902,10 @@ bool CApplication::OnMessage(CGUIMessage& message) // show info dialog about moved configuration files if needed ShowAppMigrationMessage(); + // offer enabling addons at kodi startup that are disabled due to + // e.g. os package manager installation on linux + ConfigureAndEnableAddons(); + m_bInitializing = false; if (message.GetSenderId() == WINDOW_SETTINGS_PROFILES) @@ -4179,6 +4183,65 @@ void CApplication::ShowAppMigrationMessage() } } +void CApplication::ConfigureAndEnableAddons() +{ + std::vector<std::shared_ptr<IAddon>> + disabledAddons; /*!< Installed addons, but not auto-enabled via manifest */ + + auto& addonMgr = CServiceBroker::GetAddonMgr(); + + if (addonMgr.GetDisabledAddons(disabledAddons) && !disabledAddons.empty()) + { + // only look at disabled addons with disabledReason == NONE + // usually those are installed from package managers or manually. omit add-ons of type dependecy + // also try to enable add-ons with disabledReason == INCOMPATIBLE at startup + + for (const auto& addon : disabledAddons) + { + if (addonMgr.IsAddonDisabledWithReason(addon->ID(), ADDON::AddonDisabledReason::INCOMPATIBLE)) + { + auto addonInfo = addonMgr.GetAddonInfo(addon->ID()); + if (addonInfo && addonMgr.IsCompatible(addonInfo)) + { + CLog::Log(LOGDEBUG, "CApplication::{}: enabling the compatible version of [{}].", + __FUNCTION__, addon->ID()); + addonMgr.EnableAddon(addon->ID()); + } + continue; + } + + if (addonMgr.IsAddonDisabledExcept(addon->ID(), ADDON::AddonDisabledReason::NONE) || + CAddonType::IsDependencyType(addon->MainType())) + { + continue; + } + + if (HELPERS::ShowYesNoDialogLines(CVariant{24039}, // Disabled add-ons + CVariant{24059}, // Would you like to enable this add-on? + CVariant{addon->Name()}) == DialogResponse::YES) + { + if (addon->HasSettings()) + { + if (CGUIDialogAddonSettings::ShowForAddon(addon)) + { + // only enable if settings dialog hasn't been cancelled + addonMgr.EnableAddon(addon->ID()); + } + } + else + { + addonMgr.EnableAddon(addon->ID()); + } + } + else + { + // user chose not to configure/enable so we're not asking anymore + addonMgr.UpdateDisabledReason(addon->ID(), ADDON::AddonDisabledReason::USER); + } + } + } +} + void CApplication::Process() { // dispatch the messages generated by python or other threads to the current window diff --git a/xbmc/Application.h b/xbmc/Application.h index 050f11afc0..5460794eab 100644 --- a/xbmc/Application.h +++ b/xbmc/Application.h @@ -207,6 +207,7 @@ public: void ActivateScreenSaver(bool forceType = false); void CloseNetworkShares(); + void ConfigureAndEnableAddons(); void ShowAppMigrationMessage(); void Process() override; void ProcessSlow(); diff --git a/xbmc/addons/AddonManager.cpp b/xbmc/addons/AddonManager.cpp index 0e4098e7d2..5c415f41f4 100644 --- a/xbmc/addons/AddonManager.cpp +++ b/xbmc/addons/AddonManager.cpp @@ -795,6 +795,22 @@ bool CAddonMgr::DisableAddon(const std::string& id, AddonDisabledReason disabled return true; } +bool CAddonMgr::UpdateDisabledReason(const std::string& id, AddonDisabledReason newDisabledReason) +{ + CSingleLock lock(m_critSection); + if (!IsAddonDisabled(id)) + return false; + if (!m_database.DisableAddon(id, newDisabledReason)) + return false; + + m_disabled[id] = newDisabledReason; + + // success + CLog::Log(LOGDEBUG, "CAddonMgr: DisabledReason for {} updated to {}", id, + static_cast<int>(newDisabledReason)); + return true; +} + bool CAddonMgr::EnableSingle(const std::string& id) { CSingleLock lock(m_critSection); @@ -810,6 +826,7 @@ bool CAddonMgr::EnableSingle(const std::string& id) { CLog::Log(LOGERROR, "Add-on '%s' is not compatible with Kodi", addon->ID().c_str()); CServiceBroker::GetEventLog().AddWithNotification(EventPtr(new CNotificationEvent(addon->Name(), 24152, EventLevel::Error))); + UpdateDisabledReason(addon->ID(), AddonDisabledReason::INCOMPATIBLE); return false; } diff --git a/xbmc/addons/AddonManager.h b/xbmc/addons/AddonManager.h index 346ae3ef96..cf40fa7c00 100644 --- a/xbmc/addons/AddonManager.h +++ b/xbmc/addons/AddonManager.h @@ -226,6 +226,9 @@ namespace ADDON /*! \brief Disable an addon. Returns true on success, false on failure. */ bool DisableAddon(const std::string& ID, AddonDisabledReason disabledReason); + /*! \brief Updates reason for a disabled addon. Returns true on success, false on failure. */ + bool UpdateDisabledReason(const std::string& id, AddonDisabledReason newDisabledReason); + /*! \brief Enable an addon. Returns true on success, false on failure. */ bool EnableAddon(const std::string& ID); diff --git a/xbmc/addons/gui/GUIDialogAddonSettings.h b/xbmc/addons/gui/GUIDialogAddonSettings.h index 42c8c5ca67..88cdcb70ed 100644 --- a/xbmc/addons/gui/GUIDialogAddonSettings.h +++ b/xbmc/addons/gui/GUIDialogAddonSettings.h @@ -36,7 +36,7 @@ protected: // implementation of CGUIDialogSettingsManagerBase bool AllowResettingSettings() const override { return false; } - void Save() override {} + bool Save() override { return true; } CSettingsManager* GetSettingsManager() const override; // implementation of ISettingCallback diff --git a/xbmc/dialogs/GUIDialogMediaFilter.h b/xbmc/dialogs/GUIDialogMediaFilter.h index dd87b034e7..41bfa5590d 100644 --- a/xbmc/dialogs/GUIDialogMediaFilter.h +++ b/xbmc/dialogs/GUIDialogMediaFilter.h @@ -59,7 +59,7 @@ protected: // specialization of CGUIDialogSettingsBase bool AllowResettingSettings() const override { return false; } - void Save() override { } + bool Save() override { return true; } unsigned int GetDelayMs() const override { return 500; } // specialization of CGUIDialogSettingsManualBase diff --git a/xbmc/interfaces/json-rpc/schema/version.txt b/xbmc/interfaces/json-rpc/schema/version.txt index 735ba49936..575fd3194e 100644 --- a/xbmc/interfaces/json-rpc/schema/version.txt +++ b/xbmc/interfaces/json-rpc/schema/version.txt @@ -1 +1 @@ -JSONRPC_VERSION 11.21.1 +JSONRPC_VERSION 12.0.0 diff --git a/xbmc/music/dialogs/GUIDialogInfoProviderSettings.cpp b/xbmc/music/dialogs/GUIDialogInfoProviderSettings.cpp index 8f63fc66ef..97c3709922 100644 --- a/xbmc/music/dialogs/GUIDialogInfoProviderSettings.cpp +++ b/xbmc/music/dialogs/GUIDialogInfoProviderSettings.cpp @@ -242,10 +242,10 @@ void CGUIDialogInfoProviderSettings::OnSettingAction(const std::shared_ptr<const } } -void CGUIDialogInfoProviderSettings::Save() +bool CGUIDialogInfoProviderSettings::Save() { if (m_showSingleScraper) - return; //Save done by caller of ::Show + return true; //Save done by caller of ::Show // Save default settings for fetching additional information and art CLog::Log(LOGINFO, "%s called", __FUNCTION__); @@ -260,6 +260,8 @@ void CGUIDialogInfoProviderSettings::Save() // Save artist information folder settings->SetString(CSettings::SETTING_MUSICLIBRARY_ARTISTSFOLDER, m_strArtistInfoPath); settings->Save(); + + return true; } void CGUIDialogInfoProviderSettings::SetupView() diff --git a/xbmc/music/dialogs/GUIDialogInfoProviderSettings.h b/xbmc/music/dialogs/GUIDialogInfoProviderSettings.h index 7a9cb7d268..effa51db52 100644 --- a/xbmc/music/dialogs/GUIDialogInfoProviderSettings.h +++ b/xbmc/music/dialogs/GUIDialogInfoProviderSettings.h @@ -62,7 +62,7 @@ protected: // specialization of CGUIDialogSettingsBase bool AllowResettingSettings() const override { return false; } - void Save() override; + bool Save() override; void SetupView() override; // specialization of CGUIDialogSettingsManualBase diff --git a/xbmc/network/GUIDialogNetworkSetup.h b/xbmc/network/GUIDialogNetworkSetup.h index 1758766475..c4f6959d0e 100644 --- a/xbmc/network/GUIDialogNetworkSetup.h +++ b/xbmc/network/GUIDialogNetworkSetup.h @@ -47,7 +47,7 @@ protected: // specialization of CGUIDialogSettingsBase bool AllowResettingSettings() const override { return false; } - void Save() override { } + bool Save() override { return true; } void SetupView() override; // specialization of CGUIDialogSettingsManualBase diff --git a/xbmc/peripherals/dialogs/GUIDialogPeripheralSettings.cpp b/xbmc/peripherals/dialogs/GUIDialogPeripheralSettings.cpp index 56fcd28a92..d44ae883b3 100644 --- a/xbmc/peripherals/dialogs/GUIDialogPeripheralSettings.cpp +++ b/xbmc/peripherals/dialogs/GUIDialogPeripheralSettings.cpp @@ -77,16 +77,18 @@ void CGUIDialogPeripheralSettings::OnSettingChanged(const std::shared_ptr<const itSetting->second->FromString(setting->ToString()); } -void CGUIDialogPeripheralSettings::Save() +bool CGUIDialogPeripheralSettings::Save() { if (m_item == NULL || m_initialising) - return; + return true; PeripheralPtr peripheral = CServiceBroker::GetPeripherals().GetByPath(m_item->GetPath()); if (!peripheral) - return; + return true; peripheral->PersistSettings(); + + return true; } void CGUIDialogPeripheralSettings::OnResetSettings() diff --git a/xbmc/peripherals/dialogs/GUIDialogPeripheralSettings.h b/xbmc/peripherals/dialogs/GUIDialogPeripheralSettings.h index d94d53dada..89022aa85f 100644 --- a/xbmc/peripherals/dialogs/GUIDialogPeripheralSettings.h +++ b/xbmc/peripherals/dialogs/GUIDialogPeripheralSettings.h @@ -31,7 +31,7 @@ protected: // specialization of CGUIDialogSettingsBase bool AllowResettingSettings() const override { return false; } - void Save() override; + bool Save() override; void OnResetSettings() override; void SetupView() override; diff --git a/xbmc/profiles/dialogs/GUIDialogLockSettings.h b/xbmc/profiles/dialogs/GUIDialogLockSettings.h index 4ad482a6bd..bdcaed7107 100644 --- a/xbmc/profiles/dialogs/GUIDialogLockSettings.h +++ b/xbmc/profiles/dialogs/GUIDialogLockSettings.h @@ -28,7 +28,7 @@ protected: // specialization of CGUIDialogSettingsBase bool AllowResettingSettings() const override { return false; } - void Save() override { } + bool Save() override { return true; } void OnCancel() override; void SetupView() override; diff --git a/xbmc/profiles/dialogs/GUIDialogProfileSettings.h b/xbmc/profiles/dialogs/GUIDialogProfileSettings.h index a17ccaa844..5b6f14e24f 100644 --- a/xbmc/profiles/dialogs/GUIDialogProfileSettings.h +++ b/xbmc/profiles/dialogs/GUIDialogProfileSettings.h @@ -31,7 +31,7 @@ protected: // specialization of CGUIDialogSettingsBase bool AllowResettingSettings() const override { return false; } - void Save() override { } + bool Save() override { return true; } void OnCancel() override; void SetupView() override; diff --git a/xbmc/pvr/channels/PVRChannel.cpp b/xbmc/pvr/channels/PVRChannel.cpp index 09a68fe784..7a8169baa6 100644 --- a/xbmc/pvr/channels/PVRChannel.cpp +++ b/xbmc/pvr/channels/PVRChannel.cpp @@ -118,10 +118,7 @@ bool CPVRChannel::QueueDelete() const std::shared_ptr<CPVREpg> epg = GetEPG(); if (epg) - { - CServiceBroker::GetPVRManager().EpgContainer().QueueDeleteEpg(epg); ResetEPG(); - } bReturn = database->QueueDeleteQuery(*this); return bReturn; diff --git a/xbmc/pvr/channels/PVRChannel.h b/xbmc/pvr/channels/PVRChannel.h index 0e59a9a416..ef4b6f4bbf 100644 --- a/xbmc/pvr/channels/PVRChannel.h +++ b/xbmc/pvr/channels/PVRChannel.h @@ -452,6 +452,16 @@ namespace PVR */ void Notify(const PVREvent& event); + /*! + * @brief Lock the instance. No other thread gets access to this channel until Unlock was called. + */ + void Lock() { m_critSection.lock(); } + + /*! + * @brief Unlock the instance. Other threads may get access to this channel again. + */ + void Unlock() { m_critSection.unlock(); } + //@} private: CPVRChannel(); diff --git a/xbmc/pvr/channels/PVRChannelGroupInternal.cpp b/xbmc/pvr/channels/PVRChannelGroupInternal.cpp index fe21c30975..74bc4c560d 100644 --- a/xbmc/pvr/channels/PVRChannelGroupInternal.cpp +++ b/xbmc/pvr/channels/PVRChannelGroupInternal.cpp @@ -17,7 +17,6 @@ #include "pvr/addons/PVRClients.h" #include "pvr/channels/PVRChannel.h" #include "pvr/epg/EpgContainer.h" -#include "pvr/epg/EpgDatabase.h" #include "utils/Variant.h" #include "utils/log.h" @@ -282,46 +281,52 @@ bool CPVRChannelGroupInternal::AddAndUpdateChannels(const CPVRChannelGroup& chan std::vector<std::shared_ptr<CPVRChannel>> CPVRChannelGroupInternal::RemoveDeletedChannels(const CPVRChannelGroup& channels) { std::vector<std::shared_ptr<CPVRChannel>> removedChannels = CPVRChannelGroup::RemoveDeletedChannels(channels); - - bool channelsDeleted = false; - - const std::shared_ptr<CPVRDatabase> database = CServiceBroker::GetPVRManager().GetTVDatabase(); - const std::shared_ptr<CPVREpgDatabase> epgDatabase = - CServiceBroker::GetPVRManager().EpgContainer().GetEpgDatabase(); - if (!database || !epgDatabase) - { - CLog::LogF(LOGERROR, "No TV or EPG database"); - } - else + if (!removedChannels.empty()) { - // Note: We must lock the dbs the whole time, otherwise races may occur. - database->Lock(); - epgDatabase->Lock(); + bool channelsDeleted = false; - for (const auto& channel : removedChannels) + const std::shared_ptr<CPVRDatabase> database = CServiceBroker::GetPVRManager().GetTVDatabase(); + if (!database) { - // since channel was not found in the internal group, it was deleted from the backend - channelsDeleted |= channel->QueueDelete(); + CLog::LogF(LOGERROR, "No TV database"); + } + else + { + std::vector<std::shared_ptr<CPVREpg>> epgsToRemove; + + for (const auto& channel : removedChannels) + { + const auto epg = channel->GetEPG(); + if (epg) + epgsToRemove.emplace_back(epg); - size_t queryCount = epgDatabase->GetDeleteQueriesCount(); - if (queryCount > EPG_COMMIT_QUERY_COUNT_LIMIT) - epgDatabase->CommitDeleteQueries(); + // Note: We need to obtain a lock for every channel instance before we can lock + // the TV db. This order is important. Otherwise deadlocks may occur. + channel->Lock(); + } + + // Note: We must lock the db the whole time, otherwise races may occur. + database->Lock(); + for (const auto& channel : removedChannels) + { + // since channel was not found in the internal group, it was deleted from the backend + channelsDeleted |= channel->QueueDelete(); + channel->Unlock(); + + size_t queryCount = database->GetDeleteQueriesCount(); + if (queryCount > CHANNEL_COMMIT_QUERY_COUNT_LIMIT) + database->CommitDeleteQueries(); + } - queryCount = database->GetDeleteQueriesCount(); - if (queryCount > CHANNEL_COMMIT_QUERY_COUNT_LIMIT) + if (channelsDeleted) database->CommitDeleteQueries(); - } - if (channelsDeleted) - { - epgDatabase->CommitDeleteQueries(); - database->CommitDeleteQueries(); - } + database->Unlock(); - epgDatabase->Unlock(); - database->Unlock(); + // delete the EPG data for the removed channels + CServiceBroker::GetPVRManager().EpgContainer().QueueDeleteEpgs(epgsToRemove); + } } - return removedChannels; } diff --git a/xbmc/pvr/dialogs/GUIDialogPVRClientPriorities.cpp b/xbmc/pvr/dialogs/GUIDialogPVRClientPriorities.cpp index 5e9ac641d9..faedba85d7 100644 --- a/xbmc/pvr/dialogs/GUIDialogPVRClientPriorities.cpp +++ b/xbmc/pvr/dialogs/GUIDialogPVRClientPriorities.cpp @@ -89,7 +89,7 @@ void CGUIDialogPVRClientPriorities::OnSettingChanged(const std::shared_ptr<const m_changedValues[setting->GetId()] = std::static_pointer_cast<const CSettingInt>(setting)->GetValue(); } -void CGUIDialogPVRClientPriorities::Save() +bool CGUIDialogPVRClientPriorities::Save() { for (const auto& changedClient : m_changedValues) { @@ -98,4 +98,6 @@ void CGUIDialogPVRClientPriorities::Save() if (clientEntry != m_clients.end()) clientEntry->second->SetPriority(changedClient.second); } + + return true; } diff --git a/xbmc/pvr/dialogs/GUIDialogPVRClientPriorities.h b/xbmc/pvr/dialogs/GUIDialogPVRClientPriorities.h index 6cd9ce2c3d..a6ca62dd6f 100644 --- a/xbmc/pvr/dialogs/GUIDialogPVRClientPriorities.h +++ b/xbmc/pvr/dialogs/GUIDialogPVRClientPriorities.h @@ -28,7 +28,7 @@ namespace PVR // specialization of CGUIDialogSettingsBase std::string GetSettingsLabel(const std::shared_ptr<ISetting>& pSetting) override; bool AllowResettingSettings() const override { return false; } - void Save() override; + bool Save() override; void SetupView() override; // specialization of CGUIDialogSettingsManualBase diff --git a/xbmc/pvr/dialogs/GUIDialogPVRRecordingSettings.cpp b/xbmc/pvr/dialogs/GUIDialogPVRRecordingSettings.cpp index d08999cce4..e9ae166be0 100644 --- a/xbmc/pvr/dialogs/GUIDialogPVRRecordingSettings.cpp +++ b/xbmc/pvr/dialogs/GUIDialogPVRRecordingSettings.cpp @@ -168,7 +168,7 @@ void CGUIDialogPVRRecordingSettings::OnSettingChanged( } } -void CGUIDialogPVRRecordingSettings::Save() +bool CGUIDialogPVRRecordingSettings::Save() { // Name m_recording->m_strTitle = m_strTitle; @@ -178,6 +178,8 @@ void CGUIDialogPVRRecordingSettings::Save() // Lifetime m_recording->m_iLifetime = m_iLifetime; + + return true; } void CGUIDialogPVRRecordingSettings::LifetimesFiller(const SettingConstPtr& setting, diff --git a/xbmc/pvr/dialogs/GUIDialogPVRRecordingSettings.h b/xbmc/pvr/dialogs/GUIDialogPVRRecordingSettings.h index f5dd9566ce..11c88a6917 100644 --- a/xbmc/pvr/dialogs/GUIDialogPVRRecordingSettings.h +++ b/xbmc/pvr/dialogs/GUIDialogPVRRecordingSettings.h @@ -38,7 +38,7 @@ namespace PVR // specialization of CGUIDialogSettingsBase bool AllowResettingSettings() const override { return false; } - void Save() override; + bool Save() override; void SetupView() override; // specialization of CGUIDialogSettingsManualBase diff --git a/xbmc/pvr/dialogs/GUIDialogPVRTimerSettings.cpp b/xbmc/pvr/dialogs/GUIDialogPVRTimerSettings.cpp index c7ddadf7ec..c328b22d4b 100644 --- a/xbmc/pvr/dialogs/GUIDialogPVRTimerSettings.cpp +++ b/xbmc/pvr/dialogs/GUIDialogPVRTimerSettings.cpp @@ -12,6 +12,7 @@ #include "dialogs/GUIDialogNumeric.h" #include "guilib/GUIMessage.h" #include "guilib/LocalizeStrings.h" +#include "messaging/helpers/DialogOKHelper.h" #include "pvr/PVRManager.h" #include "pvr/addons/PVRClient.h" #include "pvr/addons/PVRClients.h" @@ -22,7 +23,6 @@ #include "pvr/timers/PVRTimerInfoTag.h" #include "pvr/timers/PVRTimerType.h" #include "settings/SettingUtils.h" -#include "settings/Settings.h" #include "settings/dialogs/GUIDialogSettingsBase.h" #include "settings/lib/Setting.h" #include "settings/lib/SettingsManager.h" @@ -37,6 +37,7 @@ #include <vector> using namespace PVR; +using namespace KODI::MESSAGING; #define SETTING_TMR_TYPE "timer.type" #define SETTING_TMR_ACTIVE "timer.active" @@ -67,10 +68,9 @@ using namespace PVR; #define START_ANYTIME_DEP_VISIBI_COND_ID_POSTFIX "visibi.startanytimedep" #define END_ANYTIME_DEP_VISIBI_COND_ID_POSTFIX "visibi.endanytimedep" -CGUIDialogPVRTimerSettings::CGUIDialogPVRTimerSettings() - : CGUIDialogSettingsManualBase(WINDOW_DIALOG_PVR_TIMER_SETTING, "DialogSettings.xml"), - m_settings({CSettings::SETTING_PVRRECORD_INSTANTRECORDTIME}), - m_iWeekdays(PVR_WEEKDAY_NONE) +CGUIDialogPVRTimerSettings::CGUIDialogPVRTimerSettings() : + CGUIDialogSettingsManualBase(WINDOW_DIALOG_PVR_TIMER_SETTING, "DialogSettings.xml"), + m_iWeekdays(PVR_WEEKDAY_NONE) { m_loadType = LOAD_EVERY_TIME; } @@ -528,8 +528,41 @@ void CGUIDialogPVRTimerSettings::OnSettingAction(const std::shared_ptr<const CSe } } -void CGUIDialogPVRTimerSettings::Save() +bool CGUIDialogPVRTimerSettings::Validate() { + bool bStartAnyTime = m_bStartAnyTime; + bool bEndAnyTime = m_bEndAnyTime; + + if (!m_timerType->SupportsStartAnyTime() || + !m_timerType->IsEpgBased()) // Start anytime toggle is not displayed + bStartAnyTime = false; // Assume start time change needs checking for + + if (!m_timerType->SupportsEndAnyTime() || + !m_timerType->IsEpgBased()) // End anytime toggle is not displayed + bEndAnyTime = false; // Assume end time change needs checking for + + // Begin and end time + if (!bStartAnyTime && !bEndAnyTime) + { + if (!(m_timerType->SupportsStartTime() && // has start clock entry + m_timerType->SupportsEndTime() && // and end clock entry + m_timerType->IsTimerRule()) && // but no associated start/end day spinners + m_endLocalTime < m_startLocalTime) + { + HELPERS::ShowOKDialogText(CVariant{19065}, // "Timer settings" + CVariant{19072}); // In order to add/update a timer + return false; + } + } + + return true; +} + +bool CGUIDialogPVRTimerSettings::Save() +{ + if (!Validate()) + return false; + // Timer type m_timerInfoTag->SetTimerType(m_timerType); @@ -587,15 +620,9 @@ void CGUIDialogPVRTimerSettings::Save() } } } - else if (m_endLocalTime <= m_startLocalTime) // Use a sensible default if end time is invalid + else if (m_endLocalTime < m_startLocalTime) { - int iDefaultDurationMins = - m_settings.GetIntValue(CSettings::SETTING_PVRRECORD_INSTANTRECORDTIME); - CLog::Log(LOGWARNING, - "Timer settings dialog: Specified recording end time < start. Setting " - "end time to start time plus instant timer duration of {} minutes.", - iDefaultDurationMins); - m_endLocalTime = m_startLocalTime + CDateTimeSpan(0, 0, iDefaultDurationMins, 0); + // this case will fail validation so this can't be reached. } m_timerInfoTag->SetStartFromLocalTime(m_startLocalTime); m_timerInfoTag->SetEndFromLocalTime(m_endLocalTime); @@ -646,6 +673,8 @@ void CGUIDialogPVRTimerSettings::Save() // Update summary m_timerInfoTag->UpdateSummary(); + + return true; } void CGUIDialogPVRTimerSettings::SetButtonLabels() diff --git a/xbmc/pvr/dialogs/GUIDialogPVRTimerSettings.h b/xbmc/pvr/dialogs/GUIDialogPVRTimerSettings.h index 05b35a1180..cf7458a98c 100644 --- a/xbmc/pvr/dialogs/GUIDialogPVRTimerSettings.h +++ b/xbmc/pvr/dialogs/GUIDialogPVRTimerSettings.h @@ -9,7 +9,6 @@ #pragma once #include "addons/kodi-dev-kit/include/kodi/c-api/addon-instance/pvr/pvr_channels.h" // PVR_CHANNEL_INVALID_UID -#include "pvr/settings/PVRSettings.h" #include "settings/SettingConditions.h" #include "settings/dialogs/GUIDialogSettingsManualBase.h" #include "settings/lib/SettingDependency.h" @@ -46,13 +45,14 @@ namespace PVR // specialization of CGUIDialogSettingsBase bool AllowResettingSettings() const override { return false; } - void Save() override; + bool Save() override; void SetupView() override; // specialization of CGUIDialogSettingsManualBase void InitializeSettings() override; private: + bool Validate(); void InitializeTypesList(); void InitializeChannelsList(); void SetButtonLabels(); @@ -164,8 +164,6 @@ namespace PVR } ChannelDescriptor; - CPVRSettings m_settings; - typedef std::map <int, ChannelDescriptor> ChannelEntriesMap; std::shared_ptr<CPVRTimerInfoTag> m_timerInfoTag; diff --git a/xbmc/pvr/epg/EpgContainer.cpp b/xbmc/pvr/epg/EpgContainer.cpp index 08e68e4add..867c6db0e4 100644 --- a/xbmc/pvr/epg/EpgContainer.cpp +++ b/xbmc/pvr/epg/EpgContainer.cpp @@ -268,7 +268,7 @@ bool CPVREpgContainer::PersistAll(unsigned int iMaxTimeslice) const if (epg.second && epg.second->NeedsSave()) { // Note: We need to obtain a lock for every epg instance before we can lock - // the epg db. This order is important. Otherwise deadlocks may occure. + // the epg db. This order is important. Otherwise deadlocks may occur. epg.second->Lock(); changedEpgs.emplace_back(epg.second); } @@ -279,7 +279,7 @@ bool CPVREpgContainer::PersistAll(unsigned int iMaxTimeslice) const if (!changedEpgs.empty()) { - // Note: We must lock the db the whole time, otherwise races may occure. + // Note: We must lock the db the whole time, otherwise races may occur. database->Lock(); XbmcThreads::EndTime processTimeslice(iMaxTimeslice); @@ -612,6 +612,41 @@ bool CPVREpgContainer::RemoveOldEntries() return true; } +bool CPVREpgContainer::QueueDeleteEpgs(const std::vector<std::shared_ptr<CPVREpg>>& epgs) +{ + if (epgs.empty()) + return true; + + const std::shared_ptr<CPVREpgDatabase> database = GetEpgDatabase(); + if (!database) + { + CLog::LogF(LOGERROR, "No EPG database"); + return false; + } + + for (const auto& epg : epgs) + { + // Note: We need to obtain a lock for every epg instance before we can lock + // the epg db. This order is important. Otherwise deadlocks may occur. + epg->Lock(); + } + + database->Lock(); + for (const auto& epg : epgs) + { + QueueDeleteEpg(epg); + epg->Unlock(); + + size_t queryCount = database->GetDeleteQueriesCount(); + if (queryCount > EPG_COMMIT_QUERY_COUNT_LIMIT) + database->CommitDeleteQueries(); + } + database->CommitDeleteQueries(); + database->Unlock(); + + return true; +} + bool CPVREpgContainer::QueueDeleteEpg(const std::shared_ptr<CPVREpg>& epg) { if (!epg || epg->EpgID() < 0) @@ -747,17 +782,7 @@ bool CPVREpgContainer::UpdateEPG(bool bOnlyPending /* = false */) if (bShowProgress && !bOnlyPending) progressHandler->DestroyProgress(); - database->Lock(); - for (const auto& epg : invalidTables) - { - QueueDeleteEpg(epg); - - size_t queryCount = database->GetDeleteQueriesCount(); - if (queryCount > EPG_COMMIT_QUERY_COUNT_LIMIT) - database->CommitDeleteQueries(); - } - database->CommitDeleteQueries(); - database->Unlock(); + QueueDeleteEpgs(invalidTables); if (bInterrupted) { diff --git a/xbmc/pvr/epg/EpgContainer.h b/xbmc/pvr/epg/EpgContainer.h index 19ab97003e..0847c8a8de 100644 --- a/xbmc/pvr/epg/EpgContainer.h +++ b/xbmc/pvr/epg/EpgContainer.h @@ -91,11 +91,11 @@ namespace PVR bool IsStarted() const; /*! - * @brief Queue the deletion of an EPG table from this container. - * @param epg The table to delete. + * @brief Queue the deletion of the given EPG tables from this container. + * @param epg The tables to delete. * @return True on success, false otherwise. */ - bool QueueDeleteEpg(const std::shared_ptr<CPVREpg>& epg); + bool QueueDeleteEpgs(const std::vector<std::shared_ptr<CPVREpg>>& epgs); /*! * @brief CEventStream callback for PVR events. @@ -280,6 +280,13 @@ namespace PVR */ void InsertFromDB(const std::shared_ptr<CPVREpg>& newEpg); + /*! + * @brief Queue the deletion of an EPG table from this container. + * @param epg The table to delete. + * @return True on success, false otherwise. + */ + bool QueueDeleteEpg(const std::shared_ptr<CPVREpg>& epg); + std::shared_ptr<CPVREpgDatabase> m_database; /*!< the EPG database */ bool m_bIsUpdating = false; /*!< true while an update is running */ diff --git a/xbmc/pvr/windows/GUIWindowPVRGuide.cpp b/xbmc/pvr/windows/GUIWindowPVRGuide.cpp index eedd212b09..67805e6bae 100644 --- a/xbmc/pvr/windows/GUIWindowPVRGuide.cpp +++ b/xbmc/pvr/windows/GUIWindowPVRGuide.cpp @@ -503,7 +503,8 @@ bool CGUIWindowPVRGuideBase::OnMessage(CGUIMessage& message) } } else if (message.GetSenderId() == CONTROL_BTNVIEWASICONS || - message.GetSenderId() == CONTROL_BTNSORTBY) + message.GetSenderId() == CONTROL_BTNSORTBY || + message.GetSenderId() == CONTROL_BTNSORTASC) { RefreshView(message, false); bReturn = true; diff --git a/xbmc/settings/dialogs/GUIDialogContentSettings.cpp b/xbmc/settings/dialogs/GUIDialogContentSettings.cpp index 898c5c36a5..56b0e83ad6 100644 --- a/xbmc/settings/dialogs/GUIDialogContentSettings.cpp +++ b/xbmc/settings/dialogs/GUIDialogContentSettings.cpp @@ -260,9 +260,10 @@ void CGUIDialogContentSettings::OnSettingAction(const std::shared_ptr<const CSet CGUIDialogAddonSettings::ShowForAddon(m_scraper, false); } -void CGUIDialogContentSettings::Save() +bool CGUIDialogContentSettings::Save() { //Should be saved by caller of ::Show + return true; } void CGUIDialogContentSettings::SetupView() diff --git a/xbmc/settings/dialogs/GUIDialogContentSettings.h b/xbmc/settings/dialogs/GUIDialogContentSettings.h index 1c4401c70f..7733ecca6f 100644 --- a/xbmc/settings/dialogs/GUIDialogContentSettings.h +++ b/xbmc/settings/dialogs/GUIDialogContentSettings.h @@ -56,7 +56,7 @@ protected: // specialization of CGUIDialogSettingsBase bool AllowResettingSettings() const override { return false; } - void Save() override; + bool Save() override; void SetupView() override; // specialization of CGUIDialogSettingsManualBase diff --git a/xbmc/settings/dialogs/GUIDialogLibExportSettings.cpp b/xbmc/settings/dialogs/GUIDialogLibExportSettings.cpp index 8ed9a7d79f..ee89d17507 100644 --- a/xbmc/settings/dialogs/GUIDialogLibExportSettings.cpp +++ b/xbmc/settings/dialogs/GUIDialogLibExportSettings.cpp @@ -235,7 +235,7 @@ void CGUIDialogLibExportSettings::OnOK() Close(); } -void CGUIDialogLibExportSettings::Save() +bool CGUIDialogLibExportSettings::Save() { CLog::Log(LOGINFO, "CGUIDialogMusicExportSettings: Save() called"); const std::shared_ptr<CSettings> settings = CServiceBroker::GetSettingsComponent()->GetSettings(); @@ -247,6 +247,8 @@ void CGUIDialogLibExportSettings::Save() settings->SetBool(CSettings::SETTING_MUSICLIBRARY_EXPORT_ARTWORK, m_settings.m_artwork); settings->SetBool(CSettings::SETTING_MUSICLIBRARY_EXPORT_SKIPNFO, m_settings.m_skipnfo); settings->Save(); + + return true; } void CGUIDialogLibExportSettings::SetupView() diff --git a/xbmc/settings/dialogs/GUIDialogLibExportSettings.h b/xbmc/settings/dialogs/GUIDialogLibExportSettings.h index f948057af3..dd37020f0a 100644 --- a/xbmc/settings/dialogs/GUIDialogLibExportSettings.h +++ b/xbmc/settings/dialogs/GUIDialogLibExportSettings.h @@ -33,7 +33,7 @@ protected: // specialization of CGUIDialogSettingsBase bool OnMessage(CGUIMessage& message) override; bool AllowResettingSettings() const override { return false; } - void Save() override; + bool Save() override; void SetupView() override; // specialization of CGUIDialogSettingsManualBase diff --git a/xbmc/settings/dialogs/GUIDialogSettingsBase.cpp b/xbmc/settings/dialogs/GUIDialogSettingsBase.cpp index a0a523c888..5554460b27 100644 --- a/xbmc/settings/dialogs/GUIDialogSettingsBase.cpp +++ b/xbmc/settings/dialogs/GUIDialogSettingsBase.cpp @@ -193,9 +193,13 @@ bool CGUIDialogSettingsBase::OnMessage(CGUIMessage& message) int iControl = message.GetSenderId(); if (iControl == CONTROL_SETTINGS_OKAY_BUTTON) { - OnOkay(); - Close(); - return true; + if (OnOkay()) + { + Close(); + return true; + } + + return false; } if (iControl == CONTROL_SETTINGS_CANCEL_BUTTON) diff --git a/xbmc/settings/dialogs/GUIDialogSettingsBase.h b/xbmc/settings/dialogs/GUIDialogSettingsBase.h index 940091f10f..ee44f9f229 100644 --- a/xbmc/settings/dialogs/GUIDialogSettingsBase.h +++ b/xbmc/settings/dialogs/GUIDialogSettingsBase.h @@ -95,7 +95,11 @@ protected: virtual unsigned int GetDelayMs() const { return 1500; } virtual std::string GetLocalizedString(uint32_t labelId) const; - virtual void OnOkay() { m_confirmed = true; } + virtual bool OnOkay() + { + m_confirmed = true; + return true; + } virtual void OnCancel() {} virtual void SetupView(); diff --git a/xbmc/settings/dialogs/GUIDialogSettingsManagerBase.cpp b/xbmc/settings/dialogs/GUIDialogSettingsManagerBase.cpp index daa472d30d..e01edfb079 100644 --- a/xbmc/settings/dialogs/GUIDialogSettingsManagerBase.cpp +++ b/xbmc/settings/dialogs/GUIDialogSettingsManagerBase.cpp @@ -25,11 +25,15 @@ std::shared_ptr<CSetting> CGUIDialogSettingsManagerBase::GetSetting(const std::s return GetSettingsManager()->GetSetting(settingId); } -void CGUIDialogSettingsManagerBase::OnOkay() +bool CGUIDialogSettingsManagerBase::OnOkay() { - Save(); + if (Save()) + { + CGUIDialogSettingsBase::OnOkay(); + return true; + } - CGUIDialogSettingsBase::OnOkay(); + return false; } std::set<std::string> CGUIDialogSettingsManagerBase::CreateSettings() diff --git a/xbmc/settings/dialogs/GUIDialogSettingsManagerBase.h b/xbmc/settings/dialogs/GUIDialogSettingsManagerBase.h index c1f75f4550..42c3c319c6 100644 --- a/xbmc/settings/dialogs/GUIDialogSettingsManagerBase.h +++ b/xbmc/settings/dialogs/GUIDialogSettingsManagerBase.h @@ -19,12 +19,12 @@ public: ~CGUIDialogSettingsManagerBase() override; protected: - virtual void Save() = 0; + virtual bool Save() = 0; virtual CSettingsManager* GetSettingsManager() const = 0; // implementation of CGUIDialogSettingsBase std::shared_ptr<CSetting> GetSetting(const std::string &settingId) override; - void OnOkay() override; + bool OnOkay() override; std::set<std::string> CreateSettings() override; void FreeSettingsControls() override; diff --git a/xbmc/settings/windows/GUIWindowSettingsCategory.cpp b/xbmc/settings/windows/GUIWindowSettingsCategory.cpp index 18d3cb7d58..ca6f7fd20b 100644 --- a/xbmc/settings/windows/GUIWindowSettingsCategory.cpp +++ b/xbmc/settings/windows/GUIWindowSettingsCategory.cpp @@ -186,9 +186,11 @@ SettingSectionPtr CGUIWindowSettingsCategory::GetSection() return NULL; } -void CGUIWindowSettingsCategory::Save() +bool CGUIWindowSettingsCategory::Save() { m_settings->Save(); + + return true; } CSettingsManager* CGUIWindowSettingsCategory::GetSettingsManager() const diff --git a/xbmc/settings/windows/GUIWindowSettingsCategory.h b/xbmc/settings/windows/GUIWindowSettingsCategory.h index dc5a5112c9..e1989c949f 100644 --- a/xbmc/settings/windows/GUIWindowSettingsCategory.h +++ b/xbmc/settings/windows/GUIWindowSettingsCategory.h @@ -34,7 +34,7 @@ protected: // implementation of CGUIDialogSettingsBase int GetSettingLevel() const override; std::shared_ptr<CSettingSection> GetSection() override; - void Save() override; + bool Save() override; // implementation of CGUIDialogSettingsManagerBase CSettingsManager* GetSettingsManager() const override; diff --git a/xbmc/storage/MediaManager.cpp b/xbmc/storage/MediaManager.cpp index f975294ec1..f1bb23f099 100644 --- a/xbmc/storage/MediaManager.cpp +++ b/xbmc/storage/MediaManager.cpp @@ -767,23 +767,27 @@ bool CMediaManager::playStubFile(const CFileItem& item) { // Figure out Lines 1 and 2 of the dialog std::string strLine1, strLine2; + + // use generic message by default + strLine1 = g_localizeStrings.Get(435).c_str(); + strLine2 = g_localizeStrings.Get(436).c_str(); + CXBMCTinyXML discStubXML; if (discStubXML.LoadFile(item.GetPath())) { TiXmlElement* pRootElement = discStubXML.RootElement(); if (!pRootElement || StringUtils::CompareNoCase(pRootElement->Value(), "discstub") != 0) - CLog::Log(LOGERROR, "Error loading %s, no <discstub> node", item.GetPath().c_str()); + CLog::Log(LOGINFO, "No <discstub> node found for %s. Using default info dialog message", item.GetPath().c_str()); else { XMLUtils::GetString(pRootElement, "title", strLine1); XMLUtils::GetString(pRootElement, "message", strLine2); + // no title? use the label of the CFileItem as line 1 + if (strLine1.empty()) + strLine1 = item.GetLabel(); } } - // Use the label for Line 1 if not defined - if (strLine1.empty()) - strLine1 = item.GetLabel(); - if (HasOpticalDrive()) { #ifdef HAS_DVD_DRIVE diff --git a/xbmc/video/dialogs/GUIDialogAudioSettings.cpp b/xbmc/video/dialogs/GUIDialogAudioSettings.cpp index 1e36c6de35..27204454cc 100644 --- a/xbmc/video/dialogs/GUIDialogAudioSettings.cpp +++ b/xbmc/video/dialogs/GUIDialogAudioSettings.cpp @@ -146,22 +146,22 @@ void CGUIDialogAudioSettings::OnSettingAction(const std::shared_ptr<const CSetti Save(); } -void CGUIDialogAudioSettings::Save() +bool CGUIDialogAudioSettings::Save() { const std::shared_ptr<CProfileManager> profileManager = CServiceBroker::GetSettingsComponent()->GetProfileManager(); if (!g_passwordManager.CheckSettingLevelLock(SettingLevel::Expert) && profileManager->GetMasterProfile().getLockMode() != LOCK_MODE_EVERYONE) - return; + return true; // prompt user if they are sure if (!CGUIDialogYesNo::ShowAndGetInput(CVariant{12376}, CVariant{12377})) - return; + return true; // reset the settings CVideoDatabase db; if (!db.Open()) - return; + return true; db.EraseAllVideoSettings(); db.Close(); @@ -169,6 +169,8 @@ void CGUIDialogAudioSettings::Save() CMediaSettings::GetInstance().GetDefaultVideoSettings() = g_application.GetAppPlayer().GetVideoSettings(); CMediaSettings::GetInstance().GetDefaultVideoSettings().m_AudioStream = -1; CServiceBroker::GetSettingsComponent()->GetSettings()->Save(); + + return true; } void CGUIDialogAudioSettings::SetupView() diff --git a/xbmc/video/dialogs/GUIDialogAudioSettings.h b/xbmc/video/dialogs/GUIDialogAudioSettings.h index 3a66d8e7e4..de69b77ae7 100644 --- a/xbmc/video/dialogs/GUIDialogAudioSettings.h +++ b/xbmc/video/dialogs/GUIDialogAudioSettings.h @@ -38,7 +38,7 @@ protected: // specialization of CGUIDialogSettingsBase bool AllowResettingSettings() const override { return false; } - void Save() override; + bool Save() override; void SetupView() override; // specialization of CGUIDialogSettingsManualBase diff --git a/xbmc/video/dialogs/GUIDialogCMSSettings.cpp b/xbmc/video/dialogs/GUIDialogCMSSettings.cpp index e2e298d80c..d7bedaa419 100644 --- a/xbmc/video/dialogs/GUIDialogCMSSettings.cpp +++ b/xbmc/video/dialogs/GUIDialogCMSSettings.cpp @@ -203,10 +203,12 @@ bool CGUIDialogCMSSettings::OnBack(int actionID) return CGUIDialogSettingsBase::OnBack(actionID); } -void CGUIDialogCMSSettings::Save() +bool CGUIDialogCMSSettings::Save() { CLog::Log(LOGINFO, "CGUIDialogCMSSettings: Save() called"); CServiceBroker::GetSettingsComponent()->GetSettings()->Save(); + + return true; } void CGUIDialogCMSSettings::Cms3dLutsFiller(const SettingConstPtr& setting, diff --git a/xbmc/video/dialogs/GUIDialogCMSSettings.h b/xbmc/video/dialogs/GUIDialogCMSSettings.h index 67614f54de..e718b29940 100644 --- a/xbmc/video/dialogs/GUIDialogCMSSettings.h +++ b/xbmc/video/dialogs/GUIDialogCMSSettings.h @@ -25,7 +25,7 @@ protected: // specialization of CGUIDialogSettingsBase bool AllowResettingSettings() const override { return false; } bool OnBack(int actionID) override; - void Save() override; + bool Save() override; void SetupView() override; // specialization of CGUIDialogSettingsManualBase diff --git a/xbmc/video/dialogs/GUIDialogSubtitleSettings.cpp b/xbmc/video/dialogs/GUIDialogSubtitleSettings.cpp index ab5a27b39e..90cd042aae 100644 --- a/xbmc/video/dialogs/GUIDialogSubtitleSettings.cpp +++ b/xbmc/video/dialogs/GUIDialogSubtitleSettings.cpp @@ -184,22 +184,22 @@ void CGUIDialogSubtitleSettings::OnSettingAction(const std::shared_ptr<const CSe Save(); } -void CGUIDialogSubtitleSettings::Save() +bool CGUIDialogSubtitleSettings::Save() { const std::shared_ptr<CProfileManager> profileManager = CServiceBroker::GetSettingsComponent()->GetProfileManager(); if (!g_passwordManager.CheckSettingLevelLock(SettingLevel::Expert) && profileManager->GetMasterProfile().getLockMode() != LOCK_MODE_EVERYONE) - return; + return true; // prompt user if they are sure if (!CGUIDialogYesNo::ShowAndGetInput(CVariant{12376}, CVariant{12377})) - return; + return true; // reset the settings CVideoDatabase db; if (!db.Open()) - return; + return true; db.EraseAllVideoSettings(); db.Close(); @@ -207,6 +207,8 @@ void CGUIDialogSubtitleSettings::Save() CMediaSettings::GetInstance().GetDefaultVideoSettings() = g_application.GetAppPlayer().GetVideoSettings(); CMediaSettings::GetInstance().GetDefaultVideoSettings().m_SubtitleStream = -1; CServiceBroker::GetSettingsComponent()->GetSettings()->Save(); + + return true; } void CGUIDialogSubtitleSettings::SetupView() diff --git a/xbmc/video/dialogs/GUIDialogSubtitleSettings.h b/xbmc/video/dialogs/GUIDialogSubtitleSettings.h index 1c14938368..65216ede38 100644 --- a/xbmc/video/dialogs/GUIDialogSubtitleSettings.h +++ b/xbmc/video/dialogs/GUIDialogSubtitleSettings.h @@ -37,7 +37,7 @@ protected: // specialization of CGUIDialogSettingsBase bool AllowResettingSettings() const override { return false; } - void Save() override; + bool Save() override; void SetupView() override; // specialization of CGUIDialogSettingsManualBase diff --git a/xbmc/video/dialogs/GUIDialogVideoSettings.cpp b/xbmc/video/dialogs/GUIDialogVideoSettings.cpp index 2a47300c56..1bb46e3180 100644 --- a/xbmc/video/dialogs/GUIDialogVideoSettings.cpp +++ b/xbmc/video/dialogs/GUIDialogVideoSettings.cpp @@ -241,20 +241,20 @@ void CGUIDialogVideoSettings::OnSettingAction(const std::shared_ptr<const CSetti Save(); } -void CGUIDialogVideoSettings::Save() +bool CGUIDialogVideoSettings::Save() { const std::shared_ptr<CProfileManager> profileManager = CServiceBroker::GetSettingsComponent()->GetProfileManager(); if (profileManager->GetMasterProfile().getLockMode() != LOCK_MODE_EVERYONE && !g_passwordManager.CheckSettingLevelLock(::SettingLevel::Expert)) - return; + return true; // prompt user if they are sure if (CGUIDialogYesNo::ShowAndGetInput(CVariant(12376), CVariant(12377))) { // reset the settings CVideoDatabase db; if (!db.Open()) - return; + return true; db.EraseAllVideoSettings(); db.Close(); @@ -263,6 +263,8 @@ void CGUIDialogVideoSettings::Save() CMediaSettings::GetInstance().GetDefaultVideoSettings().m_AudioStream = -1; CServiceBroker::GetSettingsComponent()->GetSettings()->Save(); } + + return true; } void CGUIDialogVideoSettings::SetupView() diff --git a/xbmc/video/dialogs/GUIDialogVideoSettings.h b/xbmc/video/dialogs/GUIDialogVideoSettings.h index dd1e1f5fa2..5314e4049e 100644 --- a/xbmc/video/dialogs/GUIDialogVideoSettings.h +++ b/xbmc/video/dialogs/GUIDialogVideoSettings.h @@ -43,7 +43,7 @@ protected: // specialization of CGUIDialogSettingsBase bool AllowResettingSettings() const override { return false; } - void Save() override; + bool Save() override; void SetupView() override; // specialization of CGUIDialogSettingsManualBase |