mirror of
https://github.com/jellyfin/jellyfin-kodi.git
synced 2024-11-10 04:06:11 +00:00
Optimize network calls for music syncing
This commit is contained in:
parent
da21f49928
commit
5f34222712
2 changed files with 81 additions and 44 deletions
|
@ -189,16 +189,16 @@ def get_items(parent_id, item_type=None, basic=False, params=None):
|
|||
yield items
|
||||
|
||||
|
||||
def get_artists(parent_id=None, basic=False, params=None, server_id=None):
|
||||
def get_artists(parent_id=None):
|
||||
|
||||
query = {
|
||||
'url': "Artists",
|
||||
'params': {
|
||||
url = "Artists"
|
||||
|
||||
params = {
|
||||
'UserId': "{UserId}",
|
||||
'ParentId': parent_id,
|
||||
'SortBy': "SortName",
|
||||
'SortOrder': "Ascending",
|
||||
'Fields': api.basic_info() if basic else api.music_info(),
|
||||
'Fields': api.music_info(),
|
||||
'CollapseBoxSetItems': False,
|
||||
'IsVirtualUnaired': False,
|
||||
'EnableTotalRecordCount': False,
|
||||
|
@ -206,14 +206,23 @@ def get_artists(parent_id=None, basic=False, params=None, server_id=None):
|
|||
'IsMissing': False,
|
||||
'Recursive': True
|
||||
}
|
||||
|
||||
return _get(url, params)
|
||||
|
||||
|
||||
def get_library_items(library_id, item_type):
|
||||
url = "Users/{UserId}/Items"
|
||||
|
||||
params = {
|
||||
'ParentId': library_id,
|
||||
'IncludeItemTypes': item_type,
|
||||
'SortBy': "SortName",
|
||||
'SortOrder': "Ascending",
|
||||
'Fields': api.info(),
|
||||
'Recursive': True,
|
||||
}
|
||||
|
||||
if params:
|
||||
query['params'].update(params)
|
||||
|
||||
for items in _get_items(query, server_id):
|
||||
yield items
|
||||
|
||||
return _get(url, params)
|
||||
|
||||
def get_albums_by_artist(artist_id, basic=False):
|
||||
|
||||
|
|
|
@ -407,36 +407,64 @@ class FullSync(object):
|
|||
with Database('jellyfin') as jellyfindb:
|
||||
obj = Music(self.server, jellyfindb, musicdb, self.direct_path)
|
||||
|
||||
for items in server.get_artists(library['Id'], False, self.sync['RestorePoint'].get('params')):
|
||||
library_id = library['Id']
|
||||
artists_data = server.get_artists(library_id)
|
||||
artists = artists_data['Items']
|
||||
num_artists = artists_data['TotalRecordCount']
|
||||
albums = server.get_library_items(library_id, 'MusicAlbum')['Items']
|
||||
songs = server.get_library_items(library_id, 'Audio')['Items']
|
||||
|
||||
self.sync['RestorePoint'] = items['RestorePoint']
|
||||
start_index = items['RestorePoint']['params']['StartIndex']
|
||||
for index, artist in enumerate(artists):
|
||||
artist_name = artist.get('Name')
|
||||
|
||||
for index, artist in enumerate(items['Items']):
|
||||
|
||||
percent = int((float(start_index + index) / float(items['TotalRecordCount'])) * 100)
|
||||
message = artist['Name']
|
||||
percent = int((float(index) / float(num_artists)) * 100)
|
||||
message = artist_name
|
||||
dialog.update(percent, heading="%s: %s" % (translate('addon_name'), library['Name']), message=message)
|
||||
|
||||
obj.artist(artist, library=library)
|
||||
|
||||
for albums in server.get_albums_by_artist(artist['Id']):
|
||||
|
||||
for album in albums['Items']:
|
||||
artist_albums = [ album for album in albums if artist_name in album.get('Artists') ]
|
||||
for album in artist_albums:
|
||||
obj.album(album)
|
||||
|
||||
for songs in server.get_items(album['Id'], "Audio"):
|
||||
for song in songs['Items']:
|
||||
|
||||
album_id = album.get('Id')
|
||||
album_songs = [ song for song in songs if album_id == song.get('AlbumId') ]
|
||||
for song in album_songs:
|
||||
dialog.update(percent,
|
||||
message="%s/%s/%s" % (message, album['Name'][:7], song['Name'][:7]))
|
||||
obj.song(song)
|
||||
|
||||
for songs in server.get_songs_by_artist(artist['Id']):
|
||||
for song in songs['Items']:
|
||||
|
||||
dialog.update(percent, message="%s/%s" % (message, song['Name']))
|
||||
obj.song(song)
|
||||
|
||||
# for items in server.get_artists(library['Id'], False, self.sync['RestorePoint'].get('params')):
|
||||
#
|
||||
# self.sync['RestorePoint'] = items['RestorePoint']
|
||||
# start_index = items['RestorePoint']['params']['StartIndex']
|
||||
#
|
||||
# for index, artist in enumerate(items['Items']):
|
||||
#
|
||||
# percent = int((float(start_index + index) / float(items['TotalRecordCount'])) * 100)
|
||||
# message = artist['Name']
|
||||
# dialog.update(percent, heading="%s: %s" % (translate('addon_name'), library['Name']), message=message)
|
||||
# obj.artist(artist, library=library)
|
||||
#
|
||||
# import web_pdb; web_pdb.set_trace()
|
||||
# for albums in server.get_albums_by_artist(artist['Id']):
|
||||
#
|
||||
# for album in albums['Items']:
|
||||
# obj.album(album)
|
||||
#
|
||||
# for songs in server.get_items(album['Id'], "Audio"):
|
||||
# for song in songs['Items']:
|
||||
#
|
||||
# dialog.update(percent,
|
||||
# message="%s/%s/%s" % (message, album['Name'][:7], song['Name'][:7]))
|
||||
# obj.song(song)
|
||||
#
|
||||
# for songs in server.get_songs_by_artist(artist['Id']):
|
||||
# for song in songs['Items']:
|
||||
#
|
||||
# dialog.update(percent, message="%s/%s" % (message, song['Name']))
|
||||
# obj.song(song)
|
||||
#
|
||||
if self.update_library:
|
||||
self.music_compare(library, obj, jellyfindb)
|
||||
|
||||
|
|
Loading…
Reference in a new issue