From 1fdf569278fab1d837285492760605123fe7bcdc Mon Sep 17 00:00:00 2001 From: DecDuck Date: Fri, 4 Apr 2025 11:07:10 +1100 Subject: [PATCH] fix: offline game status, user widget and use binary-encoding --- src-tauri/src/games/library.rs | 10 ++++++---- src-tauri/src/remote/auth.rs | 11 +++++++++-- src-tauri/src/remote/cache.rs | 5 +++-- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src-tauri/src/games/library.rs b/src-tauri/src/games/library.rs index 1e1509f..d55d782 100644 --- a/src-tauri/src/games/library.rs +++ b/src-tauri/src/games/library.rs @@ -2,7 +2,7 @@ use std::fs::remove_dir_all; use std::sync::Mutex; use std::thread::spawn; -use log::{debug, error, warn}; +use log::{debug, error, info, warn}; use serde::{Deserialize, Serialize}; use tauri::Emitter; use tauri::{AppHandle, Manager}; @@ -137,7 +137,7 @@ pub fn fetch_game_logic( status, }; - cache_object(id, &data)?; + cache_object(id, game)?; return Ok(data); } @@ -175,7 +175,7 @@ pub fn fetch_game_logic( status, }; - cache_object(id, &data)?; + cache_object(id, &game)?; Ok(data) } @@ -184,7 +184,9 @@ pub fn fetch_game_logic_offline( id: String, _state: tauri::State<'_, Mutex>, ) -> Result { - get_cached_object::(id) + let status = GameStatusManager::fetch_state(&id); + let game = get_cached_object::(id)?; + Ok(FetchGameStruct { game, status }) } pub fn fetch_game_verion_options_logic( diff --git a/src-tauri/src/remote/auth.rs b/src-tauri/src/remote/auth.rs index 9fec02c..676fc1e 100644 --- a/src-tauri/src/remote/auth.rs +++ b/src-tauri/src/remote/auth.rs @@ -17,7 +17,10 @@ use crate::{ AppState, AppStatus, User, DB, }; -use super::requests::make_request; +use super::{ + cache::{cache_object, get_cached_object}, + requests::make_request, +}; #[derive(Serialize)] #[serde(rename_all = "camelCase")] @@ -198,9 +201,13 @@ pub fn setup() -> (AppStatus, Option) { if auth.is_some() { let user_result = match fetch_user() { Ok(data) => data, - Err(RemoteAccessError::FetchError(_)) => return (AppStatus::Offline, None), + Err(RemoteAccessError::FetchError(_)) => { + let user = get_cached_object::("user".to_owned()).unwrap(); + return (AppStatus::Offline, Some(user)); + } Err(_) => return (AppStatus::SignedInNeedsReauth, None), }; + cache_object("user", &user_result).unwrap(); return (AppStatus::SignedIn, Some(user_result)); } diff --git a/src-tauri/src/remote/cache.rs b/src-tauri/src/remote/cache.rs index 4662867..72f764e 100644 --- a/src-tauri/src/remote/cache.rs +++ b/src-tauri/src/remote/cache.rs @@ -2,6 +2,7 @@ use crate::{database::db::borrow_db_checked, error::remote_access_error::RemoteA use cacache::Integrity; use http::{header::CONTENT_TYPE, response::Builder as ResponseBuilder, Response}; use serde::{de::DeserializeOwned, Deserialize, Serialize}; +use serde_binary::binary_stream::Endian; use tauri::{UriSchemeContext, UriSchemeResponder}; use super::{auth::generate_authorization_header, requests::make_request}; @@ -22,7 +23,7 @@ pub fn cache_object<'a, K: AsRef, D: Serialize + DeserializeOwned>( key: K, data: &D, ) -> Result { - let bytes = serde_json::to_vec(data).unwrap(); + let bytes = serde_binary::to_vec(data, Endian::Little).unwrap(); cacache::write_sync(&borrow_db_checked().cache_dir, key, bytes) .map_err(|e| RemoteAccessError::Cache(e)) } @@ -31,7 +32,7 @@ pub fn get_cached_object<'a, K: AsRef, D: Serialize + DeserializeOwned>( ) -> Result { let bytes = cacache::read_sync(&borrow_db_checked().cache_dir, key) .map_err(|e| RemoteAccessError::Cache(e))?; - let data = serde_json::from_slice::(&bytes).unwrap(); + let data = serde_binary::from_slice::(&bytes, Endian::Little).unwrap(); Ok(data) }