Refactor where the ancestor check takes place

This commit is contained in:
Matt 2020-08-15 00:02:00 -04:00
parent 75ac8ef1b8
commit ae0dbc0400
5 changed files with 101 additions and 39 deletions

View file

@ -16,7 +16,7 @@ from full_sync import FullSync
from views import Views from views import Views
from downloader import GetItemWorker from downloader import GetItemWorker
from helper import translate, api, stop, settings, window, dialog, event from helper import translate, api, stop, settings, window, dialog, event
from helper.utils import split_list, set_screensaver, get_screensaver, find_library from helper.utils import split_list, set_screensaver, get_screensaver
from helper.exceptions import LibraryException from helper.exceptions import LibraryException
from jellyfin import Jellyfin from jellyfin import Jellyfin
from helper import LazyLogger from helper import LazyLogger
@ -605,39 +605,37 @@ class UpdateWorker(threading.Thread):
except Queue.Empty: except Queue.Empty:
break break
# Verify that the updated item is in our local whitelist default_args = (self.server, jellyfindb, kodidb, self.direct_path)
library = find_library(self.server, item) try:
if library: LOG.info('{} - {}'.format(item['Type'], item['Name']))
default_args = (self.server, jellyfindb, kodidb, self.direct_path, library) if item['Type'] == 'Movie':
try: Movies(*default_args).movie(item)
if item['Type'] == 'Movie': elif item['Type'] == 'BoxSet':
Movies(*default_args).movie(item) Movies(*default_args).boxset(item)
elif item['Type'] == 'BoxSet': elif item['Type'] == 'Series':
Movies(*default_args).boxset(item) TVShows(*default_args).tvshow(item)
elif item['Type'] == 'Series': elif item['Type'] == 'Season':
TVShows(*default_args).tvshow(item) TVShows(*default_args).season(item)
elif item['Type'] == 'Season': elif item['Type'] == 'Episode':
TVShows(*default_args).season(item) TVShows(*default_args).episode(item)
elif item['Type'] == 'Episode': elif item['Type'] == 'MusicVideo':
TVShows(*default_args).episode(item) MusicVideos(*default_args).musicvideo(item)
elif item['Type'] == 'MusicVideo': elif item['Type'] == 'MusicAlbum':
MusicVideos(*default_args).musicvideo(item) Music(*default_args).album(item)
elif item['Type'] == 'MusicAlbum': elif item['Type'] == 'MusicArtist':
Music(*default_args).album(item) Music(*default_args).artist(item)
elif item['Type'] == 'MusicArtist': elif item['Type'] == 'AlbumArtist':
Music(*default_args).artist(item) Music(*default_args).albumartist(item)
elif item['Type'] == 'AlbumArtist': elif item['Type'] == 'Audio':
Music(*default_args).albumartist(item) Music(*default_args).song(item)
elif item['Type'] == 'Audio':
Music(*default_args).song(item)
if self.notify: if self.notify:
self.notify_output.put((item['Type'], api.API(item).get_naming())) self.notify_output.put((item['Type'], api.API(item).get_naming()))
except LibraryException as error: except LibraryException as error:
if error.status == 'StopCalled': if error.status == 'StopCalled':
break break
except Exception as error: except Exception as error:
LOG.exception(error) LOG.exception(error)
self.queue.task_done() self.queue.task_done()

View file

@ -10,6 +10,7 @@ import downloader as server
from database import jellyfin_db, queries as QUEM from database import jellyfin_db, queries as QUEM
from helper import api, stop, validate, validate_bluray_dir, validate_dvd_dir, jellyfin_item, values, Local from helper import api, stop, validate, validate_bluray_dir, validate_dvd_dir, jellyfin_item, values, Local
from helper import LazyLogger from helper import LazyLogger
from helper.utils import find_library
from helper.exceptions import PathValidationException from helper.exceptions import PathValidationException
from .obj import Objects from .obj import Objects
@ -54,10 +55,20 @@ class Movies(KodiDb):
obj['MovieId'] = e_item[0] obj['MovieId'] = e_item[0]
obj['FileId'] = e_item[1] obj['FileId'] = e_item[1]
obj['PathId'] = e_item[2] obj['PathId'] = e_item[2]
obj['LibraryId'] = e_item[6]
obj['LibraryName'] = self.jellyfin_db.get_view_name(obj['LibraryId'])
except TypeError: except TypeError:
update = False update = False
LOG.debug("MovieId %s not found", obj['Id']) LOG.debug("MovieId %s not found", obj['Id'])
library = self.library or find_library(self.server, item)
if not library:
# This item doesn't belong to a whitelisted library
return
obj['MovieId'] = self.create_entry() obj['MovieId'] = self.create_entry()
obj['LibraryId'] = library['Id']
obj['LibraryName'] = library['Name']
else: else:
if self.get(*values(obj, QU.get_movie_obj)) is None: if self.get(*values(obj, QU.get_movie_obj)) is None:
@ -65,8 +76,6 @@ class Movies(KodiDb):
LOG.info("MovieId %s missing from kodi. repairing the entry.", obj['MovieId']) LOG.info("MovieId %s missing from kodi. repairing the entry.", obj['MovieId'])
obj['Path'] = API.get_file_path(obj['Path']) obj['Path'] = API.get_file_path(obj['Path'])
obj['LibraryId'] = self.library['Id']
obj['LibraryName'] = self.library['Name']
obj['Genres'] = obj['Genres'] or [] obj['Genres'] = obj['Genres'] or []
obj['Studios'] = [API.validate_studio(studio) for studio in (obj['Studios'] or [])] obj['Studios'] = [API.validate_studio(studio) for studio in (obj['Studios'] or [])]
obj['People'] = obj['People'] or [] obj['People'] = obj['People'] or []

