Skip to content
This repository has been archived by the owner on Jun 30, 2019. It is now read-only.

Commit

Permalink
1.修复歌曲艺术家信息不完整的bug;
Browse files Browse the repository at this point in the history
2.支持读取歌曲更多的ID信息提升使用体验;
3.加入读取缓存文件的策略提升启动速度。
  • Loading branch information
cyliuu committed Dec 6, 2018
1 parent 5b77e00 commit 4819d34
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 26 deletions.
31 changes: 16 additions & 15 deletions fuocore/local/provider.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand All @@ -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:
Expand Down Expand Up @@ -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:
Expand All @@ -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)

Expand Down
21 changes: 10 additions & 11 deletions fuocore/local/schemas.py
Original file line number Diff line number Diff line change
Expand Up @@ -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'])
Expand All @@ -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


Expand Down

0 comments on commit 4819d34

Please sign in to comment.