Speed up sync with dedicated add_artwork method

This commit is contained in:
croneter 2018-11-09 07:56:10 +01:00
parent 096af4dc7c
commit 463d0540a4
4 changed files with 58 additions and 24 deletions

View file

@ -111,6 +111,9 @@ class Movie(ItemBase):
self.kodidb.modify_people(kodi_id, self.kodidb.modify_people(kodi_id,
v.KODI_TYPE_MOVIE, v.KODI_TYPE_MOVIE,
api.people_list()) api.people_list())
self.kodidb.modify_artwork(api.artwork(),
kodi_id,
v.KODI_TYPE_MOVIE)
else: else:
LOG.info("ADD movie plex_id: %s - %s", plex_id, title) LOG.info("ADD movie plex_id: %s - %s", plex_id, title)
rating_id = self.kodidb.get_ratingid(kodi_id, rating_id = self.kodidb.get_ratingid(kodi_id,
@ -134,6 +137,9 @@ class Movie(ItemBase):
self.kodidb.add_people(kodi_id, self.kodidb.add_people(kodi_id,
v.KODI_TYPE_MOVIE, v.KODI_TYPE_MOVIE,
api.people_list()) api.people_list())
self.kodidb.add_artwork(api.artwork(),
kodi_id,
v.KODI_TYPE_MOVIE)
# Update Kodi's main entry # Update Kodi's main entry
self.kodidb.add_movie(kodi_id, self.kodidb.add_movie(kodi_id,
@ -163,9 +169,7 @@ class Movie(ItemBase):
self.kodidb.modify_countries(kodi_id, v.KODI_TYPE_MOVIE, countries) self.kodidb.modify_countries(kodi_id, v.KODI_TYPE_MOVIE, countries)
self.kodidb.modify_genres(kodi_id, v.KODI_TYPE_MOVIE, genres) self.kodidb.modify_genres(kodi_id, v.KODI_TYPE_MOVIE, genres)
self.kodidb.modify_artwork(api.artwork(),
kodi_id,
v.KODI_TYPE_MOVIE)
self.kodidb.modify_streams(file_id, api.mediastreams(), runtime) self.kodidb.modify_streams(file_id, api.mediastreams(), runtime)
self.kodidb.modify_studios(kodi_id, v.KODI_TYPE_MOVIE, studios) self.kodidb.modify_studios(kodi_id, v.KODI_TYPE_MOVIE, studios)
tags = [section_name] tags = [section_name]

View file

@ -183,6 +183,9 @@ class Show(ItemBase, TvShowMixin):
self.kodidb.modify_people(kodi_id, self.kodidb.modify_people(kodi_id,
v.KODI_TYPE_SHOW, v.KODI_TYPE_SHOW,
api.people_list()) api.people_list())
self.kodidb.modify_artwork(api.artwork(),
kodi_id,
v.KODI_TYPE_SHOW)
# Update the tvshow entry # Update the tvshow entry
self.kodidb.update_show(api.title(), self.kodidb.update_show(api.title(),
api.plot(), api.plot(),
@ -220,6 +223,9 @@ class Show(ItemBase, TvShowMixin):
self.kodidb.add_people(kodi_id, self.kodidb.add_people(kodi_id,
v.KODI_TYPE_SHOW, v.KODI_TYPE_SHOW,
api.people_list()) api.people_list())
self.kodidb.add_artwork(api.artwork(),
kodi_id,
v.KODI_TYPE_SHOW)
# Create the tvshow entry # Create the tvshow entry
self.kodidb.add_show(kodi_id, self.kodidb.add_show(kodi_id,
api.title(), api.title(),
@ -233,9 +239,6 @@ class Show(ItemBase, TvShowMixin):
studio, studio,
api.sorttitle()) api.sorttitle())
self.kodidb.modify_genres(kodi_id, v.KODI_TYPE_SHOW, genres) self.kodidb.modify_genres(kodi_id, v.KODI_TYPE_SHOW, genres)
self.kodidb.modify_artwork(api.artwork(),
kodi_id,
v.KODI_TYPE_SHOW)
# Process studios # Process studios
self.kodidb.modify_studios(kodi_id, v.KODI_TYPE_SHOW, studios) self.kodidb.modify_studios(kodi_id, v.KODI_TYPE_SHOW, studios)
# Process tags: view, PMS collection tags # Process tags: view, PMS collection tags
@ -263,6 +266,11 @@ class Season(ItemBase, TvShowMixin):
LOG.error('Error getting plex_id for season, skipping: %s', LOG.error('Error getting plex_id for season, skipping: %s',
xml.attrib) xml.attrib)
return return
season = self.plexdb.season(plex_id)
if not season:
update_item = False
else:
update_item = True
show_id = api.parent_id() show_id = api.parent_id()
show = self.plexdb.show(show_id) show = self.plexdb.show(show_id)
if not show: if not show:
@ -280,10 +288,16 @@ class Season(ItemBase, TvShowMixin):
LOG.error('Still could not find parent tv show %s', show_id) LOG.error('Still could not find parent tv show %s', show_id)
return return
parent_id = show['kodi_id'] parent_id = show['kodi_id']
kodi_id = self.kodidb.add_season(parent_id, api.season_number()) if update_item:
kodi_id = season['kodi_id']
self.kodidb.modify_artwork(api.artwork(), self.kodidb.modify_artwork(api.artwork(),
kodi_id, kodi_id,
v.KODI_TYPE_SEASON) v.KODI_TYPE_SEASON)
else:
kodi_id = self.kodidb.add_season(parent_id, api.season_number())
self.kodidb.add_artwork(api.artwork(),
kodi_id,
v.KODI_TYPE_SEASON)
self.plexdb.add_season(plex_id=plex_id, self.plexdb.add_season(plex_id=plex_id,
checksum=api.checksum(), checksum=api.checksum(),
section_id=section_id, section_id=section_id,
@ -423,6 +437,9 @@ class Episode(ItemBase, TvShowMixin):
self.kodidb.modify_people(kodi_id, self.kodidb.modify_people(kodi_id,
v.KODI_TYPE_EPISODE, v.KODI_TYPE_EPISODE,
api.people_list()) api.people_list())
self.kodidb.modify_artwork(api.artwork(),
kodi_id,
v.KODI_TYPE_EPISODE)
self.kodidb.update_episode(api.title(), self.kodidb.update_episode(api.title(),
api.plot(), api.plot(),
ratingid, ratingid,
@ -465,6 +482,9 @@ class Episode(ItemBase, TvShowMixin):
self.kodidb.add_people(kodi_id, self.kodidb.add_people(kodi_id,
v.KODI_TYPE_EPISODE, v.KODI_TYPE_EPISODE,
api.people_list()) api.people_list())
self.kodidb.add_artwork(api.artwork(),
kodi_id,
v.KODI_TYPE_EPISODE)
self.kodidb.add_episode(kodi_id, self.kodidb.add_episode(kodi_id,
kodi_fileid, kodi_fileid,
api.title(), api.title(),
@ -485,9 +505,6 @@ class Episode(ItemBase, TvShowMixin):
parent_id, parent_id,
userdata['UserRating']) userdata['UserRating'])
self.kodidb.modify_artwork(api.artwork(),
kodi_id,
v.KODI_TYPE_EPISODE)
streams = api.mediastreams() streams = api.mediastreams()
self.kodidb.modify_streams(kodi_fileid, streams, api.runtime()) self.kodidb.modify_streams(kodi_fileid, streams, api.runtime())
self.kodidb.set_resume(kodi_fileid, self.kodidb.set_resume(kodi_fileid,

View file

@ -43,6 +43,24 @@ class KodiDBBase(object):
self.cursor.execute('SELECT url FROM art WHERE type == ?', self.cursor.execute('SELECT url FROM art WHERE type == ?',
(kodi_type, ))) (kodi_type, )))
def add_artwork(self, artworks, kodi_id, kodi_type):
"""
Pass in an artworks dict (see PlexAPI) to set an items artwork.
"""
for kodi_art, url in artworks.iteritems():
self.add_art(url, kodi_id, kodi_type, kodi_art)
def add_art(self, url, kodi_id, kodi_type, kodi_art):
"""
Adds or modifies the artwork of kind kodi_art (e.g. 'poster') in the
Kodi art table for item kodi_id/kodi_type. Will also cache everything
except actor portraits.
"""
self.cursor.execute('''
INSERT INTO art(media_id, media_type, type, url)
VALUES (?, ?, ?, ?)
''', (kodi_id, kodi_type, kodi_art, url))
def modify_artwork(self, artworks, kodi_id, kodi_type): def modify_artwork(self, artworks, kodi_id, kodi_type):
""" """
Pass in an artworks dict (see PlexAPI) to set an items artwork. Pass in an artworks dict (see PlexAPI) to set an items artwork.

View file

@ -725,11 +725,6 @@ class KodiVideoDB(common.KodiDBBase):
Adds a TV show season to the Kodi video DB or simply returns the ID, Adds a TV show season to the Kodi video DB or simply returns the ID,
if there already is an entry in the DB if there already is an entry in the DB
""" """
self.cursor.execute('SELECT idSeason FROM seasons WHERE idShow = ? AND season = ?',
(showid, seasonnumber,))
try:
seasonid = self.cursor.fetchone()[0]
except TypeError:
self.cursor.execute("SELECT COALESCE(MAX(idSeason),0) FROM seasons") self.cursor.execute("SELECT COALESCE(MAX(idSeason),0) FROM seasons")
seasonid = self.cursor.fetchone()[0] + 1 seasonid = self.cursor.fetchone()[0] + 1
self.cursor.execute(''' self.cursor.execute('''