diff --git a/liana-gui/src/app/state/export.rs b/liana-gui/src/app/state/export.rs index a517c0ee..193e6e3c 100644 --- a/liana-gui/src/app/state/export.rs +++ b/liana-gui/src/app/state/export.rs @@ -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 { + pub fn launch(&self) -> Task { 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 { - 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 { + 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 { let modal = Modal::new( diff --git a/liana-gui/src/app/state/transactions.rs b/liana-gui/src/app/state/transactions.rs index b01573e9..a8a0d4fd 100644 --- a/liana-gui/src/app/state/transactions.rs +++ b/liana-gui/src/app/state/transactions.rs @@ -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(), }; } diff --git a/liana-gui/src/export.rs b/liana-gui/src/export.rs index b530719a..ef6090ce 100644 --- a/liana-gui/src/export.rs +++ b/liana-gui/src/export.rs @@ -359,15 +359,14 @@ pub fn export_subscription( Status::Stopped => { break; } - Status::Running => { - sleep(time::Duration::from_millis(100)).await; - continue; - } + Status::Running => {} } let msg = state.receiver.try_recv(); let disconnected = match msg { Ok(m) => { - let _ = output.send(m).await; + if let Err(e) = output.send(m).await { + tracing::error!("export_subscription() fail to send message: {}", e); + } continue; } Err(e) => match e { @@ -379,7 +378,9 @@ pub fn export_subscription( let handle = match state.handle.take() { Some(h) => h, None => { - let _ = output.send(ExportProgress::Error(Error::HandleLost)).await; + if let Err(e) = output.send(ExportProgress::Error(Error::HandleLost)).await { + tracing::error!("export_subscription() fail to send message: {}", e); + } continue; } }; @@ -394,14 +395,14 @@ pub fn export_subscription( } }; if let Some(msg) = msg { - let _ = output.send(msg).await; + if let Err(e) = output.send(msg).await { + tracing::error!("export_subscription() fail to send message: {}", e); + } continue; } - // => release handle lock state.handle = Some(handle); sleep(time::Duration::from_millis(100)).await; - let _ = output.send(ExportProgress::None).await; } }) }