From 205d627f99731d3ca244007c4a1fb865afec5a1f Mon Sep 17 00:00:00 2001 From: kernelkind Date: Mon, 13 Jan 2025 18:07:57 -0500 Subject: [PATCH] use TimedSerializer in AppSizeHandler Signed-off-by: kernelkind --- crates/notedeck_chrome/src/app_size.rs | 78 ++++---------------------- crates/notedeck_chrome/src/lib.rs | 1 + 2 files changed, 13 insertions(+), 66 deletions(-) diff --git a/crates/notedeck_chrome/src/app_size.rs b/crates/notedeck_chrome/src/app_size.rs index d577263a..03156223 100644 --- a/crates/notedeck_chrome/src/app_size.rs +++ b/crates/notedeck_chrome/src/app_size.rs @@ -1,85 +1,31 @@ -use std::time::{Duration, Instant}; +use std::time::Duration; use egui::Context; -use tracing::info; -use notedeck::{storage, DataPath, DataPathType, Directory}; +use notedeck::{DataPath, DataPathType}; + +use crate::timed_serializer::TimedSerializer; pub struct AppSizeHandler { - directory: Directory, - saved_size: Option, - last_saved: Instant, + serializer: TimedSerializer, } -static FILE_NAME: &str = "app_size.json"; -static DELAY: Duration = Duration::from_millis(500); - impl AppSizeHandler { pub fn new(path: &DataPath) -> Self { - let directory = Directory::new(path.path(DataPathType::Setting)); + let serializer = + TimedSerializer::new(path, DataPathType::Setting, "app_size.json".to_owned()) + .with_delay(Duration::from_millis(500)); - Self { - directory, - saved_size: None, - last_saved: Instant::now() - DELAY, - } + Self { serializer } } pub fn try_save_app_size(&mut self, ctx: &Context) { // There doesn't seem to be a way to check if user is resizing window, so if the rect is different than last saved, we'll wait DELAY before saving again to avoid spamming io - if self.last_saved.elapsed() >= DELAY { - internal_try_save_app_size(&self.directory, &mut self.saved_size, ctx); - self.last_saved = Instant::now(); - } + let cur_size = ctx.input(|i| i.screen_rect.size()); + self.serializer.try_save(cur_size); } pub fn get_app_size(&self) -> Option { - if self.saved_size.is_some() { - return self.saved_size; - } - - if let Ok(file_contents) = self.directory.get_file(FILE_NAME.to_owned()) { - if let Ok(rect) = serde_json::from_str::(&file_contents) { - return Some(rect); - } - } else { - info!("Could not find {}", FILE_NAME); - } - - None - } -} - -fn internal_try_save_app_size( - interactor: &Directory, - maybe_saved_size: &mut Option, - ctx: &Context, -) { - let cur_size = ctx.input(|i| i.screen_rect.size()); - if let Some(saved_size) = maybe_saved_size { - if cur_size != *saved_size { - try_save_size(interactor, cur_size, maybe_saved_size); - } - } else { - try_save_size(interactor, cur_size, maybe_saved_size); - } -} - -fn try_save_size( - interactor: &Directory, - cur_size: egui::Vec2, - maybe_saved_size: &mut Option, -) { - if let Ok(serialized_rect) = serde_json::to_string(&cur_size) { - if storage::write_file( - &interactor.file_path, - FILE_NAME.to_owned(), - &serialized_rect, - ) - .is_ok() - { - info!("wrote size {}", cur_size,); - *maybe_saved_size = Some(cur_size); - } + self.serializer.get_item() } } diff --git a/crates/notedeck_chrome/src/lib.rs b/crates/notedeck_chrome/src/lib.rs index 63401dc4..f1c72d97 100644 --- a/crates/notedeck_chrome/src/lib.rs +++ b/crates/notedeck_chrome/src/lib.rs @@ -2,6 +2,7 @@ pub mod app_size; pub mod fonts; pub mod setup; pub mod theme; +pub mod timed_serializer; mod app;