Skip to content

Commit

Permalink
Merge branch 'master' of github.com:feeluown/feeluown-netease
Browse files Browse the repository at this point in the history
  • Loading branch information
cosven committed Oct 23, 2023
2 parents b1c4486 + daf085a commit 9647a50
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 25 deletions.
36 changes: 13 additions & 23 deletions fuo_netease/models.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import logging

from marshmallow.exceptions import ValidationError
from feeluown.utils.reader import RandomSequentialReader

from .excs import NeteaseIOError
Expand Down Expand Up @@ -34,7 +33,7 @@ def read_func(start, end):
return reader


def create_cloud_songs_g(func, func_extra, schema=None, schema_extra=None,
def create_cloud_songs_g(func, func_private, schema=None, schema_private=None,
data_field=None, data_key=None):
data = func(limit=0)
if data is None:
Expand All @@ -48,35 +47,26 @@ def read_func(start, end):
songs_data = func(start, end - start)

songs = []
extra_songs_info = []
private_songs_info = []
for idx, song_data in enumerate(songs_data[data_field]):
if data_key:
song_data = song_data[data_key]
try:
song = _deserialize(song_data, schema)
except ValidationError:
if song_data['id'] == song_data['s_id']:
# FIXME: 有些云盘歌曲在 netease 上不存在,这时不能把它们转换成
# SongModel。因为 SongModel 的逻辑没有考虑 song 不存在的情况。
# 这类歌曲往往没有 ar/al 等字段,在反序列化的时候会报 ValidationError,
# 所以这里如果检测到 ValidationError,就跳过这首歌曲。
#
# 可能的修复方法:
# 1. 在 SongModel 上加一个 flag 来标识该歌曲是否为云盘歌曲,
# 如果是的话,则使用 cloud_song_detail 接口来获取相关信息。
# name = song_data['name']
# logger.warn(f'cloud song:{name} may not exist on netease, skip it.')
extra_songs_info.append((idx, song_data['id']))
# song_data = func_extra(str(song_data['id']))[data_field][0]
# song = _deserialize(song_data, schema_extra)
name = song_data['name']
logger.warning(f'cloud song:{name} may not exist on netease.')
private_songs_info.append((idx, song_data['id']))
else:
song = _deserialize(song_data, schema)
songs.append(song)

if extra_songs_info:
extra_song_ids = ','.join([str(id) for (_, id) in extra_songs_info])
extra_songs_data = func_extra(extra_song_ids)
for idx, song_data in enumerate(extra_songs_data[data_field]):
song = _deserialize(song_data, schema_extra)
songs.insert(extra_songs_info[idx][0], song)
if private_songs_info:
private_song_ids = ','.join([str(id) for (_, id) in private_songs_info])
private_songs_data = func_private(private_song_ids)
for idx, song_data in enumerate(private_songs_data[data_field]):
song = _deserialize(song_data, schema_private)
songs.insert(private_songs_info[idx][0], song)

return songs

Expand Down
4 changes: 2 additions & 2 deletions fuo_netease/page_fav.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ async def _upload_cloud_songs_bydir(self):
if f.rsplit('.', 1)[-1] in exts])

for idx, path in enumerate(paths):
ok = await aio.run_fn(self._user.meta.provider.upload_song, path)
ok = await aio.run_fn(provider.upload_song, path)
if ok:
logger.warning(f'[{idx + 1}/{len(paths)}]{path} 上传成功!')
else:
Expand All @@ -90,7 +90,7 @@ async def _upload_cloud_songs(self):
return

for idx, path in enumerate(paths):
ok = await aio.run_fn(self._user.meta.provider.upload_song, path)
ok = await aio.run_fn(provider.upload_song, path)
if ok:
logger.warning(f'[{idx + 1}/{len(paths)}]{path} 上传成功!')
else:
Expand Down

0 comments on commit 9647a50

Please sign in to comment.