summaryrefslogtreecommitdiff
path: root/schist_desktop_gui/src/gui.rs
diff options
context:
space:
mode:
authorJoe Carstairs <me@joeac.net>2025-08-15 16:02:40 +0000
committerjoeac <me@joeac.net>2025-08-15 16:02:40 +0000
commit703496a49315f7b67442abf0e0df3c41d3605d3b (patch)
tree8e92f3842710162f3b26e910eb931950c1049f07 /schist_desktop_gui/src/gui.rs
parent8d714f760bd0349560d464583a151a04a19de1c9 (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.rs47
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()
}