From a2fb25a922a2bc8322e16b6051e97a889efa32b1 Mon Sep 17 00:00:00 2001 From: angelblue05 Date: Thu, 15 Mar 2018 05:32:56 -0500 Subject: [PATCH] Generators For music --- resources/lib/emby.py | 41 +++++++++++++++++++++++++++++----- resources/lib/librarysync.py | 7 +++--- resources/lib/objects/music.py | 11 ++++----- 3 files changed, 46 insertions(+), 13 deletions(-) diff --git a/resources/lib/emby.py b/resources/lib/emby.py index c7fc6ee1..70298f43 100644 --- a/resources/lib/emby.py +++ b/resources/lib/emby.py @@ -88,7 +88,7 @@ def show(handler, params): ################################################################################################# -# Single item functions +# Single result functions ################################################################################################# @@ -107,7 +107,7 @@ def get_seasons(self, show_id): ################################################################################################# -# Get multiple items (Generator) +# Multiple calls to get multiple items (Generator) ''' This should help with memory issues. for items in generator(...): @@ -119,7 +119,7 @@ def get_seasons(self, show_id): ################################################################################################# -def get_items(parent_id, item_type, basic=False): +def get_items(parent_id, item_type=None, basic=False, params=None): query = { 'url': "Users/{UserId}/Items", @@ -127,9 +127,14 @@ def get_items(parent_id, item_type, basic=False): 'ParentId': parent_id, 'IncludeItemTypes': item_type, 'SortBy': "SortName", + 'SortOrder': "Ascending", 'Fields': basic_info() if basic else complete_info() } } + + if params: + query['params'].update(params) + for items in _get_items(query): yield items @@ -146,6 +151,33 @@ def get_item_list(item_list, basic=False): for items in _get_items(query): yield items +def get_artists(parent_id=None): + + query = { + 'url': "Artists?UserId={UserId}", + 'params': { + 'ParentId': parent_id, + 'SortBy': "SortName", + 'SortOrder': "Ascending", + 'Fields': ( + "Etag,Genres,SortName,Studios,Writer,ProductionYear," + "CommunityRating,OfficialRating,CumulativeRunTimeTicks,Metascore," + "AirTime,DateCreated,MediaStreams,People,ProviderIds,Overview,ItemCounts" + ) + } + } + for items in _get_items(query): + yield items + +def get_albums_by_artist(artist_id): + + params = { + 'SortBy': "DateCreated", + 'ArtistIds': artist_id + } + for items in get_items(None, "MusicAlbum", params=params): + yield items + def _split_list(item_list, size): # Split up list in pieces of size. Will generate a list of lists return [item_list[i:i + size] for i in range(0, len(item_list), size)] @@ -171,8 +203,7 @@ def _get_items(query): 'EnableTotalRecordCount': False, 'LocationTypes': "FileSystem,Remote,Offline", 'IsMissing': False, - 'Recursive': True, - 'SortOrder': "Ascending" + 'Recursive': True }) try: diff --git a/resources/lib/librarysync.py b/resources/lib/librarysync.py index 010b8f5a..1918b6c1 100644 --- a/resources/lib/librarysync.py +++ b/resources/lib/librarysync.py @@ -490,8 +490,9 @@ class LibrarySync(threading.Thread): message="%s Music..." % lang(33021)) for view in views: - all_artists = self.emby.getArtists(view['id'], dialog=pdialog) - music.add_all("MusicArtist", all_artists) + + for all_artists in mb.get_artists(view['id']): + music.add_all("MusicArtist", all_artists['Items']) log.debug("Finished syncing music") @@ -748,7 +749,7 @@ class LibrarySync(threading.Thread): self.incremental_count = 0 window('emby_kodiScan', clear=True) - if ((not xbmc.Player().isPlaying() or xbmc.getCondVisibility('VideoPlayer.Content(livetv)')) and + if ((not xbmc.Player().isPlayingVideo() or xbmc.getCondVisibility('VideoPlayer.Content(livetv)')) and window('emby_dbScan') != "true" and window('emby_shouldStop') != "true"): self.incrementalSync() diff --git a/resources/lib/objects/music.py b/resources/lib/objects/music.py index 32ab63e4..ce803bfb 100644 --- a/resources/lib/objects/music.py +++ b/resources/lib/objects/music.py @@ -6,6 +6,7 @@ import logging from datetime import datetime import api +import emby as mb import embydb_functions as embydb import musicutils import _kodi_music @@ -89,7 +90,7 @@ class Music(Items): artists = dict(self.emby_db.get_checksum('MusicArtist')) album_artists = dict(self.emby_db.get_checksum('AlbumArtist')) - emby_artists = self.emby.getArtists(dialog=self.pdialog) + emby_artists = (items['Items'] for items in mb.get_artists()) for item in emby_artists['Items']: @@ -151,8 +152,8 @@ class Music(Items): for item in self.added(items, total): if self.add_updateArtist(item): # Add albums - all_albums = self.emby.getAlbumsbyArtist(item['Id']) - self.add_albums(all_albums['Items']) + for all_albums in mb.get_albums_by_artist(item['Id']): + self.add_albums(all_albums['Items']) def add_albums(self, items, total=None): @@ -163,8 +164,8 @@ class Music(Items): if self.add_updateAlbum(item): # Add songs - all_songs = self.emby.getSongsbyAlbum(item['Id']) - self.add_songs(all_songs['Items']) + for all_songs in mb.get_items(item['Id'], "Audio"): + self.add_songs(all_songs['Items']) def add_songs(self, items, total=None):