def do_debug_kavod(self, line): ''' Special debug function for Kavod library. Usage: debug_kavod album_id ''' print print "Special debug mode for Kavod library" print print "Length of albums array: %i" % len(self.albums) print print "List of IDs: %s" % self.albums.keys() print album_id = parse_single_int(line) ret = kodi_api.audiolibrary_get_albums(self.kodi_params, album_id - 1, album_id) print ret print print "In the local library: %s - %s" % ( self.albums[album_id]['title'], self.albums[album_id]['artist']) print
def do_debug_kavod(self, line): ''' Special debug function for Kavod library. Usage: debug_kavod album_id ''' print print "Special debug mode for Kavod library" print print "Length of albums array: %i" % len(self.albums) print print "List of IDs: %s" % self.albums.keys() print album_id = parse_single_int(line) ret = kodi_api.audiolibrary_get_albums( self.kodi_params, album_id - 1, album_id) print ret print print "In the local library: %s - %s" % ( self.albums[album_id]['title'], self.albums[album_id]['artist']) print
def get_audio_library_from_server(obj): '''Load the library in memory from the Kodi server''' logger.debug('get_audio_library_from_server') print "Loading the Kodi server library, this may be very long" print # Loading songs songs_dummy = kodi_api.audiolibrary_get_songs(obj.kodi_params, 0, 1) nb_songs = songs_dummy['limits']['total'] logger.debug('number of songs: %i', nb_songs) if nb_songs==0: logger.critical("Library seems to be empty.") exit() obj.nb_songs = nb_songs widgets = [ 'Songs: ', Percentage(), ' ', Bar(marker='#',left='[',right=']'), ' (', Counter(), ' in ' + str(nb_songs) + ') ', ETA()] pbar = ProgressBar(widgets=widgets, maxval=nb_songs) pbar.start() limits = range(0, nb_songs, 20) if not limits[-1] == nb_songs: limits.append(nb_songs) for start, end in zip(limits[:-1], limits[1:]): logger.info('Processing song %i to %i ...', start, end) pbar.update(start) while True: try: #TODO: use an API function command = {"jsonrpc": "2.0", "method": "AudioLibrary.GetSongs", "params": { "properties": [ "title", "artist", "year", "rating", "playcount", "musicbrainztrackid", "genre" ], "limits": { "start": start, "end": end } }, "id": 1} ret = kodi_api.call_api(obj.kodi_params, command) for song in ret['result']['songs']: obj.songs[song['songid']] = {} obj.songs[song['songid']]['title'] = song['title'] if song['artist']: obj.songs[song['songid']]['artist'] = song['artist'][0] else: obj.songs[song['songid']]['artist'] = '' obj.songs[song['songid']]['year'] = song['year'] obj.songs[song['songid']]['rating'] = song['rating'] obj.songs[song['songid']]['playcount'] = song['playcount'] obj.songs[song['songid']][ 'musicbrainztrackid'] = song['musicbrainztrackid'] obj.songs[song['songid']]['genre'] = song['genre'] # store the last update to echonest profile obj.songs[song['songid']]['rating_en'] = 0 obj.songs[song['songid']]['playcount_en'] = 0 break except KeyError: #TODO: improve error catching, limit to API errors logger.info('error when loading library, retry') pbar.finish() save_songs(obj.songs) # Loading albums albums_dummy = kodi_api.audiolibrary_get_albums(obj.kodi_params, 0, 1) nb_albums = albums_dummy['limits']['total'] logger.debug('number of albums: %i', nb_albums) obj.nb_albums = nb_albums widgets = [ 'Albums: ', Percentage(), ' ', Bar(marker='#',left='[',right=']'), ' (', Counter(), ' in ' + str(nb_albums) + ') ', ETA()] pbar = ProgressBar(widgets=widgets, maxval=nb_albums) pbar.start() limits = range(0, nb_albums, 10) if not limits[-1] == nb_albums: limits.append(nb_albums) for start, end in zip(limits[:-1], limits[1:]): logger.info('Processing album %i to %i ...', start, end) pbar.update(start) while True: try: #TODO: use an API function command = {"jsonrpc": "2.0", "method": "AudioLibrary.GetAlbums", "params": { "properties": [ "title", "artist", "year"], "limits": { "start": start, "end": end } }, "id": 1} ret = kodi_api.call_api(obj.kodi_params, command) for album in ret['result']['albums']: obj.albums[album['albumid']] = {} obj.albums[album['albumid']]['title'] = album['title'] if album['artist']: obj.albums[album['albumid']]['artist'] = album['artist'][0] else: obj.albums[album['albumid']]['artist'] = '' obj.albums[album['albumid']]['year'] = album['year'] break except KeyError: logger.info('error when loading library, retry') pbar.finish() save_albums(obj.albums) print
def get_audio_library_from_server(obj): '''Load the library in memory from the Kodi server''' logger.debug('get_audio_library_from_server') print "Loading the Kodi server library, this may be very long" print # Loading songs songs_dummy = kodi_api.audiolibrary_get_songs(obj.kodi_params, 0, 1) nb_songs = songs_dummy['limits']['total'] logger.debug('number of songs: %i', nb_songs) if nb_songs == 0: logger.critical("Library seems to be empty.") exit() obj.nb_songs = nb_songs widgets = [ 'Songs: ', Percentage(), ' ', Bar(marker='#', left='[', right=']'), ' (', Counter(), ' in ' + str(nb_songs) + ') ', ETA() ] pbar = ProgressBar(widgets=widgets, maxval=nb_songs) pbar.start() limits = range(0, nb_songs, 20) if not limits[-1] == nb_songs: limits.append(nb_songs) for start, end in zip(limits[:-1], limits[1:]): logger.info('Processing song %i to %i ...', start, end) pbar.update(start) while True: try: #TODO: use an API function command = { "jsonrpc": "2.0", "method": "AudioLibrary.GetSongs", "params": { "properties": [ "title", "artist", "year", "rating", "playcount", "musicbrainztrackid", "genre" ], "limits": { "start": start, "end": end } }, "id": 1 } ret = kodi_api.call_api(obj.kodi_params, command) for song in ret['result']['songs']: obj.songs[song['songid']] = {} obj.songs[song['songid']]['title'] = song['title'] if song['artist']: obj.songs[song['songid']]['artist'] = song['artist'][0] obj.songs[song['songid']]['year'] = song['year'] obj.songs[song['songid']]['rating'] = song['rating'] obj.songs[song['songid']]['playcount'] = song['playcount'] obj.songs[song['songid']]['musicbrainztrackid'] = song[ 'musicbrainztrackid'] obj.songs[song['songid']]['genre'] = song['genre'] # store the last update to echonest profile obj.songs[song['songid']]['rating_en'] = 0 obj.songs[song['songid']]['playcount_en'] = 0 break except KeyError: #TODO: improve error catching, limit to API errors logger.info('error when loading library, retry') pbar.finish() save_songs(obj.songs) # Loading albums albums_dummy = kodi_api.audiolibrary_get_albums(obj.kodi_params, 0, 1) nb_albums = albums_dummy['limits']['total'] logger.debug('number of albums: %i', nb_albums) obj.nb_albums = nb_albums widgets = [ 'Albums: ', Percentage(), ' ', Bar(marker='#', left='[', right=']'), ' (', Counter(), ' in ' + str(nb_albums) + ') ', ETA() ] pbar = ProgressBar(widgets=widgets, maxval=nb_albums) pbar.start() limits = range(0, nb_albums, 10) if not limits[-1] == nb_albums: limits.append(nb_albums) for start, end in zip(limits[:-1], limits[1:]): logger.info('Processing album %i to %i ...', start, end) pbar.update(start) while True: try: #TODO: use an API function command = { "jsonrpc": "2.0", "method": "AudioLibrary.GetAlbums", "params": { "properties": ["title", "artist", "year"], "limits": { "start": start, "end": end } }, "id": 1 } ret = kodi_api.call_api(obj.kodi_params, command) for album in ret['result']['albums']: obj.albums[album['albumid']] = {} obj.albums[album['albumid']]['title'] = album['title'] obj.albums[album['albumid']]['artist'] = album['artist'][0] obj.albums[album['albumid']]['year'] = album['year'] break except KeyError: logger.info('error when loading library, retry') pbar.finish() save_albums(obj.albums) print