From 03f70e2f8a804d77e8a6fd678abbb76d22f09c82 Mon Sep 17 00:00:00 2001 From: trivernis Date: Wed, 17 Nov 2021 20:45:14 +0100 Subject: [PATCH] Change custom schemes to run in tokio runtime Signed-off-by: trivernis --- .../src/tauri_plugin/custom_schemes.rs | 55 +++++++++++++------ mediarepo-api/src/tauri_plugin/state.rs | 4 -- 2 files changed, 37 insertions(+), 22 deletions(-) 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)]