From 4819d34cfb674c124407a594d0ab497f050e0ac7 Mon Sep 17 00:00:00 2001 From: cyliuu Date: Thu, 6 Dec 2018 23:29:35 +0800 Subject: [PATCH] =?UTF-8?q?1.=E4=BF=AE=E5=A4=8D=E6=AD=8C=E6=9B=B2=E8=89=BA?= =?UTF-8?q?=E6=9C=AF=E5=AE=B6=E4=BF=A1=E6=81=AF=E4=B8=8D=E5=AE=8C=E6=95=B4?= =?UTF-8?q?=E7=9A=84bug=EF=BC=9B=202.=E6=94=AF=E6=8C=81=E8=AF=BB=E5=8F=96?= =?UTF-8?q?=E6=AD=8C=E6=9B=B2=E6=9B=B4=E5=A4=9A=E7=9A=84ID=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E6=8F=90=E5=8D=87=E4=BD=BF=E7=94=A8=E4=BD=93=E9=AA=8C?= =?UTF-8?q?=EF=BC=9B=203.=E5=8A=A0=E5=85=A5=E8=AF=BB=E5=8F=96=E7=BC=93?= =?UTF-8?q?=E5=AD=98=E6=96=87=E4=BB=B6=E7=9A=84=E7=AD=96=E7=95=A5=E6=8F=90?= =?UTF-8?q?=E5=8D=87=E5=90=AF=E5=8A=A8=E9=80=9F=E5=BA=A6=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fuocore/local/provider.py | 31 ++++++++++++++++--------------- fuocore/local/schemas.py | 21 ++++++++++----------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/fuocore/local/provider.py b/fuocore/local/provider.py index 3a032d3..213943b 100644 --- a/fuocore/local/provider.py +++ b/fuocore/local/provider.py @@ -100,16 +100,17 @@ def run(self): logger.debug('正在扫描目录(%s)...', directory) media_files.extend(scan_directory(directory, exts, depth)) - # db_name = CACHE_DIR + '/local_song_info.db' - # try: - # with open(db_name, 'rb') as file_object: - # historty_media_files, songs = pickle.load(file_object) - # if (set(historty_media_files) == set(media_files)): - # self._songs = songs - # return - # except Exception as e: - # logger.warning(str(e)) + db_name = CACHE_DIR + '/local_song_info.db' + try: + with open(db_name, 'rb') as file_object: + historty_media_files, songs = pickle.load(file_object) + if (set(historty_media_files) == set(media_files)): + self._songs = songs + return + except Exception as e: + logger.warning(str(e)) + self._songs = [] for fpath in media_files: song = create_song(fpath) if song is not None: @@ -118,9 +119,9 @@ def run(self): logger.warning('%s can not be recognized', fpath) logger.debug('扫描到 %d 首歌曲', len(self._songs)) - # with open(db_name, 'wb') as file_object: - # if media_files: - # pickle.dump((media_files, self._songs), file_object) + with open(db_name, 'wb') as file_object: + if media_files: + pickle.dump((media_files, self._songs), file_object) class DataBase: @@ -182,7 +183,7 @@ def setup_library(self, scanner_songs): def analyze_library(self): for album in self._albums.values(): - # album.songs.sort(key=lambda x: (int(x.disc.split('/')[0]), int(x.track.split('/')[0]))) + album.songs.sort(key=lambda x: (int(x.disc.split('/')[0]), int(x.track.split('/')[0]))) if album.artists is not None: album_artist = album.artists[0] if album_artist.identifier not in self._artists: @@ -194,8 +195,8 @@ def analyze_library(self): self._artists[album_artist.identifier].albums.append(album) for artist in self._artists.values(): - # if artist.albums is not []: - # artist.albums.sort(key=lambda x: (x.songs[0].date is None, x.songs[0].date), reverse=True) + if artist.albums is not []: + artist.albums.sort(key=lambda x: (x.songs[0].date is None, x.songs[0].date), reverse=True) if artist.songs is not []: artist.songs.sort(key=lambda x: x.title) diff --git a/fuocore/local/schemas.py b/fuocore/local/schemas.py index c358530..5238dd4 100644 --- a/fuocore/local/schemas.py +++ b/fuocore/local/schemas.py @@ -65,14 +65,13 @@ class EasyMP3MetadataSongSchema(Schema): artists_name = fields.Str(required=True, load_from='artist', missing='') album_name = fields.Str(required=True, load_from='album', missing='') album_artist_name = fields.Str(required=True, load_from='albumartist', missing='') - # track = fields.Str(load_from='tracknumber') - # disc = fields.Str(load_from='discnumber') - # date = fields.Str() - # genre = fields.Str() + track = fields.Str(load_from='tracknumber') + disc = fields.Str(load_from='discnumber') + date = fields.Str() + genre = fields.Str() @post_load def create_model(self, data): - # FIXME: 逻辑太多,请重构我,重构之前这里不应该添加新功能 # NOTE: use {title}-{artists_name}-{album_name} as song identifier identifier_str = '{} - {} - {} - {}'.format(data['title'], data['artists_name'], data['album_name'], data['duration']) @@ -90,13 +89,13 @@ def create_model(self, data): for artist_name in artist_names: artist_data = {'name': artist_name} artist, _ = LocalArtistSchema(strict=True).load(artist_data) - song.artists.append(artist) + song.artists.append(artist) - # song.genre = data.get('genre', None) - # if song.album is not None: - # song.disc = data.get('disc', '1/1') - # song.track = data.get('track', '1/1') - # song.date = data.get('date', None) + song.genre = data.get('genre', None) + if song.album is not None: + song.disc = data.get('disc', '1/1') + song.track = data.get('track', '1/1') + song.date = data.get('date', None) return song