目录命令: --dir-create/--dir-delete/--dir-list (TransferClient 方法 + main 分支)

This commit is contained in:
lou
2026-08-10 21:52:59 +08:00
parent ec7947835a
commit c005446ed5
+56
View File
@@ -192,6 +192,28 @@ class TransferClient:
raise TransferError(f"配额查询失败 (HTTP {code}): {payload}")
return payload
def list_dirs(self) -> list[dict[str, Any]]:
"""GET /api/dirs: 目录列表"""
code, payload = self._request("GET", "/api/dirs")
if code != 200:
raise TransferError(f"目录列表失败 (HTTP {code}): {payload}")
return payload.get("dirs", [])
def create_dir(self, name: str) -> dict[str, Any]:
"""POST /api/dirs: 创建目录 (重名 409)"""
code, payload = self._request("POST", "/api/dirs", json_body={"name": name})
if code != 200:
raise TransferError(f"创建目录失败 (HTTP {code}): {payload}")
return payload
def delete_dir(self, dir_id: str) -> None:
"""DELETE /api/dirs/{id}: 删除目录"""
code, payload = self._request("DELETE", f"/api/dirs/{dir_id}")
if code != 200:
raise TransferError(f"删除目录失败 (HTTP {code}): {payload}")
if not payload.get("ok"):
raise TransferError(f"删除目录失败: {payload}")
def download(self, file_id: str, dest: Path | None = None) -> tuple[Path, dict[str, Any]]:
"""逐卷下载密文 (零合并: 服务端只存卷, 客户端本地拼接), 返回 (密文路径, 解密参数)。
@@ -690,6 +712,9 @@ def main() -> int:
ap.add_argument("--login", nargs=2, metavar=("用户名", "密码"), help="登录账号")
ap.add_argument("--logout", action="store_true", help="注销当前账号 (token 失效)")
ap.add_argument("--whoami", action="store_true", help="显示当前登录用户")
ap.add_argument("--dir-create", metavar="名称", help="创建目录 (按用户隔离)")
ap.add_argument("--dir-delete", metavar="DIR_ID", help="删除目录")
ap.add_argument("--dir-list", action="store_true", help="列出目录")
args = ap.parse_args()
server = args.server or _config_server()
@@ -707,6 +732,37 @@ def main() -> int:
print(f"[用户] {uname}")
return 0
if args.dir_list:
try:
dirs = client.list_dirs()
except TransferError as e:
print(f"[错误] {e}")
return 1
if not dirs:
print("[目录] 暂无目录")
return 0
for d in dirs:
print(f" {d['id']}. {d['name']} ({d['created_at']})")
return 0
if args.dir_create:
try:
payload = client.create_dir(args.dir_create)
except TransferError as e:
print(f"[错误] {e}")
return 1
print(f"[目录] 已创建: {payload['name']} (dir_id={payload['dir_id']})")
return 0
if args.dir_delete:
try:
client.delete_dir(args.dir_delete)
except TransferError as e:
print(f"[错误] {e}")
return 1
print(f"[目录] 已删除: dir_id={args.dir_delete}")
return 0
if args.register:
try:
payload = client.register(args.register[0], args.register[1])