diff --git a/README.md b/README.md index 6b5bb1a1..ba1b906f 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ -[![stable version](https://img.shields.io/badge/stable_version-2.7.2-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.7.2-red.svg?maxAge=60&style=flat) ](https://github.com/croneter/binary_repo/raw/master/beta/repository.plexkodiconnectbeta/repository.plexkodiconnectbeta-1.0.2.zip) +[![stable version](https://img.shields.io/badge/stable_version-2.7.3-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.7.3-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) diff --git a/addon.xml b/addon.xml index d82fd2ac..62650faa 100644 --- a/addon.xml +++ b/addon.xml @@ -1,5 +1,5 @@ - + @@ -77,7 +77,11 @@ Нативна інтеграція Plex в Kodi Підключає Kodi до серверу Plex. Цей плагін передбачає, що ви керуєте всіма своїми відео за допомогою Plex (і ніяк не Kodi). Ви можете втратити дані, які вже зберігаються у відео та музичних БД Kodi (оскільки цей плагін безпосередньо їх змінює). Використовуйте на свій страх і ризик! Використовуйте на свій ризик - version 2.7.2: + version 2.7.3: +- Fix PKC trying to initialize playqueues over and over again +- Fix PKC not starting due to a higher version Kodi database + +version 2.7.2: - Fix Kodi profile switch not working correctly and PKC not exiting cleanly version 2.7.1: diff --git a/changelog.txt b/changelog.txt index 0b208535..b674e916 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,7 @@ +version 2.7.3: +- Fix PKC trying to initialize playqueues over and over again +- Fix PKC not starting due to a higher version Kodi database + version 2.7.2: - Fix Kodi profile switch not working correctly and PKC not exiting cleanly diff --git a/resources/lib/playqueue.py b/resources/lib/playqueue.py index 3d35a983..929ccc75 100644 --- a/resources/lib/playqueue.py +++ b/resources/lib/playqueue.py @@ -5,6 +5,8 @@ Monitors the Kodi playqueue and adjusts the Plex playqueue accordingly """ from __future__ import absolute_import, division, unicode_literals from logging import getLogger +import copy + import xbmc from .plex_api import API @@ -97,11 +99,14 @@ class PlayqueueMonitor(backgroundthread.KillableThread): (playlist) are swapped. This is what this monitor is for. Don't replace this mechanism till Kodi's implementation of playlists has improved """ - def _compare_playqueues(self, playqueue, new): + def _compare_playqueues(self, playqueue, new_kodi_playqueue): """ Used to poll the Kodi playqueue and update the Plex playqueue if needed """ old = list(playqueue.items) + # We might append to new_kodi_playqueue but will need the original + # still back in the main loop + new = copy.deepcopy(new_kodi_playqueue) index = list(range(0, len(old))) LOG.debug('Comparing new Kodi playqueue %s with our play queue %s', new, old) diff --git a/resources/lib/variables.py b/resources/lib/variables.py index 6640ed18..cc55186b 100644 --- a/resources/lib/variables.py +++ b/resources/lib/variables.py @@ -3,7 +3,6 @@ from __future__ import absolute_import, division, unicode_literals import os import sys -import re import platform import xbmc @@ -99,50 +98,30 @@ PKC_MACHINE_IDENTIFIER = None # Minimal PKC version needed for the Kodi database - otherwise need to recreate MIN_DB_VERSION = '2.6.8' -# Supported databases +# Supported databases - version numbers in tuples should decrease SUPPORTED_VIDEO_DB = { # Kodi 17 Krypton: - 17: { - 107: 107, - }, + 17: (107, ), # Kodi 18 Leia: - 18: { - 113: 113, - 116: 116 - }, + 18: (116, 113), # Kodi 19 - EXTREMLY EXPERIMENTAL! - 19: { - 113: 113, - 116: 116 - } + 19: (116, 113) } SUPPORTED_MUSIC_DB = { # Kodi 17 Krypton: - 17: { - 60: 60, - }, + 17: (60, ), # Kodi 18 Leia: - 18: { - 72: 72, - }, + 18: (72, ), # Kodi 19 - EXTREMLY EXPERIMENTAL! - 19: { - 72: 72, - } + 19: (72, ) } SUPPORTED_TEXTURE_DB = { # Kodi 17 Krypton: - 17: { - 13: 13, - }, + 17: (13, ), # Kodi 18 Leia: - 18: { - 13: 13, - }, + 18: (13, ), # Kodi 19 - EXTREMLY EXPERIMENTAL! - 19: { - 13: 13, - } + 19: (13, ) } DB_VIDEO_VERSION = None DB_VIDEO_PATH = None @@ -590,57 +569,6 @@ PLEX_STREAM_TYPE_FROM_STREAM_TYPE = { 'subtitle': '3' } - -def database_paths(): - ''' - Set the Kodi database paths. Will raise a RuntimeError if the DBs are - not found or of a wrong, unsupported version - ''' - global DB_VIDEO_VERSION, DB_VIDEO_PATH - global DB_MUSIC_VERSION, DB_MUSIC_PATH - global DB_TEXTURE_VERSION, DB_TEXTURE_PATH - database_path = try_decode(xbmc.translatePath('special://database')) - video_versions = [] - music_versions = [] - texture_versions = [] - types = ( - (re.compile(r'''MyVideos(\d+).db'''), video_versions), - (re.compile(r'''MyMusic(\d+).db'''), music_versions), - (re.compile(r'''Textures(\d+).db'''), texture_versions) - ) - for root, _, files in path_ops.walk(database_path): - for file in files: - for typus in types: - match = typus[0].search(path_ops.path.join(root, file)) - if not match: - continue - typus[1].append(int(match.group(1))) - try: - DB_VIDEO_VERSION = max(video_versions) - SUPPORTED_VIDEO_DB[KODIVERSION][DB_VIDEO_VERSION] - DB_VIDEO_PATH = path_ops.path.join(database_path, - 'MyVideos%s.db' % DB_VIDEO_VERSION) - except (ValueError, KeyError): - raise RuntimeError('Video DB %s not supported' - % DB_VIDEO_VERSION) - try: - DB_MUSIC_VERSION = max(music_versions) - SUPPORTED_MUSIC_DB[KODIVERSION][DB_MUSIC_VERSION] - DB_MUSIC_PATH = path_ops.path.join(database_path, - 'MyMusic%s.db' % DB_MUSIC_VERSION) - except (ValueError, KeyError): - raise RuntimeError('Music DB %s not supported' - % DB_MUSIC_VERSION) - try: - DB_TEXTURE_VERSION = max(texture_versions) - SUPPORTED_TEXTURE_DB[KODIVERSION][DB_TEXTURE_VERSION] - DB_TEXTURE_PATH = path_ops.path.join(database_path, - 'Textures%s.db' % DB_TEXTURE_VERSION) - except (ValueError, KeyError): - raise RuntimeError('Texture DB %s not supported' - % DB_TEXTURE_VERSION) - - # Encoding to be used for our m3u playlist files # m3u files do not have encoding specified by definition, unfortunately. if DEVICE == 'Windows': @@ -651,3 +579,36 @@ else: M3U_ENCODING == 'ascii' or M3U_ENCODING == 'ANSI_X3.4-1968'): M3U_ENCODING = 'utf-8' + + +def database_paths(): + ''' + Set the Kodi database paths - PKC will choose the HIGHEST available and + supported database version for the current Kodi version. + Will raise a RuntimeError if the DBs are not found or of a wrong, + unsupported version + ''' + # Check Kodi version first + if KODIVERSION not in (17, 18, 19): + raise RuntimeError('Kodiversion %s not supported by PKC' % KODIVERSION) + + database_path = try_decode(xbmc.translatePath('special://database')) + thismodule = sys.modules[__name__] + types = (('MyVideos%s.db', SUPPORTED_VIDEO_DB, + 'DB_VIDEO_VERSION', 'DB_VIDEO_PATH'), + ('MyMusic%s.db', SUPPORTED_MUSIC_DB, + 'DB_MUSIC_VERSION', 'DB_MUSIC_PATH'), + ('Textures%s.db', SUPPORTED_TEXTURE_DB, + 'DB_TEXTURE_VERSION', 'DB_TEXTURE_PATH')) + for string, versions, actual_version, actual_path in types: + for version in versions[KODIVERSION]: + file = string % version + path = path_ops.path.join(database_path, file) + if path_ops.exists(path): + setattr(thismodule, actual_version, version) + setattr(thismodule, actual_path, path) + + if (DB_VIDEO_VERSION is None or + DB_MUSIC_VERSION is None or + DB_TEXTURE_VERSION is None): + raise RuntimeError('Kodi database versions not supported by PKC')