gui: ExportModal.update() pass an ExportMessage instead app::message::Message in order to be used in a more generic way

This commit is contained in:
pythcoiner 2025-03-02 12:13:22 +01:00
parent 74f10a564f
commit 85024d64bd
No known key found for this signature in database
GPG Key ID: C1048AEEDF303B88
2 changed files with 41 additions and 41 deletions

View File

@ -9,7 +9,7 @@ use tokio::task::JoinHandle;
use crate::{
app::{
message::Message,
self,
view::{self, export::export_modal},
},
daemon::Daemon,
@ -37,53 +37,47 @@ impl ExportModal {
}
}
pub fn launch(&self) -> Task<Message> {
pub fn launch(&self) -> Task<app::message::Message> {
Task::perform(get_path(), |m| {
Message::View(view::Message::Export(ExportMessage::Path(m)))
app::message::Message::View(view::Message::Export(ExportMessage::Path(m)))
})
}
pub fn update(&mut self, message: Message) -> Task<Message> {
if let Message::View(view::Message::Export(m)) = message {
match m {
ExportMessage::ExportProgress(m) => match m {
ExportProgress::Started(handle) => {
self.handle = Some(handle);
self.state = ExportState::Progress(0.0);
}
ExportProgress::Progress(p) => {
if let ExportState::Progress(_) = self.state {
self.state = ExportState::Progress(p);
}
}
ExportProgress::Finished | ExportProgress::Ended => {
self.state = ExportState::Ended
}
ExportProgress::Error(e) => self.error = Some(e),
ExportProgress::None => {}
},
ExportMessage::TimedOut => {
self.stop(ExportState::TimedOut);
pub fn update(&mut self, message: ExportMessage) -> Task<app::message::Message> {
match message {
ExportMessage::ExportProgress(m) => match m {
ExportProgress::Started(handle) => {
self.handle = Some(handle);
self.state = ExportState::Progress(0.0);
}
ExportMessage::UserStop => {
self.stop(ExportState::Aborted);
}
ExportMessage::Path(p) => {
if let Some(path) = p {
self.path = Some(path);
self.start();
} else {
return Task::perform(async {}, |_| {
Message::View(view::Message::Export(ExportMessage::Close))
});
ExportProgress::Progress(p) => {
if let ExportState::Progress(_) = self.state {
self.state = ExportState::Progress(p);
}
}
ExportMessage::Close | ExportMessage::Open => { /* unreachable */ }
ExportProgress::Finished | ExportProgress::Ended => self.state = ExportState::Ended,
ExportProgress::Error(e) => self.error = Some(e),
ExportProgress::None => {}
},
ExportMessage::TimedOut => {
self.stop(ExportState::TimedOut);
}
Task::none()
} else {
Task::none()
ExportMessage::UserStop => {
self.stop(ExportState::Aborted);
}
ExportMessage::Path(p) => {
if let Some(path) = p {
self.path = Some(path);
self.start();
} else {
return Task::perform(async {}, |_| {
app::message::Message::View(view::Message::Export(ExportMessage::Close))
});
}
}
ExportMessage::Close | ExportMessage::Open => { /* unreachable */ }
}
Task::none()
}
pub fn view<'a>(&'a self, content: Element<'a, view::Message>) -> Element<view::Message> {
let modal = Modal::new(

View File

@ -279,10 +279,16 @@ impl State for TransactionsPanel {
self.modal = TransactionsModal::None;
}
}
_ => {
ref msg => {
return match &mut self.modal {
TransactionsModal::CreateRbf(modal) => modal.update(daemon, _cache, message),
TransactionsModal::Export(modal) => modal.update(message),
TransactionsModal::Export(modal) => {
if let Message::View(view::Message::Export(m)) = msg {
modal.update(m.clone())
} else {
Task::none()
}
}
TransactionsModal::None => Task::none(),
};
}