Merge pull request #910 from croneter/fix-playlists

Fix PKC creating thousands of playlists if a single Kodi playlist wasn't unique
This commit is contained in:
croneter 2019-06-28 16:47:34 +02:00 committed by GitHub
commit 5466bb759c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 17 additions and 13 deletions

View file

@ -42,4 +42,13 @@ def check_migration():
sections.clear_window_vars() sections.clear_window_vars()
sections.delete_videonode_files() sections.delete_videonode_files()
if not utils.compare_version(last_migration, '2.8.7'):
LOG.info('Migrating to version 2.8.6')
# Need to delete the UNIQUE index that prevents creating several
# playlist entries with the same kodi_hash
from .plex_db import PlexDB
with PlexDB() as plexdb:
plexdb.cursor.execute('DROP INDEX IF EXISTS ix_playlists_3')
# Index will be automatically recreated on next PKC startup
utils.settings('last_migrated_PKC_version', value=v.ADDON_VERSION) utils.settings('last_migrated_PKC_version', value=v.ADDON_VERSION)

View file

@ -47,15 +47,13 @@ def update_playlist(playlist, delete=False):
plexdb.add_playlist(playlist) plexdb.add_playlist(playlist)
def get_playlist(path=None, kodi_hash=None, plex_id=None): def get_playlist(path=None, plex_id=None):
""" """
Returns the playlist as a Playlist for either the plex_id, path or Returns the playlist as a Playlist for either the plex_id or path
kodi_hash. kodi_hash will be more reliable as it includes path and file
content.
""" """
playlist = Playlist() playlist = Playlist()
with PlexDB() as plexdb: with PlexDB() as plexdb:
playlist = plexdb.playlist(playlist, plex_id, path, kodi_hash) playlist = plexdb.playlist(playlist, plex_id, path)
return playlist return playlist

View file

@ -305,7 +305,7 @@ def initialize():
'CREATE INDEX IF NOT EXISTS ix_track_1 ON track (last_sync)', 'CREATE INDEX IF NOT EXISTS ix_track_1 ON track (last_sync)',
'CREATE UNIQUE INDEX IF NOT EXISTS ix_track_2 ON track (kodi_id)', 'CREATE UNIQUE INDEX IF NOT EXISTS ix_track_2 ON track (kodi_id)',
'CREATE UNIQUE INDEX IF NOT EXISTS ix_playlists_2 ON playlists (kodi_path)', 'CREATE UNIQUE INDEX IF NOT EXISTS ix_playlists_2 ON playlists (kodi_path)',
'CREATE UNIQUE INDEX IF NOT EXISTS ix_playlists_3 ON playlists (kodi_hash)', 'CREATE INDEX IF NOT EXISTS ix_playlists_3 ON playlists (kodi_hash)',
) )
for cmd in commands: for cmd in commands:
plexdb.cursor.execute(cmd) plexdb.cursor.execute(cmd)

View file

@ -57,20 +57,17 @@ class Playlists(object):
playlist.kodi_type, playlist.kodi_type,
playlist.kodi_hash)) playlist.kodi_hash))
def playlist(self, playlist, plex_id=None, path=None, kodi_hash=None): def playlist(self, playlist, plex_id=None, path=None):
""" """
Returns a complete Playlist (empty one passed in via playlist) Returns a complete Playlist (empty one passed in via playlist) for the
for the entry with plex_id OR kodi_hash OR kodi_path. entry with plex_id OR kodi_path.
Returns None if not found Returns None if not found
""" """
query = 'SELECT * FROM playlists WHERE %s = ? LIMIT 1' query = 'SELECT * FROM playlists WHERE %s = ? LIMIT 1'
if plex_id: if plex_id:
query = query % 'plex_id' query = query % 'plex_id'
var = plex_id var = plex_id
elif kodi_hash: elif path:
query = query % 'kodi_hash'
var = kodi_hash
else:
query = query % 'kodi_path' query = query % 'kodi_path'
var = path var = path
self.cursor.execute(query, (var, )) self.cursor.execute(query, (var, ))