feat(desktop): implement share management and hide endpoint settings
This commit is contained in:
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user