From 9411cbd1ab50ba3cdc5cf1ec8b018ae03a8026ed Mon Sep 17 00:00:00 2001 From: trivernis Date: Sat, 20 Nov 2021 15:47:56 +0100 Subject: [PATCH] Add plugin command to save files on the local system Signed-off-by: trivernis --- mediarepo-api/src/client_api/file.rs | 2 +- mediarepo-api/src/tauri_plugin/commands/file.rs | 14 ++++++++++++++ mediarepo-api/src/tauri_plugin/custom_schemes.rs | 2 +- mediarepo-api/src/tauri_plugin/mod.rs | 3 ++- 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/mediarepo-api/src/client_api/file.rs b/mediarepo-api/src/client_api/file.rs index a4e0cc6..8940ba7 100644 --- a/mediarepo-api/src/client_api/file.rs +++ b/mediarepo-api/src/client_api/file.rs @@ -79,7 +79,7 @@ where /// Reads the file and returns its contents as bytes #[tracing::instrument(level = "debug", skip(self))] - pub async fn read_file_by_hash(&self, id: FileIdentifier) -> ApiResult> { + pub async fn read_file(&self, id: FileIdentifier) -> ApiResult> { let payload: BytePayload = self .emit_and_get("read_file", ReadFileRequest { id }) .await?; diff --git a/mediarepo-api/src/tauri_plugin/commands/file.rs b/mediarepo-api/src/tauri_plugin/commands/file.rs index 822510d..6d68922 100644 --- a/mediarepo-api/src/tauri_plugin/commands/file.rs +++ b/mediarepo-api/src/tauri_plugin/commands/file.rs @@ -99,6 +99,20 @@ pub async fn update_file_name( Ok(metadata) } +/// Saves a file on the local system +#[tauri::command] +pub async fn save_file_locally( + api_state: ApiAccess<'_>, + id: i64, + path: String, +) -> PluginResult<()> { + let api = api_state.api().await?; + let content = api.file.read_file(FileIdentifier::ID(id)).await?; + fs::write(PathBuf::from(path), content).await?; + + Ok(()) +} + #[tauri::command] pub async fn resolve_paths_to_files(paths: Vec) -> PluginResult> { let mut files = Vec::new(); diff --git a/mediarepo-api/src/tauri_plugin/custom_schemes.rs b/mediarepo-api/src/tauri_plugin/custom_schemes.rs index 2e9f154..29695eb 100644 --- a/mediarepo-api/src/tauri_plugin/custom_schemes.rs +++ b/mediarepo-api/src/tauri_plugin/custom_schemes.rs @@ -70,7 +70,7 @@ async fn content_scheme(app: &AppHandle, request: &Request) -> Re let mime = file.mime_type.unwrap_or("image/png".to_string()); let bytes = api .file - .read_file_by_hash(FileIdentifier::Hash(hash.to_string())) + .read_file(FileIdentifier::Hash(hash.to_string())) .await?; buf_state.add_entry(hash.to_string(), mime.clone(), bytes.clone()); ResponseBuilder::new() diff --git a/mediarepo-api/src/tauri_plugin/mod.rs b/mediarepo-api/src/tauri_plugin/mod.rs index 58b8800..55d62e8 100644 --- a/mediarepo-api/src/tauri_plugin/mod.rs +++ b/mediarepo-api/src/tauri_plugin/mod.rs @@ -52,7 +52,8 @@ impl MediarepoPlugin { create_tags, update_file_name, resolve_paths_to_files, - add_local_file + add_local_file, + save_file_locally ]), } }