feat(desktop): implement share management and hide endpoint settings

This commit is contained in:
2026-02-18 17:17:49 +08:00
parent e343f6ac2a
commit 3c483d2093
2 changed files with 585 additions and 144 deletions

View File

@@ -325,6 +325,94 @@ async fn api_get_download_url(
request_json(&state.client, Method::GET, api_url, None, None).await
}
#[tauri::command]
async fn api_get_my_shares(
state: tauri::State<'_, ApiState>,
base_url: String,
) -> Result<BridgeResponse, String> {
request_with_optional_csrf(
&state.client,
Method::GET,
&base_url,
"/api/share/my",
None,
false,
)
.await
}
#[tauri::command]
async fn api_create_share(
state: tauri::State<'_, ApiState>,
base_url: String,
share_type: String,
file_path: String,
file_name: Option<String>,
password: Option<String>,
expiry_days: Option<i32>,
) -> Result<BridgeResponse, String> {
let mut body = Map::new();
body.insert("share_type".to_string(), Value::String(share_type));
body.insert("file_path".to_string(), Value::String(file_path));
if let Some(name) = file_name {
if !name.trim().is_empty() {
body.insert("file_name".to_string(), Value::String(name.trim().to_string()));
}
}
if let Some(raw_password) = password {
let value = raw_password.trim();
if value.is_empty() {
body.insert("password".to_string(), Value::Null);
} else {
body.insert("password".to_string(), Value::String(value.to_string()));
}
}
if let Some(days) = expiry_days {
if days > 0 {
body.insert("expiry_days".to_string(), Value::Number(days.into()));
} else {
body.insert("expiry_days".to_string(), Value::Null);
}
} else {
body.insert("expiry_days".to_string(), Value::Null);
}
request_with_optional_csrf(
&state.client,
Method::POST,
&base_url,
"/api/share/create",
Some(Value::Object(body)),
true,
)
.await
}
#[tauri::command]
async fn api_delete_share(
state: tauri::State<'_, ApiState>,
base_url: String,
share_id: u64,
) -> Result<BridgeResponse, String> {
if share_id == 0 {
return Err("无效的分享ID".to_string());
}
let csrf_token = fetch_csrf_token(&state.client, &base_url).await?;
let path = format!("/api/share/{}", share_id);
request_json(
&state.client,
Method::DELETE,
join_api_url(&base_url, &path),
None,
csrf_token,
)
.await
}
#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
let client = reqwest::Client::builder()
@@ -345,7 +433,10 @@ pub fn run() {
api_mkdir,
api_rename_file,
api_delete_file,
api_get_download_url
api_get_download_url,
api_get_my_shares,
api_create_share,
api_delete_share
])
.run(tauri::generate_context!())
.expect("error while running tauri application");