feat(cache): Implemented caching for game metadata

This commit is contained in:
quexeky
2025-02-08 11:09:11 +11:00
parent 9977107374
commit 4c59c5d6c1
6 changed files with 16 additions and 16 deletions

View File

@ -191,7 +191,7 @@ pub fn setup() -> (AppStatus, Option<User>) {
if auth.is_some() {
let user_result = match fetch_user() {
Ok(data) => data,
Err(RemoteAccessError::FetchError(_)) => return (AppStatus::ServerUnavailable, None),
Err(RemoteAccessError::FetchError(_)) => return (AppStatus::Offline, None),
Err(_) => return (AppStatus::SignedInNeedsReauth, None),
};
return (AppStatus::SignedIn, Some(user_result));

View File

@ -1,5 +1,8 @@
use cacache::Integrity;
use openssl::hash::{hash, MessageDigest};
use rustix::path::Arg;
use serde::{de::DeserializeOwned, Deserialize, Serialize};
use serde_binary::binary_stream::Endian;
use crate::{database::db::borrow_db_checked, error::remote_access_error::RemoteAccessError};
@ -17,11 +20,11 @@ macro_rules! offline {
}
pub fn cache_object<'a, K: AsRef<str>, D: Serialize + DeserializeOwned>(key: K, data: &D) -> Result<Integrity, RemoteAccessError> {
let bytes = bincode::serialize(data).unwrap();
let bytes = serde_json::to_vec(data).unwrap();
cacache::write_sync(&borrow_db_checked().cache_dir, key, bytes).map_err(|e| RemoteAccessError::Cache(e))
}
pub fn get_cached_object<'a, K: AsRef<str>, D: Serialize + DeserializeOwned>(key: K) -> Result<D,RemoteAccessError> {
pub fn get_cached_object<'a, K: AsRef<str>, D: Serialize + DeserializeOwned>(key: K) -> Result<D, RemoteAccessError> {
let bytes = cacache::read_sync(&borrow_db_checked().cache_dir, key).map_err(|e| RemoteAccessError::Cache(e))?;
let data = bincode::deserialize::<D>(&bytes).unwrap();
let data = serde_json::from_slice::<D>(&bytes).unwrap();
Ok(data)
}