View file

@ -8,6 +8,7 @@ import datetime
from database import jellyfin_db, queries as QUEM from database import jellyfin_db, queries as QUEM
from helper import api, stop, validate, jellyfin_item, values, Local from helper import api, stop, validate, jellyfin_item, values, Local
from helper import LazyLogger from helper import LazyLogger
from helper.utils import find_library
from helper.exceptions import PathValidationException from helper.exceptions import PathValidationException
from .obj import Objects from .obj import Objects
@ -50,9 +51,19 @@ class Music(KodiDb):
try: try:
obj['ArtistId'] = e_item[0] obj['ArtistId'] = e_item[0]
obj['LibraryId'] = e_item[6]
obj['LibraryName'] = self.jellyfin_db.get_view_name(obj['LibraryId'])
except TypeError: except TypeError:
update = False update = False
library = self.library or find_library(self.server, item)
if not library:
# This item doesn't belong to a whitelisted library
return
obj['ArtistId'] = None obj['ArtistId'] = None
obj['LibraryId'] = library['Id']
obj['LibraryName'] = library['Name']
LOG.debug("ArtistId %s not found", obj['Id']) LOG.debug("ArtistId %s not found", obj['Id'])
else: else:
if self.validate_artist(*values(obj, QU.get_artist_by_id_obj)) is None: if self.validate_artist(*values(obj, QU.get_artist_by_id_obj)) is None:
@ -60,8 +71,6 @@ class Music(KodiDb):
update = False update = False
LOG.info("ArtistId %s missing from kodi. repairing the entry.", obj['ArtistId']) LOG.info("ArtistId %s missing from kodi. repairing the entry.", obj['ArtistId'])
obj['LibraryId'] = self.library['Id']
obj['LibraryName'] = self.library['Name']
obj['LastScraped'] = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') obj['LastScraped'] = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
obj['ArtistType'] = "MusicArtist" obj['ArtistType'] = "MusicArtist"
obj['Genre'] = " / ".join(obj['Genres'] or []) obj['Genre'] = " / ".join(obj['Genres'] or [])
@ -116,9 +125,19 @@ class Music(KodiDb):
try: try:
obj['AlbumId'] = e_item[0] obj['AlbumId'] = e_item[0]
obj['LibraryId'] = e_item[6]
obj['LibraryName'] = self.jellyfin_db.get_view_name(obj['LibraryId'])
except TypeError: except TypeError:
update = False update = False
library = self.library or find_library(self.server, item)
if not library:
# This item doesn't belong to a whitelisted library
return
obj['AlbumId'] = None obj['AlbumId'] = None
obj['LibraryId'] = library['Id']
obj['LibraryName'] = library['Name']
LOG.debug("AlbumId %s not found", obj['Id']) LOG.debug("AlbumId %s not found", obj['Id'])
else: else:
if self.validate_album(*values(obj, QU.get_album_by_id_obj)) is None: if self.validate_album(*values(obj, QU.get_album_by_id_obj)) is None:
@ -224,9 +243,19 @@ class Music(KodiDb):
obj['SongId'] = e_item[0] obj['SongId'] = e_item[0]
obj['PathId'] = e_item[2] obj['PathId'] = e_item[2]
obj['AlbumId'] = e_item[3] obj['AlbumId'] = e_item[3]
obj['LibraryId'] = e_item[6]
obj['LibraryName'] = self.jellyfin_db.get_view_name(obj['LibraryId'])
except TypeError: except TypeError:
update = False update = False
library = self.library or find_library(self.server, item)
if not library:
# This item doesn't belong to a whitelisted library
return
obj['SongId'] = self.create_entry_song() obj['SongId'] = self.create_entry_song()
obj['LibraryId'] = library['Id']
obj['LibraryName'] = library['Name']
LOG.debug("SongId %s not found", obj['Id']) LOG.debug("SongId %s not found", obj['Id'])
else: else:
if self.validate_song(*values(obj, QU.get_song_by_id_obj)) is None: if self.validate_song(*values(obj, QU.get_song_by_id_obj)) is None:

