///|
/// 分享域:`/api/share/*`。
///
/// 这里管的是**分享记录**(创建、查询、启停、删除);分享出来的内容浏览走另一组
/// `/sd/:sid/*path` 下载路径,不在本模块内。
///
/// 服务端给这组路由挂了 `AuthNotGuest`:需要登录,且访客账号会被拒。普通用户
/// 只能看到/操作自己创建的分享,管理员能看到全部;别人的分享会以 404
/// (`sharing not found`)的形式「不存在」。
pub struct ShareApi {
priv client : @core.Client
}
///|
/// 由根包创建。
pub fn ShareApi::new(client : @core.Client) -> ShareApi {
{ client, }
}
///|
/// 分享记录的查询参数:ID 是短字符串,不是数字。
fn sharing_query(id : String) -> Json {
@core.query_json([("id", Some(@core.query_string(id)))])
}
///|
/// 发一个不关心返回值的 POST。
async fn ShareApi::post_quiet(
self : ShareApi,
path : String,
query? : Json,
body? : Json,
) -> Unit raise @core.OpenListError {
let _ = self.client.request(@moonhttp.Method::Post, path, query?, body?)
}
///|
/// 分页列出分享记录(`GET /api/share/list?page=&per_page=`)。
pub async fn ShareApi::list(
self : ShareApi,
page? : Int,
per_page? : Int,
) -> @core.PageResult[@core.SharingResponse] raise @core.OpenListError {
let query = @core.query_json(@core.page_pairs(page?, per_page?))
let data = self.client.request(
@moonhttp.Method::Get,
"/api/share/list",
query~,
)
@core.decode_data(data)
}
///|
/// 按 ID 取一条分享记录(`GET /api/share/get?id=`)。
///
/// 不是自己的分享(且自己不是管理员)时服务端返回 404。
pub async fn ShareApi::get(
self : ShareApi,
id : String,
) -> @core.SharingResponse raise @core.OpenListError {
let data = self.client.request(
@moonhttp.Method::Get,
"/api/share/get",
query=sharing_query(id),
)
@core.decode_data(data)
}
///|
/// 新建分享(`POST /api/share/create`),返回创建后的完整记录。
pub async fn ShareApi::create(
self : ShareApi,
request : SharingUpdateRequest,
) -> @core.SharingResponse raise @core.OpenListError {
let data = self.client.request(
@moonhttp.Method::Post,
"/api/share/create",
body=@json.to_json(request),
)
@core.decode_data(data)
}
///|
/// 更新分享(`POST /api/share/update`),返回更新后的完整记录。
///
/// `request.id` 必填,且与 `create` 一样必须给出非空的 `files`;`new_id` 非空时
/// 顺带改分享 ID(需要相应权限)。
pub async fn ShareApi::update(
self : ShareApi,
request : SharingUpdateRequest,
) -> @core.SharingResponse raise @core.OpenListError {
let data = self.client.request(
@moonhttp.Method::Post,
"/api/share/update",
body=@json.to_json(request),
)
@core.decode_data(data)
}
///|
/// 删除分享(`POST /api/share/delete?id=`)。
pub async fn ShareApi::delete(
self : ShareApi,
id : String,
) -> Unit raise @core.OpenListError {
self.post_quiet("/api/share/delete", query=sharing_query(id))
}
///|
/// 启用分享(`POST /api/share/enable?id=`)。
pub async fn ShareApi::enable(
self : ShareApi,
id : String,
) -> Unit raise @core.OpenListError {
self.post_quiet("/api/share/enable", query=sharing_query(id))
}
///|
/// 禁用分享(`POST /api/share/disable?id=`)。
pub async fn ShareApi::disable(
self : ShareApi,
id : String,
) -> Unit raise @core.OpenListError {
self.post_quiet("/api/share/disable", query=sharing_query(id))
}