Greatly speed up sync with dedicated add_people method
This commit is contained in:
parent
a16eae143a
commit
5f57b0af5f
3 changed files with 53 additions and 9 deletions
|
@ -108,6 +108,9 @@ class Movie(ItemBase):
|
|||
else:
|
||||
self.kodidb.remove_uniqueid(kodi_id, v.KODI_TYPE_MOVIE)
|
||||
uniqueid = -1
|
||||
self.kodidb.modify_people(kodi_id,
|
||||
v.KODI_TYPE_MOVIE,
|
||||
api.people_list())
|
||||
else:
|
||||
LOG.info("ADD movie plex_id: %s - %s", plex_id, title)
|
||||
rating_id = self.kodidb.get_ratingid(kodi_id,
|
||||
|
@ -128,6 +131,9 @@ class Movie(ItemBase):
|
|||
"imdb")
|
||||
else:
|
||||
uniqueid = -1
|
||||
self.kodidb.add_people(kodi_id,
|
||||
v.KODI_TYPE_MOVIE,
|
||||
api.people_list())
|
||||
|
||||
# Update Kodi's main entry
|
||||
self.kodidb.add_movie(kodi_id,
|
||||
|
@ -156,9 +162,6 @@ class Movie(ItemBase):
|
|||
userdata['UserRating'])
|
||||
|
||||
self.kodidb.modify_countries(kodi_id, v.KODI_TYPE_MOVIE, countries)
|
||||
self.kodidb.modify_people(kodi_id,
|
||||
v.KODI_TYPE_MOVIE,
|
||||
api.people_list())
|
||||
self.kodidb.modify_genres(kodi_id, v.KODI_TYPE_MOVIE, genres)
|
||||
self.kodidb.modify_artwork(api.artwork(),
|
||||
kodi_id,
|
||||
|
|
|
@ -180,6 +180,9 @@ class Show(ItemBase, TvShowMixin):
|
|||
else:
|
||||
self.kodidb.remove_uniqueid(kodi_id, v.KODI_TYPE_SHOW)
|
||||
uniqueid = -1
|
||||
self.kodidb.modify_people(kodi_id,
|
||||
v.KODI_TYPE_SHOW,
|
||||
api.people_list())
|
||||
# Update the tvshow entry
|
||||
self.kodidb.update_show(api.title(),
|
||||
api.plot(),
|
||||
|
@ -214,6 +217,9 @@ class Show(ItemBase, TvShowMixin):
|
|||
"unknown")
|
||||
else:
|
||||
uniqueid = -1
|
||||
self.kodidb.add_people(kodi_id,
|
||||
v.KODI_TYPE_SHOW,
|
||||
api.people_list())
|
||||
# Create the tvshow entry
|
||||
self.kodidb.add_show(kodi_id,
|
||||
api.title(),
|
||||
|
@ -226,9 +232,6 @@ class Show(ItemBase, TvShowMixin):
|
|||
api.content_rating(),
|
||||
studio,
|
||||
api.sorttitle())
|
||||
self.kodidb.modify_people(kodi_id,
|
||||
v.KODI_TYPE_SHOW,
|
||||
api.people_list())
|
||||
self.kodidb.modify_genres(kodi_id, v.KODI_TYPE_SHOW, genres)
|
||||
self.kodidb.modify_artwork(api.artwork(),
|
||||
kodi_id,
|
||||
|
@ -417,6 +420,9 @@ class Episode(ItemBase, TvShowMixin):
|
|||
api.provider('tvdb'),
|
||||
"tvdb",
|
||||
uniqueid)
|
||||
self.kodidb.modify_people(kodi_id,
|
||||
v.KODI_TYPE_EPISODE,
|
||||
api.people_list())
|
||||
self.kodidb.update_episode(api.title(),
|
||||
api.plot(),
|
||||
ratingid,
|
||||
|
@ -456,6 +462,9 @@ class Episode(ItemBase, TvShowMixin):
|
|||
v.KODI_TYPE_EPISODE,
|
||||
api.provider('tvdb'),
|
||||
"tvdb")
|
||||
self.kodidb.add_people(kodi_id,
|
||||
v.KODI_TYPE_EPISODE,
|
||||
api.people_list())
|
||||
self.kodidb.add_episode(kodi_id,
|
||||
kodi_fileid,
|
||||
api.title(),
|
||||
|
@ -476,9 +485,6 @@ class Episode(ItemBase, TvShowMixin):
|
|||
parent_id,
|
||||
userdata['UserRating'])
|
||||
|
||||
self.kodidb.modify_people(kodi_id,
|
||||
v.KODI_TYPE_EPISODE,
|
||||
api.people_list())
|
||||
self.kodidb.modify_artwork(api.artwork(),
|
||||
kodi_id,
|
||||
v.KODI_TYPE_EPISODE)
|
||||
|
|
|
@ -324,6 +324,41 @@ class KodiVideoDB(common.KodiDBBase):
|
|||
'tag',
|
||||
'tag_id')
|
||||
|
||||
def add_people(self, kodi_id, kodi_type, people):
|
||||
"""
|
||||
Makes sure that actors, directors and writers are recorded correctly
|
||||
for the elmement kodi_id, kodi_type.
|
||||
Will also delete a freshly orphaned actor entry.
|
||||
"""
|
||||
for kind, people_list in people.iteritems():
|
||||
self._add_people_kind(kodi_id, kodi_type, kind, people_list)
|
||||
|
||||
def _add_people_kind(self, kodi_id, kodi_type, kind, people_list):
|
||||
# Save new people to Kodi DB by iterating over the remaining entries
|
||||
if kind == 'actor':
|
||||
for person in people_list:
|
||||
# Make sure the person entry in table actor exists
|
||||
actor_id = self._get_actor_id(person[0], art_url=person[1])
|
||||
# Link the person with the media element
|
||||
try:
|
||||
self.cursor.execute('INSERT INTO actor_link VALUES (?, ?, ?, ?, ?)',
|
||||
(actor_id, kodi_id, kodi_type,
|
||||
person[2], person[3]))
|
||||
except IntegrityError:
|
||||
# With Kodi, an actor may have only one role, unlike Plex
|
||||
pass
|
||||
else:
|
||||
for person in people_list:
|
||||
# Make sure the person entry in table actor exists:
|
||||
actor_id = self._get_actor_id(person[0])
|
||||
# Link the person with the media element
|
||||
try:
|
||||
self.cursor.execute('INSERT INTO %s_link VALUES (?, ?, ?)' % kind,
|
||||
(actor_id, kodi_id, kodi_type))
|
||||
except IntegrityError:
|
||||
# Again, Kodi may have only one person assigned to a role
|
||||
pass
|
||||
|
||||
def modify_people(self, kodi_id, kodi_type, people=None):
|
||||
"""
|
||||
Makes sure that actors, directors and writers are recorded correctly
|
||||
|
|
Loading…
Reference in a new issue