diff options
| author | Joe Carstairs <me@joeac.net> | 2025-08-15 16:02:40 +0000 |
|---|---|---|
| committer | joeac <me@joeac.net> | 2025-08-15 16:02:40 +0000 |
| commit | 703496a49315f7b67442abf0e0df3c41d3605d3b (patch) | |
| tree | 8e92f3842710162f3b26e910eb931950c1049f07 /schist_desktop_gui/src/gui.rs | |
| parent | 8d714f760bd0349560d464583a151a04a19de1c9 (diff) | |
task-012 (#2)
Co-authored-by: Joe Carstairs <jcarstairs@scottlogic.com>
Reviewed-on: https://git.joeac.net/joeac/schist/pulls/2
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 | 47 |
1 files changed, 34 insertions, 13 deletions
diff --git a/schist_desktop_gui/src/gui.rs b/schist_desktop_gui/src/gui.rs index 0f84f41..d22e999 100644 --- a/schist_desktop_gui/src/gui.rs +++ b/schist_desktop_gui/src/gui.rs @@ -1,12 +1,13 @@ pub mod components; pub mod screens; +use diesel::SqliteConnection; use iced::Element; use schist_models::{account::Account, bucket::Bucket}; +use schist_queries::{accounts::get_all_accounts, buckets::get_all_buckets}; use crate::{ config::Config, - dummy_data::{self, fetch_accounts, fetch_buckets}, gui::screens::{main_screen, MainScreen, Screen}, shortcut::KeyBind, traits::{Component, Viewable}, @@ -16,8 +17,23 @@ use crate::{ pub enum Message { Event(iced::Event), MainScreenMessage(main_screen::Message), - RefetchedAccounts(Result<Vec<Account>, dummy_data::Error>), - RefetchedBuckets(Result<Vec<Bucket>, dummy_data::Error>), + RefetchedAccounts(FetchResult<Vec<Account>>), + RefetchedBuckets(FetchResult<Vec<Bucket>>), +} + +pub type FetchResult<T> = std::result::Result<T, FetchError>; + +#[derive(Clone, Debug)] +pub struct FetchError { + pub message: String, +} + +impl FetchError { + pub fn new(err: anyhow::Error) -> Self { + Self { + message: format!("{}", err), + } + } } pub struct Gui { @@ -28,25 +44,30 @@ pub struct Gui { } impl Gui { - pub fn new() -> (Self, iced::Task<Message>) { - let tasks = vec![ - iced::Task::perform(fetch_buckets(), Message::RefetchedBuckets), - iced::Task::perform(fetch_accounts(), Message::RefetchedAccounts), - ]; + pub fn new(connection: &mut SqliteConnection) -> (Self, iced::Task<Message>) { let buckets = Vec::new(); let accounts = Vec::new(); - let gui = Self { + let mut gui = Self { active_screen: Screen::Main, buckets: buckets.clone(), main_screen: MainScreen::new(buckets, accounts), config: Config::default(), }; - (gui, iced::Task::batch(tasks)) + + 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) } } impl Gui { - pub fn view(&self) -> Element<Message> { + pub fn view<'a>(&'a self) -> Element<'a, Message> { match self.active_screen { Screen::Main => self.main_screen.view().map(Message::MainScreenMessage), } @@ -109,7 +130,7 @@ impl Gui { self.main_screen .update(main_screen::Message::SetBuckets(buckets)); } - Err(err) => println!("Failed to get buckets: {:?}", err), + Err(err) => println!("Failed to get buckets: {:?}", err.message), }; iced::Task::none() } @@ -119,7 +140,7 @@ impl Gui { self.main_screen .update(main_screen::Message::SetAccounts(accounts)); } - Err(err) => println!("Failed to get accounts: {:?}", err), + Err(err) => println!("Failed to get accounts: {:?}", err.message), } iced::Task::none() } |
