summaryrefslogtreecommitdiff
path: root/schist_desktop_gui/src/gui.rs
diff options
context:
space:
mode:
authorJoe Carstairs <me@joeac.net>2025-08-25 16:35:45 +0000
committerjoeac <me@joeac.net>2025-08-25 16:35:45 +0000
commitfe85652e4d3e8906824baddaafd05d19105579b8 (patch)
tree31b56e31cbf289a34ec1d6707becf3c60933b56f /schist_desktop_gui/src/gui.rs
parentd082a30de6a0cbd1fbe2ab5a4316db0891004129 (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.rs50
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)),
+ ])
+ }
+ },
}
}
}