Skip to content

Commit 759411c

Browse files
committed
Merge #1580: Fix export subscription
a12bb0b gui: add logs when export_subscription() fail to send a message (pythcoiner) aa0c5d3 gui: minor cleanup in export_subscription() (pythcoiner) 3513226 gui: fix the export subscription being stuck in Running state (pythcoiner) 85024d6 gui: ExportModal.update() pass an ExportMessage instead app::message::Message in order to be used in a more generic way (pythcoiner) Pull request description: fix a bug introduced in #1550 where the export subscription were stuck in `Running` state & minor cleanups ACKs for top commit: edouardparis: ACK a12bb0b Tree-SHA512: 62dd0bbcb46a5d53d959af2a4d924c7b4308b985c3e26d0c2bce5a99607fa4934a393447d7044fb503f89a8a7c2208365d129f1bb191a0a91b60036f584a6d35
2 parents 50f102c + a12bb0b commit 759411c

File tree

3 files changed

+51
-50
lines changed

3 files changed

+51
-50
lines changed

liana-gui/src/app/state/export.rs

+33-39
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use tokio::task::JoinHandle;
99

1010
use crate::{
1111
app::{
12-
message::Message,
12+
self,
1313
view::{self, export::export_modal},
1414
},
1515
daemon::Daemon,
@@ -37,53 +37,47 @@ impl ExportModal {
3737
}
3838
}
3939

40-
pub fn launch(&self) -> Task<Message> {
40+
pub fn launch(&self) -> Task<app::message::Message> {
4141
Task::perform(get_path(), |m| {
42-
Message::View(view::Message::Export(ExportMessage::Path(m)))
42+
app::message::Message::View(view::Message::Export(ExportMessage::Path(m)))
4343
})
4444
}
4545

46-
pub fn update(&mut self, message: Message) -> Task<Message> {
47-
if let Message::View(view::Message::Export(m)) = message {
48-
match m {
49-
ExportMessage::ExportProgress(m) => match m {
50-
ExportProgress::Started(handle) => {
51-
self.handle = Some(handle);
52-
self.state = ExportState::Progress(0.0);
53-
}
54-
ExportProgress::Progress(p) => {
55-
if let ExportState::Progress(_) = self.state {
56-
self.state = ExportState::Progress(p);
57-
}
58-
}
59-
ExportProgress::Finished | ExportProgress::Ended => {
60-
self.state = ExportState::Ended
61-
}
62-
ExportProgress::Error(e) => self.error = Some(e),
63-
ExportProgress::None => {}
64-
},
65-
ExportMessage::TimedOut => {
66-
self.stop(ExportState::TimedOut);
67-
}
68-
ExportMessage::UserStop => {
69-
self.stop(ExportState::Aborted);
46+
pub fn update(&mut self, message: ExportMessage) -> Task<app::message::Message> {
47+
match message {
48+
ExportMessage::ExportProgress(m) => match m {
49+
ExportProgress::Started(handle) => {
50+
self.handle = Some(handle);
51+
self.state = ExportState::Progress(0.0);
7052
}
71-
ExportMessage::Path(p) => {
72-
if let Some(path) = p {
73-
self.path = Some(path);
74-
self.start();
75-
} else {
76-
return Task::perform(async {}, |_| {
77-
Message::View(view::Message::Export(ExportMessage::Close))
78-
});
53+
ExportProgress::Progress(p) => {
54+
if let ExportState::Progress(_) = self.state {
55+
self.state = ExportState::Progress(p);
7956
}
8057
}
81-
ExportMessage::Close | ExportMessage::Open => { /* unreachable */ }
58+
ExportProgress::Finished | ExportProgress::Ended => self.state = ExportState::Ended,
59+
ExportProgress::Error(e) => self.error = Some(e),
60+
ExportProgress::None => {}
61+
},
62+
ExportMessage::TimedOut => {
63+
self.stop(ExportState::TimedOut);
8264
}
83-
Task::none()
84-
} else {
85-
Task::none()
65+
ExportMessage::UserStop => {
66+
self.stop(ExportState::Aborted);
67+
}
68+
ExportMessage::Path(p) => {
69+
if let Some(path) = p {
70+
self.path = Some(path);
71+
self.start();
72+
} else {
73+
return Task::perform(async {}, |_| {
74+
app::message::Message::View(view::Message::Export(ExportMessage::Close))
75+
});
76+
}
77+
}
78+
ExportMessage::Close | ExportMessage::Open => { /* unreachable */ }
8679
}
80+
Task::none()
8781
}
8882
pub fn view<'a>(&'a self, content: Element<'a, view::Message>) -> Element<view::Message> {
8983
let modal = Modal::new(

liana-gui/src/app/state/transactions.rs

+8-2
Original file line numberDiff line numberDiff line change
@@ -279,10 +279,16 @@ impl State for TransactionsPanel {
279279
self.modal = TransactionsModal::None;
280280
}
281281
}
282-
_ => {
282+
ref msg => {
283283
return match &mut self.modal {
284284
TransactionsModal::CreateRbf(modal) => modal.update(daemon, _cache, message),
285-
TransactionsModal::Export(modal) => modal.update(message),
285+
TransactionsModal::Export(modal) => {
286+
if let Message::View(view::Message::Export(m)) = msg {
287+
modal.update(m.clone())
288+
} else {
289+
Task::none()
290+
}
291+
}
286292
TransactionsModal::None => Task::none(),
287293
};
288294
}

liana-gui/src/export.rs

+10-9
Original file line numberDiff line numberDiff line change
@@ -359,15 +359,14 @@ pub fn export_subscription(
359359
Status::Stopped => {
360360
break;
361361
}
362-
Status::Running => {
363-
sleep(time::Duration::from_millis(100)).await;
364-
continue;
365-
}
362+
Status::Running => {}
366363
}
367364
let msg = state.receiver.try_recv();
368365
let disconnected = match msg {
369366
Ok(m) => {
370-
let _ = output.send(m).await;
367+
if let Err(e) = output.send(m).await {
368+
tracing::error!("export_subscription() fail to send message: {}", e);
369+
}
371370
continue;
372371
}
373372
Err(e) => match e {
@@ -379,7 +378,9 @@ pub fn export_subscription(
379378
let handle = match state.handle.take() {
380379
Some(h) => h,
381380
None => {
382-
let _ = output.send(ExportProgress::Error(Error::HandleLost)).await;
381+
if let Err(e) = output.send(ExportProgress::Error(Error::HandleLost)).await {
382+
tracing::error!("export_subscription() fail to send message: {}", e);
383+
}
383384
continue;
384385
}
385386
};
@@ -394,14 +395,14 @@ pub fn export_subscription(
394395
}
395396
};
396397
if let Some(msg) = msg {
397-
let _ = output.send(msg).await;
398+
if let Err(e) = output.send(msg).await {
399+
tracing::error!("export_subscription() fail to send message: {}", e);
400+
}
398401
continue;
399402
}
400-
// => release handle lock
401403
state.handle = Some(handle);
402404

403405
sleep(time::Duration::from_millis(100)).await;
404-
let _ = output.send(ExportProgress::None).await;
405406
}
406407
})
407408
}

0 commit comments

Comments
 (0)