Esempio n. 1
0
 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
Esempio n. 2
0
 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
Esempio n. 3
0
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
Esempio n. 4
0
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