fix 115 api

This commit is contained in:
jxxghp
2025-03-21 21:01:37 +08:00
parent a860a8c02b
commit 2b9f7bca51
4 changed files with 53 additions and 12 deletions

View File

@@ -27,7 +27,7 @@ def qrcode(name: str, _: schemas.TokenPayload = Depends(verify_token)) -> Any:
qrcode_data, errmsg = StorageChain().generate_qrcode(name)
if qrcode_data:
return schemas.Response(success=True, data=qrcode_data, message=errmsg)
return schemas.Response(success=False)
return schemas.Response(success=False, message=errmsg)
@router.get("/check/{name}", summary="二维码登录确认", response_model=schemas.Response)

View File

@@ -110,7 +110,7 @@ class ConfigModel(BaseModel):
# Fanart API Key
FANART_API_KEY: str = "d2d31f9ecabea050fc7d68aa3146015f"
# 115 AppId
U115_APP_ID: str = ""
U115_APP_ID: str = "100196807"
# 元数据识别缓存过期时间(小时)
META_CACHE_EXPIRE: int = 0
# 电视剧动漫的分类genre_ids

View File

@@ -162,9 +162,7 @@ class Rclone(StorageBase):
return folder
# 逐级查找和创建目录
fileitem = schemas.FileItem(path="/")
for part in path.parts:
if part == "/":
continue
for part in path.parts[1:]:
dir_file = __find_dir(fileitem, part)
if dir_file:
fileitem = dir_file

View File

@@ -188,6 +188,10 @@ class U115Pan(StorageBase, metaclass=Singleton):
"""
目录遍历实现
"""
if fileitem.type == "file":
return [self.detail(fileitem)]
cid = self._path_to_id(fileitem.path)
items = []
offset = 0
@@ -202,9 +206,18 @@ class U115Pan(StorageBase, metaclass=Singleton):
if not resp:
break
for item in resp:
path = self._id_to_path(item.get("fid"))
path = f"{fileitem.path}/{item['fn']}" + ("/" if item["fc"] == "0" else "")
items.append(schemas.FileItem(
fileid=item["fid"],
name=item["fn"],
basename=Path(item["fn"]).stem,
extension=item["ico"],
type="dir" if item["fc"] == "0" else "file",
path=path,
size=item["fs"] if item["fc"] == "1" else None,
modify_time=item["upt"],
pickcode=item["pc"],
thumbnail=item["thumb"],
))
# 更新缓存
self._id_cache[path] = item["cid"]
@@ -234,8 +247,9 @@ class U115Pan(StorageBase, metaclass=Singleton):
self._id_cache[str(new_path)] = resp["file_id"]
return schemas.FileItem(
fileid=resp["file_id"],
path=str(new_path),
path=str(new_path) + "/",
name=name,
basename=name,
type="dir",
modify_time=int(time.time())
)
@@ -273,6 +287,9 @@ class U115Pan(StorageBase, metaclass=Singleton):
fileid=init_resp["file_id"],
path=str(Path(target_dir.path) / target_name),
name=target_name,
basename=Path(target_dir.name).stem,
extension=Path(target_dir.name).suffix[1:],
size=file_size,
type="file",
modify_time=int(time.time())
)
@@ -342,6 +359,7 @@ class U115Pan(StorageBase, metaclass=Singleton):
name=target_name,
basename=Path(target_name).stem,
extension=Path(target_name).suffix[1:],
size=file_size,
modify_time=int(time.time())
)
@@ -528,8 +546,8 @@ class U115Pan(StorageBase, metaclass=Singleton):
}
)
return schemas.FileItem(
path=str(path),
fileid=resp["file_id"],
path=str(path) + ("/" if resp["file_category"] == "1" else ""),
type="file" if resp["file_category"] == "1" else "dir",
name=resp["file_name"],
basename=Path(resp["file_name"]).stem,
@@ -546,10 +564,35 @@ class U115Pan(StorageBase, metaclass=Singleton):
"""
获取指定路径的文件夹,如不存在则创建
"""
try:
return self.get_item(path)
except FileNotFoundError:
return self.create_folder(self.get_item(path.parent), path.name)
def __find_dir(_fileitem: schemas.FileItem, _name: str) -> Optional[schemas.FileItem]:
"""
查找下级目录中匹配名称的目录
"""
for sub_folder in self.list(_fileitem):
if sub_folder.type != "dir":
continue
if sub_folder.name == _name:
return sub_folder
return None
# 是否已存在
folder = self.get_item(path)
if folder:
return folder
# 逐级查找和创建目录
fileitem = schemas.FileItem(path="/")
for part in path.parts[1:]:
dir_file = __find_dir(fileitem, part)
if dir_file:
fileitem = dir_file
else:
dir_file = self.create_folder(fileitem, part)
if not dir_file:
logger.warn(f"115 创建目录 {fileitem.path}{part} 失败!")
return None
fileitem = dir_file
return fileitem
def detail(self, fileitem: schemas.FileItem) -> Optional[schemas.FileItem]:
"""