///|
/// 公共接口(`/api/public/*`):这些端点不需要认证,这里仍用已登录的客户端调用。
///|
/// 依次测 `init_status` / `archive_extensions` / `offline_download_tools` / `settings`。
pub async fn check_public(client : @lib.OpenListClient, dir : String) -> Unit {
section("公共接口 /api/public/*")
// 初始化向导是 OpenList 较新版本才有的路由:旧版本没有 `/init_status`,
// 未匹配的路径会落到前端静态页(HTML),表现为 `Decode`。先探一下,探不到
// 就记「跳过」——那是服务端版本问题,不是客户端解码错。
let init_status_supported = try {
let _ = client.request(@lib.Method::Get, "/api/public/init_status")
true
} catch {
@lib.OpenListError::Decode(_) => false
@lib.OpenListError::Http(_) => true
@lib.OpenListError::Api(_) => true
}
if init_status_supported {
let _ = check(
"GET /api/public/init_status",
"public().init_status()",
Ok(client.public().init_status()) catch {
error => Err(error)
},
fn(status) { "initialized=\{status.initialized}" },
)
dump_raw(client, @lib.Method::Get, "/api/public/init_status")
} else {
skip(
"GET /api/public/init_status", "public().init_status()", "服务端没有这个路由(初始化向导需要较新版本,旧版本返回前端页面)",
)
}
let _ = check(
"GET /api/public/archive_extensions",
"public().archive_extensions()",
Ok(client.public().archive_extensions()) catch {
error => Err(error)
},
fn(list) { "共 \{list.length()} 个:\{joined(take(list, 10))}" },
)
dump_raw(client, @lib.Method::Get, "/api/public/archive_extensions")
let _ = check(
"GET /api/public/offline_download_tools?path=<测试目录>",
"public().offline_download_tools(dir)",
Ok(client.public().offline_download_tools(path=dir)) catch {
error => Err(error)
},
fn(list) { "共 \{list.length()} 个:\{joined(take(list, 10))}" },
)
dump_raw(
client,
@lib.Method::Get,
"/api/public/offline_download_tools",
query=Json::object({ "path": Json::string(dir) }),
)
let _ = check(
"GET /api/public/settings",
"public().settings()",
Ok(client.public().settings()) catch {
error => Err(error)
},
fn(map) { "共 \{map.length()} 项" },
)
dump_raw(client, @lib.Method::Get, "/api/public/settings")
}