Generators

For music
This commit is contained in:
angelblue05 2018-03-15 05:32:56 -05:00
parent 7ded39d580
commit a2fb25a922
3 changed files with 46 additions and 13 deletions

View file

@ -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:

View file

@ -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()

View file

@ -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,7 +152,7 @@ class Music(Items):
for item in self.added(items, total):
if self.add_updateArtist(item):
# Add albums
all_albums = self.emby.getAlbumsbyArtist(item['Id'])
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,7 +164,7 @@ class Music(Items):
if self.add_updateAlbum(item):
# Add songs
all_songs = self.emby.getSongsbyAlbum(item['Id'])
for all_songs in mb.get_items(item['Id'], "Audio"):
self.add_songs(all_songs['Items'])
def add_songs(self, items, total=None):