View file

@ -12,6 +12,7 @@ from kodi_six.utils import py2_encode
from database import jellyfin_db, queries as QUEM from database import jellyfin_db, queries as QUEM
from helper import api, stop, validate, jellyfin_item, values, Local from helper import api, stop, validate, jellyfin_item, values, Local
from helper import LazyLogger from helper import LazyLogger
from helper.utils import find_library
from helper.exceptions import PathValidationException from helper.exceptions import PathValidationException
from .obj import Objects from .obj import Objects
@ -59,10 +60,20 @@ class MusicVideos(KodiDb):
obj['MvideoId'] = e_item[0] obj['MvideoId'] = e_item[0]
obj['FileId'] = e_item[1] obj['FileId'] = e_item[1]
obj['PathId'] = e_item[2] obj['PathId'] = e_item[2]
obj['LibraryId'] = e_item[6]
obj['LibraryName'] = self.jellyfin_db.get_view_name(obj['LibraryId'])
except TypeError: except TypeError:
update = False update = False
library = self.library or find_library(self.server, item)
if not library:
# This item doesn't belong to a whitelisted library
return
LOG.debug("MvideoId for %s not found", obj['Id']) LOG.debug("MvideoId for %s not found", obj['Id'])
obj['MvideoId'] = self.create_entry() obj['MvideoId'] = self.create_entry()
obj['LibraryId'] = library['Id']
obj['LibraryName'] = library['Name']
else: else:
if self.get(*values(obj, QU.get_musicvideo_obj)) is None: if self.get(*values(obj, QU.get_musicvideo_obj)) is None:

View file

@ -13,6 +13,7 @@ import downloader as server
from database import jellyfin_db, queries as QUEM from database import jellyfin_db, queries as QUEM
from helper import api, stop, validate, jellyfin_item, values, Local from helper import api, stop, validate, jellyfin_item, values, Local
from helper import LazyLogger from helper import LazyLogger
from helper.utils import find_library
from helper.exceptions import PathValidationException from helper.exceptions import PathValidationException
from .obj import Objects from .obj import Objects
@ -61,10 +62,20 @@ class TVShows(KodiDb):
try: try:
obj['ShowId'] = e_item[0] obj['ShowId'] = e_item[0]
obj['PathId'] = e_item[2] obj['PathId'] = e_item[2]
obj['LibraryId'] = e_item[6]
obj['LibraryName'] = self.jellyfin_db.get_view_name(obj['LibraryId'])
except TypeError: except TypeError:
update = False update = False
LOG.debug("ShowId %s not found", obj['Id']) LOG.debug("ShowId %s not found", obj['Id'])
library = self.library or find_library(self.server, item)
if not library:
# This item doesn't belong to a whitelisted library
return
obj['ShowId'] = self.create_entry() obj['ShowId'] = self.create_entry()
obj['LibraryId'] = library['Id']
obj['LibraryName'] = library['Name']
else: else:
if self.get(*values(obj, QU.get_tvshow_obj)) is None: if self.get(*values(obj, QU.get_tvshow_obj)) is None:
@ -72,8 +83,6 @@ class TVShows(KodiDb):
LOG.info("ShowId %s missing from kodi. repairing the entry.", obj['ShowId']) LOG.info("ShowId %s missing from kodi. repairing the entry.", obj['ShowId'])
obj['Path'] = API.get_file_path(obj['Path']) obj['Path'] = API.get_file_path(obj['Path'])
obj['LibraryId'] = self.library['Id']
obj['LibraryName'] = self.library['Name']
obj['Genres'] = obj['Genres'] or [] obj['Genres'] = obj['Genres'] or []
obj['People'] = obj['People'] or [] obj['People'] = obj['People'] or []
obj['Mpaa'] = API.get_mpaa(obj['Mpaa']) obj['Mpaa'] = API.get_mpaa(obj['Mpaa'])
@ -267,6 +276,12 @@ class TVShows(KodiDb):
except TypeError: except TypeError:
update = False update = False
LOG.debug("EpisodeId %s not found", obj['Id']) LOG.debug("EpisodeId %s not found", obj['Id'])
library = self.library or find_library(self.server, item)
if not library:
# This item doesn't belong to a whitelisted library
return
obj['EpisodeId'] = self.create_entry_episode() obj['EpisodeId'] = self.create_entry_episode()
else: else:
if self.get_episode(*values(obj, QU.get_episode_obj)) is None: if self.get_episode(*values(obj, QU.get_episode_obj)) is None: