diff options
| author | Joe Carstairs <me@joeac.net> | 2025-08-25 16:35:45 +0000 |
|---|---|---|
| committer | joeac <me@joeac.net> | 2025-08-25 16:35:45 +0000 |
| commit | fe85652e4d3e8906824baddaafd05d19105579b8 (patch) | |
| tree | 31b56e31cbf289a34ec1d6707becf3c60933b56f /schist_desktop_gui/src/gui.rs | |
| parent | d082a30de6a0cbd1fbe2ab5a4316db0891004129 (diff) | |
task-072
Co-authored-by: Joe Carstairs <jcarstairs@scottlogic.com>
Reviewed-on: https://git.joeac.net/joeac/schist/pulls/3
Co-authored-by: Joe Carstairs <me@joeac.net>
Co-committed-by: Joe Carstairs <me@joeac.net>
Diffstat (limited to 'schist_desktop_gui/src/gui.rs')
| -rw-r--r-- | schist_desktop_gui/src/gui.rs | 50 |
1 files changed, 29 insertions, 21 deletions
diff --git a/schist_desktop_gui/src/gui.rs b/schist_desktop_gui/src/gui.rs index 099ff74..b7405c6 100644 --- a/schist_desktop_gui/src/gui.rs +++ b/schist_desktop_gui/src/gui.rs @@ -8,7 +8,8 @@ use schist_queries::{accounts::get_all_accounts, buckets::get_all_buckets}; use crate::{ config::Config, - gui::screens::{main_screen, MainScreen, Screen}, + gui::screens::{files_screen, main_screen, FilesScreen, MainScreen, Screen}, + paths::get_file_paths, shortcut::KeyBind, traits::{Component, Viewable}, }; @@ -16,6 +17,7 @@ use crate::{ #[derive(Clone, Debug)] pub enum Message { Event(iced::Event), + FilesScreenMessage(files_screen::Message), MainScreenMessage(main_screen::Message), RefetchedAccounts(FetchResult<Vec<Account>>), RefetchedBuckets(FetchResult<Vec<Bucket>>), @@ -38,38 +40,31 @@ impl FetchError { pub struct Gui { active_screen: Screen, - buckets: Vec<Bucket>, + connection: Option<SqliteConnection>, + files_screen: FilesScreen, main_screen: MainScreen, config: Config, } impl Gui { - pub fn new(connection: &mut SqliteConnection) -> (Self, iced::Task<Message>) { - let buckets = Vec::new(); - let accounts = Vec::new(); - let mut gui = Self { - active_screen: Screen::Main, - buckets: buckets.clone(), - main_screen: MainScreen::new(buckets, accounts), + pub fn new() -> (Self, iced::Task<Message>) { + let file_paths = get_file_paths(); + let gui = Self { + active_screen: Screen::FilesScreen, + connection: None, + files_screen: FilesScreen::new(&file_paths), + main_screen: MainScreen::new(), config: Config::default(), }; - - let buckets = get_all_buckets(connection).map_err(FetchError::new); - let accounts = get_all_accounts(connection).map_err(FetchError::new); - - let tasks = iced::Task::batch(vec![ - gui.update(Message::RefetchedBuckets(buckets)), - gui.update(Message::RefetchedAccounts(accounts)), - ]); - - (gui, tasks) + (gui, iced::Task::none()) } } impl Gui { pub fn view<'a>(&'a self) -> Element<'a, Message> { match self.active_screen { - Screen::Main => self.main_screen.view().map(Message::MainScreenMessage), + Screen::FilesScreen => self.files_screen.view().map(Message::FilesScreenMessage), + Screen::MainScreen => self.main_screen.view().map(Message::MainScreenMessage), } } @@ -126,7 +121,6 @@ impl Gui { Message::RefetchedBuckets(buckets) => { match buckets { Ok(buckets) => { - self.buckets = buckets.clone(); self.main_screen .update(main_screen::Message::SetBuckets(buckets)); } @@ -144,6 +138,20 @@ impl Gui { } iced::Task::none() } + Message::FilesScreenMessage(message) => match self.files_screen.update(message) { + files_screen::Action::None => iced::Task::none(), + files_screen::Action::OpenedFile(sqlite_connection) => { + let mut connection = sqlite_connection.connection; + let buckets = get_all_buckets(&mut connection).map_err(FetchError::new); + let accounts = get_all_accounts(&mut connection).map_err(FetchError::new); + self.connection = Some(connection); + self.active_screen = Screen::MainScreen; + iced::Task::batch(vec![ + self.update(Message::RefetchedBuckets(buckets)), + self.update(Message::RefetchedAccounts(accounts)), + ]) + } + }, } } } |
