目录命令: --dir-create/--dir-delete/--dir-list (TransferClient 方法 + main 分支)
This commit is contained in:
+56
@@ -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])
|
||||
|
||||
Reference in New Issue
Block a user