sus
This commit is contained in:
@@ -487,83 +487,130 @@ class MiaoStarsBasicApi:
|
||||
searchType: Literal["keyword", "internalTag", "externalTag"],
|
||||
):
|
||||
"""搜索文件 (Cloudreve V4 API)"""
|
||||
# 根据Cloudreve V4 API,使用/file端点并添加搜索参数
|
||||
# 根据Cloudreve V4 API,使用/file端点并在URI中添加搜索条件
|
||||
url = "/file"
|
||||
|
||||
# 使用Cloudreve V4的URI格式
|
||||
uri = "cloudreve://my/"
|
||||
# 构建搜索URI,根据Cloudreve V4的搜索规范
|
||||
# 基础URI指向用户根目录
|
||||
base_uri = "cloudreve://my/"
|
||||
|
||||
# 构建搜索参数
|
||||
# 根据搜索类型和内容构建查询参数
|
||||
# 注意:Cloudreve V4将搜索条件作为URI的查询部分
|
||||
search_query = []
|
||||
|
||||
if searchType == "keyword" and searchContent:
|
||||
# 文件名搜索
|
||||
search_query.append(f"name={quote_plus(searchContent)}")
|
||||
elif searchType == "internalTag" and searchContent:
|
||||
# 内部标签搜索
|
||||
search_query.append(f"tag:internal={quote_plus(searchContent)}")
|
||||
elif searchType == "externalTag" and searchContent:
|
||||
# 外部标签搜索
|
||||
search_query.append(f"tag:external={quote_plus(searchContent)}")
|
||||
|
||||
# 构建完整URI
|
||||
if search_query:
|
||||
uri = f"{base_uri}?{ '&'.join(search_query) }"
|
||||
else:
|
||||
uri = base_uri
|
||||
|
||||
# 构建请求参数
|
||||
params = {
|
||||
"uri": uri,
|
||||
"keyword": searchContent,
|
||||
"page": 0,
|
||||
"page_size": 100
|
||||
"page": 0, # 从第一页开始
|
||||
"page_size": 100, # 使用合理的默认值
|
||||
"order_by": "updated_at", # 默认按更新时间排序
|
||||
"order_direction": "desc" # 默认降序
|
||||
}
|
||||
|
||||
# 根据搜索类型调整参数
|
||||
if searchType == "internalTag":
|
||||
params["type"] = "internal"
|
||||
elif searchType == "externalTag":
|
||||
params["type"] = "tag"
|
||||
logger.debug(f"发送文件搜索请求: URI={uri}, 搜索类型={searchType}, 搜索内容={searchContent}")
|
||||
|
||||
logger.debug(f"发送文件搜索请求: 关键词={searchContent}, 类型={searchType}")
|
||||
r = self.request("GET", url, params=params)
|
||||
|
||||
# 转换响应格式以保持向后兼容
|
||||
if isinstance(r, dict):
|
||||
if "data" in r:
|
||||
if "files" in r["data"]:
|
||||
# Cloudreve V4 API 格式
|
||||
return {"code": 0, "data": {"objects": r["data"]["files"]}}
|
||||
elif isinstance(r["data"], list):
|
||||
# 如果data是列表,直接使用
|
||||
return {"code": 0, "data": {"objects": r["data"]}}
|
||||
try:
|
||||
r = self.request("GET", url, params=params)
|
||||
|
||||
logger.warning(f"搜索响应格式不正确: {r}")
|
||||
return {"code": 0, "data": {"objects": []}}
|
||||
# 转换响应格式以保持向后兼容
|
||||
if isinstance(r, dict):
|
||||
if r.get("code") == 0 and "data" in r:
|
||||
if "files" in r["data"]:
|
||||
# Cloudreve V4 API 标准格式
|
||||
logger.success(f"搜索成功,找到 {len(r['data']['files'])} 个文件")
|
||||
return {"code": 0, "data": {"objects": r["data"]["files"]}}
|
||||
elif isinstance(r["data"], list):
|
||||
# 兼容列表格式响应
|
||||
return {"code": 0, "data": {"objects": r["data"]}}
|
||||
else:
|
||||
logger.warning(f"搜索响应缺少files字段: {r}")
|
||||
return {"code": 0, "data": {"objects": []}}
|
||||
else:
|
||||
# API返回错误
|
||||
error_msg = r.get("msg", r.get("error", "搜索失败"))
|
||||
logger.error(f"搜索API返回错误: {error_msg}")
|
||||
return {"code": -1, "msg": error_msg}
|
||||
else:
|
||||
logger.error(f"搜索响应格式无效: {type(r).__name__}")
|
||||
return {"code": -1, "msg": "搜索响应格式无效"}
|
||||
|
||||
except Exception as e:
|
||||
logger.exception(f"搜索请求异常: {str(e)}")
|
||||
return {"code": -1, "msg": f"搜索请求异常: {str(e)}"}
|
||||
|
||||
def shareSearch(self, keyword, orderBy, order, page):
|
||||
"""搜索分享 (Cloudreve V4 API)"""
|
||||
# 使用正确的API端点 - Cloudreve V4使用/share端点获取分享列表
|
||||
url = "/share"
|
||||
params = {
|
||||
"page": page,
|
||||
"page_size": 50, # 添加默认页面大小以避免"PageSize cannot be empty"错误
|
||||
"order_by": orderBy,
|
||||
"order": order,
|
||||
"keyword": keyword, # 根据实际API支持情况调整
|
||||
}
|
||||
r = self.request("GET", url, params=params)
|
||||
return r
|
||||
# def shareSearch(self, keyword, orderBy, order, page):
|
||||
# """搜索分享功能已移除"""
|
||||
# return {"code": 0, "data": {"objects": []}}
|
||||
|
||||
def deleteTag(self, tagId):
|
||||
"""删除标签"""
|
||||
"""删除标签 (Cloudreve V4 API)"""
|
||||
url = f"/tag/{tagId}"
|
||||
r = self.request("DELETE", url)
|
||||
|
||||
# 转换响应格式
|
||||
if r is None or (isinstance(r, dict) and not r.get("error")):
|
||||
return {"code": 0, "msg": "标签删除成功"}
|
||||
# Cloudreve V4 响应格式:{code: 0} 表示成功
|
||||
if isinstance(r, dict):
|
||||
if r.get("code") == 0:
|
||||
return {"code": 0, "msg": "标签删除成功"}
|
||||
else:
|
||||
error_msg = r.get("msg", "标签删除失败")
|
||||
return {"code": -1, "msg": error_msg}
|
||||
else:
|
||||
return {"code": -1, "msg": r.get("error", "标签删除失败")}
|
||||
return {"code": -1, "msg": "标签删除失败:响应格式错误"}
|
||||
|
||||
# 重写为不支持添加标签功能
|
||||
def addTag(self, name, expression):
|
||||
"""添加标签"""
|
||||
url = "/tag/filter"
|
||||
jsons = {
|
||||
"expression": expression,
|
||||
"name": name,
|
||||
"color": "#ff9800",
|
||||
"icon": "Circle",
|
||||
}
|
||||
r = self.request("POST", url, json=jsons)
|
||||
"""添加标签功能已禁用"""
|
||||
logger.warning("添加标签功能已禁用")
|
||||
return {"code": -1, "msg": "添加标签功能已禁用"}
|
||||
|
||||
def getMyShares(self, page=1, pageSize=10):
|
||||
"""获取我的分享列表 (Cloudreve V4 API - GET /user/shares/{user-id})
|
||||
|
||||
# 转换响应格式
|
||||
if r.get("id"):
|
||||
return {"code": 0, "msg": "标签添加成功", "data": r}
|
||||
Args:
|
||||
page: 页码
|
||||
pageSize: 每页数量
|
||||
|
||||
Returns:
|
||||
分享列表数据
|
||||
"""
|
||||
# 使用"me"作为user-id表示当前用户
|
||||
url = f"/user/shares/me"
|
||||
params = {
|
||||
"page": page,
|
||||
"page_size": pageSize
|
||||
}
|
||||
r = self.request("GET", url, params=params)
|
||||
|
||||
# Cloudreve V4 响应格式处理
|
||||
if isinstance(r, dict):
|
||||
if r.get("code") == 0:
|
||||
return {
|
||||
"code": 0,
|
||||
"msg": "获取分享列表成功",
|
||||
"data": r.get("data", {})
|
||||
}
|
||||
else:
|
||||
error_msg = r.get("msg", "获取分享列表失败")
|
||||
return {"code": -1, "msg": error_msg}
|
||||
else:
|
||||
return {"code": -1, "msg": r.get("error", "标签添加失败")}
|
||||
return {"code": -1, "msg": "获取分享列表失败:响应格式错误"}
|
||||
|
||||
def getShareFileInfo(self, shareId):
|
||||
"""获取分享文件信息"""
|
||||
@@ -589,6 +636,28 @@ class MiaoStarsBasicApi:
|
||||
return {"code": 0, "msg": "文件内容更新成功"}
|
||||
else:
|
||||
return {"code": -1, "msg": r.get("error", "文件内容更新失败")}
|
||||
|
||||
def deleteShare(self, shareId):
|
||||
"""删除分享链接 (Cloudreve V4 API)
|
||||
|
||||
Args:
|
||||
shareId: 分享链接ID
|
||||
|
||||
Returns:
|
||||
操作结果
|
||||
"""
|
||||
url = f"/share/{shareId}"
|
||||
r = self.request("DELETE", url)
|
||||
|
||||
# Cloudreve V4 响应格式处理
|
||||
if isinstance(r, dict):
|
||||
if r.get("code") == 0:
|
||||
return {"code": 0, "msg": "删除分享成功"}
|
||||
else:
|
||||
error_msg = r.get("msg", "删除分享失败")
|
||||
return {"code": -1, "msg": error_msg}
|
||||
else:
|
||||
return {"code": -1, "msg": "删除分享失败:响应格式错误"}
|
||||
|
||||
def renameFile(self, fileUri, newName, fileType="file"):
|
||||
"""重命名文件 (Cloudreve V4 API)"""
|
||||
|
||||
Reference in New Issue
Block a user