summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoe Carstairs <me@joeac.net>2026-02-08 15:22:50 +0000
committerJoe Carstairs <me@joeac.net>2026-02-08 15:22:50 +0000
commitb9244f6049c685c2b983632359676521506f8772 (patch)
treead553b4c120f9bd0b3807d9f516845ab1de49cee
parent5b592ca899ad5a9090c1acd5776221f79e44d121 (diff)
task-085: fetches transactions from database
-rw-r--r--schist_desktop_gui/src/gui.rs19
-rw-r--r--schist_desktop_gui/src/gui/components/transactions_view.rs10
-rw-r--r--schist_desktop_gui/src/gui/screens/main_screen/main_screen.rs9
3 files changed, 35 insertions, 3 deletions
diff --git a/schist_desktop_gui/src/gui.rs b/schist_desktop_gui/src/gui.rs
index 26f147b..9648ff0 100644
--- a/schist_desktop_gui/src/gui.rs
+++ b/schist_desktop_gui/src/gui.rs
@@ -7,8 +7,10 @@ use std::{path::PathBuf, str::FromStr};
use diesel::SqliteConnection;
use iced::{Element, Task};
-use schist_models::{Account, Bucket};
-use schist_queries::{accounts::get_all_accounts, buckets::get_all_buckets};
+use schist_models::{Account, Bucket, Transaction};
+use schist_queries::{
+ accounts::get_all_accounts, buckets::get_all_buckets, transactions::get_all_transactions,
+};
use crate::{
cache::{put_to_cache, remove_from_cache, CACHE_KEYS},
@@ -32,6 +34,7 @@ pub enum Message {
MainScreenMessage(main_screen::Message),
RefetchedAccounts(FetchResult<Vec<Account>>),
RefetchedBuckets(FetchResult<Vec<Bucket>>),
+ RefetchedTransactions(FetchResult<Vec<Transaction>>),
}
pub type FetchResult<T> = std::result::Result<T, FetchError>;
@@ -185,6 +188,16 @@ impl Gui {
}
iced::Task::none()
}
+ Message::RefetchedTransactions(transactions) => {
+ match transactions {
+ Ok(transactions) => {
+ self.main_screen
+ .update(main_screen::Message::SetTransactions(transactions));
+ }
+ Err(err) => println!("Failed to get transactions: {:?}", err.message),
+ };
+ Task::none()
+ }
Message::FilesScreenMessage(message) => self.update_files_screen(message),
Message::FailedToCreateFile(err) => {
self.update_files_screen(files_screen::Message::ReportFailedToCreateFile(err))
@@ -226,6 +239,7 @@ impl Gui {
) -> Task<Message> {
let buckets = get_all_buckets(&mut connection).map_err(FetchError::new);
let accounts = get_all_accounts(&mut connection).map_err(FetchError::new);
+ let transactions = get_all_transactions(&mut connection).map_err(FetchError::new);
self.connection = Some(connection);
self.active_screen = Screen::MainScreen;
if let Some(path) = path.to_str() {
@@ -236,6 +250,7 @@ impl Gui {
iced::Task::batch(vec![
self.update(Message::RefetchedBuckets(buckets)),
self.update(Message::RefetchedAccounts(accounts)),
+ self.update(Message::RefetchedTransactions(transactions)),
])
}
diff --git a/schist_desktop_gui/src/gui/components/transactions_view.rs b/schist_desktop_gui/src/gui/components/transactions_view.rs
index d28629d..6f2ad44 100644
--- a/schist_desktop_gui/src/gui/components/transactions_view.rs
+++ b/schist_desktop_gui/src/gui/components/transactions_view.rs
@@ -26,6 +26,7 @@ pub enum Message {
SelectNextAccount,
SelectPrevAccount,
SetAccounts(Vec<Account>),
+ SetTransactions(Vec<Transaction>),
}
pub enum Action {
@@ -86,6 +87,7 @@ impl<'a> Component<'a, Message, Action> for TransactionsView {
self.navigation.update(message);
Action::None
}
+
Message::SetAccounts(accounts) => {
let account_navigation_entries: Vec<AccountNavigationEntry> = accounts
.into_iter()
@@ -95,10 +97,18 @@ impl<'a> Component<'a, Message, Action> for TransactionsView {
.update(navigation::Message::SetOptions(account_navigation_entries));
Action::None
}
+
+ Message::SetTransactions(transactions) => {
+ self.transactions_by_account_id =
+ transactions.into_iter().into_group_map_by(|t| t.account_id);
+ Action::None
+ }
+
Message::SelectNextAccount => {
self.navigation.update(navigation::Message::SelectNext);
Action::None
}
+
Message::SelectPrevAccount => {
self.navigation.update(navigation::Message::SelectPrev);
Action::None
diff --git a/schist_desktop_gui/src/gui/screens/main_screen/main_screen.rs b/schist_desktop_gui/src/gui/screens/main_screen/main_screen.rs
index 0e8d084..0a2c355 100644
--- a/schist_desktop_gui/src/gui/screens/main_screen/main_screen.rs
+++ b/schist_desktop_gui/src/gui/screens/main_screen/main_screen.rs
@@ -4,7 +4,7 @@ use iced::{
widget::{row, Container},
Element, Length,
};
-use schist_models::{Account, Bucket};
+use schist_models::{Account, Bucket, Transaction};
use crate::{
gui::components::{
@@ -36,6 +36,7 @@ pub enum Message {
SelectView(View),
SetAccounts(Vec<Account>),
SetBuckets(Vec<Bucket>),
+ SetTransactions(Vec<Transaction>),
ViewNavigationMessage(navigation::Message<View>),
}
@@ -118,6 +119,12 @@ impl<'a> Component<'a, Message, Action> for MainScreen {
Action::None
}
+ Message::SetTransactions(transactions) => {
+ self.transactions_view
+ .update(transactions_view::Message::SetTransactions(transactions));
+ Action::None
+ }
+
Message::NextItem => match self.active_view {
View::Balances => {
self.balances_view