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.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)

View file

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

View file

@ -305,7 +305,7 @@ def initialize():
'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_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:
plexdb.cursor.execute(cmd)

View file

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