diff --git a/mediarepo-api/src/tauri_plugin/custom_schemes.rs b/mediarepo-api/src/tauri_plugin/custom_schemes.rs index 0b8ef4a..2998d93 100644 --- a/mediarepo-api/src/tauri_plugin/custom_schemes.rs +++ b/mediarepo-api/src/tauri_plugin/custom_schemes.rs @@ -1,10 +1,11 @@ -use crate::tauri_plugin::error::PluginError; +use crate::tauri_plugin::error::{PluginError, PluginResult}; use crate::tauri_plugin::state::{ApiState, BufferState}; use crate::types::identifier::FileIdentifier; use std::borrow::Cow; use std::collections::HashMap; use tauri::http::{Request, Response, ResponseBuilder}; use tauri::{AppHandle, Builder, Manager, Runtime}; +use tokio::runtime::{Builder as TokioRuntimeBuilder, Runtime as TokioRuntime}; use url::Url; type Result = std::result::Result>; @@ -12,8 +13,21 @@ type Result = std::result::Result>; pub fn register_custom_uri_schemes(builder: Builder) -> Builder { builder .register_uri_scheme_protocol("once", once_scheme) - .register_uri_scheme_protocol("content", content_scheme) - .register_uri_scheme_protocol("thumb", thumb_scheme) + .register_uri_scheme_protocol("content", |a, r| { + build_uri_runtime()?.block_on(content_scheme(a, r)) + }) + .register_uri_scheme_protocol("thumb", |a, r| { + build_uri_runtime()?.block_on(thumb_scheme(a, r)) + }) +} + +fn build_uri_runtime() -> PluginResult { + let runtime = TokioRuntimeBuilder::new_current_thread() + .thread_name("custom-scheme") + .max_blocking_threads(1) + .build()?; + + Ok(runtime) } fn once_scheme(app: &AppHandle, request: &Request) -> Result { @@ -35,7 +49,7 @@ fn once_scheme(app: &AppHandle, request: &Request) -> Result(app: &AppHandle, request: &Request) -> Result { +async fn content_scheme(app: &AppHandle, request: &Request) -> Result { let api_state = app.state::(); let buf_state = app.state::(); let hash = request.uri().trim_start_matches("content://"); @@ -46,14 +60,16 @@ fn content_scheme(app: &AppHandle, request: &Request) -> Result(app: &AppHandle, request: &Request) -> Result(app: &AppHandle, request: &Request) -> Result { +async fn thumb_scheme(app: &AppHandle, request: &Request) -> Result { let api_state = app.state::(); let buf_state = app.state::(); @@ -91,12 +107,15 @@ fn thumb_scheme(app: &AppHandle, request: &Request) -> Result PluginResult> { - futures::executor::block_on(self.api()) - } } #[derive(Clone)]