Plex playlist creation does not update hash; fix Kodi monitoring
This commit is contained in:
parent
02e1917072
commit
2f25453fe2
1 changed files with 49 additions and 25 deletions
|
@ -34,19 +34,15 @@ else:
|
||||||
ENCODING = sys.getdefaultencoding()
|
ENCODING = sys.getdefaultencoding()
|
||||||
|
|
||||||
|
|
||||||
def create_plex_playlist(playlist=None, path=None):
|
def create_plex_playlist(playlist):
|
||||||
"""
|
"""
|
||||||
Adds the playlist [Playlist_Object] to the PMS. If playlist.id is
|
Adds the playlist [Playlist_Object] to the PMS. If playlist.id is
|
||||||
not None the existing Plex playlist will be overwritten; otherwise a new
|
not None the existing Plex playlist will be overwritten; otherwise a new
|
||||||
playlist will be generated and stored accordingly in the playlist object.
|
playlist will be generated and stored accordingly in the playlist object.
|
||||||
|
|
||||||
Will also add (or modify an existing) Plex playlist table entry.
|
Will also add (or modify an existing) Plex playlist table entry.
|
||||||
|
Make sure that playlist.kodi_hash is set!
|
||||||
Returns None or raises PL.PlaylistError
|
Returns None or raises PL.PlaylistError
|
||||||
"""
|
"""
|
||||||
if not playlist:
|
|
||||||
playlist = PL.Playlist_Object()
|
|
||||||
playlist.kodi_path = path
|
|
||||||
LOG.info('Creating Plex playlist from Kodi file: %s', playlist.kodi_path)
|
LOG.info('Creating Plex playlist from Kodi file: %s', playlist.kodi_path)
|
||||||
plex_ids = _playlist_file_to_plex_ids(playlist)
|
plex_ids = _playlist_file_to_plex_ids(playlist)
|
||||||
if not plex_ids:
|
if not plex_ids:
|
||||||
|
@ -60,7 +56,7 @@ def create_plex_playlist(playlist=None, path=None):
|
||||||
PL.add_item_to_plex_playlist(playlist, plex_id=plex_id)
|
PL.add_item_to_plex_playlist(playlist, plex_id=plex_id)
|
||||||
except PL.PlaylistError:
|
except PL.PlaylistError:
|
||||||
continue
|
continue
|
||||||
update_plex_table(playlist, update_kodi_hash=True)
|
update_plex_table(playlist)
|
||||||
LOG.info('Done creating Plex playlist %s', playlist)
|
LOG.info('Done creating Plex playlist %s', playlist)
|
||||||
|
|
||||||
|
|
||||||
|
@ -348,19 +344,20 @@ def full_sync():
|
||||||
old_kodi_hashes.remove(kodi_hash)
|
old_kodi_hashes.remove(kodi_hash)
|
||||||
continue
|
continue
|
||||||
try:
|
try:
|
||||||
|
playlist = PL.Playlist_Object()
|
||||||
|
playlist.kodi_path = path
|
||||||
|
playlist.kodi_hash = kodi_hash
|
||||||
if playlist_2:
|
if playlist_2:
|
||||||
LOG.debug('Changed Kodi playlist %s detected: %s',
|
LOG.debug('Changed Kodi playlist %s detected: %s',
|
||||||
playlist_2.plex_name, path)
|
playlist_2.plex_name, path)
|
||||||
playlist = PL.Playlist_Object()
|
|
||||||
playlist.id = playlist_2.id
|
playlist.id = playlist_2.id
|
||||||
playlist.kodi_path = path
|
|
||||||
playlist.plex_name = playlist_2.plex_name
|
playlist.plex_name = playlist_2.plex_name
|
||||||
delete_plex_playlist(playlist_2)
|
delete_plex_playlist(playlist_2)
|
||||||
create_plex_playlist(playlist)
|
create_plex_playlist(playlist)
|
||||||
else:
|
else:
|
||||||
LOG.debug('New Kodi playlist detected: %s', path)
|
LOG.debug('New Kodi playlist detected: %s', path)
|
||||||
# Make sure that we delete any playlist with other hash
|
# Make sure that we delete any playlist with other hash
|
||||||
create_plex_playlist(path=path)
|
create_plex_playlist(playlist)
|
||||||
except PL.PlaylistError:
|
except PL.PlaylistError:
|
||||||
LOG.info('Skipping Kodi playlist %s', path)
|
LOG.info('Skipping Kodi playlist %s', path)
|
||||||
for kodi_hash in old_kodi_hashes:
|
for kodi_hash in old_kodi_hashes:
|
||||||
|
@ -405,36 +402,63 @@ class PlaylistEventhandler(FileSystemEventHandler):
|
||||||
LOG.debug('on_created: %s', event.src_path)
|
LOG.debug('on_created: %s', event.src_path)
|
||||||
playlist = PL.Playlist_Object()
|
playlist = PL.Playlist_Object()
|
||||||
playlist.kodi_path = event.src_path
|
playlist.kodi_path = event.src_path
|
||||||
create_plex_playlist(playlist)
|
playlist.kodi_hash = utils.generate_file_md5(event.src_path)
|
||||||
|
try:
|
||||||
|
create_plex_playlist(playlist)
|
||||||
|
except PL.PlaylistError:
|
||||||
|
pass
|
||||||
|
|
||||||
def on_deleted(self, event):
|
def on_deleted(self, event):
|
||||||
if not self._event_relevant(event):
|
if not self._event_relevant(event):
|
||||||
return
|
return
|
||||||
LOG.debug('on_deleted: %s', event.src_path)
|
LOG.debug('on_deleted: %s', event.src_path)
|
||||||
playlist = PL.Playlist_Object()
|
playlist = playlist_object_from_db(path=event.src_path)
|
||||||
playlist.kodi_path = event.src_path
|
if not playlist:
|
||||||
delete_plex_playlist(playlist)
|
LOG.error('Playlist not found in DB for path %s', event.src_path)
|
||||||
|
else:
|
||||||
|
delete_plex_playlist(playlist)
|
||||||
|
|
||||||
def on_modified(self, event):
|
def on_modified(self, event):
|
||||||
if not self._event_relevant(event):
|
if not self._event_relevant(event):
|
||||||
return
|
return
|
||||||
LOG.debug('on_modified: %s', event.src_path)
|
LOG.debug('on_modified: %s', event.src_path)
|
||||||
playlist = PL.Playlist_Object()
|
old_playlist = playlist_object_from_db(path=event.src_path)
|
||||||
playlist.kodi_path = event.src_path
|
new_playlist = PL.Playlist_Object()
|
||||||
delete_plex_playlist(playlist)
|
# Retain the name! Might've vom from Plex
|
||||||
create_plex_playlist(playlist)
|
new_playlist.plex_name = old_playlist.plex_name
|
||||||
|
new_playlist.kodi_path = event.src_path
|
||||||
|
new_playlist.kodi_hash = utils.generate_file_md5(event.src_path)
|
||||||
|
try:
|
||||||
|
if not old_playlist:
|
||||||
|
LOG.debug('Old playlist not found, creating a new one')
|
||||||
|
try:
|
||||||
|
create_plex_playlist(new_playlist)
|
||||||
|
except PL.PlaylistError:
|
||||||
|
pass
|
||||||
|
elif old_playlist.kodi_hash == new_playlist.kodi_hash:
|
||||||
|
LOG.debug('Old and new playlist are identical - nothing to do')
|
||||||
|
else:
|
||||||
|
delete_plex_playlist(old_playlist)
|
||||||
|
create_plex_playlist(new_playlist)
|
||||||
|
except PL.PlaylistError:
|
||||||
|
pass
|
||||||
|
|
||||||
def on_moved(self, event):
|
def on_moved(self, event):
|
||||||
if not self._event_relevant(event):
|
if not self._event_relevant(event):
|
||||||
return
|
return
|
||||||
LOG.debug('on_moved: %s to %s', event.src_path, event.dest_path)
|
LOG.debug('on_moved: %s to %s', event.src_path, event.dest_path)
|
||||||
playlist = PL.Playlist_Object()
|
old_playlist = playlist_object_from_db(path=event.src_path)
|
||||||
playlist.id = plex_id_from_playlist_path(event.src_path)
|
if not old_playlist:
|
||||||
if not playlist.id:
|
LOG.error('Did not have source path in the DB', event.src_path)
|
||||||
return
|
else:
|
||||||
playlist.kodi_path = event.dest_path
|
delete_plex_playlist(old_playlist)
|
||||||
change_plex_playlist_name(playlist, playlist.kodi_filename)
|
new_playlist = PL.Playlist_Object()
|
||||||
update_plex_table(playlist)
|
new_playlist.kodi_path = event.dest_path
|
||||||
|
new_playlist.kodi_hash = utils.generate_file_md5(event.dest_path)
|
||||||
|
try:
|
||||||
|
create_plex_playlist(new_playlist)
|
||||||
|
except PL.PlaylistError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
def kodi_playlist_monitor():
|
def kodi_playlist_monitor():
|
||||||
|
|
Loading…
Reference in a new issue