def tvshows(self, library, dialog): ''' Process tvshows and episodes from a single library. ''' with self.library.database_lock: with Database() as videodb: with Database('emby') as embydb: obj = TVShows(self.server, embydb, videodb, self.direct_path, True) for items in server.get_items(library['Id'], "Series", False, self.sync['RestorePoint'].get('params')): self.sync['RestorePoint'] = items['RestorePoint'] start_index = items['RestorePoint']['params']['StartIndex'] for index, show in enumerate(items['Items']): percent = int((float(start_index + index) / float(items['TotalRecordCount']))*100) message = show['Name'] dialog.update(percent, heading="%s: %s" % (_('addon_name'), library['Name']), message=message) if obj.tvshow(show, library=library) != False: for episodes in server.get_episode_by_show(show['Id']): for episode in episodes['Items']: dialog.update(percent, message="%s/%s" % (message, episode['Name'][:10])) obj.episode(episode) if self.update_library: self.tvshows_compare(library, obj, embydb)
def tvshows(self, library, dialog): ''' Process tvshows and episodes from a single library. ''' processed_ids = [] for items in server.get_items(library['Id'], "Series", False, self.sync['RestorePoint'].get('params')): with self.video_database_locks() as (videodb, jellyfindb): obj = TVShows(self.server, jellyfindb, videodb, self.direct_path, True) self.sync['RestorePoint'] = items['RestorePoint'] start_index = items['RestorePoint']['params']['StartIndex'] for index, show in enumerate(items['Items']): percent = int((float(start_index + index) / float(items['TotalRecordCount'])) * 100) message = show['Name'] dialog.update(percent, heading="%s: %s" % (translate('addon_name'), library['Name']), message=message) if obj.tvshow(show, library=library) is not False: for episodes in server.get_episode_by_show(show['Id']): for episode in episodes['Items']: dialog.update(percent, message="%s/%s" % (message, episode['Name'][:10])) obj.episode(episode) processed_ids.append(show['Id']) with self.video_database_locks() as (videodb, jellyfindb): obj = TVShows(self.server, jellyfindb, videodb, self.direct_path, True) obj.item_ids = processed_ids if self.update_library: self.tvshows_compare(library, obj, jellyfindb)
def run(self): with self.lock, self.database as kodidb, Database( 'jellyfin') as jellyfindb: default_args = (self.server, jellyfindb, kodidb, self.direct_path) if kodidb.db_file == "video": movies = Movies(*default_args) tvshows = TVShows(*default_args) musicvideos = MusicVideos(*default_args) elif kodidb.db_file == "music": music = Music(*default_args) else: # this should not happen LOG.error('"{}" is not a valid Kodi library type.'.format( kodidb.db_file)) return while True: try: item = self.queue.get(timeout=1) except Queue.Empty: break try: LOG.debug('{} - {}'.format(item['Type'], item['Name'])) if item['Type'] == 'Movie': movies.movie(item) elif item['Type'] == 'BoxSet': movies.boxset(item) elif item['Type'] == 'Series': tvshows.tvshow(item) elif item['Type'] == 'Season': tvshows.season(item) elif item['Type'] == 'Episode': tvshows.episode(item) elif item['Type'] == 'MusicVideo': musicvideos.musicvideo(item) elif item['Type'] == 'MusicAlbum': music.album(item) elif item['Type'] == 'MusicArtist': music.artist(item) elif item['Type'] == 'AlbumArtist': music.albumartist(item) elif item['Type'] == 'Audio': music.song(item) if self.notify: self.notify_output.put( (item['Type'], api.API(item).get_naming())) except LibraryException as error: if error.status == 'StopCalled': break except Exception as error: LOG.exception(error) self.queue.task_done() if window('jellyfin_should_stop.bool'): break LOG.info("--<[ q:updated/%s ]", id(self)) self.is_done = True