def load_library(self): path = join(common.DATA_DIR, 'library.zip') common.w.outbar_msg('Loading library...') if not isfile(path): common.w.addstr(common.w.infobar, 'Could not find library file.') return try: with zipfile.ZipFile(path) as z: try: lib = json.loads(z.read('library.json').decode('utf-8')) except json.JSONDecodeError: # The .json file is invalid. common.w.addstr(common.w.infobar, 'Library file is corrupt.') return except zipfile.BadZipFile: # The .zip file is invalid. common.w.addstr(common.w.infobar, 'Library file is corrupt.') return for item in lib['songs']: try: self.songs.append( music_objects.LibrarySong(item, source='json')) except KeyError: # The file has the wrong data. common.w.addstr(common.w.infobar, 'Library file is corrupt.') return l = len(self.songs) common.w.outbar_msg('Loaded %s song%s.' % (l, '' if l is 1 else 's'))
def gen_library(self): ids = [] # Avoid duplicates between purchased and uploaded songs. common.w.outbar_msg('Generating your library...') for song in FreeClient.mm.get_uploaded_songs(): if song['id'] not in ids: self.songs.append(music_objects.LibrarySong(song)) ids.append(song['id']) for song in FreeClient.mm.get_purchased_songs(): if song['id'] not in ids: self.songs.append(music_objects.LibrarySong(song)) ids.append(song['id']) # Todo: Use something other than json for library storage since it # doesn't really make logical sense (songs is a list, not a dict), # but for now it's very easy to use. with zipfile.ZipFile(join(common.DATA_DIR, 'library.zip'), 'w') as z: z.writestr('library.json', json.dumps({'songs': self.songs})) l = len(self.songs) common.w.outbar_msg('Generated %d song%s.' % (l, '' if l is 1 else 's')) common.w.now_playing()