Plex playlist creation does not update hash; fix Kodi monitoring

This commit is contained in:
Croneter 2018-05-02 16:46:54 +02:00
parent 02e1917072
commit 2f25453fe2

View file

@ -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():