diff --git a/resources/language/resource.language.de_de/strings.po b/resources/language/resource.language.de_de/strings.po index 165a329c..94ca0bb3 100644 --- a/resources/language/resource.language.de_de/strings.po +++ b/resources/language/resource.language.de_de/strings.po @@ -6,7 +6,7 @@ # Wolfgang Petri , 2018 # sualfred , 2018 # Benni , 2019 -# +# msgid "" msgstr "" "Project-Id-Version: Jellyfin for Kodi\n" @@ -538,6 +538,10 @@ msgctxt "#33074" msgid "Are you sure you want to reset your local Kodi database?" msgstr "Möchtest du wirklich deine lokale Kodi Datenbank zurücksetzen?" +msgctxt "#33085" +msgid "Unable to reset Kodi database while sync is running" +msgstr "Kodi-Datenbank kann während der Synchronisierung nicht zurückgesetzt werden" + msgctxt "#33086" msgid "Remove all cached artwork?" msgstr "Alle zwischengespeicherten Bilder entfernen?" diff --git a/resources/language/resource.language.en_gb/strings.po b/resources/language/resource.language.en_gb/strings.po index 10c58d90..94f7cbed 100644 --- a/resources/language/resource.language.en_gb/strings.po +++ b/resources/language/resource.language.en_gb/strings.po @@ -514,6 +514,10 @@ msgctxt "#33074" msgid "Are you sure you want to reset your local Kodi database?" msgstr "" +msgctxt "#33085" +msgid "Unable to reset Kodi database while sync is running" +msgstr "" + msgctxt "#33086" msgid "Remove all cached artwork?" msgstr "" diff --git a/resources/language/resource.language.fr_fr/strings.po b/resources/language/resource.language.fr_fr/strings.po index 81c9047c..d8b9b595 100644 --- a/resources/language/resource.language.fr_fr/strings.po +++ b/resources/language/resource.language.fr_fr/strings.po @@ -4,7 +4,7 @@ # Addon Provider: angelblue05 # Translators: # Jean Fontaine , 2018 -# +# msgid "" msgstr "" "Project-Id-Version: Jellyfin for Kodi\n" @@ -538,6 +538,10 @@ msgid "Are you sure you want to reset your local Kodi database?" msgstr "" "Êtes-vous sûr de vouloir réinitialiser votre base de données Kodi locale ?" +msgctxt "#33085" +msgid "Unable to reset Kodi database while sync is running" +msgstr "Impossible de réinitialiser la base de données Kodi lorsque la synchronisation est en cours d'exécution" + msgctxt "#33086" msgid "Remove all cached artwork?" msgstr "Supprimer toutes les illustrations en cache ?" diff --git a/resources/language/resource.language.it_it/strings.po b/resources/language/resource.language.it_it/strings.po index ed73f169..29c091dc 100644 --- a/resources/language/resource.language.it_it/strings.po +++ b/resources/language/resource.language.it_it/strings.po @@ -4,7 +4,7 @@ # Addon Provider: angelblue05 # Translators: # EffeF, 2019 -# +# msgid "" msgstr "" "Project-Id-Version: Jellyfin for Kodi\n" @@ -536,6 +536,10 @@ msgctxt "#33074" msgid "Are you sure you want to reset your local Kodi database?" msgstr "Sei sicuro di voler resettare il tuo database Kodi locale?" +msgctxt "#33085" +msgid "Unable to reset Kodi database while sync is running" +msgstr "Impossibile ripristinare il database Kodi mentre la sincronizzazione è in esecuzione" + msgctxt "#33086" msgid "Remove all cached artwork?" msgstr "Rimuove tutte le artwork dalla cache?" diff --git a/resources/language/resource.language.nl_nl/strings.po b/resources/language/resource.language.nl_nl/strings.po index 393c5175..c1f9397c 100644 --- a/resources/language/resource.language.nl_nl/strings.po +++ b/resources/language/resource.language.nl_nl/strings.po @@ -534,6 +534,10 @@ msgctxt "#33074" msgid "Are you sure you want to reset your local Kodi database?" msgstr "Weet u zeker dat u de lokale Kodi databank resetten wilt?" +msgctxt "#33085" +msgid "Unable to reset Kodi database while sync is running" +msgstr "Kan Kodi-database niet opnieuw instellen terwijl synchronisatie wordt uitgevoerd" + msgctxt "#33086" msgid "Remove all cached artwork?" msgstr "Cached artwork verwijderen?" diff --git a/resources/language/resource.language.pl_pl/strings.po b/resources/language/resource.language.pl_pl/strings.po index 578e5f96..acb57728 100644 --- a/resources/language/resource.language.pl_pl/strings.po +++ b/resources/language/resource.language.pl_pl/strings.po @@ -4,7 +4,7 @@ # Addon Provider: angelblue05 # Translators: # Michał Sawicz , 2019 -# +# msgid "" msgstr "" "Project-Id-Version: Jellyfin for Kodi\n" @@ -538,6 +538,10 @@ msgctxt "#33074" msgid "Are you sure you want to reset your local Kodi database?" msgstr "Na pewno chcesz zresetować lokalną bazę Kodi?" +msgctxt "#33085" +msgid "Unable to reset Kodi database while sync is running" +msgstr "Nie można zresetować bazy danych Kodi podczas synchronizacji" + msgctxt "#33086" msgid "Remove all cached artwork?" msgstr "Usunąć pobrane grafiki?" diff --git a/resources/lib/client.py b/resources/lib/client.py index 44a4f041..1a32d343 100644 --- a/resources/lib/client.py +++ b/resources/lib/client.py @@ -16,11 +16,12 @@ from helper.utils import create_id ################################################################################################## LOG = logging.getLogger("JELLYFIN."+__name__) +ADDON_DATA = xbmc.translatePath("special://profile/addon_data/plugin.video.jellyfin/").decode('utf-8') ################################################################################################## def get_addon_name(): - + ''' Used for logging. ''' return xbmcaddon.Addon(addon_id()).getAddonInfo('name').upper() @@ -82,12 +83,7 @@ def get_device_id(reset=False): if client_id: return client_id - directory = xbmc.translatePath('special://profile/addon_data/plugin.video.jellyfin/').decode('utf-8') - - if not xbmcvfs.exists(directory): - xbmcvfs.mkdir(directory) - - jellyfin_guid = os.path.join(directory, "jellyfin_guid") + jellyfin_guid = os.path.join(ADDON_DATA, "jellyfin_guid") file_guid = xbmcvfs.File(jellyfin_guid) client_id = file_guid.read() diff --git a/resources/lib/database/__init__.py b/resources/lib/database/__init__.py index a1ee9e6d..4824f2e7 100644 --- a/resources/lib/database/__init__.py +++ b/resources/lib/database/__init__.py @@ -18,6 +18,7 @@ from objects import obj ################################################################################################# LOG = logging.getLogger("JELLYFIN."+__name__) +ADDON_DATA = xbmc.translatePath("special://profile/addon_data/plugin.video.jellyfin/").decode('utf-8') ################################################################################################# @@ -211,50 +212,37 @@ def reset(): from views import Views views = Views() - if not dialog("yesno", heading="{jellyfin}", line1=_(33074)): - return + if window('jellyfin_sync.bool'): + dialog("ok", heading="{jellyfin}", line1=_(33085)) + else: + if dialog("yesno", heading="{jellyfin}", line1=_(33074)): + reset_kodi() + reset_jellyfin() + views.delete_playlists() + views.delete_nodes() + LOG.info("[ reset kodi database ]") - window('jellyfin_should_stop.bool', True) - count = 10 + if dialog("yesno", heading="{jellyfin}", line1=_(33086)): + reset_artwork() - while window('jellyfin_sync.bool'): + if dialog("yesno", heading="{jellyfin}", line1=_(33087)): + xbmcvfs.delete(os.path.join(ADDON_DATA, "settings.xml")) + xbmcvfs.delete(os.path.join(ADDON_DATA, "data.json")) + LOG.info("[ reset settings ]") - LOG.info("Sync is running...") - count -= 1 + if xbmcvfs.exists(os.path.join(ADDON_DATA, "sync.json")): + xbmcvfs.delete(os.path.join(ADDON_DATA, "sync.json")) - if not count: - dialog("ok", heading="{jellyfin}", line1=_(33085)) + settings('enableMusic.bool', False) + settings('MinimumSetup', "") + settings('MusicRescan.bool', False) + settings('SyncInstallRunDone.bool', False) + dialog("ok", heading="{jellyfin}", line1=_(33088)) + xbmc.executebuiltin('RestartApp') + else: + pass - return - - if xbmc.Monitor().waitForAbort(1): - return - - reset_kodi() - reset_jellyfin() - views.delete_playlists() - views.delete_nodes() - - if dialog("yesno", heading="{jellyfin}", line1=_(33086)): - reset_artwork() - - addon_data = xbmc.translatePath("special://profile/addon_data/plugin.video.jellyfin/").decode('utf-8') - - if dialog("yesno", heading="{jellyfin}", line1=_(33087)): - - xbmcvfs.delete(os.path.join(addon_data, "settings.xml")) - xbmcvfs.delete(os.path.join(addon_data, "data.json")) - LOG.info("[ reset settings ]") - - if xbmcvfs.exists(os.path.join(addon_data, "sync.json")): - xbmcvfs.delete(os.path.join(addon_data, "sync.json")) - - settings('enableMusic.bool', False) - settings('MinimumSetup', "") - settings('MusicRescan.bool', False) - settings('SyncInstallRunDone.bool', False) - dialog("ok", heading="{jellyfin}", line1=_(33088)) - xbmc.executebuiltin('RestartApp') + return def reset_kodi(): @@ -278,7 +266,7 @@ def reset_kodi(): if name != 'version': musicdb.cursor.execute("DELETE FROM " + name) - LOG.warn("[ reset kodi ]") + LOG.info("[ reset kodi ]") def reset_jellyfin(): @@ -295,7 +283,7 @@ def reset_jellyfin(): jellyfindb.cursor.execute("DROP table IF EXISTS view") jellyfindb.cursor.execute("DROP table IF EXISTS version") - LOG.warn("[ reset jellyfin ]") + LOG.info("[ reset jellyfin ]") def reset_artwork(): @@ -322,17 +310,12 @@ def reset_artwork(): if name != 'version': texdb.cursor.execute("DELETE FROM " + name) - LOG.warn("[ reset artwork ]") + LOG.info("[ reset artwork ]") def get_sync(): - path = xbmc.translatePath("special://profile/addon_data/plugin.video.jellyfin/").decode('utf-8') - - if not xbmcvfs.exists(path): - xbmcvfs.mkdirs(path) - try: - with open(os.path.join(path, 'sync.json')) as infile: + with open(os.path.join(ADDON_DATA, 'sync.json')) as infile: sync = json.load(infile) except Exception: sync = {} @@ -346,36 +329,25 @@ def get_sync(): def save_sync(sync): - path = xbmc.translatePath("special://profile/addon_data/plugin.video.jellyfin/").decode('utf-8') - - if not xbmcvfs.exists(path): - xbmcvfs.mkdirs(path) - sync['Date'] = datetime.datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%SZ') - with open(os.path.join(path, 'sync.json'), 'w') as outfile: + with open(os.path.join(ADDON_DATA, 'sync.json'), 'w') as outfile: json.dump(sync, outfile, sort_keys=True, indent=4, ensure_ascii=False) def get_credentials(): - path = xbmc.translatePath("special://profile/addon_data/plugin.video.jellyfin/").decode('utf-8') - - if not xbmcvfs.exists(path): - xbmcvfs.mkdirs(path) - try: - with open(os.path.join(path, 'data.json')) as infile: + if os.path.exists(os.path.join(ADDON_DATA, 'data.json')): + pass + elif os.path.exists(os.path.join(ADDON_DATA, 'data.txt')): + os.rename(os.path.join(ADDON_DATA, 'data.txt'), os.path.join(ADDON_DATA, 'data.json')) + else: + open(os.path.join(ADDON_DATA, 'data.json'), 'a') + + with open(os.path.join(ADDON_DATA, 'data.json')) as infile: credentials = json.load(infile) except Exception: - - try: - with open(os.path.join(path, 'data.txt')) as infile: - credentials = json.load(infile) - save_credentials(credentials) - - xbmcvfs.delete(os.path.join(path, 'data.txt')) - except Exception: - credentials = {} + credentials = {} credentials['Servers'] = credentials.get('Servers', []) @@ -383,12 +355,8 @@ def get_credentials(): def save_credentials(credentials): credentials = credentials or {} - path = xbmc.translatePath("special://profile/addon_data/plugin.video.jellyfin/").decode('utf-8') - if not xbmcvfs.exists(path): - xbmcvfs.mkdirs(path) - - with open(os.path.join(path, 'data.json'), 'w') as outfile: + with open(os.path.join(ADDON_DATA, 'data.json'), 'w') as outfile: json.dump(credentials, outfile, sort_keys=True, indent=4, ensure_ascii=False) def get_item(kodi_id, media): diff --git a/resources/lib/library.py b/resources/lib/library.py index a33a6407..9d46390f 100644 --- a/resources/lib/library.py +++ b/resources/lib/library.py @@ -22,7 +22,7 @@ from jellyfin import Jellyfin ################################################################################################## -LOG = logging.getLogger("JELLYFIN."+__name__) +LOG = logging.getLogger("JELLYFIN." + __name__) LIMIT = min(int(settings('limitIndex') or 50), 50) DTHREADS = int(settings('limitThreads') or 3) MEDIA = { @@ -96,7 +96,7 @@ class Library(threading.Thread): def run(self): - LOG.warn("--->[ library ]") + LOG.info("--->[ library ]") if not self.startup(): self.stop_client() @@ -117,7 +117,7 @@ class Library(threading.Thread): if self.monitor.waitForAbort(2): break - LOG.warn("---<[ library ]") + LOG.info("---<[ library ]") def test_databases(self): diff --git a/resources/lib/monitor.py b/resources/lib/monitor.py index 9e6b9c39..b52d3984 100644 --- a/resources/lib/monitor.py +++ b/resources/lib/monitor.py @@ -22,7 +22,7 @@ from webservice import WebService ################################################################################################# -LOG = logging.getLogger("JELLYFIN."+__name__) +LOG = logging.getLogger("JELLYFIN." + __name__) ################################################################################################# @@ -449,7 +449,7 @@ class Listener(threading.Thread): ''' Detect the resume dialog for widgets. Detect external players. ''' - LOG.warn("--->[ listener ]") + LOG.info("--->[ listener ]") while not self.stop_thread: special_listener() diff --git a/resources/lib/player.py b/resources/lib/player.py index 712c9bb9..29498108 100644 --- a/resources/lib/player.py +++ b/resources/lib/player.py @@ -15,7 +15,7 @@ from jellyfin import Jellyfin ################################################################################################# -LOG = logging.getLogger("JELLYFIN."+__name__) +LOG = logging.getLogger("JELLYFIN." + __name__) ################################################################################################# diff --git a/resources/lib/setup.py b/resources/lib/setup.py index 001161ad..7e2c0307 100644 --- a/resources/lib/setup.py +++ b/resources/lib/setup.py @@ -10,7 +10,7 @@ from helper import _, settings, dialog, JSONRPC, compare_version ################################################################################################# -LOG = logging.getLogger("JELLYFIN."+__name__) +LOG = logging.getLogger("JELLYFIN." + __name__) ################################################################################################# diff --git a/service.py b/service.py index ac26a5e3..1142cb05 100644 --- a/service.py +++ b/service.py @@ -9,6 +9,7 @@ import sys import xbmc import xbmcaddon +import xbmcvfs ################################################################################################# @@ -27,6 +28,7 @@ from helper import settings ################################################################################################# LOG = logging.getLogger("JELLYFIN." + __name__) +ADDON_DATA = xbmc.translatePath("special://profile/addon_data/plugin.video.jellyfin/").decode('utf-8') DELAY = int(settings('startupDelay') if settings('SyncInstallRunDone.bool') else 4 or 0) ################################################################################################# @@ -71,26 +73,29 @@ if __name__ == "__main__": LOG.info("-->[ service ]") LOG.info("Delay startup by %s seconds.", DELAY) + if not xbmcvfs.exists(ADDON_DATA): + xbmcvfs.mkdirs(ADDON_DATA) + while True: - if not settings('enableAddon.bool'): - LOG.warn("Jellyfin for Kodi is not enabled.") + if settings('enableAddon.bool'): + try: + + session = ServiceManager() + session.start() + session.join() # Block until the thread exits. + + if 'RestartService' in session.exception: + continue + + except Exception as error: + ''' Issue initializing the service. + ''' + LOG.exception(error) break - - try: - session = ServiceManager() - session.start() - session.join() # Block until the thread exits. - - if 'RestartService' in session.exception: - continue - - except Exception as error: - ''' Issue initializing the service. - ''' - LOG.exception(error) - - break + else: + LOG.warn("Jellyfin for Kodi is not enabled.") + break LOG.info("--<[ service ]")