use searpc::Result;
use searpc_macro::rpc;
use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize)]
pub struct Repo {
pub id: String,
pub name: String,
pub worktree: String,
#[serde(default)]
pub auto_sync: bool,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct CloneTask {
#[serde(default)]
pub repo_id: String,
#[serde(default)]
pub repo_name: String,
#[serde(default)]
pub state: String,
#[serde(default)]
pub error: i32,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct SyncTask {
#[serde(default)]
pub repo_id: String,
#[serde(default)]
pub state: String,
#[serde(default)]
pub error: i32,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct TransferTask {
pub repo_id: String,
pub block_done: i64,
pub block_total: i64,
pub rate: i64,
#[serde(default)]
pub rt_state: String,
#[serde(default)]
pub fs_objects_done: i64,
#[serde(default)]
pub fs_objects_total: i64,
}
#[rpc(prefix = "seafile")]
pub trait SeafileRpc {
fn get_repo_list(&mut self, start: i32, limit: i32) -> Result<Vec<Repo>>;
fn get_clone_tasks(&mut self) -> Result<Vec<CloneTask>>;
fn get_repo_sync_task(&mut self, repo_id: &str) -> Result<Option<SyncTask>>;
fn find_transfer_task(&mut self, repo_id: &str) -> Result<TransferTask>;
#[rpc(name = "seafile_is_auto_sync_enabled")]
fn is_auto_sync_enabled(&mut self) -> Result<bool>;
fn sync_error_id_to_str(&mut self, error_id: i32) -> Result<String>;
fn get_config(&mut self, key: &str) -> Result<String>;
fn set_config(&mut self, key: &str, value: &str) -> Result<i32>;
fn set_config_int(&mut self, key: &str, value: i32) -> Result<i32>;
#[rpc(name = "seafile_destroy_repo")]
fn remove_repo(&mut self, repo_id: &str) -> Result<i32>;
#[allow(clippy::too_many_arguments)]
fn download(
&mut self,
repo_id: &str,
repo_version: i32,
repo_name: &str,
worktree: &str,
token: &str,
passwd: Option<&str>,
magic: Option<&str>,
email: &str,
random_key: Option<&str>,
enc_version: i32,
more_info: &str,
) -> Result<Option<String>>;
#[allow(clippy::too_many_arguments)]
fn clone(
&mut self,
repo_id: &str,
repo_version: i32,
repo_name: &str,
worktree: &str,
token: &str,
passwd: Option<&str>,
magic: Option<&str>,
email: &str,
random_key: Option<&str>,
enc_version: i32,
more_info: &str,
) -> Result<Option<String>>;
fn shutdown(&mut self) -> Result<i32>;
}