From 5db455ed3fcdf3514d1a167efa1e41ecd1fddf1b Mon Sep 17 00:00:00 2001 From: DecDuck Date: Thu, 15 Jan 2026 19:27:32 +1100 Subject: [PATCH 1/3] feat: async store loading --- src-tauri/Cargo.lock | 1 + src-tauri/games/src/library.rs | 2 +- src-tauri/remote/Cargo.toml | 1 + src-tauri/remote/src/lib.rs | 1 - src-tauri/remote/src/server_proto.rs | 14 +++++++------- src-tauri/src/lib.rs | 8 ++++---- 6 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 960c497..4a4b734 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -4782,6 +4782,7 @@ version = "0.1.0" dependencies = [ "async-trait", "bitcode", + "bytes", "chrono", "client", "database", diff --git a/src-tauri/games/src/library.rs b/src-tauri/games/src/library.rs index 2c99f7e..7cae119 100644 --- a/src-tauri/games/src/library.rs +++ b/src-tauri/games/src/library.rs @@ -8,7 +8,7 @@ use remote::{ auth::generate_authorization_header, error::RemoteAccessError, requests::generate_url, - utils::{DROP_CLIENT_ASYNC, DROP_CLIENT_SYNC}, + utils::DROP_CLIENT_ASYNC }; use serde::{Deserialize, Serialize}; use std::fs::remove_dir_all; diff --git a/src-tauri/remote/Cargo.toml b/src-tauri/remote/Cargo.toml index 3c45f10..376f0b4 100644 --- a/src-tauri/remote/Cargo.toml +++ b/src-tauri/remote/Cargo.toml @@ -6,6 +6,7 @@ edition = "2024" [dependencies] async-trait = "0.1.89" bitcode = "0.6.7" +bytes = "1.11.0" chrono = "0.4.42" client = { path = "../client", version = "0.1.0" } database = { path = "../database", version = "0.1.0" } diff --git a/src-tauri/remote/src/lib.rs b/src-tauri/remote/src/lib.rs index 45dcc73..545fa06 100644 --- a/src-tauri/remote/src/lib.rs +++ b/src-tauri/remote/src/lib.rs @@ -1,4 +1,3 @@ -#![feature(slice_as_array)] #![feature(slice_concat_trait)] #![feature(sync_nonpoison)] #![feature(nonpoison_mutex)] diff --git a/src-tauri/remote/src/server_proto.rs b/src-tauri/remote/src/server_proto.rs index 47406d2..2925988 100644 --- a/src-tauri/remote/src/server_proto.rs +++ b/src-tauri/remote/src/server_proto.rs @@ -8,7 +8,7 @@ use http::{ use log::{error, warn}; use tauri::UriSchemeResponder; -use crate::utils::DROP_CLIENT_SYNC; +use crate::utils::DROP_CLIENT_ASYNC; pub async fn handle_server_proto_offline_wrapper( request: Request>, @@ -29,8 +29,8 @@ pub async fn handle_server_proto_offline( .expect("Failed to build error response for proto offline")) } -pub fn handle_server_proto_wrapper(request: Request>, responder: UriSchemeResponder) { - match handle_server_proto(request) { +pub async fn handle_server_proto_wrapper(request: Request>, responder: UriSchemeResponder) { + match handle_server_proto(request).await { Ok(r) => responder.respond(r), Err(e) => { warn!("Cache error: {e}"); @@ -45,7 +45,7 @@ pub fn handle_server_proto_wrapper(request: Request>, responder: UriSche } } -fn handle_server_proto(request: Request>) -> Result>, StatusCode> { +async fn handle_server_proto(request: Request>) -> Result>, StatusCode> { let (remote_uri, web_token) = { let db_handle = borrow_db_checked(); let auth = match db_handle.auth.as_ref() { @@ -91,11 +91,11 @@ fn handle_server_proto(request: Request>) -> Result>, S HeaderValue::from_str(&format!("Bearer {web_token}")).unwrap(), ); - let client = DROP_CLIENT_SYNC.clone(); - let response = match client + let response = match DROP_CLIENT_ASYNC .request(request.method().clone(), new_uri.to_string()) .headers(headers) .send() + .await { Ok(response) => response, Err(e) => { @@ -116,7 +116,7 @@ fn handle_server_proto(request: Request>) -> Result>, S } }; - let response_body = match response.bytes() { + let response_body = match response.bytes().await { Ok(bytes) => bytes, Err(e) => return Err(e.status().unwrap_or(StatusCode::INTERNAL_SERVER_ERROR)), }; diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 3892b1f..3ada1b6 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -12,9 +12,7 @@ use std::{ sync::nonpoison::Mutex, time::SystemTime, }; -use ::client::{ - app_state::AppState, app_status::AppStatus, autostart::sync_autostart_on_startup, -}; +use ::client::{app_state::AppState, app_status::AppStatus, autostart::sync_autostart_on_startup}; use ::download_manager::DownloadManagerWrapper; use ::games::scan::scan_install_dirs; use ::process::ProcessManagerWrapper; @@ -412,7 +410,9 @@ pub fn run() { }); }) .register_asynchronous_uri_scheme_protocol("server", |_ctx, request, responder| { - handle_server_proto_wrapper(request, responder); + tauri::async_runtime::spawn(async move { + handle_server_proto_wrapper(request, responder).await; + }); }) .on_window_event(|window, event| { if let WindowEvent::CloseRequested { api, .. } = event { From 9f00d245568a01895918e62c521ab5f98217e7c2 Mon Sep 17 00:00:00 2001 From: DecDuck Date: Fri, 16 Jan 2026 15:15:56 +1100 Subject: [PATCH 2/3] feat: fix overscroll behaviour --- main/assets/main.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/main/assets/main.scss b/main/assets/main.scss index 8ba561a..4939d2d 100644 --- a/main/assets/main.scss +++ b/main/assets/main.scss @@ -6,6 +6,7 @@ html, body { -ms-overflow-style: none; /* IE and Edge / scrollbar-width: none; / Firefox */ + overscroll-behavior: none; } /* Hide scrollbar for Chrome, Safari and Opera */ From 6645e11d718fd1c7079046a36405d97121b9f5f0 Mon Sep 17 00:00:00 2001 From: DecDuck Date: Fri, 16 Jan 2026 15:25:38 +1100 Subject: [PATCH 3/3] fix: query params in server protocol --- main/components/LibrarySearch.vue | 13 ++++++++----- src-tauri/remote/src/server_proto.rs | 9 +-------- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/main/components/LibrarySearch.vue b/main/components/LibrarySearch.vue index fdc1f23..d76bd90 100644 --- a/main/components/LibrarySearch.vue +++ b/main/components/LibrarySearch.vue @@ -43,9 +43,12 @@ {{ nav.name }} - -