Merge branch 'hotfixes' into playlists
|
@ -1,5 +1,5 @@
|
|||
[![stable version](https://img.shields.io/badge/stable_version-1.8.18-blue.svg?maxAge=60&style=flat) ](https://github.com/croneter/binary_repo/raw/master/stable/repository.plexkodiconnect/repository.plexkodiconnect-1.0.2.zip)
|
||||
[![beta version](https://img.shields.io/badge/beta_version-2.0.22-red.svg?maxAge=60&style=flat) ](https://github.com/croneter/binary_repo/raw/master/beta/repository.plexkodiconnectbeta/repository.plexkodiconnectbeta-1.0.2.zip)
|
||||
[![beta version](https://img.shields.io/badge/beta_version-2.0.28-red.svg?maxAge=60&style=flat) ](https://github.com/croneter/binary_repo/raw/master/beta/repository.plexkodiconnectbeta/repository.plexkodiconnectbeta-1.0.2.zip)
|
||||
|
||||
[![Installation](https://img.shields.io/badge/wiki-installation-brightgreen.svg?maxAge=60&style=flat)](https://github.com/croneter/PlexKodiConnect/wiki/Installation)
|
||||
[![FAQ](https://img.shields.io/badge/wiki-FAQ-brightgreen.svg?maxAge=60&style=flat)](https://github.com/croneter/PlexKodiConnect/wiki/faq)
|
||||
|
@ -55,6 +55,7 @@ Some people argue that PKC is 'hacky' because of the way it directly accesses th
|
|||
|
||||
- Support of Kodi 18 Leia (and Kodi 17 Krypton)
|
||||
- [Amazon Alexa voice recognition](https://www.plex.tv/apps/streaming-devices/amazon-alexa)
|
||||
- [Cinema Trailers & Extras](https://support.plex.tv/articles/202934883-cinema-trailers-extras/)
|
||||
- [Plex Watch Later / Plex It!](https://support.plex.tv/hc/en-us/sections/200211783-Plex-It-)
|
||||
- [Plex Companion](https://support.plex.tv/hc/en-us/sections/200276908-Plex-Companion): fling Plex media (or anything else) from other Plex devices to PlexKodiConnect
|
||||
- [Plex Transcoding](https://support.plex.tv/hc/en-us/articles/200250377-Transcoding-Media)
|
||||
|
|
56
addon.xml
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<addon id="plugin.video.plexkodiconnect" name="PlexKodiConnect" version="2.0.22" provider-name="croneter">
|
||||
<addon id="plugin.video.plexkodiconnect" name="PlexKodiConnect" version="2.0.28" provider-name="croneter">
|
||||
<requires>
|
||||
<import addon="xbmc.python" version="2.1.0"/>
|
||||
<import addon="script.module.requests" version="2.9.1" />
|
||||
|
@ -67,7 +67,59 @@
|
|||
<summary lang="ru_RU">Нативная интеграция сервера Plex в Kodi</summary>
|
||||
<description lang="ru_RU">Подключите Kodi к своему серверу Plex. Плагин предполагает что вы управляете своими видео с помощью Plex (а не в Kodi). Вы можете потерять текущие базы данных музыки и видео в Kodi (так как плагин напрямую их изменяет). Используйте на свой страх и риск</description>
|
||||
<disclaimer lang="ru_RU">Используйте на свой страх и риск</disclaimer>
|
||||
<news>version 2.0.22 (beta only):
|
||||
<news>version 2.0.28 (beta only):
|
||||
- Fix endless reboots if Plex music library missing
|
||||
- Fix Plex Companion failing leading to PMS connection loss
|
||||
- Fix PKC add-on setting user changes not saving
|
||||
- Fix playback of last item not starting up
|
||||
- Update Czech translation
|
||||
- Declare PMS connection dead on first failed connection
|
||||
- Fix KeyErrors if Kodi player does not return position
|
||||
- Fix AttributeError
|
||||
- Fix logging
|
||||
- Use float for resume and runtime instead of int
|
||||
|
||||
version 2.0.27 (beta only):
|
||||
- WARNING: You will need to reset the Kodi database! Sorry for that...
|
||||
- Fix PKC not connecting: Fix ValueError if plex.tv returns Plex Cloud URIs
|
||||
- Fix episode widget resume not working (add-on paths)
|
||||
- Speed up PKC start-up
|
||||
- Speed up checking of PMS connection, e.g. on startup
|
||||
- Improve collection lookup; fix PKC caching wrong url
|
||||
- Revert "Default to not show image caching notifications"
|
||||
|
||||
version 2.0.26 (beta only):
|
||||
- Reduce CPU strain for artwork caching progress
|
||||
- Fallback connection if plex.direct does not resolve
|
||||
- Prettify Plex context menu, thanks @dazedcrazy
|
||||
- Update translations
|
||||
- Default to not show image caching notifications
|
||||
|
||||
version 2.0.25 (beta only):
|
||||
- Fix migration not working correctly for re-connecting PMS
|
||||
- Fix PMS showing up twice
|
||||
- Improve artwork caching counter in PKC settings
|
||||
|
||||
version 2.0.24 (beta only):
|
||||
- WARNING: You will need to reset the Kodi database! Sorry for that...
|
||||
- PKC will force you to re-connect with your PMS
|
||||
- Use plex.direct url instead of local ip to use correct SSL certificate; thus fix artwork caching
|
||||
- Revert "Increase timeout between syncing images"
|
||||
- Don't ask user for DB reset if forced by PKC
|
||||
- Ensure movies and tv shows are synced before music
|
||||
- Ensure a later migration if user downgraded PKC
|
||||
|
||||
version 2.0.23 (beta only):
|
||||
- WARNING: You will need to reset the Kodi database!
|
||||
- Finally support for Extras!
|
||||
- Fix context menu not working for shows in library view
|
||||
- Fix Plex Companion music playstate status for iOS
|
||||
- Show caching progress and FanartTV lookup progress in PKC settings
|
||||
- Fix rare library sync errors
|
||||
- Fix ValueError for third party add-ons calling PKC
|
||||
- Tweak PKC settings
|
||||
|
||||
version 2.0.22 (beta only):
|
||||
- Fix Recently Added for tv shows not working
|
||||
- Fix PKC crashing on startup
|
||||
|
||||
|
|
|
@ -1,3 +1,55 @@
|
|||
version 2.0.28 (beta only):
|
||||
- Fix endless reboots if Plex music library missing
|
||||
- Fix Plex Companion failing leading to PMS connection loss
|
||||
- Fix PKC add-on setting user changes not saving
|
||||
- Fix playback of last item not starting up
|
||||
- Update Czech translation
|
||||
- Declare PMS connection dead on first failed connection
|
||||
- Fix KeyErrors if Kodi player does not return position
|
||||
- Fix AttributeError
|
||||
- Fix logging
|
||||
- Use float for resume and runtime instead of int
|
||||
|
||||
version 2.0.27 (beta only):
|
||||
- WARNING: You will need to reset the Kodi database! Sorry for that...
|
||||
- Fix PKC not connecting: Fix ValueError if plex.tv returns Plex Cloud URIs
|
||||
- Fix episode widget resume not working (add-on paths)
|
||||
- Speed up PKC start-up
|
||||
- Speed up checking of PMS connection, e.g. on startup
|
||||
- Improve collection lookup; fix PKC caching wrong url
|
||||
- Revert "Default to not show image caching notifications"
|
||||
|
||||
version 2.0.26 (beta only):
|
||||
- Reduce CPU strain for artwork caching progress
|
||||
- Fallback connection if plex.direct does not resolve
|
||||
- Prettify Plex context menu, thanks @dazedcrazy
|
||||
- Update translations
|
||||
- Default to not show image caching notifications
|
||||
|
||||
version 2.0.25 (beta only):
|
||||
- Fix migration not working correctly for re-connecting PMS
|
||||
- Fix PMS showing up twice
|
||||
- Improve artwork caching counter in PKC settings
|
||||
|
||||
version 2.0.24 (beta only):
|
||||
- WARNING: You will need to reset the Kodi database! Sorry for that...
|
||||
- PKC will force you to re-connect with your PMS
|
||||
- Use plex.direct url instead of local ip to use correct SSL certificate; thus fix artwork caching
|
||||
- Revert "Increase timeout between syncing images"
|
||||
- Don't ask user for DB reset if forced by PKC
|
||||
- Ensure movies and tv shows are synced before music
|
||||
- Ensure a later migration if user downgraded PKC
|
||||
|
||||
version 2.0.23 (beta only):
|
||||
- WARNING: You will need to reset the Kodi database!
|
||||
- Finally support for Extras!
|
||||
- Fix context menu not working for shows in library view
|
||||
- Fix Plex Companion music playstate status for iOS
|
||||
- Show caching progress and FanartTV lookup progress in PKC settings
|
||||
- Fix rare library sync errors
|
||||
- Fix ValueError for third party add-ons calling PKC
|
||||
- Tweak PKC settings
|
||||
|
||||
version 2.0.22 (beta only):
|
||||
- Fix Recently Added for tv shows not working
|
||||
- Fix PKC crashing on startup
|
||||
|
|
|
@ -14,7 +14,7 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: cs_CZ\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
|
||||
|
||||
# Add-on settings
|
||||
msgctxt "#29999"
|
||||
|
@ -50,23 +50,34 @@ msgstr "Uživ. jméno: "
|
|||
|
||||
# Sync notification displayed if there is still artwork to be cached to Kodi
|
||||
msgctxt "#30006"
|
||||
msgid "Caching %s images"
|
||||
msgstr ""
|
||||
msgid "Caching %s Plex images"
|
||||
msgstr "Ukládám %s obrázků z Plexu"
|
||||
|
||||
# Sync notification displayed if syncing of major artwork is done
|
||||
msgctxt "#30007"
|
||||
msgid "Major image caching done"
|
||||
msgstr ""
|
||||
msgid "Plex image caching done"
|
||||
msgstr "Ukládání obrázků do mezipaměti dokončeno."
|
||||
|
||||
# PKC settings artwork: Enable notifications for artwork image sync
|
||||
msgctxt "#30008"
|
||||
msgid "Enable notifications for image caching"
|
||||
msgstr ""
|
||||
msgstr "Povolit upozornění na ukládání obrázků do mezipaměti"
|
||||
|
||||
# PKC settings artwork: Enable image caching during Kodi playback
|
||||
msgctxt "#30009"
|
||||
msgid "Enable image caching during Kodi playback (restart Kodi!)"
|
||||
msgstr ""
|
||||
"Povolit ukládání obrázků do mezipaměti při přehrávání (restartujte Kodi!)"
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30010"
|
||||
msgid "Approximate progress"
|
||||
msgstr "Odhad průběhu"
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30011"
|
||||
msgid "Artwork left to cache:"
|
||||
msgstr "Obrázků k uložení do mezipaměti:"
|
||||
|
||||
# Button text
|
||||
msgctxt "#30012"
|
||||
|
@ -82,6 +93,11 @@ msgctxt "#30014"
|
|||
msgid "Connection"
|
||||
msgstr "Připojení"
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30015"
|
||||
msgid "Movie and show FanartTV lookups left to do:"
|
||||
msgstr "Filmů a seriálů k vyhledání na FanartTV:"
|
||||
|
||||
msgctxt "#30016"
|
||||
msgid "Device Name"
|
||||
msgstr "Název zařízení"
|
||||
|
@ -91,6 +107,16 @@ msgctxt "#30017"
|
|||
msgid "Unauthorized for PMS"
|
||||
msgstr "Neověřeno u PMS"
|
||||
|
||||
# Sync notification displayed for the number of fanart.tv lookups left
|
||||
msgctxt "#30018"
|
||||
msgid "Checking FanartTV for %s items"
|
||||
msgstr "Vyhledávám %s položek na FanartTV"
|
||||
|
||||
# Sync notification displayed when FanartTV lookup is completed
|
||||
msgctxt "#30019"
|
||||
msgid "FanartTV lookup completed"
|
||||
msgstr "Vyhledávání na FanartTV dokončeno"
|
||||
|
||||
# PKC settings category
|
||||
msgctxt "#30022"
|
||||
msgid "Advanced"
|
||||
|
@ -418,8 +444,8 @@ msgstr "Režim přehrávání"
|
|||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30512"
|
||||
msgid "Force artwork caching"
|
||||
msgstr "Vynutit ukládání obrázků do mezipaměti"
|
||||
msgid "Cache all artwork for a smooth Kodi experience"
|
||||
msgstr "Ukládat všechny obrázky do mezipaměti pro hladší běh Kodi"
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30513"
|
||||
|
@ -498,12 +524,10 @@ msgstr "Zprávy serveru"
|
|||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#30535"
|
||||
msgid ""
|
||||
"[COLOR yellow]Generate a new unique device Id (e.g. when cloning "
|
||||
"Kodi)[/COLOR]"
|
||||
msgid "Generate a new unique Plex device Id (e.g. to clone Kodi)"
|
||||
msgstr ""
|
||||
"[COLOR yellow]Vygenerovat nový unikátní identifikátor zařízení (např. při "
|
||||
"kopii Kodi)[/COLOR]"
|
||||
"Vygenerovat nový unikátní identifikátor zařízení Plexu (např. při kopii "
|
||||
"Kodi)"
|
||||
|
||||
# PKC Settings - Connection
|
||||
msgctxt "#30536"
|
||||
|
@ -517,8 +541,8 @@ msgstr "PŘI KAŽDÉ ZMĚNĚ MUSÍTE RESTARTOVAT KODI"
|
|||
|
||||
# PKC Settings warning
|
||||
msgctxt "#30538"
|
||||
msgid "Complete Re-Sync necessary"
|
||||
msgstr "Je vyžadována kompletní resynchronizace"
|
||||
msgid "Manual complete reset of Kodi database necessary, see \"Advanced\""
|
||||
msgstr "Je vyžadován ruční reset databaze. Viz \"rozšířené\""
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30539"
|
||||
|
@ -631,8 +655,8 @@ msgstr "Velikost vpálených titulků"
|
|||
|
||||
# PKC Settings - Sync
|
||||
msgctxt "#39003"
|
||||
msgid "Limit download sync threads (rec. for rpi: 1)"
|
||||
msgstr "Omezit synchronizační vlákna (doporučené pro rpi: 1)"
|
||||
msgid "Number of simultaneous download threads"
|
||||
msgstr "Počet souběžných vláken stahování"
|
||||
|
||||
# PKC Settings - Plex
|
||||
msgctxt "#39004"
|
||||
|
@ -704,15 +728,13 @@ msgstr ""
|
|||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#39018"
|
||||
msgid "[COLOR yellow]Repair local database (force update all content)[/COLOR]"
|
||||
msgstr ""
|
||||
"[COLOR yellow]Opravit místní databázi (vynutit aktualizaci všeho "
|
||||
"obsahu)[/COLOR]"
|
||||
msgid "Repair the Kodi database (force update all content)"
|
||||
msgstr "Opravit databázi Kodi (vynutit aktualizaci všeho obsahu)"
|
||||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#39019"
|
||||
msgid "[COLOR red]Partial or full reset of Database and PKC[/COLOR]"
|
||||
msgstr "[COLOR red]Částečný nebo plný reset databáze a PKC[/COLOR]"
|
||||
msgid "Reset the Kodi database and optionally reset PlexKodiConnect"
|
||||
msgstr "Vyresetovat databázi Kodi a případně i nastavení PlexKodiConnect"
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#39020"
|
||||
|
|
|
@ -47,12 +47,12 @@ msgstr "Brugernavn: "
|
|||
|
||||
# Sync notification displayed if there is still artwork to be cached to Kodi
|
||||
msgctxt "#30006"
|
||||
msgid "Caching %s images"
|
||||
msgid "Caching %s Plex images"
|
||||
msgstr ""
|
||||
|
||||
# Sync notification displayed if syncing of major artwork is done
|
||||
msgctxt "#30007"
|
||||
msgid "Major image caching done"
|
||||
msgid "Plex image caching done"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings artwork: Enable notifications for artwork image sync
|
||||
|
@ -65,6 +65,16 @@ msgctxt "#30009"
|
|||
msgid "Enable image caching during Kodi playback (restart Kodi!)"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30010"
|
||||
msgid "Approximate progress"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30011"
|
||||
msgid "Artwork left to cache:"
|
||||
msgstr ""
|
||||
|
||||
# Button text
|
||||
msgctxt "#30012"
|
||||
msgid "OK"
|
||||
|
@ -79,6 +89,11 @@ msgctxt "#30014"
|
|||
msgid "Connection"
|
||||
msgstr "Forbindelser"
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30015"
|
||||
msgid "Movie and show FanartTV lookups left to do:"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30016"
|
||||
msgid "Device Name"
|
||||
msgstr "Enhedens navn"
|
||||
|
@ -88,6 +103,16 @@ msgctxt "#30017"
|
|||
msgid "Unauthorized for PMS"
|
||||
msgstr "Uautoriseret for PMS"
|
||||
|
||||
# Sync notification displayed for the number of fanart.tv lookups left
|
||||
msgctxt "#30018"
|
||||
msgid "Checking FanartTV for %s items"
|
||||
msgstr ""
|
||||
|
||||
# Sync notification displayed when FanartTV lookup is completed
|
||||
msgctxt "#30019"
|
||||
msgid "FanartTV lookup completed"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings category
|
||||
msgctxt "#30022"
|
||||
msgid "Advanced"
|
||||
|
@ -414,8 +439,8 @@ msgstr "Afspilningstilstand"
|
|||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30512"
|
||||
msgid "Force artwork caching"
|
||||
msgstr "Tvinge illustrationer cachelagring"
|
||||
msgid "Cache all artwork for a smooth Kodi experience"
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30513"
|
||||
|
@ -494,12 +519,8 @@ msgstr "Server beskeder"
|
|||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#30535"
|
||||
msgid ""
|
||||
"[COLOR yellow]Generate a new unique device Id (e.g. when cloning "
|
||||
"Kodi)[/COLOR]"
|
||||
msgid "Generate a new unique Plex device Id (e.g. to clone Kodi)"
|
||||
msgstr ""
|
||||
"[COLOR yellow] Generere en ny unik enheds Id (f.eks. Når kloning "
|
||||
"Kodi)[/COLOR]"
|
||||
|
||||
# PKC Settings - Connection
|
||||
msgctxt "#30536"
|
||||
|
@ -513,8 +534,8 @@ msgstr "GENSTART KODI, HVIS DU FORETAGER ÆNDRINGER"
|
|||
|
||||
# PKC Settings warning
|
||||
msgctxt "#30538"
|
||||
msgid "Complete Re-Sync necessary"
|
||||
msgstr "Komplet re-synkronisere nødvendigt"
|
||||
msgid "Manual complete reset of Kodi database necessary, see \"Advanced\""
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30539"
|
||||
|
@ -628,8 +649,8 @@ msgstr "Undertekst størrelse"
|
|||
|
||||
# PKC Settings - Sync
|
||||
msgctxt "#39003"
|
||||
msgid "Limit download sync threads (rec. for rpi: 1)"
|
||||
msgstr "Begrænse download sync tråde (rec. for rpi: 1)"
|
||||
msgid "Number of simultaneous download threads"
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Plex
|
||||
msgctxt "#39004"
|
||||
|
@ -702,14 +723,13 @@ msgstr ""
|
|||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#39018"
|
||||
msgid "[COLOR yellow]Repair local database (force update all content)[/COLOR]"
|
||||
msgid "Repair the Kodi database (force update all content)"
|
||||
msgstr ""
|
||||
"[COLOR yellow] Reparere lokale database (opdatere alt indhold)[/COLOR]"
|
||||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#39019"
|
||||
msgid "[COLOR red]Partial or full reset of Database and PKC[/COLOR]"
|
||||
msgstr "[COLOR red] Fuld eller delvis nulstilling af Database og PKC[/COLOR]"
|
||||
msgid "Reset the Kodi database and optionally reset PlexKodiConnect"
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#39020"
|
||||
|
|
|
@ -49,13 +49,13 @@ msgstr "Benutzername: "
|
|||
|
||||
# Sync notification displayed if there is still artwork to be cached to Kodi
|
||||
msgctxt "#30006"
|
||||
msgid "Caching %s images"
|
||||
msgstr "Cache %s Bilder"
|
||||
msgid "Caching %s Plex images"
|
||||
msgstr "Cache %s Plex Bilder"
|
||||
|
||||
# Sync notification displayed if syncing of major artwork is done
|
||||
msgctxt "#30007"
|
||||
msgid "Major image caching done"
|
||||
msgstr "Cachen wichtigster Bilder beendet"
|
||||
msgid "Plex image caching done"
|
||||
msgstr "Plex Bilder-Caching beendet"
|
||||
|
||||
# PKC settings artwork: Enable notifications for artwork image sync
|
||||
msgctxt "#30008"
|
||||
|
@ -67,6 +67,16 @@ msgctxt "#30009"
|
|||
msgid "Enable image caching during Kodi playback (restart Kodi!)"
|
||||
msgstr "Cachen von Bildern während Wiedergabe aktivieren (Kodi neu starten!)"
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30010"
|
||||
msgid "Approximate progress"
|
||||
msgstr "Ungefährer Stand"
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30011"
|
||||
msgid "Artwork left to cache:"
|
||||
msgstr "Noch zu cachende Bilder:"
|
||||
|
||||
# Button text
|
||||
msgctxt "#30012"
|
||||
msgid "OK"
|
||||
|
@ -81,6 +91,11 @@ msgctxt "#30014"
|
|||
msgid "Connection"
|
||||
msgstr "Verbindung"
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30015"
|
||||
msgid "Movie and show FanartTV lookups left to do:"
|
||||
msgstr "Filme und Serien noch bei FanartTV nachzuschlagen:"
|
||||
|
||||
msgctxt "#30016"
|
||||
msgid "Device Name"
|
||||
msgstr "Gerätename"
|
||||
|
@ -90,6 +105,16 @@ msgctxt "#30017"
|
|||
msgid "Unauthorized for PMS"
|
||||
msgstr "Nicht autorisiert für PMS"
|
||||
|
||||
# Sync notification displayed for the number of fanart.tv lookups left
|
||||
msgctxt "#30018"
|
||||
msgid "Checking FanartTV for %s items"
|
||||
msgstr "%s Nachforschungen bei FanartTV"
|
||||
|
||||
# Sync notification displayed when FanartTV lookup is completed
|
||||
msgctxt "#30019"
|
||||
msgid "FanartTV lookup completed"
|
||||
msgstr "FanartTV Nachforschungen beendet"
|
||||
|
||||
# PKC settings category
|
||||
msgctxt "#30022"
|
||||
msgid "Advanced"
|
||||
|
@ -417,8 +442,8 @@ msgstr "Wiedergabemodus"
|
|||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30512"
|
||||
msgid "Force artwork caching"
|
||||
msgstr "Zwischenspeichern von PMS Bildern erzwingen"
|
||||
msgid "Cache all artwork for a smooth Kodi experience"
|
||||
msgstr "Bilder zwischenspeichern (\"cachen\") für ein besseres Kodi-Erlebnis"
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30513"
|
||||
|
@ -498,12 +523,8 @@ msgstr "Server-Meldungen"
|
|||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#30535"
|
||||
msgid ""
|
||||
"[COLOR yellow]Generate a new unique device Id (e.g. when cloning "
|
||||
"Kodi)[/COLOR]"
|
||||
msgstr ""
|
||||
"[COLOR yellow]Neue einzigartige Geräte-ID generieren (z.B. wenn Kodi geklont"
|
||||
" wurde)[/COLOR]"
|
||||
msgid "Generate a new unique Plex device Id (e.g. to clone Kodi)"
|
||||
msgstr "Neue einzigartige Plex-ID generieren (z.B. wenn Kodi geklont wurde)"
|
||||
|
||||
# PKC Settings - Connection
|
||||
msgctxt "#30536"
|
||||
|
@ -517,8 +538,9 @@ msgstr "BEI ÄNDERUNGEN KODI NEU STARTEN"
|
|||
|
||||
# PKC Settings warning
|
||||
msgctxt "#30538"
|
||||
msgid "Complete Re-Sync necessary"
|
||||
msgstr "Komplette Neu-Synchronisierung nötig"
|
||||
msgid "Manual complete reset of Kodi database necessary, see \"Advanced\""
|
||||
msgstr ""
|
||||
"Manuelles Zurücksetzen der Kodi Datenbank nötig, siehe \"Fortgeschritten\""
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30539"
|
||||
|
@ -634,8 +656,8 @@ msgstr "Größe der eingebrannten Untertitel"
|
|||
|
||||
# PKC Settings - Sync
|
||||
msgctxt "#39003"
|
||||
msgid "Limit download sync threads (rec. for rpi: 1)"
|
||||
msgstr "Anzahl Download Sync Threads beschränken (Empfehlung RPI: 1)"
|
||||
msgid "Number of simultaneous download threads"
|
||||
msgstr "Anzahl gleichzeitiger Download-Threads"
|
||||
|
||||
# PKC Settings - Plex
|
||||
msgctxt "#39004"
|
||||
|
@ -712,15 +734,13 @@ msgstr ""
|
|||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#39018"
|
||||
msgid "[COLOR yellow]Repair local database (force update all content)[/COLOR]"
|
||||
msgstr ""
|
||||
"[COLOR yellow]Lokale Datenbank reparieren (alle Einträge "
|
||||
"aktualisieren)[/COLOR]"
|
||||
msgid "Repair the Kodi database (force update all content)"
|
||||
msgstr "Kodi Datenbank reparieren (alle Einträge aktualisieren)"
|
||||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#39019"
|
||||
msgid "[COLOR red]Partial or full reset of Database and PKC[/COLOR]"
|
||||
msgstr "[COLOR red]Datenbank und auf Wunsch PKC zurücksetzen[/COLOR]"
|
||||
msgid "Reset the Kodi database and optionally reset PlexKodiConnect"
|
||||
msgstr "Kodi Datenbank und optional PlexKodiConnect zurücksetzen"
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#39020"
|
||||
|
|
|
@ -15,7 +15,6 @@ msgstr ""
|
|||
|
||||
# Add-on settings
|
||||
|
||||
|
||||
msgctxt "#29999"
|
||||
msgid "PlexKodiConnect"
|
||||
msgstr ""
|
||||
|
@ -43,12 +42,12 @@ msgstr ""
|
|||
|
||||
# Sync notification displayed if there is still artwork to be cached to Kodi
|
||||
msgctxt "#30006"
|
||||
msgid "Caching %s images"
|
||||
msgid "Caching %s Plex images"
|
||||
msgstr ""
|
||||
|
||||
# Sync notification displayed if syncing of major artwork is done
|
||||
msgctxt "#30007"
|
||||
msgid "Major image caching done"
|
||||
msgid "Plex image caching done"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings artwork: Enable notifications for artwork image sync
|
||||
|
@ -61,9 +60,14 @@ msgctxt "#30009"
|
|||
msgid "Enable image caching during Kodi playback (restart Kodi!)"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings sync options
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30010"
|
||||
msgid "Sync Plex playlists"
|
||||
msgid "Approximate progress"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30011"
|
||||
msgid "Artwork left to cache:"
|
||||
msgstr ""
|
||||
|
||||
# Button text
|
||||
|
@ -80,6 +84,11 @@ msgctxt "#30014"
|
|||
msgid "Connection"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30015"
|
||||
msgid "Movie and show FanartTV lookups left to do:"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30016"
|
||||
msgid "Device Name"
|
||||
msgstr ""
|
||||
|
@ -89,6 +98,21 @@ msgctxt "#30017"
|
|||
msgid "Unauthorized for PMS"
|
||||
msgstr ""
|
||||
|
||||
# Sync notification displayed for the number of fanart.tv lookups left
|
||||
msgctxt "#30018"
|
||||
msgid "Checking FanartTV for %s items"
|
||||
msgstr ""
|
||||
|
||||
# Sync notification displayed when FanartTV lookup is completed
|
||||
msgctxt "#30019"
|
||||
msgid "FanartTV lookup completed"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings sync options
|
||||
msgctxt "#30020"
|
||||
msgid "Sync Plex playlists"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings category
|
||||
msgctxt "#30022"
|
||||
msgid "Advanced"
|
||||
|
@ -412,7 +436,7 @@ msgstr ""
|
|||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30512"
|
||||
msgid "Force artwork caching"
|
||||
msgid "Cache all artwork for a smooth Kodi experience"
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Artwork
|
||||
|
@ -492,7 +516,7 @@ msgstr ""
|
|||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#30535"
|
||||
msgid "[COLOR yellow]Generate a new unique device Id (e.g. when cloning Kodi)[/COLOR]"
|
||||
msgid "Generate a new unique Plex device Id (e.g. to clone Kodi)"
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Connection
|
||||
|
@ -507,7 +531,7 @@ msgstr ""
|
|||
|
||||
# PKC Settings warning
|
||||
msgctxt "#30538"
|
||||
msgid "Complete Re-Sync necessary"
|
||||
msgid "Manual complete reset of Kodi database necessary, see \"Advanced\""
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Artwork
|
||||
|
@ -615,7 +639,7 @@ msgstr ""
|
|||
|
||||
# PKC Settings - Sync
|
||||
msgctxt "#39003"
|
||||
msgid "Limit download sync threads (rec. for rpi: 1)"
|
||||
msgid "Number of simultaneous download threads"
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Plex
|
||||
|
@ -680,12 +704,12 @@ msgstr ""
|
|||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#39018"
|
||||
msgid "[COLOR yellow]Repair local database (force update all content)[/COLOR]"
|
||||
msgid "Repair the Kodi database (force update all content)"
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#39019"
|
||||
msgid "[COLOR red]Partial or full reset of Database and PKC[/COLOR]"
|
||||
msgid "Reset the Kodi database and optionally reset PlexKodiConnect"
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Artwork
|
||||
|
|
|
@ -47,12 +47,12 @@ msgstr "Usuario: "
|
|||
|
||||
# Sync notification displayed if there is still artwork to be cached to Kodi
|
||||
msgctxt "#30006"
|
||||
msgid "Caching %s images"
|
||||
msgid "Caching %s Plex images"
|
||||
msgstr ""
|
||||
|
||||
# Sync notification displayed if syncing of major artwork is done
|
||||
msgctxt "#30007"
|
||||
msgid "Major image caching done"
|
||||
msgid "Plex image caching done"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings artwork: Enable notifications for artwork image sync
|
||||
|
@ -65,6 +65,16 @@ msgctxt "#30009"
|
|||
msgid "Enable image caching during Kodi playback (restart Kodi!)"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30010"
|
||||
msgid "Approximate progress"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30011"
|
||||
msgid "Artwork left to cache:"
|
||||
msgstr ""
|
||||
|
||||
# Button text
|
||||
msgctxt "#30012"
|
||||
msgid "OK"
|
||||
|
@ -79,6 +89,11 @@ msgctxt "#30014"
|
|||
msgid "Connection"
|
||||
msgstr "Conexión"
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30015"
|
||||
msgid "Movie and show FanartTV lookups left to do:"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30016"
|
||||
msgid "Device Name"
|
||||
msgstr "Nombre del Dispositivo"
|
||||
|
@ -88,6 +103,16 @@ msgctxt "#30017"
|
|||
msgid "Unauthorized for PMS"
|
||||
msgstr "No autorizado para PMS"
|
||||
|
||||
# Sync notification displayed for the number of fanart.tv lookups left
|
||||
msgctxt "#30018"
|
||||
msgid "Checking FanartTV for %s items"
|
||||
msgstr ""
|
||||
|
||||
# Sync notification displayed when FanartTV lookup is completed
|
||||
msgctxt "#30019"
|
||||
msgid "FanartTV lookup completed"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings category
|
||||
msgctxt "#30022"
|
||||
msgid "Advanced"
|
||||
|
@ -415,8 +440,8 @@ msgstr "Modo de reproducción"
|
|||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30512"
|
||||
msgid "Force artwork caching"
|
||||
msgstr "Obligar caché de arte"
|
||||
msgid "Cache all artwork for a smooth Kodi experience"
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30513"
|
||||
|
@ -495,12 +520,8 @@ msgstr "Mensajes del servidor"
|
|||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#30535"
|
||||
msgid ""
|
||||
"[COLOR yellow]Generate a new unique device Id (e.g. when cloning "
|
||||
"Kodi)[/COLOR]"
|
||||
msgid "Generate a new unique Plex device Id (e.g. to clone Kodi)"
|
||||
msgstr ""
|
||||
"[COLOR yellow] Generar un nuevo id único de dispositivo (por ejemplo, al "
|
||||
"clonar Kodi)[/COLOR]"
|
||||
|
||||
# PKC Settings - Connection
|
||||
msgctxt "#30536"
|
||||
|
@ -514,8 +535,8 @@ msgstr "REINICIAR KODI SI HACE CAMBIOS"
|
|||
|
||||
# PKC Settings warning
|
||||
msgctxt "#30538"
|
||||
msgid "Complete Re-Sync necessary"
|
||||
msgstr "Es necesaria una Re-Sincronización Completa"
|
||||
msgid "Manual complete reset of Kodi database necessary, see \"Advanced\""
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30539"
|
||||
|
@ -630,9 +651,8 @@ msgstr "Tamaño de subtítulos incrustados"
|
|||
|
||||
# PKC Settings - Sync
|
||||
msgctxt "#39003"
|
||||
msgid "Limit download sync threads (rec. for rpi: 1)"
|
||||
msgid "Number of simultaneous download threads"
|
||||
msgstr ""
|
||||
"Limitar los hilos de sincronización de descarga (recomendado para rpi: 1)"
|
||||
|
||||
# PKC Settings - Plex
|
||||
msgctxt "#39004"
|
||||
|
@ -706,17 +726,13 @@ msgstr ""
|
|||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#39018"
|
||||
msgid "[COLOR yellow]Repair local database (force update all content)[/COLOR]"
|
||||
msgid "Repair the Kodi database (force update all content)"
|
||||
msgstr ""
|
||||
"[COLOR yellow] Reparar base de datos local (todo el contenido será "
|
||||
"actualizado)[/COLOR]"
|
||||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#39019"
|
||||
msgid "[COLOR red]Partial or full reset of Database and PKC[/COLOR]"
|
||||
msgid "Reset the Kodi database and optionally reset PlexKodiConnect"
|
||||
msgstr ""
|
||||
"[COLOR Red] Restablecimiento parcial o total de la base de datos y "
|
||||
"PKC[/COLOR]"
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#39020"
|
||||
|
|
|
@ -47,12 +47,12 @@ msgstr "Usuario: "
|
|||
|
||||
# Sync notification displayed if there is still artwork to be cached to Kodi
|
||||
msgctxt "#30006"
|
||||
msgid "Caching %s images"
|
||||
msgid "Caching %s Plex images"
|
||||
msgstr ""
|
||||
|
||||
# Sync notification displayed if syncing of major artwork is done
|
||||
msgctxt "#30007"
|
||||
msgid "Major image caching done"
|
||||
msgid "Plex image caching done"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings artwork: Enable notifications for artwork image sync
|
||||
|
@ -65,6 +65,16 @@ msgctxt "#30009"
|
|||
msgid "Enable image caching during Kodi playback (restart Kodi!)"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30010"
|
||||
msgid "Approximate progress"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30011"
|
||||
msgid "Artwork left to cache:"
|
||||
msgstr ""
|
||||
|
||||
# Button text
|
||||
msgctxt "#30012"
|
||||
msgid "OK"
|
||||
|
@ -79,6 +89,11 @@ msgctxt "#30014"
|
|||
msgid "Connection"
|
||||
msgstr "Conexión"
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30015"
|
||||
msgid "Movie and show FanartTV lookups left to do:"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30016"
|
||||
msgid "Device Name"
|
||||
msgstr "Nombre del Dispositivo"
|
||||
|
@ -88,6 +103,16 @@ msgctxt "#30017"
|
|||
msgid "Unauthorized for PMS"
|
||||
msgstr "No autorizado para PMS"
|
||||
|
||||
# Sync notification displayed for the number of fanart.tv lookups left
|
||||
msgctxt "#30018"
|
||||
msgid "Checking FanartTV for %s items"
|
||||
msgstr ""
|
||||
|
||||
# Sync notification displayed when FanartTV lookup is completed
|
||||
msgctxt "#30019"
|
||||
msgid "FanartTV lookup completed"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings category
|
||||
msgctxt "#30022"
|
||||
msgid "Advanced"
|
||||
|
@ -415,8 +440,8 @@ msgstr "Modo de reproducción"
|
|||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30512"
|
||||
msgid "Force artwork caching"
|
||||
msgstr "Obligar caché de arte"
|
||||
msgid "Cache all artwork for a smooth Kodi experience"
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30513"
|
||||
|
@ -495,12 +520,8 @@ msgstr "Mensajes del servidor"
|
|||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#30535"
|
||||
msgid ""
|
||||
"[COLOR yellow]Generate a new unique device Id (e.g. when cloning "
|
||||
"Kodi)[/COLOR]"
|
||||
msgid "Generate a new unique Plex device Id (e.g. to clone Kodi)"
|
||||
msgstr ""
|
||||
"[COLOR yellow] Generar un nuevo id único de dispositivo (por ejemplo, al "
|
||||
"clonar Kodi)[/COLOR]"
|
||||
|
||||
# PKC Settings - Connection
|
||||
msgctxt "#30536"
|
||||
|
@ -514,8 +535,8 @@ msgstr "REINICIAR KODI SI HACE CAMBIOS"
|
|||
|
||||
# PKC Settings warning
|
||||
msgctxt "#30538"
|
||||
msgid "Complete Re-Sync necessary"
|
||||
msgstr "Es necesaria una Re-Sincronización Completa"
|
||||
msgid "Manual complete reset of Kodi database necessary, see \"Advanced\""
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30539"
|
||||
|
@ -630,9 +651,8 @@ msgstr "Tamaño de subtítulos incrustados"
|
|||
|
||||
# PKC Settings - Sync
|
||||
msgctxt "#39003"
|
||||
msgid "Limit download sync threads (rec. for rpi: 1)"
|
||||
msgid "Number of simultaneous download threads"
|
||||
msgstr ""
|
||||
"Limitar los hilos de sincronización de descarga (recomendado para rpi: 1)"
|
||||
|
||||
# PKC Settings - Plex
|
||||
msgctxt "#39004"
|
||||
|
@ -706,17 +726,13 @@ msgstr ""
|
|||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#39018"
|
||||
msgid "[COLOR yellow]Repair local database (force update all content)[/COLOR]"
|
||||
msgid "Repair the Kodi database (force update all content)"
|
||||
msgstr ""
|
||||
"[COLOR yellow] Reparar base de datos local (todo el contenido será "
|
||||
"actualizado)[/COLOR]"
|
||||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#39019"
|
||||
msgid "[COLOR red]Partial or full reset of Database and PKC[/COLOR]"
|
||||
msgid "Reset the Kodi database and optionally reset PlexKodiConnect"
|
||||
msgstr ""
|
||||
"[COLOR Red] Restablecimiento parcial o total de la base de datos y "
|
||||
"PKC[/COLOR]"
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#39020"
|
||||
|
|
|
@ -47,12 +47,12 @@ msgstr "Usuario: "
|
|||
|
||||
# Sync notification displayed if there is still artwork to be cached to Kodi
|
||||
msgctxt "#30006"
|
||||
msgid "Caching %s images"
|
||||
msgid "Caching %s Plex images"
|
||||
msgstr ""
|
||||
|
||||
# Sync notification displayed if syncing of major artwork is done
|
||||
msgctxt "#30007"
|
||||
msgid "Major image caching done"
|
||||
msgid "Plex image caching done"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings artwork: Enable notifications for artwork image sync
|
||||
|
@ -65,6 +65,16 @@ msgctxt "#30009"
|
|||
msgid "Enable image caching during Kodi playback (restart Kodi!)"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30010"
|
||||
msgid "Approximate progress"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30011"
|
||||
msgid "Artwork left to cache:"
|
||||
msgstr ""
|
||||
|
||||
# Button text
|
||||
msgctxt "#30012"
|
||||
msgid "OK"
|
||||
|
@ -79,6 +89,11 @@ msgctxt "#30014"
|
|||
msgid "Connection"
|
||||
msgstr "Conexión"
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30015"
|
||||
msgid "Movie and show FanartTV lookups left to do:"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30016"
|
||||
msgid "Device Name"
|
||||
msgstr "Nombre del Dispositivo"
|
||||
|
@ -88,6 +103,16 @@ msgctxt "#30017"
|
|||
msgid "Unauthorized for PMS"
|
||||
msgstr "No autorizado para PMS"
|
||||
|
||||
# Sync notification displayed for the number of fanart.tv lookups left
|
||||
msgctxt "#30018"
|
||||
msgid "Checking FanartTV for %s items"
|
||||
msgstr ""
|
||||
|
||||
# Sync notification displayed when FanartTV lookup is completed
|
||||
msgctxt "#30019"
|
||||
msgid "FanartTV lookup completed"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings category
|
||||
msgctxt "#30022"
|
||||
msgid "Advanced"
|
||||
|
@ -415,8 +440,8 @@ msgstr "Modo de reproducción"
|
|||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30512"
|
||||
msgid "Force artwork caching"
|
||||
msgstr "Obligar caché de arte"
|
||||
msgid "Cache all artwork for a smooth Kodi experience"
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30513"
|
||||
|
@ -495,12 +520,8 @@ msgstr "Mensajes del servidor"
|
|||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#30535"
|
||||
msgid ""
|
||||
"[COLOR yellow]Generate a new unique device Id (e.g. when cloning "
|
||||
"Kodi)[/COLOR]"
|
||||
msgid "Generate a new unique Plex device Id (e.g. to clone Kodi)"
|
||||
msgstr ""
|
||||
"[COLOR yellow] Generar un nuevo id único de dispositivo (por ejemplo, al "
|
||||
"clonar Kodi)[/COLOR]"
|
||||
|
||||
# PKC Settings - Connection
|
||||
msgctxt "#30536"
|
||||
|
@ -514,8 +535,8 @@ msgstr "REINICIAR KODI SI HACE CAMBIOS"
|
|||
|
||||
# PKC Settings warning
|
||||
msgctxt "#30538"
|
||||
msgid "Complete Re-Sync necessary"
|
||||
msgstr "Es necesaria una Re-Sincronización Completa"
|
||||
msgid "Manual complete reset of Kodi database necessary, see \"Advanced\""
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30539"
|
||||
|
@ -630,9 +651,8 @@ msgstr "Tamaño de subtítulos incrustados"
|
|||
|
||||
# PKC Settings - Sync
|
||||
msgctxt "#39003"
|
||||
msgid "Limit download sync threads (rec. for rpi: 1)"
|
||||
msgid "Number of simultaneous download threads"
|
||||
msgstr ""
|
||||
"Limitar los hilos de sincronización de descarga (recomendado para rpi: 1)"
|
||||
|
||||
# PKC Settings - Plex
|
||||
msgctxt "#39004"
|
||||
|
@ -706,17 +726,13 @@ msgstr ""
|
|||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#39018"
|
||||
msgid "[COLOR yellow]Repair local database (force update all content)[/COLOR]"
|
||||
msgid "Repair the Kodi database (force update all content)"
|
||||
msgstr ""
|
||||
"[COLOR yellow] Reparar base de datos local (todo el contenido será "
|
||||
"actualizado)[/COLOR]"
|
||||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#39019"
|
||||
msgid "[COLOR red]Partial or full reset of Database and PKC[/COLOR]"
|
||||
msgid "Reset the Kodi database and optionally reset PlexKodiConnect"
|
||||
msgstr ""
|
||||
"[COLOR Red] Restablecimiento parcial o total de la base de datos y "
|
||||
"PKC[/COLOR]"
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#39020"
|
||||
|
|
|
@ -50,12 +50,12 @@ msgstr "Identifiant : "
|
|||
|
||||
# Sync notification displayed if there is still artwork to be cached to Kodi
|
||||
msgctxt "#30006"
|
||||
msgid "Caching %s images"
|
||||
msgid "Caching %s Plex images"
|
||||
msgstr ""
|
||||
|
||||
# Sync notification displayed if syncing of major artwork is done
|
||||
msgctxt "#30007"
|
||||
msgid "Major image caching done"
|
||||
msgid "Plex image caching done"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings artwork: Enable notifications for artwork image sync
|
||||
|
@ -68,6 +68,16 @@ msgctxt "#30009"
|
|||
msgid "Enable image caching during Kodi playback (restart Kodi!)"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30010"
|
||||
msgid "Approximate progress"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30011"
|
||||
msgid "Artwork left to cache:"
|
||||
msgstr ""
|
||||
|
||||
# Button text
|
||||
msgctxt "#30012"
|
||||
msgid "OK"
|
||||
|
@ -82,6 +92,11 @@ msgctxt "#30014"
|
|||
msgid "Connection"
|
||||
msgstr "Connexion"
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30015"
|
||||
msgid "Movie and show FanartTV lookups left to do:"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30016"
|
||||
msgid "Device Name"
|
||||
msgstr "Nom de l'appareil"
|
||||
|
@ -91,6 +106,16 @@ msgctxt "#30017"
|
|||
msgid "Unauthorized for PMS"
|
||||
msgstr "Non autorisé pour le PMS"
|
||||
|
||||
# Sync notification displayed for the number of fanart.tv lookups left
|
||||
msgctxt "#30018"
|
||||
msgid "Checking FanartTV for %s items"
|
||||
msgstr ""
|
||||
|
||||
# Sync notification displayed when FanartTV lookup is completed
|
||||
msgctxt "#30019"
|
||||
msgid "FanartTV lookup completed"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings category
|
||||
msgctxt "#30022"
|
||||
msgid "Advanced"
|
||||
|
@ -418,8 +443,8 @@ msgstr "Mode de lecture"
|
|||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30512"
|
||||
msgid "Force artwork caching"
|
||||
msgstr "Forcer la mise en cache du contenu graphique"
|
||||
msgid "Cache all artwork for a smooth Kodi experience"
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30513"
|
||||
|
@ -500,12 +525,8 @@ msgstr "Messages du serveur"
|
|||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#30535"
|
||||
msgid ""
|
||||
"[COLOR yellow]Generate a new unique device Id (e.g. when cloning "
|
||||
"Kodi)[/COLOR]"
|
||||
msgid "Generate a new unique Plex device Id (e.g. to clone Kodi)"
|
||||
msgstr ""
|
||||
"[COLOR yellow]Générer un nouvel ID (unique) (Ex: lors du clonage de "
|
||||
"Kodi)[/COLOR]"
|
||||
|
||||
# PKC Settings - Connection
|
||||
msgctxt "#30536"
|
||||
|
@ -519,8 +540,8 @@ msgstr "REDÉMARREZ KODI SI VOUS APPORTEZ DES MODIFICATIONS"
|
|||
|
||||
# PKC Settings warning
|
||||
msgctxt "#30538"
|
||||
msgid "Complete Re-Sync necessary"
|
||||
msgstr "Re-synchronisation complète nécessaire"
|
||||
msgid "Manual complete reset of Kodi database necessary, see \"Advanced\""
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30539"
|
||||
|
@ -634,8 +655,8 @@ msgstr "Taille des sous-titres incorporés"
|
|||
|
||||
# PKC Settings - Sync
|
||||
msgctxt "#39003"
|
||||
msgid "Limit download sync threads (rec. for rpi: 1)"
|
||||
msgstr "Limit download sync threads (rec. for rpi: 1)"
|
||||
msgid "Number of simultaneous download threads"
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Plex
|
||||
msgctxt "#39004"
|
||||
|
@ -708,17 +729,13 @@ msgstr ""
|
|||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#39018"
|
||||
msgid "[COLOR yellow]Repair local database (force update all content)[/COLOR]"
|
||||
msgid "Repair the Kodi database (force update all content)"
|
||||
msgstr ""
|
||||
"[COLOR yellow]Répération de la base de données locale (Mise à jour forcée de"
|
||||
" tout le contenu)[/COLOR]"
|
||||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#39019"
|
||||
msgid "[COLOR red]Partial or full reset of Database and PKC[/COLOR]"
|
||||
msgid "Reset the Kodi database and optionally reset PlexKodiConnect"
|
||||
msgstr ""
|
||||
"[COLOR red] Remise à zéro partielle ou complète de la base de données et "
|
||||
"PKC[/COLOR]"
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#39020"
|
||||
|
|
|
@ -52,12 +52,12 @@ msgstr "Identifiant : "
|
|||
|
||||
# Sync notification displayed if there is still artwork to be cached to Kodi
|
||||
msgctxt "#30006"
|
||||
msgid "Caching %s images"
|
||||
msgid "Caching %s Plex images"
|
||||
msgstr ""
|
||||
|
||||
# Sync notification displayed if syncing of major artwork is done
|
||||
msgctxt "#30007"
|
||||
msgid "Major image caching done"
|
||||
msgid "Plex image caching done"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings artwork: Enable notifications for artwork image sync
|
||||
|
@ -70,6 +70,16 @@ msgctxt "#30009"
|
|||
msgid "Enable image caching during Kodi playback (restart Kodi!)"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30010"
|
||||
msgid "Approximate progress"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30011"
|
||||
msgid "Artwork left to cache:"
|
||||
msgstr ""
|
||||
|
||||
# Button text
|
||||
msgctxt "#30012"
|
||||
msgid "OK"
|
||||
|
@ -84,6 +94,11 @@ msgctxt "#30014"
|
|||
msgid "Connection"
|
||||
msgstr "Connexion"
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30015"
|
||||
msgid "Movie and show FanartTV lookups left to do:"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30016"
|
||||
msgid "Device Name"
|
||||
msgstr "Nom de l'appareil"
|
||||
|
@ -93,6 +108,16 @@ msgctxt "#30017"
|
|||
msgid "Unauthorized for PMS"
|
||||
msgstr "Non autorisé pour le PMS"
|
||||
|
||||
# Sync notification displayed for the number of fanart.tv lookups left
|
||||
msgctxt "#30018"
|
||||
msgid "Checking FanartTV for %s items"
|
||||
msgstr ""
|
||||
|
||||
# Sync notification displayed when FanartTV lookup is completed
|
||||
msgctxt "#30019"
|
||||
msgid "FanartTV lookup completed"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings category
|
||||
msgctxt "#30022"
|
||||
msgid "Advanced"
|
||||
|
@ -420,8 +445,8 @@ msgstr "Mode de lecture"
|
|||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30512"
|
||||
msgid "Force artwork caching"
|
||||
msgstr "Forcer la mise en cache du contenu graphique"
|
||||
msgid "Cache all artwork for a smooth Kodi experience"
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30513"
|
||||
|
@ -502,12 +527,8 @@ msgstr "Messages du serveur"
|
|||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#30535"
|
||||
msgid ""
|
||||
"[COLOR yellow]Generate a new unique device Id (e.g. when cloning "
|
||||
"Kodi)[/COLOR]"
|
||||
msgid "Generate a new unique Plex device Id (e.g. to clone Kodi)"
|
||||
msgstr ""
|
||||
"[COLOR yellow]Générer un nouvel ID (unique) (Ex: lors du clonage de "
|
||||
"Kodi)[/COLOR]"
|
||||
|
||||
# PKC Settings - Connection
|
||||
msgctxt "#30536"
|
||||
|
@ -521,8 +542,8 @@ msgstr "REDÉMARREZ KODI SI VOUS APPORTEZ DES MODIFICATIONS"
|
|||
|
||||
# PKC Settings warning
|
||||
msgctxt "#30538"
|
||||
msgid "Complete Re-Sync necessary"
|
||||
msgstr "Re-synchronisation complète nécessaire"
|
||||
msgid "Manual complete reset of Kodi database necessary, see \"Advanced\""
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30539"
|
||||
|
@ -636,8 +657,8 @@ msgstr "Taille des sous-titres incorporés"
|
|||
|
||||
# PKC Settings - Sync
|
||||
msgctxt "#39003"
|
||||
msgid "Limit download sync threads (rec. for rpi: 1)"
|
||||
msgstr "Limit download sync threads (rec. for rpi: 1)"
|
||||
msgid "Number of simultaneous download threads"
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Plex
|
||||
msgctxt "#39004"
|
||||
|
@ -710,17 +731,13 @@ msgstr ""
|
|||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#39018"
|
||||
msgid "[COLOR yellow]Repair local database (force update all content)[/COLOR]"
|
||||
msgid "Repair the Kodi database (force update all content)"
|
||||
msgstr ""
|
||||
"[COLOR yellow]Répération de la base de données locale (Mise à jour forcée de"
|
||||
" tout le contenu)[/COLOR]"
|
||||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#39019"
|
||||
msgid "[COLOR red]Partial or full reset of Database and PKC[/COLOR]"
|
||||
msgid "Reset the Kodi database and optionally reset PlexKodiConnect"
|
||||
msgstr ""
|
||||
"[COLOR red] Remise à zéro partielle ou complète de la base de données et "
|
||||
"PKC[/COLOR]"
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#39020"
|
||||
|
|
|
@ -49,12 +49,12 @@ msgstr "Felhasználónév: "
|
|||
|
||||
# Sync notification displayed if there is still artwork to be cached to Kodi
|
||||
msgctxt "#30006"
|
||||
msgid "Caching %s images"
|
||||
msgid "Caching %s Plex images"
|
||||
msgstr ""
|
||||
|
||||
# Sync notification displayed if syncing of major artwork is done
|
||||
msgctxt "#30007"
|
||||
msgid "Major image caching done"
|
||||
msgid "Plex image caching done"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings artwork: Enable notifications for artwork image sync
|
||||
|
@ -67,6 +67,16 @@ msgctxt "#30009"
|
|||
msgid "Enable image caching during Kodi playback (restart Kodi!)"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30010"
|
||||
msgid "Approximate progress"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30011"
|
||||
msgid "Artwork left to cache:"
|
||||
msgstr ""
|
||||
|
||||
# Button text
|
||||
msgctxt "#30012"
|
||||
msgid "OK"
|
||||
|
@ -81,6 +91,11 @@ msgctxt "#30014"
|
|||
msgid "Connection"
|
||||
msgstr "Kapcsolat"
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30015"
|
||||
msgid "Movie and show FanartTV lookups left to do:"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30016"
|
||||
msgid "Device Name"
|
||||
msgstr "Eszköz neve"
|
||||
|
@ -90,6 +105,16 @@ msgctxt "#30017"
|
|||
msgid "Unauthorized for PMS"
|
||||
msgstr "PMS hitelesítés sikertelen"
|
||||
|
||||
# Sync notification displayed for the number of fanart.tv lookups left
|
||||
msgctxt "#30018"
|
||||
msgid "Checking FanartTV for %s items"
|
||||
msgstr ""
|
||||
|
||||
# Sync notification displayed when FanartTV lookup is completed
|
||||
msgctxt "#30019"
|
||||
msgid "FanartTV lookup completed"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings category
|
||||
msgctxt "#30022"
|
||||
msgid "Advanced"
|
||||
|
@ -417,8 +442,8 @@ msgstr "Lejátszási mód"
|
|||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30512"
|
||||
msgid "Force artwork caching"
|
||||
msgstr "Képek gyorsítótárazásának kényszerítése"
|
||||
msgid "Cache all artwork for a smooth Kodi experience"
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30513"
|
||||
|
@ -499,12 +524,8 @@ msgstr "Szerverüzenetek"
|
|||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#30535"
|
||||
msgid ""
|
||||
"[COLOR yellow]Generate a new unique device Id (e.g. when cloning "
|
||||
"Kodi)[/COLOR]"
|
||||
msgid "Generate a new unique Plex device Id (e.g. to clone Kodi)"
|
||||
msgstr ""
|
||||
"[COLOR yellow]Új egyedi eszközazonosító létrehozása (pl. Kodi "
|
||||
"klónozásakor)[/COLOR]"
|
||||
|
||||
# PKC Settings - Connection
|
||||
msgctxt "#30536"
|
||||
|
@ -520,8 +541,8 @@ msgstr "INDÍTSA ÚJRA A KODI-T HA BÁRMIT ÁTÁLLÍT"
|
|||
|
||||
# PKC Settings warning
|
||||
msgctxt "#30538"
|
||||
msgid "Complete Re-Sync necessary"
|
||||
msgstr "Teljes újraszinkronizálás szükséges"
|
||||
msgid "Manual complete reset of Kodi database necessary, see \"Advanced\""
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30539"
|
||||
|
@ -636,8 +657,8 @@ msgstr "Égetett felirat mérete"
|
|||
|
||||
# PKC Settings - Sync
|
||||
msgctxt "#39003"
|
||||
msgid "Limit download sync threads (rec. for rpi: 1)"
|
||||
msgstr "Szinkronizálási szálak korlátozása (RPi esetén ajánlott: 1)"
|
||||
msgid "Number of simultaneous download threads"
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Plex
|
||||
msgctxt "#39004"
|
||||
|
@ -712,17 +733,13 @@ msgstr ""
|
|||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#39018"
|
||||
msgid "[COLOR yellow]Repair local database (force update all content)[/COLOR]"
|
||||
msgid "Repair the Kodi database (force update all content)"
|
||||
msgstr ""
|
||||
"[COLOR yellow]Helyi adatbázis helyreállítása (minden tartalom frissítésének "
|
||||
"kényszerítése)[/COLOR]"
|
||||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#39019"
|
||||
msgid "[COLOR red]Partial or full reset of Database and PKC[/COLOR]"
|
||||
msgid "Reset the Kodi database and optionally reset PlexKodiConnect"
|
||||
msgstr ""
|
||||
"[COLOR red]Az adatbázis és a PKC részleges vagy teljes "
|
||||
"visszaállítása[/COLOR]"
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#39020"
|
||||
|
|
|
@ -1,13 +1,14 @@
|
|||
# XBMC Media Center language file
|
||||
# Translators:
|
||||
# Croneter None <croneter@gmail.com>, 2017
|
||||
# Angela Calò <angycalo@libero.it>, 2018
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PlexKodiConnect\n"
|
||||
"Report-Msgid-Bugs-To: croneter@gmail.com\n"
|
||||
"POT-Creation-Date: 2017-04-15 13:13+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: Croneter None <croneter@gmail.com>, 2017\n"
|
||||
"Last-Translator: Angela Calò <angycalo@libero.it>, 2018\n"
|
||||
"Language-Team: Italian (Italy) (https://www.transifex.com/croneter/teams/73837/it_IT/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
|
@ -18,7 +19,7 @@ msgstr ""
|
|||
# Add-on settings
|
||||
msgctxt "#29999"
|
||||
msgid "PlexKodiConnect"
|
||||
msgstr ""
|
||||
msgstr "PlexKodiConnect"
|
||||
|
||||
msgctxt "#30000"
|
||||
msgid "Server Address (IP)"
|
||||
|
@ -26,7 +27,7 @@ msgstr "Indirizzo Server (IP)"
|
|||
|
||||
msgctxt "#30001"
|
||||
msgid "Searching for PMS"
|
||||
msgstr ""
|
||||
msgstr "Cercando per PMS"
|
||||
|
||||
msgctxt "#30002"
|
||||
msgid "Preferred playback method"
|
||||
|
@ -40,35 +41,49 @@ msgid ""
|
|||
"Warning: Kodi setting \"Play next video automatically\" is enabled. This "
|
||||
"could break PKC. Deactivate?"
|
||||
msgstr ""
|
||||
"Attenzione: l'impostazione Kodi \"Avvia il video successivo "
|
||||
"automaticamente\" è attivata. Questo può interrompere PKC. Disattivare?"
|
||||
|
||||
msgctxt "#30005"
|
||||
msgid "Username: "
|
||||
msgstr ""
|
||||
msgstr "Nome utente:"
|
||||
|
||||
# Sync notification displayed if there is still artwork to be cached to Kodi
|
||||
msgctxt "#30006"
|
||||
msgid "Caching %s images"
|
||||
msgstr ""
|
||||
msgid "Caching %s Plex images"
|
||||
msgstr "Sto salvando %s delle immagini Plex "
|
||||
|
||||
# Sync notification displayed if syncing of major artwork is done
|
||||
msgctxt "#30007"
|
||||
msgid "Major image caching done"
|
||||
msgstr ""
|
||||
msgid "Plex image caching done"
|
||||
msgstr "Salvataggio dell'immagine Plex completato"
|
||||
|
||||
# PKC settings artwork: Enable notifications for artwork image sync
|
||||
msgctxt "#30008"
|
||||
msgid "Enable notifications for image caching"
|
||||
msgstr ""
|
||||
msgstr "Abilita le notifiche per il salvataggio dell'immagine"
|
||||
|
||||
# PKC settings artwork: Enable image caching during Kodi playback
|
||||
msgctxt "#30009"
|
||||
msgid "Enable image caching during Kodi playback (restart Kodi!)"
|
||||
msgstr ""
|
||||
"Abilita il salvataggio dell'immagine durante il playback Kodi (riavvia "
|
||||
"Kodi!)"
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30010"
|
||||
msgid "Approximate progress"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30011"
|
||||
msgid "Artwork left to cache:"
|
||||
msgstr ""
|
||||
|
||||
# Button text
|
||||
msgctxt "#30012"
|
||||
msgid "OK"
|
||||
msgstr ""
|
||||
msgstr "OK"
|
||||
|
||||
msgctxt "#30013"
|
||||
msgid "Never show"
|
||||
|
@ -79,6 +94,11 @@ msgctxt "#30014"
|
|||
msgid "Connection"
|
||||
msgstr "Connessione"
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30015"
|
||||
msgid "Movie and show FanartTV lookups left to do:"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30016"
|
||||
msgid "Device Name"
|
||||
msgstr "Nome del dispositivo"
|
||||
|
@ -88,6 +108,16 @@ msgctxt "#30017"
|
|||
msgid "Unauthorized for PMS"
|
||||
msgstr "Non autorizzato per PMS"
|
||||
|
||||
# Sync notification displayed for the number of fanart.tv lookups left
|
||||
msgctxt "#30018"
|
||||
msgid "Checking FanartTV for %s items"
|
||||
msgstr ""
|
||||
|
||||
# Sync notification displayed when FanartTV lookup is completed
|
||||
msgctxt "#30019"
|
||||
msgid "FanartTV lookup completed"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings category
|
||||
msgctxt "#30022"
|
||||
msgid "Advanced"
|
||||
|
@ -415,8 +445,8 @@ msgstr "Modalità di riproduzione"
|
|||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30512"
|
||||
msgid "Force artwork caching"
|
||||
msgstr "Forza caching delle artwork"
|
||||
msgid "Cache all artwork for a smooth Kodi experience"
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30513"
|
||||
|
@ -495,12 +525,8 @@ msgstr "Messaggi del server"
|
|||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#30535"
|
||||
msgid ""
|
||||
"[COLOR yellow]Generate a new unique device Id (e.g. when cloning "
|
||||
"Kodi)[/COLOR]"
|
||||
msgid "Generate a new unique Plex device Id (e.g. to clone Kodi)"
|
||||
msgstr ""
|
||||
"[COLOR yellow]Genera un nuovo ID dispositivo (es. quando viene clonato "
|
||||
"Kodi)[/COLOR]"
|
||||
|
||||
# PKC Settings - Connection
|
||||
msgctxt "#30536"
|
||||
|
@ -514,8 +540,8 @@ msgstr "RIAVVIA KODI SE FAI DELLE MODIFICHE"
|
|||
|
||||
# PKC Settings warning
|
||||
msgctxt "#30538"
|
||||
msgid "Complete Re-Sync necessary"
|
||||
msgstr "Ri-sincronizzazione completa necessaria"
|
||||
msgid "Manual complete reset of Kodi database necessary, see \"Advanced\""
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30539"
|
||||
|
@ -630,8 +656,8 @@ msgstr "Dimensione sottotitoli in sovraimpressione"
|
|||
|
||||
# PKC Settings - Sync
|
||||
msgctxt "#39003"
|
||||
msgid "Limit download sync threads (rec. for rpi: 1)"
|
||||
msgstr "Limita thread di download per la sincronizzazione (racc. per rpi: 1)"
|
||||
msgid "Number of simultaneous download threads"
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Plex
|
||||
msgctxt "#39004"
|
||||
|
@ -707,15 +733,13 @@ msgstr ""
|
|||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#39018"
|
||||
msgid "[COLOR yellow]Repair local database (force update all content)[/COLOR]"
|
||||
msgid "Repair the Kodi database (force update all content)"
|
||||
msgstr ""
|
||||
"[COLOR yellow]Ripara database locale (forza l'aggiornamento dei "
|
||||
"contenuti)[/COLOR]"
|
||||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#39019"
|
||||
msgid "[COLOR red]Partial or full reset of Database and PKC[/COLOR]"
|
||||
msgstr "[COLOR red]Reset parziale o completo di database e PKC[/COLOR]"
|
||||
msgid "Reset the Kodi database and optionally reset PlexKodiConnect"
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#39020"
|
||||
|
|
|
@ -50,12 +50,12 @@ msgstr "Gebruikersnaam: "
|
|||
|
||||
# Sync notification displayed if there is still artwork to be cached to Kodi
|
||||
msgctxt "#30006"
|
||||
msgid "Caching %s images"
|
||||
msgid "Caching %s Plex images"
|
||||
msgstr ""
|
||||
|
||||
# Sync notification displayed if syncing of major artwork is done
|
||||
msgctxt "#30007"
|
||||
msgid "Major image caching done"
|
||||
msgid "Plex image caching done"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings artwork: Enable notifications for artwork image sync
|
||||
|
@ -68,6 +68,16 @@ msgctxt "#30009"
|
|||
msgid "Enable image caching during Kodi playback (restart Kodi!)"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30010"
|
||||
msgid "Approximate progress"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30011"
|
||||
msgid "Artwork left to cache:"
|
||||
msgstr ""
|
||||
|
||||
# Button text
|
||||
msgctxt "#30012"
|
||||
msgid "OK"
|
||||
|
@ -82,6 +92,11 @@ msgctxt "#30014"
|
|||
msgid "Connection"
|
||||
msgstr "Verbinding"
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30015"
|
||||
msgid "Movie and show FanartTV lookups left to do:"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30016"
|
||||
msgid "Device Name"
|
||||
msgstr "Apparaatnaam"
|
||||
|
@ -91,6 +106,16 @@ msgctxt "#30017"
|
|||
msgid "Unauthorized for PMS"
|
||||
msgstr "Onbevoegd voor PMS"
|
||||
|
||||
# Sync notification displayed for the number of fanart.tv lookups left
|
||||
msgctxt "#30018"
|
||||
msgid "Checking FanartTV for %s items"
|
||||
msgstr ""
|
||||
|
||||
# Sync notification displayed when FanartTV lookup is completed
|
||||
msgctxt "#30019"
|
||||
msgid "FanartTV lookup completed"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings category
|
||||
msgctxt "#30022"
|
||||
msgid "Advanced"
|
||||
|
@ -418,8 +443,8 @@ msgstr "Afspeelmodus"
|
|||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30512"
|
||||
msgid "Force artwork caching"
|
||||
msgstr "Forceer artwork caching"
|
||||
msgid "Cache all artwork for a smooth Kodi experience"
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30513"
|
||||
|
@ -499,12 +524,8 @@ msgstr "Serverberichten"
|
|||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#30535"
|
||||
msgid ""
|
||||
"[COLOR yellow]Generate a new unique device Id (e.g. when cloning "
|
||||
"Kodi)[/COLOR]"
|
||||
msgid "Generate a new unique Plex device Id (e.g. to clone Kodi)"
|
||||
msgstr ""
|
||||
"[COLOR yellow]Genereer nieuw uniek apparaat ID (bijvoorbeeld bij het klonen "
|
||||
"van Kodi)[/COLOR]"
|
||||
|
||||
# PKC Settings - Connection
|
||||
msgctxt "#30536"
|
||||
|
@ -518,8 +539,8 @@ msgstr "BIJ AANPASSINGEN KODI HERSTARTEN"
|
|||
|
||||
# PKC Settings warning
|
||||
msgctxt "#30538"
|
||||
msgid "Complete Re-Sync necessary"
|
||||
msgstr "Volledige re-sync nodig"
|
||||
msgid "Manual complete reset of Kodi database necessary, see \"Advanced\""
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30539"
|
||||
|
@ -632,8 +653,8 @@ msgstr "Ondertitel grootte"
|
|||
|
||||
# PKC Settings - Sync
|
||||
msgctxt "#39003"
|
||||
msgid "Limit download sync threads (rec. for rpi: 1)"
|
||||
msgstr "Beperk aantal download threads (voor rpi: 1)"
|
||||
msgid "Number of simultaneous download threads"
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Plex
|
||||
msgctxt "#39004"
|
||||
|
@ -705,16 +726,13 @@ msgstr "PKC plugin instellingen aanpassen? Kodi moet hierna herstart worden!"
|
|||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#39018"
|
||||
msgid "[COLOR yellow]Repair local database (force update all content)[/COLOR]"
|
||||
msgid "Repair the Kodi database (force update all content)"
|
||||
msgstr ""
|
||||
"[COLOR yellow]Lokale database herstellen (forceer verversen van alle "
|
||||
"inhoud)[/COLOR]"
|
||||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#39019"
|
||||
msgid "[COLOR red]Partial or full reset of Database and PKC[/COLOR]"
|
||||
msgid "Reset the Kodi database and optionally reset PlexKodiConnect"
|
||||
msgstr ""
|
||||
"[COLOR red]Gedeeltelijke of volledige reset van database en PKC[/COLOR]"
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#39020"
|
||||
|
|
|
@ -48,12 +48,12 @@ msgstr "Brukernavn:"
|
|||
|
||||
# Sync notification displayed if there is still artwork to be cached to Kodi
|
||||
msgctxt "#30006"
|
||||
msgid "Caching %s images"
|
||||
msgid "Caching %s Plex images"
|
||||
msgstr ""
|
||||
|
||||
# Sync notification displayed if syncing of major artwork is done
|
||||
msgctxt "#30007"
|
||||
msgid "Major image caching done"
|
||||
msgid "Plex image caching done"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings artwork: Enable notifications for artwork image sync
|
||||
|
@ -66,6 +66,16 @@ msgctxt "#30009"
|
|||
msgid "Enable image caching during Kodi playback (restart Kodi!)"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30010"
|
||||
msgid "Approximate progress"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30011"
|
||||
msgid "Artwork left to cache:"
|
||||
msgstr ""
|
||||
|
||||
# Button text
|
||||
msgctxt "#30012"
|
||||
msgid "OK"
|
||||
|
@ -80,6 +90,11 @@ msgctxt "#30014"
|
|||
msgid "Connection"
|
||||
msgstr "Tilkobling"
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30015"
|
||||
msgid "Movie and show FanartTV lookups left to do:"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30016"
|
||||
msgid "Device Name"
|
||||
msgstr "Enhetsnavn"
|
||||
|
@ -89,6 +104,16 @@ msgctxt "#30017"
|
|||
msgid "Unauthorized for PMS"
|
||||
msgstr "Uautorisert for tilkobling til PMS"
|
||||
|
||||
# Sync notification displayed for the number of fanart.tv lookups left
|
||||
msgctxt "#30018"
|
||||
msgid "Checking FanartTV for %s items"
|
||||
msgstr ""
|
||||
|
||||
# Sync notification displayed when FanartTV lookup is completed
|
||||
msgctxt "#30019"
|
||||
msgid "FanartTV lookup completed"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings category
|
||||
msgctxt "#30022"
|
||||
msgid "Advanced"
|
||||
|
@ -415,8 +440,8 @@ msgstr "Avspillingsmetode"
|
|||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30512"
|
||||
msgid "Force artwork caching"
|
||||
msgstr "Tving artwork caching"
|
||||
msgid "Cache all artwork for a smooth Kodi experience"
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30513"
|
||||
|
@ -495,12 +520,8 @@ msgstr "Servermeldinger"
|
|||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#30535"
|
||||
msgid ""
|
||||
"[COLOR yellow]Generate a new unique device Id (e.g. when cloning "
|
||||
"Kodi)[/COLOR]"
|
||||
msgid "Generate a new unique Plex device Id (e.g. to clone Kodi)"
|
||||
msgstr ""
|
||||
"[COLOR yellow]Generer en ny unik enhets ID (f. eks. ved kloning av "
|
||||
"Kodi)[/COLOR]"
|
||||
|
||||
# PKC Settings - Connection
|
||||
msgctxt "#30536"
|
||||
|
@ -514,8 +535,8 @@ msgstr "START KODI PÅ NYTT HVIS DU GJØR FORANDRINGER"
|
|||
|
||||
# PKC Settings warning
|
||||
msgctxt "#30538"
|
||||
msgid "Complete Re-Sync necessary"
|
||||
msgstr "Fullstending resynk nødvendig"
|
||||
msgid "Manual complete reset of Kodi database necessary, see \"Advanced\""
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30539"
|
||||
|
@ -627,8 +648,8 @@ msgstr "Størrelse på integrert undertekst"
|
|||
|
||||
# PKC Settings - Sync
|
||||
msgctxt "#39003"
|
||||
msgid "Limit download sync threads (rec. for rpi: 1)"
|
||||
msgstr "Begrens antall nedlastingsprosesser (anbefalt for rpi: 1)"
|
||||
msgid "Number of simultaneous download threads"
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Plex
|
||||
msgctxt "#39004"
|
||||
|
@ -701,14 +722,12 @@ msgstr ""
|
|||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#39018"
|
||||
msgid "[COLOR yellow]Repair local database (force update all content)[/COLOR]"
|
||||
msgid "Repair the Kodi database (force update all content)"
|
||||
msgstr ""
|
||||
" [COLOR yellow]Reparer lokal database (tving oppdatering av alt "
|
||||
"innhold)[/COLOR]"
|
||||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#39019"
|
||||
msgid "[COLOR red]Partial or full reset of Database and PKC[/COLOR]"
|
||||
msgid "Reset the Kodi database and optionally reset PlexKodiConnect"
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Artwork
|
||||
|
|
|
@ -47,12 +47,12 @@ msgstr "Utilizador: "
|
|||
|
||||
# Sync notification displayed if there is still artwork to be cached to Kodi
|
||||
msgctxt "#30006"
|
||||
msgid "Caching %s images"
|
||||
msgid "Caching %s Plex images"
|
||||
msgstr ""
|
||||
|
||||
# Sync notification displayed if syncing of major artwork is done
|
||||
msgctxt "#30007"
|
||||
msgid "Major image caching done"
|
||||
msgid "Plex image caching done"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings artwork: Enable notifications for artwork image sync
|
||||
|
@ -65,6 +65,16 @@ msgctxt "#30009"
|
|||
msgid "Enable image caching during Kodi playback (restart Kodi!)"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30010"
|
||||
msgid "Approximate progress"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30011"
|
||||
msgid "Artwork left to cache:"
|
||||
msgstr ""
|
||||
|
||||
# Button text
|
||||
msgctxt "#30012"
|
||||
msgid "OK"
|
||||
|
@ -79,6 +89,11 @@ msgctxt "#30014"
|
|||
msgid "Connection"
|
||||
msgstr "Ligação"
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30015"
|
||||
msgid "Movie and show FanartTV lookups left to do:"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30016"
|
||||
msgid "Device Name"
|
||||
msgstr "Nome do Dispositivo"
|
||||
|
@ -88,6 +103,16 @@ msgctxt "#30017"
|
|||
msgid "Unauthorized for PMS"
|
||||
msgstr "Não autorizado para o PMS"
|
||||
|
||||
# Sync notification displayed for the number of fanart.tv lookups left
|
||||
msgctxt "#30018"
|
||||
msgid "Checking FanartTV for %s items"
|
||||
msgstr ""
|
||||
|
||||
# Sync notification displayed when FanartTV lookup is completed
|
||||
msgctxt "#30019"
|
||||
msgid "FanartTV lookup completed"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings category
|
||||
msgctxt "#30022"
|
||||
msgid "Advanced"
|
||||
|
@ -415,8 +440,8 @@ msgstr "Modo de Reprodução"
|
|||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30512"
|
||||
msgid "Force artwork caching"
|
||||
msgstr "Forçar o armazenamento em cache das ilustrações"
|
||||
msgid "Cache all artwork for a smooth Kodi experience"
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30513"
|
||||
|
@ -495,12 +520,8 @@ msgstr "Mensagens do servidor"
|
|||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#30535"
|
||||
msgid ""
|
||||
"[COLOR yellow]Generate a new unique device Id (e.g. when cloning "
|
||||
"Kodi)[/COLOR]"
|
||||
msgid "Generate a new unique Plex device Id (e.g. to clone Kodi)"
|
||||
msgstr ""
|
||||
"[COLOR yellow]Criar uma nova identidade única do dispositivo (e.x. ao clonar"
|
||||
" Kodi)[/COLOR]"
|
||||
|
||||
# PKC Settings - Connection
|
||||
msgctxt "#30536"
|
||||
|
@ -514,8 +535,8 @@ msgstr "REINICIE O KODI SE FIZER MUDANÇAS"
|
|||
|
||||
# PKC Settings warning
|
||||
msgctxt "#30538"
|
||||
msgid "Complete Re-Sync necessary"
|
||||
msgstr "Ressincronização Completa necessária"
|
||||
msgid "Manual complete reset of Kodi database necessary, see \"Advanced\""
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30539"
|
||||
|
@ -629,9 +650,8 @@ msgstr "Tamanho de legendas permanentes"
|
|||
|
||||
# PKC Settings - Sync
|
||||
msgctxt "#39003"
|
||||
msgid "Limit download sync threads (rec. for rpi: 1)"
|
||||
msgid "Number of simultaneous download threads"
|
||||
msgstr ""
|
||||
"Limitar as operaçoes de descarregamento sincronizado (rec. para rpi: 1)"
|
||||
|
||||
# PKC Settings - Plex
|
||||
msgctxt "#39004"
|
||||
|
@ -707,15 +727,13 @@ msgstr ""
|
|||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#39018"
|
||||
msgid "[COLOR yellow]Repair local database (force update all content)[/COLOR]"
|
||||
msgid "Repair the Kodi database (force update all content)"
|
||||
msgstr ""
|
||||
"[COLOR yellow]Reparar base de dados local (forçar actualização de todo o "
|
||||
"conteúdo)[/COLOR]"
|
||||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#39019"
|
||||
msgid "[COLOR red]Partial or full reset of Database and PKC[/COLOR]"
|
||||
msgstr "[COLOR red]Reposiçao partial ou total da base de dados e PKC[/COLOR]"
|
||||
msgid "Reset the Kodi database and optionally reset PlexKodiConnect"
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#39020"
|
||||
|
|
|
@ -49,12 +49,12 @@ msgstr "Utilizador: "
|
|||
|
||||
# Sync notification displayed if there is still artwork to be cached to Kodi
|
||||
msgctxt "#30006"
|
||||
msgid "Caching %s images"
|
||||
msgid "Caching %s Plex images"
|
||||
msgstr ""
|
||||
|
||||
# Sync notification displayed if syncing of major artwork is done
|
||||
msgctxt "#30007"
|
||||
msgid "Major image caching done"
|
||||
msgid "Plex image caching done"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings artwork: Enable notifications for artwork image sync
|
||||
|
@ -67,6 +67,16 @@ msgctxt "#30009"
|
|||
msgid "Enable image caching during Kodi playback (restart Kodi!)"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30010"
|
||||
msgid "Approximate progress"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30011"
|
||||
msgid "Artwork left to cache:"
|
||||
msgstr ""
|
||||
|
||||
# Button text
|
||||
msgctxt "#30012"
|
||||
msgid "OK"
|
||||
|
@ -81,6 +91,11 @@ msgctxt "#30014"
|
|||
msgid "Connection"
|
||||
msgstr "Ligação"
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30015"
|
||||
msgid "Movie and show FanartTV lookups left to do:"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30016"
|
||||
msgid "Device Name"
|
||||
msgstr "Nome do Dispositivo"
|
||||
|
@ -90,6 +105,16 @@ msgctxt "#30017"
|
|||
msgid "Unauthorized for PMS"
|
||||
msgstr "Não autorizado para o PMS"
|
||||
|
||||
# Sync notification displayed for the number of fanart.tv lookups left
|
||||
msgctxt "#30018"
|
||||
msgid "Checking FanartTV for %s items"
|
||||
msgstr ""
|
||||
|
||||
# Sync notification displayed when FanartTV lookup is completed
|
||||
msgctxt "#30019"
|
||||
msgid "FanartTV lookup completed"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings category
|
||||
msgctxt "#30022"
|
||||
msgid "Advanced"
|
||||
|
@ -417,8 +442,8 @@ msgstr "Modo de Reprodução"
|
|||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30512"
|
||||
msgid "Force artwork caching"
|
||||
msgstr "Forçar o armazenamento em cache das ilustrações"
|
||||
msgid "Cache all artwork for a smooth Kodi experience"
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30513"
|
||||
|
@ -497,12 +522,8 @@ msgstr "Mensagens do servidor"
|
|||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#30535"
|
||||
msgid ""
|
||||
"[COLOR yellow]Generate a new unique device Id (e.g. when cloning "
|
||||
"Kodi)[/COLOR]"
|
||||
msgid "Generate a new unique Plex device Id (e.g. to clone Kodi)"
|
||||
msgstr ""
|
||||
"[COLOR yellow]Criar uma nova identidade única do dispositivo (e.x. ao clonar"
|
||||
" Kodi)[/COLOR]"
|
||||
|
||||
# PKC Settings - Connection
|
||||
msgctxt "#30536"
|
||||
|
@ -516,8 +537,8 @@ msgstr "REINICIE O KODI SE FIZER MUDANÇAS"
|
|||
|
||||
# PKC Settings warning
|
||||
msgctxt "#30538"
|
||||
msgid "Complete Re-Sync necessary"
|
||||
msgstr "Ressincronização Completa necessária"
|
||||
msgid "Manual complete reset of Kodi database necessary, see \"Advanced\""
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30539"
|
||||
|
@ -631,9 +652,8 @@ msgstr "Tamanho de legendas permanentes"
|
|||
|
||||
# PKC Settings - Sync
|
||||
msgctxt "#39003"
|
||||
msgid "Limit download sync threads (rec. for rpi: 1)"
|
||||
msgid "Number of simultaneous download threads"
|
||||
msgstr ""
|
||||
"Limitar as operaçoes de descarregamento sincronizado (rec. para rpi: 1)"
|
||||
|
||||
# PKC Settings - Plex
|
||||
msgctxt "#39004"
|
||||
|
@ -709,15 +729,13 @@ msgstr ""
|
|||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#39018"
|
||||
msgid "[COLOR yellow]Repair local database (force update all content)[/COLOR]"
|
||||
msgid "Repair the Kodi database (force update all content)"
|
||||
msgstr ""
|
||||
"[COLOR yellow]Reparar base de dados local (forçar actualização de todo o "
|
||||
"conteúdo)[/COLOR]"
|
||||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#39019"
|
||||
msgid "[COLOR red]Partial or full reset of Database and PKC[/COLOR]"
|
||||
msgstr "[COLOR red]Reposiçao partial ou total da base de dados e PKC[/COLOR]"
|
||||
msgid "Reset the Kodi database and optionally reset PlexKodiConnect"
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#39020"
|
||||
|
|
|
@ -53,23 +53,35 @@ msgstr "Имя пользователя: "
|
|||
|
||||
# Sync notification displayed if there is still artwork to be cached to Kodi
|
||||
msgctxt "#30006"
|
||||
msgid "Caching %s images"
|
||||
msgstr ""
|
||||
msgid "Caching %s Plex images"
|
||||
msgstr "Кэширование %s изображений Plex"
|
||||
|
||||
# Sync notification displayed if syncing of major artwork is done
|
||||
msgctxt "#30007"
|
||||
msgid "Major image caching done"
|
||||
msgstr ""
|
||||
msgid "Plex image caching done"
|
||||
msgstr "Кэширование изображений Plex завершено"
|
||||
|
||||
# PKC settings artwork: Enable notifications for artwork image sync
|
||||
msgctxt "#30008"
|
||||
msgid "Enable notifications for image caching"
|
||||
msgstr ""
|
||||
msgstr "Включить уведомления для кэширования изображений"
|
||||
|
||||
# PKC settings artwork: Enable image caching during Kodi playback
|
||||
msgctxt "#30009"
|
||||
msgid "Enable image caching during Kodi playback (restart Kodi!)"
|
||||
msgstr ""
|
||||
"Включить кэширование изображений во время воспроизведения Kodi "
|
||||
"(перезапустите Kodi!)"
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30010"
|
||||
msgid "Approximate progress"
|
||||
msgstr "Приблизительный прогресс"
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30011"
|
||||
msgid "Artwork left to cache:"
|
||||
msgstr ""
|
||||
|
||||
# Button text
|
||||
msgctxt "#30012"
|
||||
|
@ -85,6 +97,11 @@ msgctxt "#30014"
|
|||
msgid "Connection"
|
||||
msgstr "Подключение"
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30015"
|
||||
msgid "Movie and show FanartTV lookups left to do:"
|
||||
msgstr "Осталось просмотреть FanartTV для фильмов и сериалов:"
|
||||
|
||||
msgctxt "#30016"
|
||||
msgid "Device Name"
|
||||
msgstr "Имя устройства"
|
||||
|
@ -94,6 +111,16 @@ msgctxt "#30017"
|
|||
msgid "Unauthorized for PMS"
|
||||
msgstr "Не авторизован на сервере Plex"
|
||||
|
||||
# Sync notification displayed for the number of fanart.tv lookups left
|
||||
msgctxt "#30018"
|
||||
msgid "Checking FanartTV for %s items"
|
||||
msgstr "FanartTV осталось проверить %s"
|
||||
|
||||
# Sync notification displayed when FanartTV lookup is completed
|
||||
msgctxt "#30019"
|
||||
msgid "FanartTV lookup completed"
|
||||
msgstr "Поиск FanartTV завершен"
|
||||
|
||||
# PKC settings category
|
||||
msgctxt "#30022"
|
||||
msgid "Advanced"
|
||||
|
@ -419,8 +446,8 @@ msgstr "Режим воспроизведения"
|
|||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30512"
|
||||
msgid "Force artwork caching"
|
||||
msgstr "Принудительное кеширование иллюстраций"
|
||||
msgid "Cache all artwork for a smooth Kodi experience"
|
||||
msgstr "Кэш всех изображений для плавной работы Kodi"
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30513"
|
||||
|
@ -501,12 +528,9 @@ msgstr "Сообщения сервера"
|
|||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#30535"
|
||||
msgid ""
|
||||
"[COLOR yellow]Generate a new unique device Id (e.g. when cloning "
|
||||
"Kodi)[/COLOR]"
|
||||
msgid "Generate a new unique Plex device Id (e.g. to clone Kodi)"
|
||||
msgstr ""
|
||||
"[COLOR yellow]Сгенерировать новый ID (например если вы скопировали Kodi на "
|
||||
"новое устройство)[/COLOR]"
|
||||
"Генерировать новый ID устройства Plex (например, при клонировании Kodi)"
|
||||
|
||||
# PKC Settings - Connection
|
||||
msgctxt "#30536"
|
||||
|
@ -520,8 +544,9 @@ msgstr "ПЕРЕЗАПУСТИТЕ KODI, ЕСЛИ ВНОСИЛИ КАКИЕ-ТО
|
|||
|
||||
# PKC Settings warning
|
||||
msgctxt "#30538"
|
||||
msgid "Complete Re-Sync necessary"
|
||||
msgstr "Необходима полная пересинхронизация"
|
||||
msgid "Manual complete reset of Kodi database necessary, see \"Advanced\""
|
||||
msgstr ""
|
||||
"Необходим ручной полный сброс базы данных Kodi, см. Раздел \"Дополнительно\""
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30539"
|
||||
|
@ -632,8 +657,8 @@ msgstr "Размер субтитров внедряемых в видео"
|
|||
|
||||
# PKC Settings - Sync
|
||||
msgctxt "#39003"
|
||||
msgid "Limit download sync threads (rec. for rpi: 1)"
|
||||
msgstr "Количество потоков синхронизации(для RPi:1)"
|
||||
msgid "Number of simultaneous download threads"
|
||||
msgstr "Количество одновременных тем для загрузки"
|
||||
|
||||
# PKC Settings - Plex
|
||||
msgctxt "#39004"
|
||||
|
@ -706,15 +731,15 @@ msgstr ""
|
|||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#39018"
|
||||
msgid "[COLOR yellow]Repair local database (force update all content)[/COLOR]"
|
||||
msgid "Repair the Kodi database (force update all content)"
|
||||
msgstr ""
|
||||
"[COLOR yellow]Исправить базу данных (принудительно обновить весь "
|
||||
"контент)[/COLOR]"
|
||||
"Восстановление базы данных Kodi (принудительное обновление всего "
|
||||
"содержимого)"
|
||||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#39019"
|
||||
msgid "[COLOR red]Partial or full reset of Database and PKC[/COLOR]"
|
||||
msgstr "[COLOR red]Частичный или полный сброс базы данных и PKC[/COLOR]"
|
||||
msgid "Reset the Kodi database and optionally reset PlexKodiConnect"
|
||||
msgstr "Сброс базы данных Kodi и возможная перезагрузка PlexKodiConnect"
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#39020"
|
||||
|
|
|
@ -48,12 +48,12 @@ msgstr "用户名 "
|
|||
|
||||
# Sync notification displayed if there is still artwork to be cached to Kodi
|
||||
msgctxt "#30006"
|
||||
msgid "Caching %s images"
|
||||
msgid "Caching %s Plex images"
|
||||
msgstr ""
|
||||
|
||||
# Sync notification displayed if syncing of major artwork is done
|
||||
msgctxt "#30007"
|
||||
msgid "Major image caching done"
|
||||
msgid "Plex image caching done"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings artwork: Enable notifications for artwork image sync
|
||||
|
@ -66,6 +66,16 @@ msgctxt "#30009"
|
|||
msgid "Enable image caching during Kodi playback (restart Kodi!)"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30010"
|
||||
msgid "Approximate progress"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30011"
|
||||
msgid "Artwork left to cache:"
|
||||
msgstr ""
|
||||
|
||||
# Button text
|
||||
msgctxt "#30012"
|
||||
msgid "OK"
|
||||
|
@ -80,6 +90,11 @@ msgctxt "#30014"
|
|||
msgid "Connection"
|
||||
msgstr "连接"
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30015"
|
||||
msgid "Movie and show FanartTV lookups left to do:"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30016"
|
||||
msgid "Device Name"
|
||||
msgstr "设备名"
|
||||
|
@ -89,6 +104,16 @@ msgctxt "#30017"
|
|||
msgid "Unauthorized for PMS"
|
||||
msgstr "Plex媒体服务器未授权"
|
||||
|
||||
# Sync notification displayed for the number of fanart.tv lookups left
|
||||
msgctxt "#30018"
|
||||
msgid "Checking FanartTV for %s items"
|
||||
msgstr ""
|
||||
|
||||
# Sync notification displayed when FanartTV lookup is completed
|
||||
msgctxt "#30019"
|
||||
msgid "FanartTV lookup completed"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings category
|
||||
msgctxt "#30022"
|
||||
msgid "Advanced"
|
||||
|
@ -414,8 +439,8 @@ msgstr "播放模式"
|
|||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30512"
|
||||
msgid "Force artwork caching"
|
||||
msgstr "强制缓存插图"
|
||||
msgid "Cache all artwork for a smooth Kodi experience"
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30513"
|
||||
|
@ -494,10 +519,8 @@ msgstr "服务器消息"
|
|||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#30535"
|
||||
msgid ""
|
||||
"[COLOR yellow]Generate a new unique device Id (e.g. when cloning "
|
||||
"Kodi)[/COLOR]"
|
||||
msgstr "[黄色]生成新的唯一设备ID(e.g. 当克隆Kodi时)[/COLOR]"
|
||||
msgid "Generate a new unique Plex device Id (e.g. to clone Kodi)"
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Connection
|
||||
msgctxt "#30536"
|
||||
|
@ -511,8 +534,8 @@ msgstr "如有任何更改请重启KODI"
|
|||
|
||||
# PKC Settings warning
|
||||
msgctxt "#30538"
|
||||
msgid "Complete Re-Sync necessary"
|
||||
msgstr "必须完整重新同步"
|
||||
msgid "Manual complete reset of Kodi database necessary, see \"Advanced\""
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30539"
|
||||
|
@ -622,8 +645,8 @@ msgstr "压制字幕尺寸"
|
|||
|
||||
# PKC Settings - Sync
|
||||
msgctxt "#39003"
|
||||
msgid "Limit download sync threads (rec. for rpi: 1)"
|
||||
msgstr "限制下载同步线程(reg. for rpi: 1)"
|
||||
msgid "Number of simultaneous download threads"
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Plex
|
||||
msgctxt "#39004"
|
||||
|
@ -691,13 +714,13 @@ msgstr "您想现在转入插件设置以调整PKC吗?您将需要重启Kodi
|
|||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#39018"
|
||||
msgid "[COLOR yellow]Repair local database (force update all content)[/COLOR]"
|
||||
msgstr "[黄色]修复本地数据库 (强制更新所有内容)[/COLOR]"
|
||||
msgid "Repair the Kodi database (force update all content)"
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#39019"
|
||||
msgid "[COLOR red]Partial or full reset of Database and PKC[/COLOR]"
|
||||
msgstr "[红色]部分或全部重置数据库和PKC[/COLOR]"
|
||||
msgid "Reset the Kodi database and optionally reset PlexKodiConnect"
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#39020"
|
||||
|
|
|
@ -47,12 +47,12 @@ msgstr "使用者: "
|
|||
|
||||
# Sync notification displayed if there is still artwork to be cached to Kodi
|
||||
msgctxt "#30006"
|
||||
msgid "Caching %s images"
|
||||
msgid "Caching %s Plex images"
|
||||
msgstr ""
|
||||
|
||||
# Sync notification displayed if syncing of major artwork is done
|
||||
msgctxt "#30007"
|
||||
msgid "Major image caching done"
|
||||
msgid "Plex image caching done"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings artwork: Enable notifications for artwork image sync
|
||||
|
@ -65,6 +65,16 @@ msgctxt "#30009"
|
|||
msgid "Enable image caching during Kodi playback (restart Kodi!)"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30010"
|
||||
msgid "Approximate progress"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30011"
|
||||
msgid "Artwork left to cache:"
|
||||
msgstr ""
|
||||
|
||||
# Button text
|
||||
msgctxt "#30012"
|
||||
msgid "OK"
|
||||
|
@ -79,6 +89,11 @@ msgctxt "#30014"
|
|||
msgid "Connection"
|
||||
msgstr "連結"
|
||||
|
||||
# PKC settings - Artwork
|
||||
msgctxt "#30015"
|
||||
msgid "Movie and show FanartTV lookups left to do:"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30016"
|
||||
msgid "Device Name"
|
||||
msgstr "裝置名稱"
|
||||
|
@ -88,6 +103,16 @@ msgctxt "#30017"
|
|||
msgid "Unauthorized for PMS"
|
||||
msgstr "Plex伺服器未被授權"
|
||||
|
||||
# Sync notification displayed for the number of fanart.tv lookups left
|
||||
msgctxt "#30018"
|
||||
msgid "Checking FanartTV for %s items"
|
||||
msgstr ""
|
||||
|
||||
# Sync notification displayed when FanartTV lookup is completed
|
||||
msgctxt "#30019"
|
||||
msgid "FanartTV lookup completed"
|
||||
msgstr ""
|
||||
|
||||
# PKC settings category
|
||||
msgctxt "#30022"
|
||||
msgid "Advanced"
|
||||
|
@ -413,8 +438,8 @@ msgstr "播放模式"
|
|||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30512"
|
||||
msgid "Force artwork caching"
|
||||
msgstr "強制暫存背景海報"
|
||||
msgid "Cache all artwork for a smooth Kodi experience"
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30513"
|
||||
|
@ -493,10 +518,8 @@ msgstr "伺服器訊息:"
|
|||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#30535"
|
||||
msgid ""
|
||||
"[COLOR yellow]Generate a new unique device Id (e.g. when cloning "
|
||||
"Kodi)[/COLOR]"
|
||||
msgstr "[COLOR yellow]產生新的唯一的設備辨識碼(例如:當複製Kodi時)[/COLOR]"
|
||||
msgid "Generate a new unique Plex device Id (e.g. to clone Kodi)"
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Connection
|
||||
msgctxt "#30536"
|
||||
|
@ -510,8 +533,8 @@ msgstr "如果您進行任何更改,請重開Kodi"
|
|||
|
||||
# PKC Settings warning
|
||||
msgctxt "#30538"
|
||||
msgid "Complete Re-Sync necessary"
|
||||
msgstr "必需完全重新同步"
|
||||
msgid "Manual complete reset of Kodi database necessary, see \"Advanced\""
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#30539"
|
||||
|
@ -621,8 +644,8 @@ msgstr "設定字幕大小"
|
|||
|
||||
# PKC Settings - Sync
|
||||
msgctxt "#39003"
|
||||
msgid "Limit download sync threads (rec. for rpi: 1)"
|
||||
msgstr "限制下載同步執行緒 (rpi 的建議︰ 1)"
|
||||
msgid "Number of simultaneous download threads"
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Plex
|
||||
msgctxt "#39004"
|
||||
|
@ -690,13 +713,13 @@ msgstr "你現在想轉到外掛程式的設置進行微調 PKC 嗎?您將需
|
|||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#39018"
|
||||
msgid "[COLOR yellow]Repair local database (force update all content)[/COLOR]"
|
||||
msgstr "[COLOR yellow]修復本機資料庫 (強制更新所有內容)[/COLOR]"
|
||||
msgid "Repair the Kodi database (force update all content)"
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Advanced
|
||||
msgctxt "#39019"
|
||||
msgid "[COLOR red]Partial or full reset of Database and PKC[/COLOR]"
|
||||
msgstr "[COLOR red]部分或全部重置資料庫和PKC[/COLOR]"
|
||||
msgid "Reset the Kodi database and optionally reset PlexKodiConnect"
|
||||
msgstr ""
|
||||
|
||||
# PKC Settings - Artwork
|
||||
msgctxt "#39020"
|
||||
|
|
|
@ -112,14 +112,15 @@ class API(object):
|
|||
"""
|
||||
return self.item.get('ratingKey')
|
||||
|
||||
def path(self, force_first_media=True):
|
||||
def path(self, force_first_media=True, force_addon=False):
|
||||
"""
|
||||
Returns a "fully qualified path": add-on paths or direct paths
|
||||
depending on the current settings. Will NOT valide the playurl
|
||||
Returns unicode or None if something went wrong.
|
||||
"""
|
||||
filename = self.file_path(force_first_media=force_first_media)
|
||||
if not state.DIRECT_PATHS or self.plex_type() == v.PLEX_TYPE_CLIP:
|
||||
if (not state.DIRECT_PATHS or force_addon
|
||||
or self.plex_type() == v.PLEX_TYPE_CLIP):
|
||||
if filename and '/' in filename:
|
||||
filename = filename.rsplit('/', 1)
|
||||
elif filename:
|
||||
|
@ -129,11 +130,14 @@ class API(object):
|
|||
except (TypeError, IndexError):
|
||||
filename = None
|
||||
# Set plugin path and media flags using real filename
|
||||
path = ('plugin://%s/?plex_id=%s&plex_type=%s&mode=play&filename=%s'
|
||||
% (v.ADDON_TYPE[self.plex_type()],
|
||||
self.plex_id(),
|
||||
self.plex_type(),
|
||||
filename))
|
||||
if self.plex_type() == v.PLEX_TYPE_EPISODE:
|
||||
# need to include the plex show id in the path
|
||||
path = ('plugin://plugin.video.plexkodiconnect.tvshows/%s/'
|
||||
% self.grandparent_id())
|
||||
else:
|
||||
path = 'plugin://%s/' % v.ADDON_TYPE[self.plex_type()]
|
||||
path = ('%s?plex_id=%s&plex_type=%s&mode=play&filename=%s'
|
||||
% (path, self.plex_id(), self.plex_type(), filename))
|
||||
else:
|
||||
# Direct paths is set the Kodi way
|
||||
path = self.validate_playurl(filename,
|
||||
|
@ -500,7 +504,7 @@ class API(object):
|
|||
resume = float(self.item.attrib['viewOffset'])
|
||||
except (KeyError, ValueError):
|
||||
resume = 0.0
|
||||
return int(resume * v.PLEX_TO_KODI_TIMEFACTOR)
|
||||
return resume * v.PLEX_TO_KODI_TIMEFACTOR
|
||||
|
||||
def runtime(self):
|
||||
"""
|
||||
|
@ -529,8 +533,8 @@ class API(object):
|
|||
resume = float(self.item.attrib['viewOffset'])
|
||||
except (KeyError, ValueError):
|
||||
resume = 0.0
|
||||
runtime = int(runtime * v.PLEX_TO_KODI_TIMEFACTOR)
|
||||
resume = int(resume * v.PLEX_TO_KODI_TIMEFACTOR)
|
||||
runtime = runtime * v.PLEX_TO_KODI_TIMEFACTOR
|
||||
resume = resume * v.PLEX_TO_KODI_TIMEFACTOR
|
||||
return resume, runtime
|
||||
|
||||
def content_rating(self):
|
||||
|
@ -977,9 +981,9 @@ class API(object):
|
|||
try:
|
||||
data.get('test')
|
||||
except AttributeError:
|
||||
LOG.error('Could not download data from FanartTV')
|
||||
LOG.warning('Could not download data from FanartTV')
|
||||
return
|
||||
if data.get('results') is None:
|
||||
if not data.get('results'):
|
||||
LOG.info('No match found on themoviedb for type: %s, title: %s',
|
||||
media_type, title)
|
||||
return
|
||||
|
@ -987,12 +991,12 @@ class API(object):
|
|||
year = item.get('year')
|
||||
match_found = None
|
||||
# find year match
|
||||
if year is not None:
|
||||
for entry in data["results"]:
|
||||
if year in entry.get("first_air_date", ""):
|
||||
if year:
|
||||
for entry in data['results']:
|
||||
if year in entry.get('first_air_date', ''):
|
||||
match_found = entry
|
||||
break
|
||||
elif year in entry.get("release_date", ""):
|
||||
elif year in entry.get('release_date', ''):
|
||||
match_found = entry
|
||||
break
|
||||
# find exact match based on title, if we haven't found a year match
|
||||
|
@ -1006,9 +1010,9 @@ class API(object):
|
|||
':',
|
||||
';'
|
||||
)
|
||||
for entry in data["results"]:
|
||||
name = entry.get("name", entry.get("title", ""))
|
||||
original_name = entry.get("original_name", "")
|
||||
for entry in data['results']:
|
||||
name = entry.get('name', entry.get('title', ''))
|
||||
original_name = entry.get('original_name', '')
|
||||
title_alt = title.lower()
|
||||
name_alt = name.lower()
|
||||
org_name_alt = original_name.lower()
|
||||
|
@ -1020,16 +1024,16 @@ class API(object):
|
|||
# match found for exact title name
|
||||
match_found = entry
|
||||
break
|
||||
elif (name.split(" (")[0] == title or title_alt == name_alt
|
||||
elif (name.split(' (')[0] == title or title_alt == name_alt
|
||||
or title_alt == org_name_alt):
|
||||
# match found with substituting some stuff
|
||||
match_found = entry
|
||||
break
|
||||
|
||||
# if a match was not found, we accept the closest match from TMDB
|
||||
if match_found is None and data.get("results"):
|
||||
if match_found is None and data.get('results'):
|
||||
LOG.info('Using very first match from themoviedb')
|
||||
match_found = entry = data.get("results")[0]
|
||||
match_found = entry = data.get('results')[0]
|
||||
|
||||
if match_found is None:
|
||||
LOG.info('Still no themoviedb match for type: %s, title: %s, '
|
||||
|
@ -1040,25 +1044,25 @@ class API(object):
|
|||
LOG.info('Found themoviedb match for %s: %s',
|
||||
item.get('title'), match_found)
|
||||
|
||||
tmdb_id = str(entry.get("id", ""))
|
||||
tmdb_id = str(entry.get('id', ''))
|
||||
if tmdb_id == '':
|
||||
LOG.error('No themoviedb ID found, aborting')
|
||||
return
|
||||
|
||||
if media_type == "multi" and entry.get("media_type"):
|
||||
media_type = entry.get("media_type")
|
||||
name = entry.get("name", entry.get("title"))
|
||||
if media_type == 'multi' and entry.get('media_type'):
|
||||
media_type = entry.get('media_type')
|
||||
name = entry.get('name', entry.get('title'))
|
||||
# lookup external tmdb_id and perform artwork lookup on fanart.tv
|
||||
parameters = {'api_key': api_key}
|
||||
media_id, poster, background = None, None, None
|
||||
for language in [v.KODILANGUAGE, "en"]:
|
||||
parameters['language'] = language
|
||||
if media_type == "movie":
|
||||
if media_type == 'movie':
|
||||
url = 'https://api.themoviedb.org/3/movie/%s' % tmdb_id
|
||||
parameters['append_to_response'] = 'videos'
|
||||
elif media_type == "tv":
|
||||
elif media_type == 'tv':
|
||||
url = 'https://api.themoviedb.org/3/tv/%s' % tmdb_id
|
||||
parameters['append_to_response'] = 'external_ids,videos'
|
||||
media_id, poster, background = None, None, None
|
||||
for language in [v.KODILANGUAGE, 'en']:
|
||||
parameters['language'] = language
|
||||
data = DU().downloadUrl(url,
|
||||
authenticate=False,
|
||||
parameters=parameters,
|
||||
|
@ -1066,20 +1070,24 @@ class API(object):
|
|||
try:
|
||||
data.get('test')
|
||||
except AttributeError:
|
||||
LOG.error('Could not download %s with parameters %s',
|
||||
LOG.warning('Could not download %s with parameters %s',
|
||||
url, parameters)
|
||||
continue
|
||||
if collection is False:
|
||||
if data.get("imdb_id") is not None:
|
||||
media_id = str(data.get("imdb_id"))
|
||||
if data.get('imdb_id'):
|
||||
media_id = str(data.get('imdb_id'))
|
||||
break
|
||||
if data.get("external_ids") is not None:
|
||||
media_id = str(data["external_ids"].get("tvdb_id"))
|
||||
if (data.get('external_ids') and
|
||||
data['external_ids'].get('tvdb_id')):
|
||||
media_id = str(data['external_ids']['tvdb_id'])
|
||||
break
|
||||
else:
|
||||
if data.get("belongs_to_collection") is None:
|
||||
if not data.get('belongs_to_collection'):
|
||||
continue
|
||||
media_id = str(data.get("belongs_to_collection").get("id"))
|
||||
media_id = data.get('belongs_to_collection').get('id')
|
||||
if not media_id:
|
||||
continue
|
||||
media_id = str(media_id)
|
||||
LOG.debug('Retrieved collections tmdb id %s for %s',
|
||||
media_id, title)
|
||||
url = 'https://api.themoviedb.org/3/collection/%s' % media_id
|
||||
|
@ -1090,18 +1098,18 @@ class API(object):
|
|||
try:
|
||||
data.get('poster_path')
|
||||
except AttributeError:
|
||||
LOG.info('Could not find TheMovieDB poster paths for %s in '
|
||||
LOG.debug('Could not find TheMovieDB poster paths for %s in '
|
||||
'the language %s', title, language)
|
||||
continue
|
||||
else:
|
||||
if not poster and data.get('poster_path'):
|
||||
poster = ('https://image.tmdb.org/t/p/original%s' %
|
||||
data.get('poster_path'))
|
||||
if not background and data.get('backdrop_path'):
|
||||
background = ('https://image.tmdb.org/t/p/original%s' %
|
||||
data.get('backdrop_path'))
|
||||
break
|
||||
return media_id, poster, background
|
||||
|
||||
def lookup_fanart_tv(self, media_id, artworks, set_info=False):
|
||||
def lookup_fanart_tv(self, media_id, artworks):
|
||||
"""
|
||||
perform artwork lookup on fanart.tv
|
||||
|
||||
|
@ -1198,9 +1206,7 @@ class API(object):
|
|||
artworks['poster'] = poster
|
||||
if background is not None:
|
||||
artworks['fanart'] = background
|
||||
artworks = self.lookup_fanart_tv(external_id,
|
||||
artworks,
|
||||
set_info=True)
|
||||
artworks = self.lookup_fanart_tv(external_id, artworks)
|
||||
else:
|
||||
LOG.info('Did not find a set/collection ID on TheMovieDB using %s.'
|
||||
' Artwork will be missing.', self.titles()[0])
|
||||
|
|
|
@ -195,7 +195,10 @@ class PlexCompanion(Thread):
|
|||
elif task['action'] == 'refreshPlayQueue':
|
||||
self._process_refresh(data)
|
||||
elif task['action'] == 'setStreams':
|
||||
try:
|
||||
self._process_streams(data)
|
||||
except KeyError:
|
||||
pass
|
||||
|
||||
def run(self):
|
||||
"""
|
||||
|
|
|
@ -20,6 +20,7 @@ LOG = getLogger("PLEX." + __name__)
|
|||
|
||||
CONTAINERSIZE = int(settings('limitindex'))
|
||||
REGEX_PLEX_KEY = re_compile(r'''/(.+)/(\d+)$''')
|
||||
REGEX_PLEX_DIRECT = re_compile(r'''\.plex\.direct:\d+$''')
|
||||
|
||||
# For discovery of PMS in the local LAN
|
||||
PLEX_GDM_IP = '239.0.0.250' # multicast to PMS
|
||||
|
@ -142,8 +143,6 @@ def check_connection(url, token=None, verifySSL=None):
|
|||
verifySSL = None if settings('sslverify') == 'true' else False
|
||||
if 'plex.tv' in url:
|
||||
url = 'https://plex.tv/api/home/users'
|
||||
else:
|
||||
url = url + '/library/onDeck'
|
||||
LOG.debug("Checking connection to server %s with verifySSL=%s",
|
||||
url, verifySSL)
|
||||
answer = DU().downloadUrl(url,
|
||||
|
@ -207,43 +206,41 @@ def discover_pms(token=None):
|
|||
if token:
|
||||
LOG.info('Checking with plex.tv for more PMS to connect to')
|
||||
plex_pms_list = _pms_list_from_plex_tv(token)
|
||||
LOG.debug('PMS found on plex.tv: %s', plex_pms_list)
|
||||
_log_pms(plex_pms_list)
|
||||
else:
|
||||
LOG.info('No plex token supplied, only checked LAN for available PMS')
|
||||
plex_pms_list = []
|
||||
|
||||
# See if we found a PMS both locally and using plex.tv. If so, use local
|
||||
# connection data
|
||||
all_pms = []
|
||||
# Add PMS found only in the LAN to the Plex.tv PMS list
|
||||
for pms in local_pms_list:
|
||||
for i, plex_pms in enumerate(plex_pms_list):
|
||||
for plex_pms in plex_pms_list:
|
||||
if pms['machineIdentifier'] == plex_pms['machineIdentifier']:
|
||||
# Update with GDM data - potentially more reliable than plex.tv
|
||||
LOG.debug('Found this PMS also in the LAN: %s', plex_pms)
|
||||
plex_pms['ip'] = pms['ip']
|
||||
plex_pms['port'] = pms['port']
|
||||
plex_pms['local'] = True
|
||||
# Use all the other data we know from plex.tv
|
||||
pms = plex_pms
|
||||
# Remove this particular pms since we already know it
|
||||
plex_pms_list.pop(i)
|
||||
break
|
||||
else:
|
||||
# Only found PMS using GDM - add it to the PMS from plex.tv
|
||||
https = _pms_https_enabled('%s:%s' % (pms['ip'], pms['port']))
|
||||
if https is None:
|
||||
# Error contacting url. Skip and ignore this PMS for now
|
||||
LOG.error('Could not contact PMS %s but we should have', pms)
|
||||
continue
|
||||
elif https is True:
|
||||
pms['scheme'] = 'https'
|
||||
pms['baseURL'] = 'https://%s:%s' % (pms['ip'], pms['port'])
|
||||
else:
|
||||
pms['scheme'] = 'http'
|
||||
pms['baseURL'] = 'http://%s:%s' % (pms['ip'], pms['port'])
|
||||
all_pms.append(pms)
|
||||
# Now add the remaining PMS from plex.tv (where we already checked connect.)
|
||||
for plex_pms in plex_pms_list:
|
||||
all_pms.append(plex_pms)
|
||||
LOG.debug('Found the following PMS in total: %s', all_pms)
|
||||
return all_pms
|
||||
pms['baseURL'] = '%s://%s:%s' % (pms['scheme'],
|
||||
pms['ip'],
|
||||
pms['port'])
|
||||
plex_pms_list.append(pms)
|
||||
_log_pms(plex_pms_list)
|
||||
return plex_pms_list
|
||||
|
||||
|
||||
def _log_pms(pms_list):
|
||||
log_list = deepcopy(pms_list)
|
||||
for pms in log_list:
|
||||
if pms.get('token') is not None:
|
||||
pms['token'] = '%s...' % pms['token'][:5]
|
||||
LOG.debug('Found the following PMS: %s', log_list)
|
||||
|
||||
|
||||
def _plex_gdm():
|
||||
|
@ -414,16 +411,23 @@ def _pms_list_from_plex_tv(token):
|
|||
|
||||
def _poke_pms(pms, queue):
|
||||
data = pms['connections'][0].attrib
|
||||
if data['local'] == '1':
|
||||
protocol = data['protocol']
|
||||
address = data['address']
|
||||
port = data['port']
|
||||
url = '%s://%s:%s' % (protocol, address, port)
|
||||
else:
|
||||
url = data['uri']
|
||||
if url.count(':') == 1:
|
||||
url = '%s:%s' % (url, data['port'])
|
||||
if data['local'] == '1' and REGEX_PLEX_DIRECT.findall(url):
|
||||
# In case DNS resolve of plex.direct does not work, append a new
|
||||
# connection that will directly access the local IP (e.g. internet down)
|
||||
conn = deepcopy(pms['connections'][0])
|
||||
# Overwrite plex.direct
|
||||
conn.attrib['uri'] = '%s://%s:%s' % (data['protocol'],
|
||||
data['address'],
|
||||
data['port'])
|
||||
pms['connections'].insert(1, conn)
|
||||
try:
|
||||
protocol, address, port = url.split(':', 2)
|
||||
except ValueError:
|
||||
# e.g. .ork.plex.services uri, thanks Plex
|
||||
protocol, address = url.split(':', 1)
|
||||
port = data['port']
|
||||
url = '%s:%s' % (url, port)
|
||||
address = address.replace('/', '')
|
||||
xml = DU().downloadUrl('%s/identity' % url,
|
||||
authenticate=False,
|
||||
|
|
|
@ -9,7 +9,7 @@ from threading import Thread
|
|||
from os import makedirs
|
||||
import requests
|
||||
|
||||
from xbmc import sleep, translatePath
|
||||
import xbmc
|
||||
from xbmcvfs import exists
|
||||
|
||||
from utils import settings, language as lang, kodi_sql, try_encode, try_decode,\
|
||||
|
@ -39,7 +39,7 @@ def double_urldecode(text):
|
|||
|
||||
@thread_methods(add_suspends=IMAGE_CACHING_SUSPENDS)
|
||||
class Image_Cache_Thread(Thread):
|
||||
sleep_between = 200
|
||||
sleep_between = 50
|
||||
# Potentially issues with limited number of threads
|
||||
# Hence let Kodi wait till download is successful
|
||||
timeout = (35.1, 35.1)
|
||||
|
@ -54,6 +54,8 @@ class Image_Cache_Thread(Thread):
|
|||
suspended = self.suspended
|
||||
queue = self.queue
|
||||
sleep_between = self.sleep_between
|
||||
counter = 0
|
||||
set_zero = False
|
||||
while not stopped():
|
||||
# In the event the server goes offline
|
||||
while suspended():
|
||||
|
@ -62,12 +64,19 @@ class Image_Cache_Thread(Thread):
|
|||
# Abort was requested while waiting. We should exit
|
||||
LOG.info("---===### Stopped Image_Cache_Thread ###===---")
|
||||
return
|
||||
sleep(1000)
|
||||
xbmc.sleep(1000)
|
||||
|
||||
try:
|
||||
url = queue.get(block=False)
|
||||
except Empty:
|
||||
sleep(1000)
|
||||
if not set_zero and not xbmc.getCondVisibility(
|
||||
'Window.IsVisible(DialogAddonSettings.xml)'):
|
||||
# Avoid saving '0' all the time
|
||||
set_zero = True
|
||||
settings('caching_artwork_count', value='0')
|
||||
xbmc.sleep(1000)
|
||||
continue
|
||||
set_zero = False
|
||||
if isinstance(url, ArtworkSyncMessage):
|
||||
if state.IMAGE_SYNC_NOTIFICATIONS:
|
||||
dialog('notification',
|
||||
|
@ -107,20 +116,26 @@ class Image_Cache_Thread(Thread):
|
|||
'over-loaded. Sleep %s seconds before trying '
|
||||
'again to download %s',
|
||||
2**sleeptime, double_urldecode(url))
|
||||
sleep((2**sleeptime) * 1000)
|
||||
xbmc.sleep((2**sleeptime) * 1000)
|
||||
sleeptime += 1
|
||||
continue
|
||||
except Exception as e:
|
||||
except Exception as err:
|
||||
LOG.error('Unknown exception for url %s: %s'.
|
||||
double_urldecode(url), e)
|
||||
double_urldecode(url), err)
|
||||
import traceback
|
||||
LOG.error("Traceback:\n%s", traceback.format_exc())
|
||||
break
|
||||
# We did not even get a timeout
|
||||
break
|
||||
queue.task_done()
|
||||
# Update the caching state in the PKC settings.
|
||||
counter += 1
|
||||
if (counter > 20 and not xbmc.getCondVisibility(
|
||||
'Window.IsVisible(DialogAddonSettings.xml)')):
|
||||
counter = 0
|
||||
settings('caching_artwork_count', value=str(queue.qsize()))
|
||||
# Sleep for a bit to reduce CPU strain
|
||||
sleep(sleep_between)
|
||||
xbmc.sleep(sleep_between)
|
||||
LOG.info("---===### Stopped Image_Cache_Thread ###===---")
|
||||
|
||||
|
||||
|
@ -159,14 +174,18 @@ class Artwork():
|
|||
connection.close()
|
||||
if not artworks_to_cache:
|
||||
LOG.info('Caching of major images to Kodi texture cache done')
|
||||
# Set to "None"
|
||||
settings('caching_artwork_count', value=lang(30069))
|
||||
return
|
||||
length = len(artworks_to_cache)
|
||||
LOG.info('Caching has not been completed - caching %s major images',
|
||||
len(artworks_to_cache))
|
||||
# Caching %s images
|
||||
self.queue.put(ArtworkSyncMessage(lang(30006) % len(artworks_to_cache)))
|
||||
for url in artworks_to_cache:
|
||||
length)
|
||||
settings('caching_artwork_count', value=str(length))
|
||||
# Caching %s Plex images
|
||||
self.queue.put(ArtworkSyncMessage(lang(30006) % length))
|
||||
for i, url in enumerate(artworks_to_cache):
|
||||
self.queue.put(url[0])
|
||||
# Major image caching done
|
||||
# Plex image caching done
|
||||
self.queue.put(ArtworkSyncMessage(lang(30007)))
|
||||
|
||||
def fullTextureCacheSync(self):
|
||||
|
@ -183,7 +202,7 @@ class Artwork():
|
|||
if dialog('yesno', "Image Texture Cache", lang(39251)):
|
||||
LOG.info("Resetting all cache data first")
|
||||
# Remove all existing textures first
|
||||
path = try_decode(translatePath("special://thumbnails/"))
|
||||
path = try_decode(xbmc.translatePath("special://thumbnails/"))
|
||||
if exists_dir(path):
|
||||
rmtree(path, ignore_errors=True)
|
||||
self.restore_cache_directories()
|
||||
|
@ -301,7 +320,7 @@ class Artwork():
|
|||
pass
|
||||
else:
|
||||
# Delete thumbnail as well as the entry
|
||||
path = translatePath("special://thumbnails/%s" % cachedurl)
|
||||
path = xbmc.translatePath("special://thumbnails/%s" % cachedurl)
|
||||
LOG.debug("Deleting cached thumbnail: %s", path)
|
||||
if exists(path):
|
||||
rmtree(try_decode(path), ignore_errors=True)
|
||||
|
@ -317,7 +336,7 @@ class Artwork():
|
|||
"a", "b", "c", "d", "e", "f",
|
||||
"Video", "plex")
|
||||
for path in paths:
|
||||
makedirs(try_decode(translatePath("special://thumbnails/%s"
|
||||
makedirs(try_decode(xbmc.translatePath("special://thumbnails/%s"
|
||||
% path)))
|
||||
|
||||
|
||||
|
|
|
@ -6,10 +6,10 @@ from xbmcaddon import Addon
|
|||
import xbmc
|
||||
import xbmcplugin
|
||||
import xbmcgui
|
||||
import context
|
||||
|
||||
import plexdb_functions as plexdb
|
||||
from utils import window, settings, dialog, language as lang
|
||||
from dialogs import context
|
||||
import PlexFunctions as PF
|
||||
from PlexAPI import API
|
||||
import playqueue as PQ
|
||||
|
@ -96,18 +96,7 @@ class ContextMenu(object):
|
|||
options.append(OPTIONS['PMS_Play'])
|
||||
if self.kodi_type in v.KODI_VIDEOTYPES:
|
||||
options.append(OPTIONS['Transcode'])
|
||||
# userdata = self.api.userdata()
|
||||
# if userdata['Favorite']:
|
||||
# # Remove from emby favourites
|
||||
# options.append(OPTIONS['RemoveFav'])
|
||||
# else:
|
||||
# # Add to emby favourites
|
||||
# options.append(OPTIONS['AddFav'])
|
||||
# if self.kodi_type == "song":
|
||||
# # Set custom song rating
|
||||
# options.append(OPTIONS['RateSong'])
|
||||
# Refresh item
|
||||
# options.append(OPTIONS['Refresh'])
|
||||
|
||||
# Delete item, only if the Plex Home main user is logged in
|
||||
if (window('plex_restricteduser') != 'true' and
|
||||
window('plex_allows_mediaDeletion') == 'true'):
|
||||
|
@ -115,7 +104,7 @@ class ContextMenu(object):
|
|||
# Addon settings
|
||||
options.append(OPTIONS['Addon'])
|
||||
context_menu = context.ContextMenu(
|
||||
"script-emby-context.xml",
|
||||
"script-plex-context.xml",
|
||||
Addon('plugin.video.plexkodiconnect').getAddonInfo('path'),
|
||||
"default",
|
||||
"1080i")
|
||||
|
@ -137,14 +126,7 @@ class ContextMenu(object):
|
|||
self._PMS_play()
|
||||
elif selected == OPTIONS['Extras']:
|
||||
self._extras()
|
||||
# elif selected == OPTIONS['Refresh']:
|
||||
# self.emby.refreshItem(self.item_id)
|
||||
# elif selected == OPTIONS['AddFav']:
|
||||
# self.emby.updateUserRating(self.item_id, favourite=True)
|
||||
# elif selected == OPTIONS['RemoveFav']:
|
||||
# self.emby.updateUserRating(self.item_id, favourite=False)
|
||||
# elif selected == OPTIONS['RateSong']:
|
||||
# self._rate_song()
|
||||
|
||||
elif selected == OPTIONS['Addon']:
|
||||
xbmc.executebuiltin(
|
||||
'Addon.OpenSettings(plugin.video.plexkodiconnect)')
|
||||
|
@ -173,10 +155,7 @@ class ContextMenu(object):
|
|||
v.KODI_PLAYLIST_TYPE_FROM_KODI_TYPE[self.kodi_type])
|
||||
playqueue.clear()
|
||||
state.CONTEXT_MENU_PLAY = True
|
||||
handle = ('plugin://%s/?plex_id=%s&plex_type=%s&mode=play'
|
||||
% (v.ADDON_TYPE[self.plex_type],
|
||||
self.plex_id,
|
||||
self.plex_type))
|
||||
handle = self.api.path(force_first_media=False, force_addon=True)
|
||||
xbmc.executebuiltin('RunPlugin(%s)' % handle)
|
||||
|
||||
def _extras(self):
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
# Dummy file to make this directory a package.
|
||||
# from serverconnect import ServerConnect
|
||||
# from usersconnect import UsersConnect
|
||||
# from loginconnect import LoginConnect
|
||||
# from loginmanual import LoginManual
|
||||
# from servermanual import ServerManual
|
|
@ -1,136 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
##################################################################################################
|
||||
|
||||
import logging
|
||||
import os
|
||||
|
||||
import xbmcgui
|
||||
import xbmcaddon
|
||||
|
||||
from utils import language as lang
|
||||
|
||||
##################################################################################################
|
||||
|
||||
log = logging.getLogger("EMBY."+__name__)
|
||||
addon = xbmcaddon.Addon('plugin.video.emby')
|
||||
|
||||
ACTION_PARENT_DIR = 9
|
||||
ACTION_PREVIOUS_MENU = 10
|
||||
ACTION_BACK = 92
|
||||
SIGN_IN = 200
|
||||
CANCEL = 201
|
||||
ERROR_TOGGLE = 202
|
||||
ERROR_MSG = 203
|
||||
ERROR = {
|
||||
'Invalid': 1,
|
||||
'Empty': 2
|
||||
}
|
||||
|
||||
##################################################################################################
|
||||
|
||||
|
||||
class LoginConnect(xbmcgui.WindowXMLDialog):
|
||||
|
||||
_user = None
|
||||
error = None
|
||||
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
|
||||
xbmcgui.WindowXMLDialog.__init__(self, *args, **kwargs)
|
||||
|
||||
def set_connect_manager(self, connect_manager):
|
||||
self.connect_manager = connect_manager
|
||||
|
||||
def is_logged_in(self):
|
||||
return True if self._user else False
|
||||
|
||||
def get_user(self):
|
||||
return self._user
|
||||
|
||||
|
||||
def onInit(self):
|
||||
|
||||
self.user_field = self._add_editcontrol(725, 385, 40, 500)
|
||||
self.setFocus(self.user_field)
|
||||
self.password_field = self._add_editcontrol(725, 470, 40, 500, password=1)
|
||||
self.signin_button = self.getControl(SIGN_IN)
|
||||
self.remind_button = self.getControl(CANCEL)
|
||||
self.error_toggle = self.getControl(ERROR_TOGGLE)
|
||||
self.error_msg = self.getControl(ERROR_MSG)
|
||||
|
||||
self.user_field.controlUp(self.remind_button)
|
||||
self.user_field.controlDown(self.password_field)
|
||||
self.password_field.controlUp(self.user_field)
|
||||
self.password_field.controlDown(self.signin_button)
|
||||
self.signin_button.controlUp(self.password_field)
|
||||
self.remind_button.controlDown(self.user_field)
|
||||
|
||||
def onClick(self, control):
|
||||
|
||||
if control == SIGN_IN:
|
||||
# Sign in to emby connect
|
||||
self._disable_error()
|
||||
|
||||
user = self.user_field.getText()
|
||||
password = self.password_field.getText()
|
||||
|
||||
if not user or not password:
|
||||
# Display error
|
||||
self._error(ERROR['Empty'], lang(30608))
|
||||
log.error("Username or password cannot be null")
|
||||
|
||||
elif self._login(user, password):
|
||||
self.close()
|
||||
|
||||
elif control == CANCEL:
|
||||
# Remind me later
|
||||
self.close()
|
||||
|
||||
def onAction(self, action):
|
||||
|
||||
if (self.error == ERROR['Empty']
|
||||
and self.user_field.getText() and self.password_field.getText()):
|
||||
self._disable_error()
|
||||
|
||||
if action in (ACTION_BACK, ACTION_PARENT_DIR, ACTION_PREVIOUS_MENU):
|
||||
self.close()
|
||||
|
||||
def _add_editcontrol(self, x, y, height, width, password=0):
|
||||
|
||||
media = os.path.join(addon.getAddonInfo('path'), 'resources', 'skins', 'default', 'media')
|
||||
control = xbmcgui.ControlEdit(0, 0, 0, 0,
|
||||
label="User",
|
||||
font="font10",
|
||||
textColor="ff525252",
|
||||
focusTexture=os.path.join(media, "button-focus.png"),
|
||||
noFocusTexture=os.path.join(media, "button-focus.png"),
|
||||
isPassword=password)
|
||||
control.setPosition(x, y)
|
||||
control.setHeight(height)
|
||||
control.setWidth(width)
|
||||
|
||||
self.addControl(control)
|
||||
return control
|
||||
|
||||
def _login(self, username, password):
|
||||
|
||||
result = self.connect_manager.loginToConnect(username, password)
|
||||
if result is False:
|
||||
self._error(ERROR['Invalid'], lang(33009))
|
||||
return False
|
||||
else:
|
||||
self._user = result
|
||||
return True
|
||||
|
||||
def _error(self, state, message):
|
||||
|
||||
self.error = state
|
||||
self.error_msg.setLabel(message)
|
||||
self.error_toggle.setVisibleCondition('True')
|
||||
|
||||
def _disable_error(self):
|
||||
|
||||
self.error = None
|
||||
self.error_toggle.setVisibleCondition('False')
|
|
@ -1,145 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
##################################################################################################
|
||||
|
||||
import logging
|
||||
import os
|
||||
|
||||
import xbmcgui
|
||||
import xbmcaddon
|
||||
|
||||
import read_embyserver as embyserver
|
||||
from utils import language as lang
|
||||
|
||||
##################################################################################################
|
||||
|
||||
log = logging.getLogger("EMBY."+__name__)
|
||||
addon = xbmcaddon.Addon('plugin.video.emby')
|
||||
|
||||
ACTION_PARENT_DIR = 9
|
||||
ACTION_PREVIOUS_MENU = 10
|
||||
ACTION_BACK = 92
|
||||
SIGN_IN = 200
|
||||
CANCEL = 201
|
||||
ERROR_TOGGLE = 202
|
||||
ERROR_MSG = 203
|
||||
ERROR = {
|
||||
'Invalid': 1,
|
||||
'Empty': 2
|
||||
}
|
||||
|
||||
##################################################################################################
|
||||
|
||||
|
||||
class LoginManual(xbmcgui.WindowXMLDialog):
|
||||
|
||||
_user = None
|
||||
error = None
|
||||
username = None
|
||||
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
|
||||
self.emby = embyserver.Read_EmbyServer()
|
||||
xbmcgui.WindowXMLDialog.__init__(self, *args, **kwargs)
|
||||
|
||||
def is_logged_in(self):
|
||||
return True if self._user else False
|
||||
|
||||
def set_server(self, server):
|
||||
self.server = server
|
||||
|
||||
def set_user(self, user):
|
||||
self.username = user or {}
|
||||
|
||||
def get_user(self):
|
||||
return self._user
|
||||
|
||||
def onInit(self):
|
||||
|
||||
self.signin_button = self.getControl(SIGN_IN)
|
||||
self.cancel_button = self.getControl(CANCEL)
|
||||
self.error_toggle = self.getControl(ERROR_TOGGLE)
|
||||
self.error_msg = self.getControl(ERROR_MSG)
|
||||
self.user_field = self._add_editcontrol(725, 400, 40, 500)
|
||||
self.password_field = self._add_editcontrol(725, 475, 40, 500, password=1)
|
||||
|
||||
if self.username:
|
||||
self.user_field.setText(self.username)
|
||||
self.setFocus(self.password_field)
|
||||
else:
|
||||
self.setFocus(self.user_field)
|
||||
|
||||
self.user_field.controlUp(self.cancel_button)
|
||||
self.user_field.controlDown(self.password_field)
|
||||
self.password_field.controlUp(self.user_field)
|
||||
self.password_field.controlDown(self.signin_button)
|
||||
self.signin_button.controlUp(self.password_field)
|
||||
self.cancel_button.controlDown(self.user_field)
|
||||
|
||||
def onClick(self, control):
|
||||
|
||||
if control == SIGN_IN:
|
||||
# Sign in to emby connect
|
||||
self._disable_error()
|
||||
|
||||
user = self.user_field.getText()
|
||||
password = self.password_field.getText()
|
||||
|
||||
if not user:
|
||||
# Display error
|
||||
self._error(ERROR['Empty'], lang(30613))
|
||||
log.error("Username cannot be null")
|
||||
|
||||
elif self._login(user, password):
|
||||
self.close()
|
||||
|
||||
elif control == CANCEL:
|
||||
# Remind me later
|
||||
self.close()
|
||||
|
||||
def onAction(self, action):
|
||||
|
||||
if self.error == ERROR['Empty'] and self.user_field.getText():
|
||||
self._disable_error()
|
||||
|
||||
if action in (ACTION_BACK, ACTION_PARENT_DIR, ACTION_PREVIOUS_MENU):
|
||||
self.close()
|
||||
|
||||
def _add_editcontrol(self, x, y, height, width, password=0):
|
||||
|
||||
media = os.path.join(addon.getAddonInfo('path'), 'resources', 'skins', 'default', 'media')
|
||||
control = xbmcgui.ControlEdit(0, 0, 0, 0,
|
||||
label="User",
|
||||
font="font10",
|
||||
textColor="ff525252",
|
||||
focusTexture=os.path.join(media, "button-focus.png"),
|
||||
noFocusTexture=os.path.join(media, "button-focus.png"),
|
||||
isPassword=password)
|
||||
control.setPosition(x, y)
|
||||
control.setHeight(height)
|
||||
control.setWidth(width)
|
||||
|
||||
self.addControl(control)
|
||||
return control
|
||||
|
||||
def _login(self, username, password):
|
||||
|
||||
result = self.emby.loginUser(self.server, username, password)
|
||||
if not result:
|
||||
self._error(ERROR['Invalid'], lang(33009))
|
||||
return False
|
||||
else:
|
||||
self._user = result
|
||||
return True
|
||||
|
||||
def _error(self, state, message):
|
||||
|
||||
self.error = state
|
||||
self.error_msg.setLabel(message)
|
||||
self.error_toggle.setVisibleCondition('True')
|
||||
|
||||
def _disable_error(self):
|
||||
|
||||
self.error = None
|
||||
self.error_toggle.setVisibleCondition('False')
|
|
@ -1,145 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
##################################################################################################
|
||||
|
||||
import logging
|
||||
|
||||
import xbmc
|
||||
import xbmcgui
|
||||
|
||||
import connect.connectionmanager as connectionmanager
|
||||
from utils import language as lang
|
||||
|
||||
##################################################################################################
|
||||
|
||||
log = logging.getLogger("EMBY."+__name__)
|
||||
|
||||
CONN_STATE = connectionmanager.ConnectionState
|
||||
ACTION_PARENT_DIR = 9
|
||||
ACTION_PREVIOUS_MENU = 10
|
||||
ACTION_BACK = 92
|
||||
ACTION_SELECT_ITEM = 7
|
||||
ACTION_MOUSE_LEFT_CLICK = 100
|
||||
USER_IMAGE = 150
|
||||
USER_NAME = 151
|
||||
LIST = 155
|
||||
CANCEL = 201
|
||||
MESSAGE_BOX = 202
|
||||
MESSAGE = 203
|
||||
BUSY = 204
|
||||
EMBY_CONNECT = 205
|
||||
MANUAL_SERVER = 206
|
||||
|
||||
##################################################################################################
|
||||
|
||||
|
||||
class ServerConnect(xbmcgui.WindowXMLDialog):
|
||||
|
||||
username = ""
|
||||
user_image = None
|
||||
servers = []
|
||||
|
||||
_selected_server = None
|
||||
_connect_login = False
|
||||
_manual_server = False
|
||||
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
|
||||
xbmcgui.WindowXMLDialog.__init__(self, *args, **kwargs)
|
||||
|
||||
def set_args(self, **kwargs):
|
||||
# connect_manager, username, user_image, servers, emby_connect
|
||||
for key, value in kwargs.iteritems():
|
||||
setattr(self, key, value)
|
||||
|
||||
def is_server_selected(self):
|
||||
return True if self._selected_server else False
|
||||
|
||||
def get_server(self):
|
||||
return self._selected_server
|
||||
|
||||
def is_connect_login(self):
|
||||
return self._connect_login
|
||||
|
||||
def is_manual_server(self):
|
||||
return self._manual_server
|
||||
|
||||
|
||||
def onInit(self):
|
||||
|
||||
self.message = self.getControl(MESSAGE)
|
||||
self.message_box = self.getControl(MESSAGE_BOX)
|
||||
self.busy = self.getControl(BUSY)
|
||||
self.list_ = self.getControl(LIST)
|
||||
|
||||
for server in self.servers:
|
||||
server_type = "wifi" if server.get('ExchangeToken') else "network"
|
||||
self.list_.addItem(self._add_listitem(server['Name'], server['Id'], server_type))
|
||||
|
||||
self.getControl(USER_NAME).setLabel("%s %s" % (lang(33000), self.username.decode('utf-8')))
|
||||
|
||||
if self.user_image is not None:
|
||||
self.getControl(USER_IMAGE).setImage(self.user_image)
|
||||
|
||||
if not self.emby_connect: # Change connect user
|
||||
self.getControl(EMBY_CONNECT).setLabel("[UPPERCASE][B]"+lang(30618)+"[/B][/UPPERCASE]")
|
||||
|
||||
if self.servers:
|
||||
self.setFocus(self.list_)
|
||||
|
||||
@classmethod
|
||||
def _add_listitem(cls, label, server_id, server_type):
|
||||
|
||||
item = xbmcgui.ListItem(label)
|
||||
item.setProperty('id', server_id)
|
||||
item.setProperty('server_type', server_type)
|
||||
|
||||
return item
|
||||
|
||||
def onAction(self, action):
|
||||
|
||||
if action in (ACTION_BACK, ACTION_PREVIOUS_MENU, ACTION_PARENT_DIR):
|
||||
self.close()
|
||||
|
||||
if action in (ACTION_SELECT_ITEM, ACTION_MOUSE_LEFT_CLICK):
|
||||
|
||||
if self.getFocusId() == LIST:
|
||||
server = self.list_.getSelectedItem()
|
||||
selected_id = server.getProperty('id')
|
||||
log.info('Server Id selected: %s', selected_id)
|
||||
|
||||
if self._connect_server(selected_id):
|
||||
self.message_box.setVisibleCondition('False')
|
||||
self.close()
|
||||
|
||||
def onClick(self, control):
|
||||
|
||||
if control == EMBY_CONNECT:
|
||||
self.connect_manager.clearData()
|
||||
self._connect_login = True
|
||||
self.close()
|
||||
|
||||
elif control == MANUAL_SERVER:
|
||||
self._manual_server = True
|
||||
self.close()
|
||||
|
||||
elif control == CANCEL:
|
||||
self.close()
|
||||
|
||||
def _connect_server(self, server_id):
|
||||
|
||||
server = self.connect_manager.getServerInfo(server_id)
|
||||
self.message.setLabel("%s %s..." % (lang(30610), server['Name']))
|
||||
self.message_box.setVisibleCondition('True')
|
||||
self.busy.setVisibleCondition('True')
|
||||
result = self.connect_manager.connectToServer(server)
|
||||
|
||||
if result['State'] == CONN_STATE['Unavailable']:
|
||||
self.busy.setVisibleCondition('False')
|
||||
self.message.setLabel(lang(30609))
|
||||
return False
|
||||
else:
|
||||
xbmc.sleep(1000)
|
||||
self._selected_server = result['Servers'][0]
|
||||
return True
|
|
@ -1,145 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
##################################################################################################
|
||||
|
||||
import logging
|
||||
import os
|
||||
|
||||
import xbmcgui
|
||||
import xbmcaddon
|
||||
|
||||
import connect.connectionmanager as connectionmanager
|
||||
from utils import language as lang
|
||||
|
||||
##################################################################################################
|
||||
|
||||
log = logging.getLogger("EMBY."+__name__)
|
||||
addon = xbmcaddon.Addon('plugin.video.emby')
|
||||
|
||||
CONN_STATE = connectionmanager.ConnectionState
|
||||
ACTION_PARENT_DIR = 9
|
||||
ACTION_PREVIOUS_MENU = 10
|
||||
ACTION_BACK = 92
|
||||
CONNECT = 200
|
||||
CANCEL = 201
|
||||
ERROR_TOGGLE = 202
|
||||
ERROR_MSG = 203
|
||||
ERROR = {
|
||||
'Invalid': 1,
|
||||
'Empty': 2
|
||||
}
|
||||
|
||||
##################################################################################################
|
||||
|
||||
|
||||
class ServerManual(xbmcgui.WindowXMLDialog):
|
||||
|
||||
_server = None
|
||||
error = None
|
||||
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
|
||||
xbmcgui.WindowXMLDialog.__init__(self, *args, **kwargs)
|
||||
|
||||
def set_connect_manager(self, connect_manager):
|
||||
self.connect_manager = connect_manager
|
||||
|
||||
def is_connected(self):
|
||||
return True if self._server else False
|
||||
|
||||
def get_server(self):
|
||||
return self._server
|
||||
|
||||
def onInit(self):
|
||||
|
||||
self.connect_button = self.getControl(CONNECT)
|
||||
self.cancel_button = self.getControl(CANCEL)
|
||||
self.error_toggle = self.getControl(ERROR_TOGGLE)
|
||||
self.error_msg = self.getControl(ERROR_MSG)
|
||||
self.host_field = self._add_editcontrol(725, 400, 40, 500)
|
||||
self.port_field = self._add_editcontrol(725, 525, 40, 500)
|
||||
|
||||
self.port_field.setText('8096')
|
||||
self.setFocus(self.host_field)
|
||||
|
||||
self.host_field.controlUp(self.cancel_button)
|
||||
self.host_field.controlDown(self.port_field)
|
||||
self.port_field.controlUp(self.host_field)
|
||||
self.port_field.controlDown(self.connect_button)
|
||||
self.connect_button.controlUp(self.port_field)
|
||||
self.cancel_button.controlDown(self.host_field)
|
||||
|
||||
def onClick(self, control):
|
||||
|
||||
if control == CONNECT:
|
||||
# Sign in to emby connect
|
||||
self._disable_error()
|
||||
|
||||
server = self.host_field.getText()
|
||||
port = self.port_field.getText()
|
||||
|
||||
if not server or not port:
|
||||
# Display error
|
||||
self._error(ERROR['Empty'], lang(30617))
|
||||
log.error("Server or port cannot be null")
|
||||
|
||||
elif self._connect_to_server(server, port):
|
||||
self.close()
|
||||
|
||||
elif control == CANCEL:
|
||||
# Remind me later
|
||||
self.close()
|
||||
|
||||
def onAction(self, action):
|
||||
|
||||
if self.error == ERROR['Empty'] and self.host_field.getText() and self.port_field.getText():
|
||||
self._disable_error()
|
||||
|
||||
if action in (ACTION_BACK, ACTION_PARENT_DIR, ACTION_PREVIOUS_MENU):
|
||||
self.close()
|
||||
|
||||
def _add_editcontrol(self, x, y, height, width):
|
||||
|
||||
media = os.path.join(addon.getAddonInfo('path'), 'resources', 'skins', 'default', 'media')
|
||||
control = xbmcgui.ControlEdit(0, 0, 0, 0,
|
||||
label="User",
|
||||
font="font10",
|
||||
textColor="ffc2c2c2",
|
||||
focusTexture=os.path.join(media, "button-focus.png"),
|
||||
noFocusTexture=os.path.join(media, "button-focus.png"))
|
||||
control.setPosition(x, y)
|
||||
control.setHeight(height)
|
||||
control.setWidth(width)
|
||||
|
||||
self.addControl(control)
|
||||
return control
|
||||
|
||||
def _connect_to_server(self, server, port):
|
||||
|
||||
server_address = "%s:%s" % (server, port)
|
||||
self._message("%s %s..." % (lang(30610), server_address))
|
||||
result = self.connect_manager.connectToAddress(server_address)
|
||||
|
||||
if result['State'] == CONN_STATE['Unavailable']:
|
||||
self._message(lang(30609))
|
||||
return False
|
||||
else:
|
||||
self._server = result['Servers'][0]
|
||||
return True
|
||||
|
||||
def _message(self, message):
|
||||
|
||||
self.error_msg.setLabel(message)
|
||||
self.error_toggle.setVisibleCondition('True')
|
||||
|
||||
def _error(self, state, message):
|
||||
|
||||
self.error = state
|
||||
self.error_msg.setLabel(message)
|
||||
self.error_toggle.setVisibleCondition('True')
|
||||
|
||||
def _disable_error(self):
|
||||
|
||||
self.error = None
|
||||
self.error_toggle.setVisibleCondition('False')
|
|
@ -1,104 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
##################################################################################################
|
||||
|
||||
import logging
|
||||
|
||||
import xbmc
|
||||
import xbmcgui
|
||||
|
||||
##################################################################################################
|
||||
|
||||
log = logging.getLogger("EMBY."+__name__)
|
||||
|
||||
ACTION_PARENT_DIR = 9
|
||||
ACTION_PREVIOUS_MENU = 10
|
||||
ACTION_BACK = 92
|
||||
ACTION_SELECT_ITEM = 7
|
||||
ACTION_MOUSE_LEFT_CLICK = 100
|
||||
LIST = 155
|
||||
MANUAL = 200
|
||||
CANCEL = 201
|
||||
|
||||
##################################################################################################
|
||||
|
||||
|
||||
class UsersConnect(xbmcgui.WindowXMLDialog):
|
||||
|
||||
_user = None
|
||||
_manual_login = False
|
||||
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
|
||||
self.kodi_version = int(xbmc.getInfoLabel('System.BuildVersion')[:2])
|
||||
xbmcgui.WindowXMLDialog.__init__(self, *args, **kwargs)
|
||||
|
||||
def set_server(self, server):
|
||||
self.server = server
|
||||
|
||||
def set_users(self, users):
|
||||
self.users = users
|
||||
|
||||
def is_user_selected(self):
|
||||
return True if self._user else False
|
||||
|
||||
def get_user(self):
|
||||
return self._user
|
||||
|
||||
def is_manual_login(self):
|
||||
return self._manual_login
|
||||
|
||||
|
||||
def onInit(self):
|
||||
|
||||
self.list_ = self.getControl(LIST)
|
||||
for user in self.users:
|
||||
user_image = ("userflyoutdefault2.png" if 'PrimaryImageTag' not in user
|
||||
else self._get_user_artwork(user['Id'], 'Primary'))
|
||||
self.list_.addItem(self._add_listitem(user['Name'], user['Id'], user_image))
|
||||
|
||||
self.setFocus(self.list_)
|
||||
|
||||
def _add_listitem(self, label, user_id, user_image):
|
||||
|
||||
item = xbmcgui.ListItem(label)
|
||||
item.setProperty('id', user_id)
|
||||
if self.kodi_version > 15:
|
||||
item.setArt({'Icon': user_image})
|
||||
else:
|
||||
item.setArt({'icon': user_image})
|
||||
|
||||
return item
|
||||
|
||||
def onAction(self, action):
|
||||
|
||||
if action in (ACTION_BACK, ACTION_PREVIOUS_MENU, ACTION_PARENT_DIR):
|
||||
self.close()
|
||||
|
||||
if action in (ACTION_SELECT_ITEM, ACTION_MOUSE_LEFT_CLICK):
|
||||
|
||||
if self.getFocusId() == LIST:
|
||||
user = self.list_.getSelectedItem()
|
||||
selected_id = user.getProperty('id')
|
||||
log.info('User Id selected: %s', selected_id)
|
||||
|
||||
for user in self.users:
|
||||
if user['Id'] == selected_id:
|
||||
self._user = user
|
||||
break
|
||||
|
||||
self.close()
|
||||
|
||||
def onClick(self, control):
|
||||
|
||||
if control == MANUAL:
|
||||
self._manual_login = True
|
||||
self.close()
|
||||
|
||||
elif control == CANCEL:
|
||||
self.close()
|
||||
|
||||
def _get_user_artwork(self, user_id, item_type):
|
||||
# Load user information set by UserClient
|
||||
return "%s/emby/Users/%s/Images/%s?Format=original" % (self.server, user_id, item_type)
|
|
@ -32,7 +32,7 @@ class DownloadUtils():
|
|||
_shared_state = {}
|
||||
|
||||
# How many failed attempts before declaring PMS dead?
|
||||
connectionAttempts = 2
|
||||
connectionAttempts = 1
|
||||
# How many 401 returns before declaring unauthorized?
|
||||
unauthorizedAttempts = 2
|
||||
# How long should we wait for an answer from the
|
||||
|
@ -318,7 +318,7 @@ class DownloadUtils():
|
|||
LOG.warn('Failed to connect to %s too many times. '
|
||||
'Declare PMS dead', url)
|
||||
window('plex_online', value="false")
|
||||
except:
|
||||
except ValueError:
|
||||
# 'countError' not yet set
|
||||
pass
|
||||
return None
|
||||
|
|
|
@ -552,16 +552,7 @@ def getOnDeck(viewid, mediatype, tagname, limit):
|
|||
listitem = api.create_listitem(
|
||||
append_show_title=append_show_title,
|
||||
append_sxxexx=append_sxxexx)
|
||||
if directpaths:
|
||||
url = api.file_path(force_first_media=True)
|
||||
else:
|
||||
url = ('plugin://%s.tvshows/?plex_id=%s&plex_type=%s&mode=play&filename=%s'
|
||||
% (v.ADDON_ID,
|
||||
api.plex_id(),
|
||||
api.plex_type(),
|
||||
api.file_name(force_first_media=True)))
|
||||
if api.resume_point():
|
||||
listitem.setProperty('resumetime', str(api.resume_point()))
|
||||
url = api.path()
|
||||
xbmcplugin.addDirectoryItem(
|
||||
handle=HANDLE,
|
||||
url=url,
|
||||
|
@ -829,11 +820,7 @@ def __build_item(xml_element):
|
|||
elif api.plex_type() == v.PLEX_TYPE_PHOTO:
|
||||
url = api.get_picture_path()
|
||||
else:
|
||||
url = 'plugin://%s/?plex_id=%s&plex_type=%s&mode=play&filename=%s' \
|
||||
% (v.ADDON_TYPE[api.plex_type()],
|
||||
api.plex_id(),
|
||||
api.plex_type(),
|
||||
api.file_name(force_first_media=True))
|
||||
url = api.path()
|
||||
if api.resume_point():
|
||||
listitem.setProperty('resumetime', str(api.resume_point()))
|
||||
xbmcplugin.addDirectoryItem(handle=HANDLE,
|
||||
|
|
|
@ -528,6 +528,8 @@ class InitialSetup(object):
|
|||
|
||||
# Do we need to migrate stuff?
|
||||
check_migration()
|
||||
# Reload the server IP cause we might've deleted it during migration
|
||||
self.server = UserClient().get_server()
|
||||
|
||||
# Display a warning if Kodi puts ALL movies into the queue, basically
|
||||
# breaking playback reporting for PKC
|
||||
|
|
|
@ -147,21 +147,22 @@ class Items(object):
|
|||
userdata['Resume'],
|
||||
userdata['Runtime'],
|
||||
userdata['PlayCount'],
|
||||
userdata['LastPlayedDate'])
|
||||
userdata['LastPlayedDate'],
|
||||
api.plex_type())
|
||||
if v.KODIVERSION >= 17:
|
||||
self.kodi_db.update_userrating(db_item[0],
|
||||
db_item[4],
|
||||
userdata['UserRating'])
|
||||
|
||||
def updatePlaystate(self, mark_played, view_count, resume, duration,
|
||||
file_id, lastViewedAt):
|
||||
file_id, lastViewedAt, plex_type):
|
||||
"""
|
||||
Use with websockets, not xml
|
||||
"""
|
||||
# If the playback was stopped, check whether we need to increment the
|
||||
# playcount. PMS won't tell us the playcount via websockets
|
||||
LOG.debug('Set playstate for file_id %s: viewcount: %s, resume: %s',
|
||||
file_id, view_count, resume)
|
||||
LOG.debug('Playstate file_id %s: viewcount: %s, resume: %s, type: %s',
|
||||
file_id, view_count, resume, plex_type)
|
||||
if mark_played:
|
||||
LOG.info('Marking as completely watched in Kodi')
|
||||
try:
|
||||
|
@ -174,7 +175,8 @@ class Items(object):
|
|||
resume,
|
||||
duration,
|
||||
view_count,
|
||||
lastViewedAt)
|
||||
lastViewedAt,
|
||||
plex_type)
|
||||
|
||||
|
||||
class Movies(Items):
|
||||
|
@ -448,7 +450,12 @@ class Movies(Items):
|
|||
# Add any sets from Plex collection tags
|
||||
self.kodi_db.addSets(movieid, collections, kodicursor)
|
||||
# Process playstates
|
||||
self.kodi_db.addPlaystate(fileid, resume, runtime, playcount, dateplayed)
|
||||
self.kodi_db.addPlaystate(fileid,
|
||||
resume,
|
||||
runtime,
|
||||
playcount,
|
||||
dateplayed,
|
||||
v.PLEX_TYPE_MOVIE)
|
||||
|
||||
def remove(self, plex_id):
|
||||
"""
|
||||
|
@ -584,7 +591,8 @@ class TVShows(Items):
|
|||
# Set plugin path
|
||||
toplevelpath = "plugin://%s.tvshows/" % v.ADDON_ID
|
||||
path = "%s%s/" % (toplevelpath, itemid)
|
||||
toppathid = self.kodi_db.get_path(toplevelpath)
|
||||
# Do NOT set a parent id because addon-path cannot be "stacked"
|
||||
toppathid = None
|
||||
|
||||
pathid = self.kodi_db.add_video_path(path,
|
||||
date_added=api.date_created(),
|
||||
|
@ -852,7 +860,7 @@ class TVShows(Items):
|
|||
# Set plugin path - do NOT use "intermediate" paths for the show
|
||||
# as with direct paths!
|
||||
filename = api.file_name(force_first_media=True)
|
||||
path = 'plugin://%s.tvshows/' % v.ADDON_ID
|
||||
path = 'plugin://%s.tvshows/%s/' % (v.ADDON_ID, series_id)
|
||||
filename = ('%s?plex_id=%s&plex_type=%s&mode=play&filename=%s'
|
||||
% (path, itemid, v.PLEX_TYPE_EPISODE, filename))
|
||||
playurl = filename
|
||||
|
@ -989,7 +997,24 @@ class TVShows(Items):
|
|||
resume,
|
||||
runtime,
|
||||
playcount,
|
||||
dateplayed)
|
||||
dateplayed,
|
||||
None) # Do send None, we check here
|
||||
if not state.DIRECT_PATHS:
|
||||
# need to set a SECOND file entry for a path without plex show id
|
||||
filename = api.file_name(force_first_media=True)
|
||||
path = 'plugin://%s.tvshows/' % v.ADDON_ID
|
||||
# Filename is exactly the same, WITH plex show id!
|
||||
filename = ('%s%s/?plex_id=%s&plex_type=%s&mode=play&filename=%s'
|
||||
% (path, series_id, itemid, v.PLEX_TYPE_EPISODE,
|
||||
filename))
|
||||
pathid = self.kodi_db.add_video_path(path)
|
||||
fileid = self.kodi_db.add_file(filename, pathid, dateadded)
|
||||
self.kodi_db.addPlaystate(fileid,
|
||||
resume,
|
||||
runtime,
|
||||
playcount,
|
||||
dateplayed,
|
||||
None) # Do send None - 2nd entry
|
||||
|
||||
@catch_exceptions(warnuser=True)
|
||||
def remove(self, plex_id):
|
||||
|
@ -1093,7 +1118,7 @@ class TVShows(Items):
|
|||
Remove an episode, and episode only from the Kodi DB (not Plex DB)
|
||||
"""
|
||||
self.kodi_db.modify_people(kodi_id, v.KODI_TYPE_EPISODE)
|
||||
self.kodi_db.remove_file(file_id)
|
||||
self.kodi_db.remove_file(file_id, plex_type=v.PLEX_TYPE_EPISODE)
|
||||
self.artwork.delete_artwork(kodi_id,
|
||||
v.KODI_TYPE_EPISODE,
|
||||
self.kodicursor)
|
||||
|
|
|
@ -8,6 +8,7 @@ from sqlite3 import IntegrityError
|
|||
import artwork
|
||||
from utils import kodi_sql, try_decode, unix_timestamp, unix_date_to_kodi
|
||||
import variables as v
|
||||
import state
|
||||
|
||||
###############################################################################
|
||||
|
||||
|
@ -237,13 +238,31 @@ class KodiDBMethods(object):
|
|||
show_id = None
|
||||
return show_id
|
||||
|
||||
def remove_file(self, file_id, remove_orphans=True):
|
||||
def remove_file(self, file_id, remove_orphans=True, plex_type=None):
|
||||
"""
|
||||
Removes the entry for file_id from the files table. Will also delete
|
||||
entries from the associated tables: bookmark, settings, streamdetails.
|
||||
If remove_orphans is true, this method will delete any orphaned path
|
||||
entries in the Kodi path table
|
||||
|
||||
Passing plex_type = v.PLEX_TYPE_EPISODE deletes any secondary files for
|
||||
add-on paths
|
||||
"""
|
||||
if not state.DIRECT_PATHS and plex_type == v.PLEX_TYPE_EPISODE:
|
||||
# Hack for the 2 entries for episodes for addon paths
|
||||
query = 'SELECT strFilename FROM files WHERE idFile = ? LIMIT 1'
|
||||
self.cursor.execute(query, (file_id, ))
|
||||
filename = self.cursor.fetchone()
|
||||
if not filename:
|
||||
LOG.error('Could not find file_id %s', file_id)
|
||||
return
|
||||
query = 'SELECT idFile FROM files WHERE strFilename = ? LIMIT 2'
|
||||
self.cursor.execute(query, (filename[0], ))
|
||||
file_ids = self.cursor.fetchall()
|
||||
for new_id in file_ids:
|
||||
self.remove_file(new_id[0], remove_orphans=remove_orphans)
|
||||
return
|
||||
|
||||
self.cursor.execute('SELECT idPath FROM files WHERE idFile = ? LIMIT 1',
|
||||
(file_id,))
|
||||
try:
|
||||
|
@ -303,7 +322,11 @@ class KodiDBMethods(object):
|
|||
# Add all new entries that haven't already been added
|
||||
query = 'INSERT INTO %s VALUES (?, ?, ?)' % link_table
|
||||
for entry_id in entry_ids:
|
||||
try:
|
||||
self.cursor.execute(query, (entry_id, kodi_id, kodi_type))
|
||||
except IntegrityError:
|
||||
LOG.info('IntegrityError: skipping entry %s for table %s',
|
||||
entry_id, link_table)
|
||||
# Delete all outdated references in the link table. Also check whether
|
||||
# we need to delete orphaned entries in the master table
|
||||
query = '''
|
||||
|
@ -704,7 +727,29 @@ class KodiDBMethods(object):
|
|||
return answ
|
||||
|
||||
def addPlaystate(self, file_id, resume_seconds, total_seconds, playcount,
|
||||
dateplayed):
|
||||
dateplayed, plex_type):
|
||||
if not state.DIRECT_PATHS and plex_type == v.PLEX_TYPE_EPISODE:
|
||||
# Need to make sure to set a SECOND bookmark entry for another,
|
||||
# second file_id that points to the path .tvshows instead of
|
||||
# .tvshows/<plex show id/!
|
||||
query = 'SELECT strFilename FROM files WHERE idFile = ? LIMIT 1'
|
||||
self.cursor.execute(query, (file_id, ))
|
||||
filename = self.cursor.fetchone()
|
||||
if not filename:
|
||||
LOG.error('Could not find fileid %s in Kodi DB', file_id)
|
||||
raise RuntimeError
|
||||
query = 'SELECT idFile FROM files WHERE strFilename = ? LIMIT 2'
|
||||
self.cursor.execute(query, (filename[0], ))
|
||||
file_ids = self.cursor.fetchall()
|
||||
if len(file_ids) != 2:
|
||||
LOG.error('Expected to find 2 file ids but found %s',
|
||||
len(file_ids))
|
||||
raise RuntimeError
|
||||
for new_id in file_ids:
|
||||
self.addPlaystate(new_id[0], resume_seconds, total_seconds,
|
||||
playcount, dateplayed, None)
|
||||
return
|
||||
|
||||
# Delete existing resume point
|
||||
self.cursor.execute('DELETE FROM bookmark WHERE idFile = ?', (file_id,))
|
||||
# Set watched count
|
||||
|
|
|
@ -406,7 +406,7 @@ class KodiMonitor(xbmc.Monitor):
|
|||
else:
|
||||
container_key = '/library/metadata/%s' % plex_id
|
||||
# Remember that this player has been active
|
||||
state.ACTIVE_PLAYERS.append(playerid)
|
||||
state.ACTIVE_PLAYERS.add(playerid)
|
||||
status.update(info)
|
||||
LOG.debug('Set the Plex container_key to: %s', container_key)
|
||||
status['container_key'] = container_key
|
||||
|
@ -481,7 +481,7 @@ def _playback_cleanup(ended=False):
|
|||
# Reset the player's status
|
||||
state.PLAYER_STATES[playerid] = copy.deepcopy(state.PLAYSTATE)
|
||||
# As all playback has halted, reset the players that have been active
|
||||
state.ACTIVE_PLAYERS = []
|
||||
state.ACTIVE_PLAYERS = set()
|
||||
LOG.debug('Finished PKC playback cleanup')
|
||||
|
||||
|
||||
|
@ -531,7 +531,8 @@ def _record_playstate(status, ended):
|
|||
time,
|
||||
totaltime,
|
||||
playcount,
|
||||
last_played)
|
||||
last_played,
|
||||
status['plex_type'])
|
||||
# Hack to force "in progress" widget to appear if it wasn't visible before
|
||||
if (state.FORCE_RELOAD_SKIN and
|
||||
xbmc.getCondVisibility('Window.IsVisible(Home.xml)')):
|
||||
|
|
|
@ -3,12 +3,14 @@ from logging import getLogger
|
|||
from threading import Thread
|
||||
from Queue import Empty
|
||||
|
||||
from xbmc import sleep
|
||||
import xbmc
|
||||
|
||||
from utils import thread_methods
|
||||
from utils import thread_methods, settings, language as lang, dialog
|
||||
import plexdb_functions as plexdb
|
||||
import itemtypes
|
||||
from artwork import ArtworkSyncMessage
|
||||
import variables as v
|
||||
import state
|
||||
|
||||
###############################################################################
|
||||
|
||||
|
@ -47,6 +49,8 @@ class ThreadedProcessFanart(Thread):
|
|||
stopped = self.stopped
|
||||
suspended = self.suspended
|
||||
queue = self.queue
|
||||
counter = 0
|
||||
set_zero = False
|
||||
while not stopped():
|
||||
# In the event the server goes offline
|
||||
while suspended():
|
||||
|
@ -55,12 +59,27 @@ class ThreadedProcessFanart(Thread):
|
|||
# Abort was requested while waiting. We should exit
|
||||
LOG.info("---===### Stopped FanartSync ###===---")
|
||||
return
|
||||
sleep(1000)
|
||||
xbmc.sleep(1000)
|
||||
# grabs Plex item from queue
|
||||
try:
|
||||
item = queue.get(block=False)
|
||||
except Empty:
|
||||
sleep(200)
|
||||
if not set_zero and not xbmc.getCondVisibility(
|
||||
'Window.IsVisible(DialogAddonSettings.xml)'):
|
||||
# Avoid saving '0' all the time
|
||||
set_zero = True
|
||||
settings('fanarttv_lookups', value='0')
|
||||
xbmc.sleep(200)
|
||||
continue
|
||||
set_zero = False
|
||||
if isinstance(item, ArtworkSyncMessage):
|
||||
if state.IMAGE_SYNC_NOTIFICATIONS:
|
||||
dialog('notification',
|
||||
heading=lang(29999),
|
||||
message=item.message,
|
||||
icon='{plex}',
|
||||
sound=False)
|
||||
queue.task_done()
|
||||
continue
|
||||
|
||||
LOG.debug('Get additional fanart for Plex id %s', item['plex_id'])
|
||||
|
@ -72,5 +91,11 @@ class ThreadedProcessFanart(Thread):
|
|||
LOG.debug('Done getting fanart for Plex id %s', item['plex_id'])
|
||||
with plexdb.Get_Plex_DB() as plex_db:
|
||||
plex_db.set_fanart_synched(item['plex_id'])
|
||||
# Update the caching state in the PKC settings. Avoid saving '0'
|
||||
counter += 1
|
||||
if (counter > 20 and not xbmc.getCondVisibility(
|
||||
'Window.IsVisible(DialogAddonSettings.xml)')):
|
||||
counter = 0
|
||||
settings('fanarttv_lookups', value=str(queue.qsize()))
|
||||
queue.task_done()
|
||||
LOG.debug("---===### Stopped FanartSync ###===---")
|
||||
|
|
|
@ -274,16 +274,13 @@ class LibrarySync(Thread):
|
|||
return True
|
||||
|
||||
def _full_sync(self):
|
||||
process = {
|
||||
'movies': self.plex_movies,
|
||||
'tvshows': self.plex_tv_show,
|
||||
}
|
||||
process = [self.plex_movies, self.plex_tv_show]
|
||||
if state.ENABLE_MUSIC:
|
||||
process['music'] = self.plex_music
|
||||
process.append(self.plex_music)
|
||||
|
||||
# Do the processing
|
||||
for itemtype in process:
|
||||
if self.suspend_item_sync() or not process[itemtype]():
|
||||
for kind in process:
|
||||
if self.suspend_item_sync() or not kind():
|
||||
return False
|
||||
|
||||
# Let kodi update the views in any case, since we're doing a full sync
|
||||
|
@ -651,7 +648,6 @@ class LibrarySync(Thread):
|
|||
self.updatelist
|
||||
"""
|
||||
# Some logging, just in case.
|
||||
LOG.debug("self.updatelist: %s", self.updatelist)
|
||||
item_number = len(self.updatelist)
|
||||
if item_number == 0:
|
||||
return
|
||||
|
@ -1378,12 +1374,14 @@ class LibrarySync(Thread):
|
|||
item_fkt = getattr(itemtypes,
|
||||
v.ITEMTYPE_FROM_KODITYPE[session['kodi_type']])
|
||||
with item_fkt() as fkt:
|
||||
plex_type = v.PLEX_TYPE_FROM_KODI_TYPE[session['kodi_type']]
|
||||
fkt.updatePlaystate(mark_played,
|
||||
session['viewCount'],
|
||||
resume,
|
||||
session['duration'],
|
||||
session['file_id'],
|
||||
utils.unix_date_to_kodi(utils.unix_timestamp()))
|
||||
utils.unix_date_to_kodi(utils.unix_timestamp()),
|
||||
plex_type)
|
||||
|
||||
def sync_fanart(self, missing_only=True, refresh=False):
|
||||
"""
|
||||
|
@ -1393,6 +1391,8 @@ class LibrarySync(Thread):
|
|||
missing_only=True False will start look-up for EVERY item
|
||||
refresh=False True will force refresh all external fanart
|
||||
"""
|
||||
if settings('FanartTV') == 'false':
|
||||
return
|
||||
with plexdb.Get_Plex_DB() as plex_db:
|
||||
if missing_only:
|
||||
with plexdb.Get_Plex_DB() as plex_db:
|
||||
|
@ -1404,14 +1404,20 @@ class LibrarySync(Thread):
|
|||
items.extend(plex_db.itemsByType(plex_type))
|
||||
LOG.info('Trying to get ALL additional fanart for %s items',
|
||||
len(items))
|
||||
if not items:
|
||||
return
|
||||
# Shuffle the list to not always start out identically
|
||||
shuffle(items)
|
||||
for item in items:
|
||||
# Checking FanartTV for %s items
|
||||
self.fanartqueue.put(artwork.ArtworkSyncMessage(lang(30018) % len(items)))
|
||||
for i, item in enumerate(items):
|
||||
self.fanartqueue.put({
|
||||
'plex_id': item['plex_id'],
|
||||
'plex_type': item['plex_type'],
|
||||
'refresh': refresh
|
||||
})
|
||||
# FanartTV lookup completed
|
||||
self.fanartqueue.put(artwork.ArtworkSyncMessage(lang(30019)))
|
||||
|
||||
def triage_lib_scans(self):
|
||||
"""
|
||||
|
@ -1499,6 +1505,7 @@ class LibrarySync(Thread):
|
|||
kodi_db_version_checked = False
|
||||
last_sync = 0
|
||||
last_processing = 0
|
||||
last_time_sync = 0
|
||||
one_day_in_seconds = 60*60*24
|
||||
# Link to Websocket queue
|
||||
queue = state.WEBSOCKET_QUEUE
|
||||
|
@ -1529,9 +1536,6 @@ class LibrarySync(Thread):
|
|||
# Setup the paths for addon-paths (even when using direct paths)
|
||||
with kodidb.GetKodiDB('video') as kodi_db:
|
||||
kodi_db.setup_path_table()
|
||||
# Initialize time offset Kodi - PMS
|
||||
self.sync_pms_time()
|
||||
last_time_sync = utils.unix_timestamp()
|
||||
window('plex_dbScan', clear=True)
|
||||
state.DB_SCAN = False
|
||||
playlist_monitor = None
|
||||
|
@ -1549,6 +1553,9 @@ class LibrarySync(Thread):
|
|||
# Very first sync upon installation or reset of Kodi DB
|
||||
state.DB_SCAN = True
|
||||
window('plex_dbScan', value='true')
|
||||
# Initialize time offset Kodi - PMS
|
||||
self.sync_pms_time()
|
||||
last_time_sync = utils.unix_timestamp()
|
||||
LOG.info('Initial start-up full sync starting')
|
||||
xbmc.executebuiltin('InhibitIdleShutdown(true)')
|
||||
if self.full_sync():
|
||||
|
@ -1560,6 +1567,7 @@ class LibrarySync(Thread):
|
|||
initial_sync_done = True
|
||||
kodi_db_version_checked = True
|
||||
last_sync = utils.unix_timestamp()
|
||||
self.sync_fanart()
|
||||
self.fanartthread.start()
|
||||
if state.SYNC_PLAYLISTS and playlists.full_sync():
|
||||
playlist_monitor = playlists.kodi_playlist_monitor()
|
||||
|
@ -1568,8 +1576,6 @@ class LibrarySync(Thread):
|
|||
xbmc.executebuiltin('InhibitIdleShutdown(false)')
|
||||
window('plex_dbScan', clear=True)
|
||||
state.DB_SCAN = False
|
||||
if settings('FanartTV') == 'true':
|
||||
self.sync_fanart()
|
||||
|
||||
elif not kodi_db_version_checked:
|
||||
# Install sync was already done, don't force-show dialogs
|
||||
|
@ -1590,7 +1596,7 @@ class LibrarySync(Thread):
|
|||
heading='{plex}',
|
||||
line1=lang(29999) + lang(39402))
|
||||
else:
|
||||
utils.reset()
|
||||
utils.reset(ask_user=False)
|
||||
break
|
||||
kodi_db_version_checked = True
|
||||
|
||||
|
@ -1603,10 +1609,9 @@ class LibrarySync(Thread):
|
|||
if self.full_sync():
|
||||
initial_sync_done = True
|
||||
last_sync = utils.unix_timestamp()
|
||||
if settings('FanartTV') == 'true':
|
||||
self.sync_fanart()
|
||||
LOG.info('Done initial sync on Kodi startup')
|
||||
artwork.Artwork().cache_major_artwork()
|
||||
self.sync_fanart()
|
||||
self.fanartthread.start()
|
||||
if state.SYNC_PLAYLISTS and playlists.full_sync():
|
||||
playlist_monitor = playlists.kodi_playlist_monitor()
|
||||
|
|
|
@ -11,14 +11,19 @@ def check_migration():
|
|||
last_migration = settings('last_migrated_PKC_version')
|
||||
if last_migration == v.ADDON_VERSION:
|
||||
log.info('Already migrated to PKC version %s' % v.ADDON_VERSION)
|
||||
# Ensure later migration if user downgraded PKC!
|
||||
settings('last_migrated_PKC_version', value=v.ADDON_VERSION)
|
||||
return
|
||||
if not last_migration:
|
||||
log.info('Never migrated, so checking everything')
|
||||
last_migration = '1.0.0'
|
||||
|
||||
if not compare_version(v.ADDON_VERSION, '1.8.2'):
|
||||
log.info('Migrating to version 1.8.1')
|
||||
# Set the new PKC theMovieDB key
|
||||
settings('themoviedbAPIKey', value='19c90103adb9e98f2172c6a6a3d85dc4')
|
||||
|
||||
if not compare_version(v.ADDON_VERSION, '2.0.25'):
|
||||
log.info('Migrating to version 2.0.24')
|
||||
# Need to re-connect with PMS to pick up on plex.direct URIs
|
||||
settings('ipaddress', value='')
|
||||
settings('port', value='')
|
||||
|
||||
settings('last_migrated_PKC_version', value=v.ADDON_VERSION)
|
||||
|
|
|
@ -31,6 +31,7 @@ def excludefromscan_music_folders():
|
|||
return
|
||||
# Build paths
|
||||
paths = []
|
||||
reboot = False
|
||||
api = API(item=None)
|
||||
for library in xml:
|
||||
if library.attrib['type'] != v.PLEX_TYPE_ARTIST:
|
||||
|
@ -56,9 +57,12 @@ def excludefromscan_music_folders():
|
|||
LOG.info('New Plex music library detected: %s', path)
|
||||
xml.set_setting(['audio', 'excludefromscan', 'regexp'],
|
||||
value=path, append=True)
|
||||
if paths:
|
||||
# We only need to reboot if we ADD new paths!
|
||||
reboot = xml.write_xml
|
||||
# Delete obsolete entries
|
||||
# Make sure we're not saving an empty audio-excludefromscan
|
||||
xml.write_xml = reboot
|
||||
for element in parent:
|
||||
for path in paths:
|
||||
if element.text == path:
|
||||
|
@ -67,6 +71,7 @@ def excludefromscan_music_folders():
|
|||
LOG.info('Deleting music library from advancedsettings: %s',
|
||||
element.text)
|
||||
parent.remove(element)
|
||||
xml.write_xml = True
|
||||
except (ParseError, IOError):
|
||||
LOG.error('Could not adjust advancedsettings.xml')
|
||||
reboot = False
|
||||
|
|
|
@ -62,7 +62,11 @@ def playback_triage(plex_id=None, plex_type=None, path=None, resolve=True):
|
|||
return
|
||||
playqueue = PQ.get_playqueue_from_type(
|
||||
v.KODI_PLAYLIST_TYPE_FROM_PLEX_TYPE[plex_type])
|
||||
try:
|
||||
pos = js.get_position(playqueue.playlistid)
|
||||
except KeyError:
|
||||
LOG.warning('No position returned from Kodi player! Assuming 0')
|
||||
pos = 0
|
||||
# Can return -1 (as in "no playlist")
|
||||
pos = pos if pos != -1 else 0
|
||||
LOG.debug('playQueue position %s for %s', pos, playqueue)
|
||||
|
@ -206,6 +210,7 @@ def _init_existing_kodi_playlist(playqueue, pos):
|
|||
LOG.debug('Kodi playlist size: %s', playqueue.kodi_pl.size())
|
||||
kodi_items = js.playlist_get_items(playqueue.playlistid)
|
||||
if not kodi_items:
|
||||
LOG.error('No Kodi items returned')
|
||||
raise PL.PlaylistError('No Kodi items returned')
|
||||
item = PL.init_plex_playqueue(playqueue, kodi_item=kodi_items[pos])
|
||||
item.force_transcode = state.FORCE_TRANSCODE
|
||||
|
@ -240,10 +245,7 @@ def _prep_playlist_stack(xml):
|
|||
api.set_part_number(part)
|
||||
if kodi_id is None:
|
||||
# Need to redirect again to PKC to conclude playback
|
||||
path = ('plugin://%s/?plex_id=%s&plex_type=%s&mode=play'
|
||||
% (v.ADDON_TYPE[api.plex_type()],
|
||||
api.plex_id(),
|
||||
api.plex_type()))
|
||||
path = api.path()
|
||||
listitem = api.create_listitem()
|
||||
listitem.setPath(try_encode(path))
|
||||
else:
|
||||
|
|
|
@ -119,7 +119,7 @@ class SubscriptionMgr(object):
|
|||
self.server = ""
|
||||
self.protocol = "http"
|
||||
self.port = ""
|
||||
self.isplaying = False
|
||||
self.location = 'navigation'
|
||||
# In order to be able to signal a stop at the end
|
||||
self.last_params = {}
|
||||
self.lastplayers = {}
|
||||
|
@ -144,7 +144,7 @@ class SubscriptionMgr(object):
|
|||
Returns a timeline xml as str
|
||||
(xml containing video, audio, photo player state)
|
||||
"""
|
||||
self.isplaying = False
|
||||
self.location = 'navigation'
|
||||
answ = str(XML)
|
||||
timelines = {
|
||||
v.PLEX_PLAYLIST_TYPE_VIDEO: None,
|
||||
|
@ -163,8 +163,8 @@ class SubscriptionMgr(object):
|
|||
v.KODI_PLAYLIST_TYPE_FROM_PLEX_PLAYLIST_TYPE[typus]],
|
||||
typus)
|
||||
timelines[typus] = self._dict_to_xml(timeline)
|
||||
location = 'fullScreenVideo' if self.isplaying else 'navigation'
|
||||
timelines.update({'command_id': '{command_id}', 'location': location})
|
||||
timelines.update({'command_id': '{command_id}',
|
||||
'location': self.location})
|
||||
return answ.format(**timelines)
|
||||
|
||||
@staticmethod
|
||||
|
@ -191,7 +191,8 @@ class SubscriptionMgr(object):
|
|||
'type': ptype,
|
||||
'state': 'stopped'
|
||||
}
|
||||
self.isplaying = True
|
||||
if ptype in (v.PLEX_PLAYLIST_TYPE_VIDEO, v.PLEX_PLAYLIST_TYPE_PHOTO):
|
||||
self.location = 'fullScreenVideo'
|
||||
self.stop_sent_to_web = False
|
||||
pbmc_server = window('pms_server')
|
||||
if pbmc_server:
|
||||
|
@ -202,7 +203,6 @@ class SubscriptionMgr(object):
|
|||
shuffle = '1' if info['shuffled'] else '0'
|
||||
mute = '1' if info['muted'] is True else '0'
|
||||
answ = {
|
||||
'location': 'fullScreenVideo',
|
||||
'controllable': CONTROLLABLE[ptype],
|
||||
'protocol': self.protocol,
|
||||
'address': self.server,
|
||||
|
|
|
@ -99,7 +99,7 @@ COMMAND_PIPELINE_QUEUE = None
|
|||
WEBSOCKET_QUEUE = None
|
||||
|
||||
# Which Kodi player is/has been active? (either int 1, 2 or 3)
|
||||
ACTIVE_PLAYERS = []
|
||||
ACTIVE_PLAYERS = set()
|
||||
# Failsafe for throwing an empty video back to Kodi's setResolvedUrl to set
|
||||
# up our own playlist from the very beginning
|
||||
PKC_CAUSED_STOP = False
|
||||
|
|
|
@ -264,8 +264,10 @@ class UserClient(Thread):
|
|||
Reset all user settings
|
||||
"""
|
||||
LOG.debug("Reset UserClient authentication.")
|
||||
try:
|
||||
self.do_utils.stopSession()
|
||||
|
||||
except AttributeError:
|
||||
pass
|
||||
window('plex_authenticated', clear=True)
|
||||
state.AUTHENTICATED = False
|
||||
window('pms_token', clear=True)
|
||||
|
|
|
@ -486,18 +486,20 @@ def wipe_database():
|
|||
cursor.execute("DELETE FROM %s" % table_name)
|
||||
connection.commit()
|
||||
cursor.close()
|
||||
|
||||
# Reset the artwork sync status in the PKC settings
|
||||
settings('caching_artwork_count', value=language(39310))
|
||||
settings('fanarttv_lookups', value=language(39310))
|
||||
# reset the install run flag
|
||||
settings('SyncInstallRunDone', value="false")
|
||||
|
||||
|
||||
def reset():
|
||||
def reset(ask_user=True):
|
||||
"""
|
||||
User navigated to the PKC settings, Advanced, and wants to reset the Kodi
|
||||
database and possibly PKC entirely
|
||||
"""
|
||||
# Are you sure you want to reset your local Kodi database?
|
||||
if not dialog('yesno',
|
||||
if ask_user and not dialog('yesno',
|
||||
heading='{plex} %s ' % language(30132),
|
||||
line1=language(39600)):
|
||||
return
|
||||
|
@ -521,7 +523,7 @@ def reset():
|
|||
|
||||
# Reset all PlexKodiConnect Addon settings? (this is usually NOT
|
||||
# recommended and unnecessary!)
|
||||
if dialog('yesno',
|
||||
if ask_user and dialog('yesno',
|
||||
heading='{plex} %s ' % language(30132),
|
||||
line1=language(39603)):
|
||||
# Delete the settings
|
||||
|
|
|
@ -78,7 +78,7 @@ COMPANION_PORT = int(_ADDON.getSetting('companionPort'))
|
|||
PKC_MACHINE_IDENTIFIER = None
|
||||
|
||||
# Minimal PKC version needed for the Kodi database - otherwise need to recreate
|
||||
MIN_DB_VERSION = '2.0.11'
|
||||
MIN_DB_VERSION = '2.0.27'
|
||||
|
||||
# Database paths
|
||||
_DB_VIDEO_VERSION = {
|
||||
|
|
|
@ -57,7 +57,6 @@ class WebSocket(Thread):
|
|||
LOG.info("----===## Starting %s ##===----", self.__class__.__name__)
|
||||
|
||||
counter = 0
|
||||
handshake_counter = 0
|
||||
stopped = self.stopped
|
||||
suspended = self.suspended
|
||||
while not stopped():
|
||||
|
@ -94,9 +93,10 @@ class WebSocket(Thread):
|
|||
LOG.info("%s: Error connecting", self.__class__.__name__)
|
||||
self.ws = None
|
||||
counter += 1
|
||||
if counter > 3:
|
||||
counter = 0
|
||||
self.IOError_response()
|
||||
if counter >= 10:
|
||||
LOG.info('%s: Repeated IOError detected. Stopping now',
|
||||
self.__class__.__name__)
|
||||
break
|
||||
sleep(1000)
|
||||
except websocket.WebSocketTimeoutException:
|
||||
LOG.info("%s: Timeout while connecting, trying again",
|
||||
|
@ -106,10 +106,10 @@ class WebSocket(Thread):
|
|||
except websocket.WebSocketException as e:
|
||||
LOG.info('%s: WebSocketException: %s',
|
||||
self.__class__.__name__, e)
|
||||
if ('Handshake Status 401' in e.args
|
||||
or 'Handshake Status 403' in e.args):
|
||||
handshake_counter += 1
|
||||
if handshake_counter >= 5:
|
||||
if ('Handshake Status 401' in e.args or
|
||||
'Handshake Status 403' in e.args):
|
||||
counter += 1
|
||||
if counter >= 5:
|
||||
LOG.info('%s: Error in handshake detected. '
|
||||
'Stopping now', self.__class__.__name__)
|
||||
break
|
||||
|
@ -125,7 +125,6 @@ class WebSocket(Thread):
|
|||
sleep(1000)
|
||||
else:
|
||||
counter = 0
|
||||
handshake_counter = 0
|
||||
except Exception as e:
|
||||
LOG.error("%s: Unknown exception encountered: %s",
|
||||
self.__class__.__name__, e)
|
||||
|
@ -202,11 +201,6 @@ class PMS_Websocket(WebSocket):
|
|||
# Put PMS message on queue and let libsync take care of it
|
||||
state.WEBSOCKET_QUEUE.put(message)
|
||||
|
||||
def IOError_response(self):
|
||||
LOG.warn("Repeatedly could not connect to PMS, "
|
||||
"declaring the connection dead")
|
||||
window('plex_online', value='false')
|
||||
|
||||
|
||||
class Alexa_Websocket(WebSocket):
|
||||
"""
|
||||
|
@ -252,9 +246,6 @@ class Alexa_Websocket(WebSocket):
|
|||
return
|
||||
process_command(message.attrib['path'][1:], message.attrib)
|
||||
|
||||
def IOError_response(self):
|
||||
pass
|
||||
|
||||
# Path in thread_methods
|
||||
def stop(self):
|
||||
self.thread_stopped = True
|
||||
|
|
|
@ -29,17 +29,16 @@
|
|||
<setting id="plexhome" label="Plex home in use" type="bool" default="" visible="false" />
|
||||
<setting id="plexToken" label="plexToken" type="text" default="" visible="false" />
|
||||
<setting id="plexHomeSize" type="number" default="1" visible="false" />
|
||||
|
||||
<setting type="sep" text=""/>
|
||||
<setting type="lsep" label="39008" />
|
||||
<setting id="plexCompanion" label="39004" type="bool" default="true" />
|
||||
<setting id="deviceName" label="30016" type="text" visible="eq(-1,true)" default="PlexKodiConnect" subsetting="true" />
|
||||
<setting id="companionPort" label="39005" type="number" default="3005" option="int" visible="eq(-2,true)" subsetting="true" />
|
||||
<setting id="companionUpdatePort" label="39078" type="number" default="32412" option="int" visible="eq(-3,true)" subsetting="true" />
|
||||
<setting type="sep" text=""/>
|
||||
<setting type="lsep" label="39700" />
|
||||
<setting id="enable_alexa" label="39701" type="bool" default="true"/>
|
||||
<setting type="lsep" label="" />
|
||||
<!-- Different settings that are not visible - to avoid warnings in the log -->
|
||||
<setting id="skipContextMenu" type="bool" label="30520" default="false"/>
|
||||
<setting id="plex_restricteduser" type="bool" default="false" visible="false"/>
|
||||
<setting id="plex_allows_mediaDeletion" type="bool" default="true" visible="false"/>
|
||||
<setting id="companion_show_gdm_port_warning" type="bool" default="true" visible="false"/>
|
||||
|
@ -57,19 +56,19 @@
|
|||
|
||||
<category label="30506"><!-- Sync Options -->
|
||||
<setting type="lsep" label="30537" /><!-- Restart if you make changes -->
|
||||
<setting id="syncEmptyShows" type="bool" label="30508" default="false" visible="false"/>
|
||||
<setting id="enablePlaylistSync" type="bool" label="30010" default="true" visible="true"/><!-- Sync Plex playlists -->
|
||||
<setting id="dbSyncIndicator" label="30507" type="bool" default="true" /><!-- show syncing progress -->
|
||||
<setting type="sep" />
|
||||
<setting id="syncThreadNumber" type="slider" label="39003" default="10" option="int" range="1,1,20"/><!-- Limit download sync threads (recommended for rpi: 1) -->
|
||||
<setting id="enablePlaylistSync" type="bool" label="30020" default="true" visible="true"/><!-- Sync Plex playlists -->
|
||||
<setting id="fullSyncInterval" type="number" label="39053" default="60" option="int" />
|
||||
<setting id="dbSyncScreensaver" type="bool" label="39062" default="false" /><!--Sync when screensaver is deactivated-->
|
||||
<setting id="dbSyncIndicator" label="30507" type="bool" default="true" /><!-- show syncing progress -->
|
||||
<setting id="syncThreadNumber" type="slider" label="39003" default="10" option="int" range="1,1,20"/><!-- Number of simultaneous download threads -->
|
||||
<setting id="limitindex" type="number" label="30515" default="200" option="int" /><!-- Maximum items to request from the server at once -->
|
||||
<setting type="sep" />
|
||||
<setting type="lsep" label="39052" /><!-- Background Sync -->
|
||||
<setting id="enableBackgroundSync" type="bool" label="39026" default="true" visible="true"/>
|
||||
<setting id="backgroundsync_saftyMargin" type="slider" label="39051" default="5" option="int" range="5,1,300" visible="eq(-1,true)" subsetting="true" />
|
||||
<setting id="fullSyncInterval" type="number" label="39053" default="60" option="int" />
|
||||
<setting id="dbSyncScreensaver" type="bool" label="39062" default="false" /><!--Sync when screensaver is deactivated-->
|
||||
|
||||
<setting type="lsep" label="30538" /><!-- Complete Re-Sync necessary -->
|
||||
<setting type="sep" />
|
||||
<setting type="lsep" label="30538" /><!-- Manual complete reset of Kodi database necessary, see "Advanced" -->
|
||||
<setting id="indicate_media_versions" type="bool" label="39719" default="false" /><!-- Replace user ratings with number of versions -->
|
||||
<setting id="enableMusic" type="bool" label="30509" default="true" />
|
||||
<setting id="useDirectPaths" type="enum" label="30511" values="Addon(Default)|Native(Direct paths)" default="0" visible="true"/> <!-- Playback mode -->
|
||||
|
@ -78,6 +77,7 @@
|
|||
<setting id="kodiplextimeoffset" type="number" label="Time difference in seconds (Koditime - Plextime)" default="0" visible="false" option="int" />
|
||||
<setting id="themoviedbAPIKey" type="text" default="19c90103adb9e98f2172c6a6a3d85dc4" visible="false"/>
|
||||
<setting id="FanArtTVAPIKey" type="text" default="639191cb0774661597f28a47e7e2bad5" visible="false"/>
|
||||
<setting id="syncEmptyShows" type="bool" label="30508" default="false" visible="false"/>
|
||||
</category>
|
||||
|
||||
<category label="39057"><!-- Customize Paths -->
|
||||
|
@ -95,15 +95,11 @@
|
|||
</category>
|
||||
|
||||
<category label="30516"><!-- Playback -->
|
||||
<setting type="sep" />
|
||||
<setting id="enableCinema" type="bool" label="30518" default="false" />
|
||||
<setting id="askCinema" type="bool" label="30519" default="false" visible="eq(-1,true)" subsetting="true" />
|
||||
<setting id="trailerNumber" type="slider" label="39000" default="3" visible="eq(-2,true)" range="1,1,15" option="int" />
|
||||
<setting id="pickPlexSubtitles" type="bool" label="39075" default="true" />
|
||||
<setting id="ignoreSpecialsNextEpisodes" type="bool" label="30527" default="false" />
|
||||
<setting id="offerDelete" type="bool" label="30114" default="false" visible="false"/>
|
||||
<setting id="deleteTV" type="bool" label="30115" visible="eq(-1,true)" default="false" subsetting="true" />
|
||||
<setting id="deleteMovies" type="bool" label="30116" visible="eq(-2,true)" default="false" subsetting="true" />
|
||||
<setting id="resumeJumpBack" type="slider" label="30521" default="10" range="0,1,120" option="int" visible="false"/>
|
||||
<setting type="sep" />
|
||||
<setting id="playType" type="enum" label="30002" values="Direct Play (default)|Direct Stream|Force Transcode" default="0" />
|
||||
|
@ -113,22 +109,31 @@
|
|||
<setting id="transcodeHi10P" type="bool" label="39063" default="false"/>
|
||||
<setting id="audioBoost" type="slider" label="39001" default="0" range="0,10,100" option="int"/>
|
||||
<setting id="subtitleSize" label="39002" type="slider" option="int" range="0,30,300" default="100" />
|
||||
<setting id="failedCount" type="number" visible="false" default="0" />
|
||||
<setting id="networkCreds" type="text" visible="false" default="" />
|
||||
<setting id="force_transcode_pix" type="bool" label="30545" default="false" />
|
||||
<setting id="bestQuality" type="bool" label="30541" default="false" />
|
||||
<setting id="bestTrailer" type="bool" label="30542" default="true" />
|
||||
<setting id="force_transcode_pix" type="bool" label="30545" default="false" />
|
||||
<setting type="sep" />
|
||||
<setting id="offerDelete" type="bool" label="30114" default="false" visible="false"/>
|
||||
<setting id="deleteTV" type="bool" label="30115" visible="eq(-1,true)" default="false" subsetting="true" />
|
||||
<setting id="deleteMovies" type="bool" label="30116" visible="eq(-2,true)" default="false" subsetting="true" />
|
||||
<setting id="skipContextMenu" type="bool" label="30520" default="false"/>
|
||||
<setting id="kodi_video_cache" type="number" visible="false" default="20971520" />
|
||||
<setting id="warned_setting_videoplayer.autoplaynextitem" type="bool" visible="false" default="false" />
|
||||
<setting id="failedCount" type="number" visible="false" default="0" />
|
||||
<setting id="networkCreds" type="text" visible="false" default="" />
|
||||
</category>
|
||||
|
||||
<category label="30544"><!-- artwork -->
|
||||
<setting id="enableTextureCache" label="30512" type="bool" default="true" /> <!-- Force Artwork Caching -->
|
||||
<setting id="enableTextureCache" label="30512" type="bool" default="true" /> <!-- Cache all artwork for a smooth Kodi experience -->
|
||||
<setting id="FanartTV" label="30539" type="bool" default="false" /><!-- Download additional art from FanArtTV -->
|
||||
<setting label="39222" type="action" action="RunPlugin(plugin://plugin.video.plexkodiconnect/?mode=fanart)" option="close" visible="eq(-1,true)" subsetting="true" /> <!-- Look for missing fanart on FanartTV now -->
|
||||
<setting id="imageSyncNotifications" label="30008" type="bool" default="true" /><!-- Enable notifications for image caching -->
|
||||
<setting id="imageSyncDuringPlayback" label="30009" type="bool" default="true" /><!-- Enable image caching during Kodi playback (restart Kodi!) -->
|
||||
<setting label="39020" type="action" action="RunPlugin(plugin://plugin.video.plexkodiconnect/?mode=texturecache)" option="close" /> <!-- Cache all images to Kodi texture cache now -->
|
||||
<setting type="sep" />
|
||||
<setting type="lsep" label="30010" /><!-- Approximate progress -->
|
||||
<setting id="caching_artwork_count" label="30011" type="text" default="$ADDON[plugin.video.plexkodiconnect 39310]" enable="false" visible="eq(-8,true)"/><!-- Plex artwork (posters and backgrounds) left to cache: -->
|
||||
<setting id="fanarttv_lookups" label="30015" type="text" default="$ADDON[plugin.video.plexkodiconnect 39310]" enable="false" visible="eq(-8,true)"/><!-- Movie and show FanartTV lookups left to do: -->
|
||||
</category>
|
||||
<!--
|
||||
<category label="30235" visible="false">
|
||||
|
@ -142,8 +147,8 @@
|
|||
-->
|
||||
|
||||
<category label="39073"><!-- Appearance Tweaks -->
|
||||
<setting id="fetch_pms_item_number" label="39077" type="number" default="25" option="int" />
|
||||
<setting id="forceReloadSkinOnPlaybackStop" type="bool" label="39065" default="false" /><!-- Force-refresh Kodi skin on stopping playback -->
|
||||
<setting id="fetch_pms_item_number" label="39077" type="number" default="50" option="int" />
|
||||
<setting type="sep" />
|
||||
<setting type="lsep" label="39074" /><!-- TV Shows -->
|
||||
<setting id="OnDeckTVextended" type="bool" label="39058" default="true" /><!-- Extend Plex TV Series "On Deck" view to all shows -->
|
||||
<setting id="OnDeckTvAppendShow" type="bool" label="39047" default="false" /><!--On Deck view: Append show title to episode-->
|
||||
|
@ -151,15 +156,20 @@
|
|||
<setting id="TVShowWatched" type="bool" label="39064" default="true" /><!--Recently Added: Also show already watched episodes-->
|
||||
<setting id="RecentTvAppendShow" type="bool" label="39059" default="false" /><!--Recently added: Append show title to episode-->
|
||||
<setting id="RecentTvAppendSeason" type="bool" label="39060" default="false" /><!--Recently Added: Append season- and episode-number SxxExx-->
|
||||
<setting type="sep" />
|
||||
<setting type="lsep" label="30302" /><!-- Movies -->
|
||||
<setting id="MovieShowWatched" type="bool" label="39066" default="true" /><!--Recently Added: Also show already watched episodes-->
|
||||
<setting type="sep" />
|
||||
<setting type="lsep" label="30022" /><!-- Advanced -->
|
||||
<setting id="forceReloadSkinOnPlaybackStop" type="bool" label="39065" default="false" /><!-- Force-refresh Kodi skin on stopping playback -->
|
||||
</category>
|
||||
|
||||
<category label="30022"><!-- Advanced -->
|
||||
<setting id="startupDelay" type="number" label="30529" default="0" option="int" />
|
||||
<setting label="39018" type="action" action="RunPlugin(plugin://plugin.video.plexkodiconnect/?mode=repair)" option="close" /> <!-- Repair local database (force update all content) -->
|
||||
<setting label="30535" type="action" action="RunPlugin(plugin://plugin.video.plexkodiconnect?mode=deviceid)" /><!-- Reset device id uuid -->
|
||||
<setting label="[COLOR yellow]$ADDON[plugin.video.plexkodiconnect 39018][/COLOR]" type="action" action="RunPlugin(plugin://plugin.video.plexkodiconnect/?mode=repair)" option="close" /> <!-- Repair the Kodi database (force update all content) -->
|
||||
<setting label="[COLOR yellow]$ADDON[plugin.video.plexkodiconnect 30535][/COLOR]" type="action" action="RunPlugin(plugin://plugin.video.plexkodiconnect?mode=deviceid)" /><!-- Generate a new unique Plex device Id (e.g. to clone Kodi) -->
|
||||
<setting type="sep" />
|
||||
<setting type="lsep" label="39049" /><!-- Nothing works? Try a full reset -->
|
||||
<setting label="39019" type="action" action="RunPlugin(plugin://plugin.video.plexkodiconnect/?mode=reset)" option="close" /> <!-- Partial or full reset of Database and PKC -->
|
||||
<setting label="[COLOR red]$ADDON[plugin.video.plexkodiconnect 39019][/COLOR]" type="action" action="RunPlugin(plugin://plugin.video.plexkodiconnect/?mode=reset)" option="close" /> <!-- Reset the Kodi database and optionally reset PlexKodiConnect -->
|
||||
</category>
|
||||
</settings>
|
||||
|
|
|
@ -1,145 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<window>
|
||||
<defaultcontrol always="true">200</defaultcontrol>
|
||||
<zorder>0</zorder>
|
||||
<include>dialogeffect</include>
|
||||
<controls>
|
||||
<control type="image">
|
||||
<description>Background fade</description>
|
||||
<width>100%</width>
|
||||
<height>100%</height>
|
||||
<texture>emby-bg-fade.png</texture>
|
||||
</control>
|
||||
|
||||
<control type="group">
|
||||
<width>600</width>
|
||||
<left>35%</left>
|
||||
<top>20%</top>
|
||||
<control type="image">
|
||||
<description>Background box</description>
|
||||
<texture colordiffuse="ff111111">white.png</texture>
|
||||
<width>600</width>
|
||||
<height>480</height>
|
||||
</control>
|
||||
|
||||
<control type="group" id="202">
|
||||
<top>485</top>
|
||||
<visible>False</visible>
|
||||
<control type="image">
|
||||
<description>Error box</description>
|
||||
<texture colordiffuse="ff222222">white.png</texture>
|
||||
<width>100%</width>
|
||||
<height>50</height>
|
||||
</control>
|
||||
|
||||
<control type="label" id="203">
|
||||
<description>Error message</description>
|
||||
<textcolor>white</textcolor>
|
||||
<font>font10</font>
|
||||
<aligny>center</aligny>
|
||||
<align>center</align>
|
||||
<height>50</height>
|
||||
</control>
|
||||
</control>
|
||||
|
||||
<control type="image">
|
||||
<description>Emby logo</description>
|
||||
<texture>logo-white.png</texture>
|
||||
<aspectratio>keep</aspectratio>
|
||||
<width>120</width>
|
||||
<height>49</height>
|
||||
<top>30</top>
|
||||
<left>25</left>
|
||||
</control>
|
||||
|
||||
<control type="group">
|
||||
<width>500</width>
|
||||
<left>50</left>
|
||||
<control type="label">
|
||||
<description>Please sign in</description>
|
||||
<label>$ADDON[plugin.video.emby 30612]</label>
|
||||
<textcolor>white</textcolor>
|
||||
<font>font12</font>
|
||||
<aligny>top</aligny>
|
||||
<align>center</align>
|
||||
<width>100%</width>
|
||||
<top>100</top>
|
||||
</control>
|
||||
|
||||
<control type="group">
|
||||
<top>150</top>
|
||||
<control type="label">
|
||||
<description>Username</description>
|
||||
<label>$ADDON[plugin.video.emby 30024]</label>
|
||||
<textcolor>ffa6a6a6</textcolor>
|
||||
<font>font10</font>
|
||||
<aligny>top</aligny>
|
||||
</control>
|
||||
|
||||
<control type="image">
|
||||
<description>separator</description>
|
||||
<width>102%</width>
|
||||
<height>0.5</height>
|
||||
<top>66</top>
|
||||
<left>-10</left>
|
||||
<texture colordiffuse="ff525252" border="90,3,90,3">emby-separator.png</texture>
|
||||
</control>
|
||||
</control>
|
||||
|
||||
<control type="group">
|
||||
<description>Password</description>
|
||||
<top>225</top>
|
||||
<control type="label">
|
||||
<description>Password label</description>
|
||||
<label>$ADDON[plugin.video.emby 30602]</label>
|
||||
<textcolor>ffa6a6a6</textcolor>
|
||||
<font>font10</font>
|
||||
<aligny>top</aligny>
|
||||
</control>
|
||||
|
||||
<control type="image">
|
||||
<description>separator</description>
|
||||
<width>102%</width>
|
||||
<height>0.5</height>
|
||||
<top>66</top>
|
||||
<left>-10</left>
|
||||
<texture colordiffuse="ff525252" border="90,3,90,3">emby-separator.png</texture>
|
||||
</control>
|
||||
</control>
|
||||
|
||||
<control type="group">
|
||||
<description>Buttons</description>
|
||||
<top>335</top>
|
||||
<control type="button" id="200">
|
||||
<description>Sign in</description>
|
||||
<texturenofocus border="5" colordiffuse="ff0b8628">box.png</texturenofocus>
|
||||
<texturefocus border="5" colordiffuse="ff13a134">box.png</texturefocus>
|
||||
<label>[UPPERCASE][B]$ADDON[plugin.video.emby 30605][/B][/UPPERCASE]</label>
|
||||
<font>font10</font>
|
||||
<textcolor>ffa6a6a6</textcolor>
|
||||
<focusedcolor>white</focusedcolor>
|
||||
<align>center</align>
|
||||
<width>100%</width>
|
||||
<height>50</height>
|
||||
<ondown>201</ondown>
|
||||
</control>
|
||||
|
||||
<control type="button" id="201">
|
||||
<description>Cancel</description>
|
||||
<texturenofocus border="5" colordiffuse="ff464646">box.png</texturenofocus>
|
||||
<texturefocus border="5" colordiffuse="ff525252">box.png</texturefocus>
|
||||
<label>[UPPERCASE][B]$ADDON[plugin.video.emby 30606][/B][/UPPERCASE]</label>
|
||||
<font>font10</font>
|
||||
<textcolor>ffa6a6a6</textcolor>
|
||||
<focusedcolor>white</focusedcolor>
|
||||
<align>center</align>
|
||||
<width>100%</width>
|
||||
<height>50</height>
|
||||
<top>55</top>
|
||||
<onup>200</onup>
|
||||
</control>
|
||||
</control>
|
||||
</control>
|
||||
</control>
|
||||
</controls>
|
||||
</window>
|
|
@ -1,179 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<window>
|
||||
<defaultcontrol always="true">200</defaultcontrol>
|
||||
<zorder>0</zorder>
|
||||
<include>dialogeffect</include>
|
||||
<controls>
|
||||
<control type="image">
|
||||
<description>Background fade</description>
|
||||
<width>100%</width>
|
||||
<height>100%</height>
|
||||
<texture>emby-bg-fade.png</texture>
|
||||
</control>
|
||||
|
||||
<control type="group">
|
||||
<width>600</width>
|
||||
<left>35%</left>
|
||||
<top>15%</top>
|
||||
<control type="image">
|
||||
<description>Background box</description>
|
||||
<texture colordiffuse="ff111111">white.png</texture>
|
||||
<width>600</width>
|
||||
<height>700</height>
|
||||
</control>
|
||||
|
||||
<control type="group" id="202">
|
||||
<top>705</top>
|
||||
<visible>False</visible>
|
||||
<control type="image">
|
||||
<description>Error box</description>
|
||||
<texture colordiffuse="ff222222">white.png</texture>
|
||||
<width>100%</width>
|
||||
<height>50</height>
|
||||
</control>
|
||||
|
||||
<control type="label" id="203">
|
||||
<description>Error message</description>
|
||||
<textcolor>white</textcolor>
|
||||
<font>font10</font>
|
||||
<aligny>center</aligny>
|
||||
<align>center</align>
|
||||
<height>50</height>
|
||||
</control>
|
||||
</control>
|
||||
|
||||
<control type="image">
|
||||
<description>Emby logo</description>
|
||||
<texture>logo-white.png</texture>
|
||||
<width>160</width>
|
||||
<height>49</height>
|
||||
<top>30</top>
|
||||
<left>25</left>
|
||||
</control>
|
||||
|
||||
<control type="group">
|
||||
<width>500</width>
|
||||
<left>50</left>
|
||||
<control type="label">
|
||||
<description>Sign in emby connect</description>
|
||||
<label>$ADDON[plugin.video.emby 30600]</label>
|
||||
<textcolor>white</textcolor>
|
||||
<font>font12</font>
|
||||
<aligny>top</aligny>
|
||||
<top>115</top>
|
||||
</control>
|
||||
|
||||
<control type="group">
|
||||
<top>190</top>
|
||||
<control type="label">
|
||||
<description>Username email</description>
|
||||
<label>$ADDON[plugin.video.emby 30543]</label>
|
||||
<textcolor>ffa6a6a6</textcolor>
|
||||
<font>font10</font>
|
||||
<aligny>top</aligny>
|
||||
</control>
|
||||
|
||||
<control type="image">
|
||||
<description>separator</description>
|
||||
<width>102%</width>
|
||||
<height>0.5</height>
|
||||
<top>66</top>
|
||||
<left>-10</left>
|
||||
<texture colordiffuse="ff525252" border="90,3,90,3">emby-separator.png</texture>
|
||||
</control>
|
||||
</control>
|
||||
|
||||
<control type="group">
|
||||
<description>Password</description>
|
||||
<top>275</top>
|
||||
<control type="label">
|
||||
<description>Password label</description>
|
||||
<label>$ADDON[plugin.video.emby 30602]</label>
|
||||
<textcolor>ffa6a6a6</textcolor>
|
||||
<font>font10</font>
|
||||
<aligny>top</aligny>
|
||||
</control>
|
||||
|
||||
<control type="image">
|
||||
<description>separator</description>
|
||||
<width>102%</width>
|
||||
<height>0.5</height>
|
||||
<top>66</top>
|
||||
<left>-10</left>
|
||||
<texture colordiffuse="ff525252" border="90,3,90,3">emby-separator.png</texture>
|
||||
</control>
|
||||
</control>
|
||||
|
||||
<control type="group">
|
||||
<description>Buttons</description>
|
||||
<top>385</top>
|
||||
<control type="button" id="200">
|
||||
<description>Sign in</description>
|
||||
<texturenofocus border="5" colordiffuse="ff0b8628">box.png</texturenofocus>
|
||||
<texturefocus border="5" colordiffuse="ff13a134">box.png</texturefocus>
|
||||
<label>[UPPERCASE][B]$ADDON[plugin.video.emby 30605][/B][/UPPERCASE]</label>
|
||||
<font>font10</font>
|
||||
<textcolor>ffa6a6a6</textcolor>
|
||||
<focusedcolor>white</focusedcolor>
|
||||
<align>center</align>
|
||||
<width>100%</width>
|
||||
<height>50</height>
|
||||
<ondown>201</ondown>
|
||||
</control>
|
||||
|
||||
<control type="button" id="201">
|
||||
<description>Cancel</description>
|
||||
<texturenofocus border="5" colordiffuse="ff464646">box.png</texturenofocus>
|
||||
<texturefocus border="5" colordiffuse="ff525252">box.png</texturefocus>
|
||||
<label>[UPPERCASE][B]$ADDON[plugin.video.emby 30606][/B][/UPPERCASE]</label>
|
||||
<font>font10</font>
|
||||
<textcolor>ffa6a6a6</textcolor>
|
||||
<focusedcolor>white</focusedcolor>
|
||||
<align>center</align>
|
||||
<width>100%</width>
|
||||
<height>50</height>
|
||||
<top>55</top>
|
||||
<onup>200</onup>
|
||||
</control>
|
||||
</control>
|
||||
|
||||
<control type="group">
|
||||
<description>Disclaimer</description>
|
||||
<top>510</top>
|
||||
<control type="label">
|
||||
<description>Disclaimer label</description>
|
||||
<label>$ADDON[plugin.video.emby 30603]</label>
|
||||
<font>font10</font>
|
||||
<textcolor>ff464646</textcolor>
|
||||
<wrapmultiline>true</wrapmultiline>
|
||||
<aligny>top</aligny>
|
||||
<width>340</width>
|
||||
<height>100%</height>
|
||||
</control>
|
||||
|
||||
<control type="group">
|
||||
<control type="label">
|
||||
<description>Scan me</description>
|
||||
<label>[UPPERCASE]$ADDON[plugin.video.emby 30604][/UPPERCASE]</label>
|
||||
<font>font12</font>
|
||||
<textcolor>ff0b8628</textcolor>
|
||||
<aligny>top</aligny>
|
||||
<width>200</width>
|
||||
<top>120</top>
|
||||
<left>230</left>
|
||||
</control>
|
||||
|
||||
<control type="image">
|
||||
<description>qrcode</description>
|
||||
<texture>qrcode_disclaimer.png</texture>
|
||||
<width>140</width>
|
||||
<height>140</height>
|
||||
<top>10</top>
|
||||
<left>360</left>
|
||||
</control>
|
||||
</control>
|
||||
</control>
|
||||
</control>
|
||||
</control>
|
||||
</controls>
|
||||
</window>
|
|
@ -1,154 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<window>
|
||||
<defaultcontrol always="true">200</defaultcontrol>
|
||||
<zorder>0</zorder>
|
||||
<include>dialogeffect</include>
|
||||
<controls>
|
||||
<control type="image">
|
||||
<description>Background fade</description>
|
||||
<width>100%</width>
|
||||
<height>100%</height>
|
||||
<texture>emby-bg-fade.png</texture>
|
||||
</control>
|
||||
|
||||
<control type="group">
|
||||
<width>600</width>
|
||||
<left>35%</left>
|
||||
<top>20%</top>
|
||||
<control type="image">
|
||||
<description>Background box</description>
|
||||
<texture colordiffuse="ff111111">white.png</texture>
|
||||
<width>600</width>
|
||||
<height>525</height>
|
||||
</control>
|
||||
|
||||
<control type="group" id="202">
|
||||
<top>530</top>
|
||||
<visible>False</visible>
|
||||
<control type="image">
|
||||
<description>Error box</description>
|
||||
<texture colordiffuse="ff222222">white.png</texture>
|
||||
<width>100%</width>
|
||||
<height>50</height>
|
||||
</control>
|
||||
|
||||
<control type="label" id="203">
|
||||
<description>Error message</description>
|
||||
<textcolor>white</textcolor>
|
||||
<font>font10</font>
|
||||
<aligny>center</aligny>
|
||||
<align>center</align>
|
||||
<height>50</height>
|
||||
</control>
|
||||
</control>
|
||||
|
||||
<control type="image">
|
||||
<description>Emby logo</description>
|
||||
<texture>logo-white.png</texture>
|
||||
<aspectratio>keep</aspectratio>
|
||||
<width>120</width>
|
||||
<height>49</height>
|
||||
<top>30</top>
|
||||
<left>25</left>
|
||||
</control>
|
||||
|
||||
<control type="group">
|
||||
<width>500</width>
|
||||
<left>50</left>
|
||||
<control type="label">
|
||||
<description>Connect to server</description>
|
||||
<label>$ADDON[plugin.video.emby 30614]</label>
|
||||
<textcolor>white</textcolor>
|
||||
<font>font12</font>
|
||||
<aligny>top</aligny>
|
||||
<align>center</align>
|
||||
<width>100%</width>
|
||||
<top>100</top>
|
||||
</control>
|
||||
|
||||
<control type="group">
|
||||
<top>150</top>
|
||||
<control type="label">
|
||||
<description>Host</description>
|
||||
<label>$ADDON[plugin.video.emby 30615]</label>
|
||||
<textcolor>ffa6a6a6</textcolor>
|
||||
<font>font10</font>
|
||||
<aligny>top</aligny>
|
||||
</control>
|
||||
|
||||
<control type="image">
|
||||
<description>separator</description>
|
||||
<width>102%</width>
|
||||
<height>0.5</height>
|
||||
<top>66</top>
|
||||
<left>-10</left>
|
||||
<texture colordiffuse="ff525252" border="90,3,90,3">emby-separator.png</texture>
|
||||
</control>
|
||||
|
||||
<control type="label">
|
||||
<description>Host example</description>
|
||||
<label>192.168.1.100 or https://myserver.com</label>
|
||||
<textcolor>ff464646</textcolor>
|
||||
<font>font10</font>
|
||||
<aligny>top</aligny>
|
||||
<top>70</top>
|
||||
</control>
|
||||
</control>
|
||||
|
||||
<control type="group">
|
||||
<description>Port</description>
|
||||
<top>275</top>
|
||||
<control type="label">
|
||||
<description>Port label</description>
|
||||
<label>$ADDON[plugin.video.emby 30030]</label>
|
||||
<textcolor>ffa6a6a6</textcolor>
|
||||
<font>font10</font>
|
||||
<aligny>top</aligny>
|
||||
</control>
|
||||
|
||||
<control type="image">
|
||||
<description>separator</description>
|
||||
<width>102%</width>
|
||||
<height>0.5</height>
|
||||
<top>66</top>
|
||||
<left>-10</left>
|
||||
<texture colordiffuse="ff525252" border="90,3,90,3">emby-separator.png</texture>
|
||||
</control>
|
||||
</control>
|
||||
|
||||
<control type="group">
|
||||
<description>Buttons</description>
|
||||
<top>380</top>
|
||||
<control type="button" id="200">
|
||||
<description>Connect</description>
|
||||
<texturenofocus border="5" colordiffuse="ff0b8628">box.png</texturenofocus>
|
||||
<texturefocus border="5" colordiffuse="ff13a134">box.png</texturefocus>
|
||||
<label>[UPPERCASE][B]$ADDON[plugin.video.emby 30616][/B][/UPPERCASE]</label>
|
||||
<font>font10</font>
|
||||
<textcolor>ffa6a6a6</textcolor>
|
||||
<focusedcolor>white</focusedcolor>
|
||||
<align>center</align>
|
||||
<width>100%</width>
|
||||
<height>50</height>
|
||||
<ondown>201</ondown>
|
||||
</control>
|
||||
|
||||
<control type="button" id="201">
|
||||
<description>Cancel</description>
|
||||
<texturenofocus border="5" colordiffuse="ff464646">box.png</texturenofocus>
|
||||
<texturefocus border="5" colordiffuse="ff525252">box.png</texturefocus>
|
||||
<label>[UPPERCASE][B]$ADDON[plugin.video.emby 30606][/B][/UPPERCASE]</label>
|
||||
<font>font10</font>
|
||||
<textcolor>ffa6a6a6</textcolor>
|
||||
<focusedcolor>white</focusedcolor>
|
||||
<align>center</align>
|
||||
<width>100%</width>
|
||||
<height>50</height>
|
||||
<top>55</top>
|
||||
<onup>200</onup>
|
||||
</control>
|
||||
</control>
|
||||
</control>
|
||||
</control>
|
||||
</controls>
|
||||
</window>
|
|
@ -1,280 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<window>
|
||||
<defaultcontrol always="true">205</defaultcontrol>
|
||||
<zorder>0</zorder>
|
||||
<include>dialogeffect</include>
|
||||
<controls>
|
||||
<control type="image">
|
||||
<description>Background fade</description>
|
||||
<width>100%</width>
|
||||
<height>100%</height>
|
||||
<texture>emby-bg-fade.png</texture>
|
||||
</control>
|
||||
|
||||
<control type="group">
|
||||
<width>450</width>
|
||||
<left>38%</left>
|
||||
<top>15%</top>
|
||||
<control type="image">
|
||||
<description>Background box</description>
|
||||
<texture colordiffuse="ff111111">white.png</texture>
|
||||
<width>450</width>
|
||||
<height>710</height>
|
||||
</control>
|
||||
|
||||
<control type="image">
|
||||
<description>Emby logo</description>
|
||||
<texture>logo-white.png</texture>
|
||||
<aspectratio>keep</aspectratio>
|
||||
<width>120</width>
|
||||
<height>49</height>
|
||||
<top>30</top>
|
||||
<left>25</left>
|
||||
</control>
|
||||
|
||||
<control type="group">
|
||||
<description>User info</description>
|
||||
<top>70</top>
|
||||
<width>350</width>
|
||||
<left>50</left>
|
||||
<control type="image" id="150">
|
||||
<description>User image</description>
|
||||
<texture diffuse="user_image.png">userflyoutdefault.png</texture>
|
||||
<aspectratio>keep</aspectratio>
|
||||
<align>center</align>
|
||||
<width>100%</width>
|
||||
<height>70</height>
|
||||
<top>40</top>
|
||||
</control>
|
||||
|
||||
<control type="image" id="204">
|
||||
<description>Busy animation</description>
|
||||
<align>center</align>
|
||||
<top>23</top>
|
||||
<width>100%</width>
|
||||
<height>105</height>
|
||||
<visible>False</visible>
|
||||
<texture colordiffuse="ff13a134">fading_circle.png</texture>
|
||||
<aspectratio>keep</aspectratio>
|
||||
<animation effect="rotate" start="360" end="0" center="auto" time="2000" loop="true" condition="true">conditional</animation>
|
||||
</control>
|
||||
|
||||
<control type="label" id="151">
|
||||
<description>Welcome user</description>
|
||||
<textcolor>white</textcolor>
|
||||
<font>font12</font>
|
||||
<align>center</align>
|
||||
<aligny>top</aligny>
|
||||
<top>120</top>
|
||||
<width>100%</width>
|
||||
<height>50</height>
|
||||
</control>
|
||||
|
||||
<control type="image">
|
||||
<description>separator</description>
|
||||
<width>102%</width>
|
||||
<height>0.5</height>
|
||||
<top>165</top>
|
||||
<left>-10</left>
|
||||
<texture colordiffuse="ff525252" border="90,3,90,3">emby-separator.png</texture>
|
||||
</control>
|
||||
|
||||
<control type="label">
|
||||
<description>Select server</description>
|
||||
<textcolor>ffa6a6a6</textcolor>
|
||||
<label>$ADDON[plugin.video.emby 30607]</label>
|
||||
<font>font10</font>
|
||||
<align>center</align>
|
||||
<aligny>top</aligny>
|
||||
<top>170</top>
|
||||
<width>100%</width>
|
||||
<height>50</height>
|
||||
</control>
|
||||
</control>
|
||||
|
||||
<control type="group">
|
||||
<top>290</top>
|
||||
<width>100%</width>
|
||||
<height>184</height>
|
||||
<control type="list" id="155">
|
||||
<description>Connect servers</description>
|
||||
<focusposition>0</focusposition>
|
||||
<width>100%</width>
|
||||
<height>100%</height>
|
||||
<top>10</top>
|
||||
<left>55</left>
|
||||
<onup>155</onup>
|
||||
<ondown condition="Control.IsVisible(205)">205</ondown>
|
||||
<ondown condition="!Control.IsVisible(205)">206</ondown>
|
||||
<onleft condition="Control.IsVisible(205)">205</onleft>
|
||||
<onleft condition="!Control.IsVisible(205)">206</onleft>
|
||||
<onright>155</onright>
|
||||
<pagecontrol>60</pagecontrol>
|
||||
<scrolltime tween="sine" easing="out">250</scrolltime>
|
||||
<itemlayout height="46">
|
||||
<control type="group">
|
||||
<width>45</width>
|
||||
<height>45</height>
|
||||
<control type="image">
|
||||
<description>Network</description>
|
||||
<aspectratio>keep</aspectratio>
|
||||
<texture>network.png</texture>
|
||||
<visible>StringCompare(ListItem.Property(server_type),network)</visible>
|
||||
</control>
|
||||
<control type="image">
|
||||
<description>Wifi</description>
|
||||
<aspectratio>keep</aspectratio>
|
||||
<texture>wifi.png</texture>
|
||||
<visible>StringCompare(ListItem.Property(server_type),wifi)</visible>
|
||||
</control>
|
||||
</control>
|
||||
|
||||
<control type="label">
|
||||
<width>300</width>
|
||||
<height>40</height>
|
||||
<left>55</left>
|
||||
<font>font10</font>
|
||||
<aligny>center</aligny>
|
||||
<textcolor>ff838383</textcolor>
|
||||
<info>ListItem.Label</info>
|
||||
</control>
|
||||
</itemlayout>
|
||||
<focusedlayout height="46">
|
||||
<control type="group">
|
||||
<width>45</width>
|
||||
<height>45</height>
|
||||
<control type="image">
|
||||
<description>Network</description>
|
||||
<aspectratio>keep</aspectratio>
|
||||
<texture>network.png</texture>
|
||||
<visible>StringCompare(ListItem.Property(server_type),network)</visible>
|
||||
</control>
|
||||
<control type="image">
|
||||
<description>Wifi</description>
|
||||
<aspectratio>keep</aspectratio>
|
||||
<texture>wifi.png</texture>
|
||||
<visible>StringCompare(ListItem.Property(server_type),wifi)</visible>
|
||||
</control>
|
||||
</control>
|
||||
|
||||
<control type="label">
|
||||
<width>300</width>
|
||||
<height>40</height>
|
||||
<left>55</left>
|
||||
<font>font10</font>
|
||||
<aligny>center</aligny>
|
||||
<textcolor>white</textcolor>
|
||||
<info>ListItem.Label</info>
|
||||
<visible>Control.HasFocus(155)</visible>
|
||||
</control>
|
||||
<control type="label">
|
||||
<width>300</width>
|
||||
<height>40</height>
|
||||
<left>55</left>
|
||||
<font>font10</font>
|
||||
<aligny>center</aligny>
|
||||
<textcolor>ff838383</textcolor>
|
||||
<info>ListItem.Label</info>
|
||||
<visible>!Control.HasFocus(155)</visible>
|
||||
</control>
|
||||
</focusedlayout>
|
||||
</control>
|
||||
|
||||
<control type="scrollbar" id="60">
|
||||
<left>395</left>
|
||||
<top>10</top>
|
||||
<width>5</width>
|
||||
<height>100%</height>
|
||||
<onleft>155</onleft>
|
||||
<onup>60</onup>
|
||||
<ondown>60</ondown>
|
||||
<texturesliderbackground colordiffuse="ff000000" border="4">box.png</texturesliderbackground>
|
||||
<texturesliderbar colordiffuse="ff222222" border="4">box.png</texturesliderbar>
|
||||
<texturesliderbarfocus colordiffuse="ff222222" border="4">box.png</texturesliderbarfocus>
|
||||
<showonepage>false</showonepage>
|
||||
</control>
|
||||
|
||||
<control type="group">
|
||||
<top>100%</top>
|
||||
<height>220</height>
|
||||
<control type="group">
|
||||
<top>45</top>
|
||||
<height>150</height>
|
||||
<control type="button" id="205">
|
||||
<visible>True</visible>
|
||||
<description>Sign in Connect</description>
|
||||
<texturenofocus border="5" colordiffuse="ff0b8628">box.png</texturenofocus>
|
||||
<texturefocus border="5" colordiffuse="ff13a134">box.png</texturefocus>
|
||||
<label>[UPPERCASE][B]$ADDON[plugin.video.emby 30600][/B][/UPPERCASE]</label>
|
||||
<font>font10</font>
|
||||
<textcolor>ffa6a6a6</textcolor>
|
||||
<focusedcolor>white</focusedcolor>
|
||||
<align>center</align>
|
||||
<width>350</width>
|
||||
<height>50</height>
|
||||
<left>50</left>
|
||||
<onup>155</onup>
|
||||
<ondown>206</ondown>
|
||||
</control>
|
||||
|
||||
<control type="button" id="206">
|
||||
<description>Manually add server</description>
|
||||
<texturenofocus border="5" colordiffuse="ff464646">box.png</texturenofocus>
|
||||
<texturefocus border="5" colordiffuse="ff525252">box.png</texturefocus>
|
||||
<label>[UPPERCASE][B]$ADDON[plugin.video.emby 30611][/B][/UPPERCASE]</label>
|
||||
<font>font10</font>
|
||||
<textcolor>ffa6a6a6</textcolor>
|
||||
<focusedcolor>white</focusedcolor>
|
||||
<align>center</align>
|
||||
<top>55</top>
|
||||
<width>350</width>
|
||||
<height>50</height>
|
||||
<left>50</left>
|
||||
<onup condition="Control.IsVisible(205)">205</onup>
|
||||
<onup condition="!Control.IsVisible(205)">155</onup>
|
||||
<ondown>201</ondown>
|
||||
</control>
|
||||
|
||||
<control type="button" id="201">
|
||||
<description>Cancel</description>
|
||||
<texturenofocus border="5" colordiffuse="ff464646">box.png</texturenofocus>
|
||||
<texturefocus border="5" colordiffuse="ff525252">box.png</texturefocus>
|
||||
<label>[UPPERCASE][B]$ADDON[plugin.video.emby 30606][/B][/UPPERCASE]</label>
|
||||
<font>font10</font>
|
||||
<textcolor>ffa6a6a6</textcolor>
|
||||
<focusedcolor>white</focusedcolor>
|
||||
<align>center</align>
|
||||
<top>110</top>
|
||||
<width>350</width>
|
||||
<height>50</height>
|
||||
<left>50</left>
|
||||
<onup>206</onup>
|
||||
</control>
|
||||
</control>
|
||||
|
||||
<control type="group" id="202">
|
||||
<top>100%</top>
|
||||
<visible>False</visible>
|
||||
<control type="image">
|
||||
<description>Message box</description>
|
||||
<texture colordiffuse="ff222222">white.png</texture>
|
||||
<width>100%</width>
|
||||
<height>50</height>
|
||||
<top>20</top>
|
||||
</control>
|
||||
|
||||
<control type="label" id="203">
|
||||
<description>Message</description>
|
||||
<textcolor>white</textcolor>
|
||||
<font>font10</font>
|
||||
<aligny>center</aligny>
|
||||
<align>center</align>
|
||||
<height>50</height>
|
||||
<top>20</top>
|
||||
</control>
|
||||
</control>
|
||||
</control>
|
||||
</control>
|
||||
</control>
|
||||
</controls>
|
||||
</window>
|
|
@ -1,198 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<window>
|
||||
<defaultcontrol always="true">155</defaultcontrol>
|
||||
<zorder>0</zorder>
|
||||
<include>dialogeffect</include>
|
||||
<controls>
|
||||
<control type="image">
|
||||
<description>Background fade</description>
|
||||
<width>100%</width>
|
||||
<height>100%</height>
|
||||
<texture>emby-bg-fade.png</texture>
|
||||
</control>
|
||||
|
||||
<control type="group">
|
||||
<width>715</width>
|
||||
<left>32%</left>
|
||||
<top>20%</top>
|
||||
<control type="image">
|
||||
<description>Background box</description>
|
||||
<texture border="6" colordiffuse="ff111111">white.png</texture>
|
||||
<width>100%</width>
|
||||
<height>525</height>
|
||||
</control>
|
||||
|
||||
<control type="image">
|
||||
<description>Emby logo</description>
|
||||
<texture>logo-white.png</texture>
|
||||
<aspectratio>keep</aspectratio>
|
||||
<width>120</width>
|
||||
<height>49</height>
|
||||
<top>30</top>
|
||||
<left>25</left>
|
||||
</control>
|
||||
|
||||
<control type="label">
|
||||
<description>Please sign in</description>
|
||||
<label>$ADDON[plugin.video.emby 30612]</label>
|
||||
<textcolor>white</textcolor>
|
||||
<font>font12</font>
|
||||
<aligny>top</aligny>
|
||||
<align>center</align>
|
||||
<top>80</top>
|
||||
<width>100%</width>
|
||||
</control>
|
||||
|
||||
<control type="group">
|
||||
<top>100</top>
|
||||
<width>620</width>
|
||||
<height>245</height>
|
||||
<left>50</left>
|
||||
<control type="list" id="155">
|
||||
<description>Select User</description>
|
||||
<focusposition>0</focusposition>
|
||||
<width>100%</width>
|
||||
<top>40</top>
|
||||
<onleft>155</onleft>
|
||||
<onright>155</onright>
|
||||
<ondown>200</ondown>
|
||||
<pagecontrol>60</pagecontrol>
|
||||
<orientation>horizontal</orientation>
|
||||
<scrolltime tween="sine" easing="out">250</scrolltime>
|
||||
<itemlayout width="155">
|
||||
<control type="group">
|
||||
<width>150</width>
|
||||
<control type="image">
|
||||
<description>User image</description>
|
||||
<colordiffuse>ff888888</colordiffuse>
|
||||
<info>ListItem.Icon</info>
|
||||
<aspectratio>keep</aspectratio>
|
||||
<width>100%</width>
|
||||
<height>150</height>
|
||||
</control>
|
||||
|
||||
<control type="image">
|
||||
<description>Background label</description>
|
||||
<texture colordiffuse="ff222222">white.png</texture>
|
||||
<width>100%</width>
|
||||
<height>50</height>
|
||||
<top>150</top>
|
||||
</control>
|
||||
|
||||
<control type="label">
|
||||
<width>100%</width>
|
||||
<align>center</align>
|
||||
<height>50</height>
|
||||
<top>150</top>
|
||||
<font>font10</font>
|
||||
<textcolor>white</textcolor>
|
||||
<info>ListItem.Label</info>
|
||||
</control>
|
||||
</control>
|
||||
</itemlayout>
|
||||
<focusedlayout width="155">
|
||||
<control type="group">
|
||||
<width>150</width>
|
||||
<control type="image">
|
||||
<description>User image</description>
|
||||
<info>ListItem.Icon</info>
|
||||
<aspectratio>keep</aspectratio>
|
||||
<width>100%</width>
|
||||
<height>150</height>
|
||||
<visible>Control.HasFocus(155)</visible>
|
||||
</control>
|
||||
<control type="image">
|
||||
<description>User image</description>
|
||||
<colordiffuse>ff888888</colordiffuse>
|
||||
<info>ListItem.Icon</info>
|
||||
<aspectratio>keep</aspectratio>
|
||||
<width>100%</width>
|
||||
<height>150</height>
|
||||
<visible>!Control.HasFocus(155)</visible>
|
||||
</control>
|
||||
|
||||
<control type="image">
|
||||
<description>Background label</description>
|
||||
<texture colordiffuse="ff333333">white.png</texture>
|
||||
<width>100%</width>
|
||||
<height>50</height>
|
||||
<top>150</top>
|
||||
<visible>Control.HasFocus(155)</visible>
|
||||
</control>
|
||||
<control type="image">
|
||||
<description>Background label</description>
|
||||
<texture colordiffuse="ff222222">white.png</texture>
|
||||
<width>100%</width>
|
||||
<height>50</height>
|
||||
<top>150</top>
|
||||
<visible>!Control.HasFocus(155)</visible>
|
||||
</control>
|
||||
|
||||
<control type="label">
|
||||
<width>100%</width>
|
||||
<align>center</align>
|
||||
<height>50</height>
|
||||
<top>150</top>
|
||||
<font>font10</font>
|
||||
<textcolor>white</textcolor>
|
||||
<info>ListItem.Label</info>
|
||||
</control>
|
||||
</control>
|
||||
</focusedlayout>
|
||||
</control>
|
||||
|
||||
<control type="scrollbar" id="60">
|
||||
<top>100%</top>
|
||||
<width>615</width>
|
||||
<height>5</height>
|
||||
<onleft>155</onleft>
|
||||
<onleft>60</onleft>
|
||||
<onright>60</onright>
|
||||
<texturesliderbackground colordiffuse="ff000000" border="4">box.png</texturesliderbackground>
|
||||
<texturesliderbar colordiffuse="ff222222" border="4">box.png</texturesliderbar>
|
||||
<texturesliderbarfocus colordiffuse="ff222222" border="4">box.png</texturesliderbarfocus>
|
||||
<showonepage>false</showonepage>
|
||||
<orientation>horizontal</orientation>
|
||||
</control>
|
||||
|
||||
<control type="group">
|
||||
<width>615</width>
|
||||
<height>325</height>
|
||||
<top>100%</top>
|
||||
<control type="group">
|
||||
<control type="button" id="200">
|
||||
<description>Manual Login button</description>
|
||||
<texturenofocus border="5" colordiffuse="ff464646">box.png</texturenofocus>
|
||||
<texturefocus border="5" colordiffuse="ff585858">box.png</texturefocus>
|
||||
<label>[UPPERCASE][B]$ADDON[plugin.video.emby 30540][/B][/UPPERCASE]</label>
|
||||
<align>center</align>
|
||||
<width>100%</width>
|
||||
<height>50</height>
|
||||
<top>35</top>
|
||||
<font>font10</font>
|
||||
<textcolor>ffa6a6a6</textcolor>
|
||||
<focusedcolor>white</focusedcolor>
|
||||
<ondown>201</ondown>
|
||||
<onup>155</onup>
|
||||
</control>
|
||||
|
||||
<control type="button" id="201">
|
||||
<description>Cancel</description>
|
||||
<texturenofocus border="5" colordiffuse="ff464646">box.png</texturenofocus>
|
||||
<texturefocus border="5" colordiffuse="ff585858">box.png</texturefocus>
|
||||
<label>[UPPERCASE][B]$ADDON[plugin.video.emby 30606][/B][/UPPERCASE]</label>
|
||||
<font>font10</font>
|
||||
<textcolor>ffa6a6a6</textcolor>
|
||||
<focusedcolor>white</focusedcolor>
|
||||
<align>center</align>
|
||||
<width>100%</width>
|
||||
<height>50</height>
|
||||
<top>90</top>
|
||||
<onup>200</onup>
|
||||
</control>
|
||||
</control>
|
||||
</control>
|
||||
</control>
|
||||
</control>
|
||||
</controls>
|
||||
</window>
|
|
@ -8,7 +8,7 @@
|
|||
<description>Background fade</description>
|
||||
<width>100%</width>
|
||||
<height>100%</height>
|
||||
<texture>emby-bg-fade.png</texture>
|
||||
<texture>bg-fade.png</texture>
|
||||
</control>
|
||||
|
||||
<control type="group">
|
||||
|
@ -22,12 +22,12 @@
|
|||
</control>
|
||||
|
||||
<control type="image">
|
||||
<description>Emby logo</description>
|
||||
<texture>emby-icon.png</texture>
|
||||
<description>Plex logo</description>
|
||||
<texture>plex-logo.png</texture>
|
||||
<aspectratio>keep</aspectratio>
|
||||
<height>30</height>
|
||||
<height>34</height>
|
||||
<top>20</top>
|
||||
<left>370</left>
|
||||
<left>-285</left>
|
||||
</control>
|
||||
|
||||
<control type="image" id="150">
|
||||
|
@ -36,7 +36,7 @@
|
|||
<aspectratio>keep</aspectratio>
|
||||
<height>34</height>
|
||||
<top>20</top>
|
||||
<left>285</left>
|
||||
<left>370</left>
|
||||
</control>
|
||||
|
||||
<control type="image">
|
||||
|
@ -45,7 +45,7 @@
|
|||
<height>0.5</height>
|
||||
<top>70</top>
|
||||
<left>-5</left>
|
||||
<texture colordiffuse="ff484848" border="90,3,90,3">emby-separator.png</texture>
|
||||
<texture colordiffuse="ff484848" border="90,3,90,3">separator.png</texture>
|
||||
</control>
|
||||
|
||||
<control type="group">
|
Before Width: | Height: | Size: 194 B After Width: | Height: | Size: 194 B |
Before Width: | Height: | Size: 2 KiB |
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 54 KiB |
BIN
resources/skins/default/media/plex-logo.png
Normal file
After Width: | Height: | Size: 6 KiB |
Before Width: | Height: | Size: 7.5 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |