Пример #1
0
    def music(self, library, dialog):

        ''' Process artists, album, songs from a single library.
        '''
        with self.library.music_database_lock:
            with Database('music') as musicdb:
                with Database('emby') as embydb:
                    obj = Music(self.server, embydb, musicdb, self.direct_path)

                    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" % (_('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']:
                                    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)

                    if self.update_library:
                        self.music_compare(library, obj, embydb)
Пример #2
0
    def music(self, library, dialog):
        ''' Process artists, album, songs from a single library.
        '''
        with self.library.music_database_lock:
            with Database('music') as musicdb:
                with Database('jellyfin') as jellyfindb:
                    obj = Music(self.server, jellyfindb, musicdb,
                                self.direct_path, library)

                    library_id = library['Id']

                    total_items = server.get_item_count(
                        library_id, 'MusicArtist,MusicAlbum,Audio')
                    count = 0
                    '''
                    Music database syncing.  Artists must be in the database
                    before albums, albums before songs.  Pulls batches of items
                    in sizes of setting "Paging - Max items".  'artists',
                    'albums', and 'songs' are generators containing a dict of
                    api responses
                    '''
                    artists = server.get_artists(library_id)
                    for batch in artists:
                        for item in batch['Items']:
                            LOG.debug('Artist: {}'.format(item.get('Name')))
                            percent = int(
                                (float(count) / float(total_items)) * 100)
                            dialog.update(percent,
                                          message='Artist: {}'.format(
                                              item.get('Name')))
                            obj.artist(item)
                            count += 1

                    albums = server.get_items(library_id,
                                              item_type='MusicAlbum',
                                              params={'SortBy': 'AlbumArtist'})
                    for batch in albums:
                        for item in batch['Items']:
                            LOG.debug('Album: {}'.format(item.get('Name')))
                            percent = int(
                                (float(count) / float(total_items)) * 100)
                            dialog.update(percent,
                                          message='Album: {} - {}'.format(
                                              item.get('AlbumArtist', ''),
                                              item.get('Name')))
                            obj.album(item)
                            count += 1

                    songs = server.get_items(library_id,
                                             item_type='Audio',
                                             params={'SortBy': 'AlbumArtist'})
                    for batch in songs:
                        for item in batch['Items']:
                            LOG.debug('Song: {}'.format(item.get('Name')))
                            percent = int(
                                (float(count) / float(total_items)) * 100)
                            dialog.update(percent,
                                          message='Track: {} - {}'.format(
                                              item.get('AlbumArtist', ''),
                                              item.get('Name')))
                            obj.song(item)
                            count += 1

                    if self.update_library:
                        self.music_compare(library, obj, jellyfindb)