feat: wire App with reading view dispatch, theme toggle, and reading position save

This commit is contained in:
Developer
2026-05-13 23:52:21 +08:00
parent d1c3a9058a
commit 4a1ac384a1

View File

@@ -143,6 +143,44 @@ impl eframe::App for App {
fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {
if self.state.book.is_none() {
self.welcome_view(ctx);
return;
}
let file_path = self.state.file_path
.as_ref()
.map(|p| p.to_string_lossy().to_string())
.unwrap_or_default();
egui::CentralPanel::default().show(ctx, |ui| {
let book = self.state.book.as_mut().unwrap();
let action = crate::reader::reading_view(
ui,
book,
&mut self.state.current_section,
&mut self.state.current_page,
&mut self.state.sidebar_open,
&mut self.settings.font_size,
&self.settings.theme,
&file_path,
);
if action.go_back {
self.save_reading_position();
self.state.book = None;
self.state.current_section = 0;
self.state.current_page = 0;
}
if action.toggle_theme {
self.settings.theme = match self.settings.theme {
theme::Theme::Light => theme::Theme::Dark,
theme::Theme::Dark => theme::Theme::Light,
};
ctx.set_style(theme::create_style(&self.settings.theme));
}
});
self.save_reading_position();
self.save_settings();
}
}