Skip to content

Commit 2cd1949

Browse files
committed
wip
1 parent ce49782 commit 2cd1949

File tree

9 files changed

+117
-125
lines changed

9 files changed

+117
-125
lines changed

Cargo.lock

+16-87
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

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

+20-5
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,18 @@ impl ExportModal {
3939
}
4040
}
4141

42+
pub fn modal_title(&self) -> &'static str {
43+
match self.import_export_type {
44+
ImportExportType::Transactions => "Export Transactions",
45+
ImportExportType::ExportPsbt(_) => "Export PSBT",
46+
ImportExportType::ExportBackup(_) => "Export Backup",
47+
ImportExportType::Descriptor(_) => "Export Descriptor",
48+
ImportExportType::ExportLabels => "Export Labels",
49+
ImportExportType::ImportPsbt => "Import PSBT",
50+
ImportExportType::ImportDescriptor => "Import Descriptor",
51+
}
52+
}
53+
4254
pub fn default_filename(&self) -> String {
4355
let date = chrono::Local::now().format("%Y-%m-%dT%H-%M-%S");
4456
match &self.import_export_type {
@@ -62,9 +74,12 @@ impl ExportModal {
6274
}
6375
}
6476

65-
pub fn launch(&self) -> Task<app::message::Message> {
66-
Task::perform(get_path(self.default_filename()), |m| {
67-
app::message::Message::View(view::Message::ImportExport(ImportExportMessage::Path(m)))
77+
pub fn launch(
78+
&self,
79+
f: fn(ImportExportMessage) -> app::Message,
80+
) -> Task<app::message::Message> {
81+
Task::perform(get_path(self.default_filename()), move |m| {
82+
f(ImportExportMessage::Path(m))
6883
})
6984
}
7085

@@ -121,7 +136,7 @@ impl ExportModal {
121136
pub fn view<'a>(&'a self, content: Element<'a, view::Message>) -> Element<view::Message> {
122137
let modal = Modal::new(
123138
content,
124-
export_modal(&self.state, self.error.as_ref(), "Transactions"),
139+
export_modal(&self.state, self.error.as_ref(), self.modal_title()),
125140
);
126141
match self.state {
127142
ImportExportState::TimedOut
@@ -149,7 +164,7 @@ impl ExportModal {
149164
match &self.state {
150165
ImportExportState::Started | ImportExportState::Progress(_) => {
151166
Some(iced::Subscription::run_with_id(
152-
"transactions",
167+
self.modal_title(),
153168
export::export_subscription(
154169
self.daemon.clone(),
155170
path.to_path_buf(),

liana-gui/src/app/state/settings/mod.rs

+41-9
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,18 @@ pub struct ImportExportSettingsState {
162162
modal: Option<ExportModal>,
163163
}
164164

165+
macro_rules! launch {
166+
($s:ident, $m: ident) => {
167+
let launch = $m.launch(|m| {
168+
Message::View(view::Message::Settings(
169+
view::SettingsMessage::ImportExport(m),
170+
))
171+
});
172+
$s.modal = Some($m);
173+
return launch
174+
};
175+
}
176+
165177
impl State for ImportExportSettingsState {
166178
fn view<'a>(&'a self, cache: &'a Cache) -> Element<'a, view::Message> {
167179
let content = view::settings::import_export(cache, self.warning.as_ref());
@@ -194,27 +206,42 @@ impl State for ImportExportSettingsState {
194206
wallet: Arc<Wallet>,
195207
) -> Task<Message> {
196208
match message {
197-
Message::View(view::Message::Settings(view::SettingsMessage::ImportExport(
198-
ImportExportMessage::Close,
199-
))) => {
209+
Message::View(view::Message::ImportExport(ImportExportMessage::Close)) => {
210+
log::warn!("ImportExportSettingsState.update(Close)");
200211
self.modal = None;
201212
}
213+
Message::View(view::Message::Settings(view::SettingsMessage::ImportExport(m))) => {
214+
log::warn!("ImportExportSettingsState.update(ImportExport({:?}))", m);
215+
if let Some(modal) = self.modal.as_mut() {
216+
return modal.update(m);
217+
};
218+
}
202219
Message::View(view::Message::Settings(view::SettingsMessage::ExportDescriptor)) => {
220+
log::warn!("ImportExportSettingsState.update(ExportDescriptor)");
203221
if self.modal.is_none() {
204222
let modal = ExportModal::new(
205223
daemon,
206224
ImportExportType::Descriptor(wallet.main_descriptor.clone()),
207225
);
208-
self.modal = Some(modal);
226+
launch!(self, modal);
227+
}
228+
}
229+
Message::View(view::Message::Settings(view::SettingsMessage::ExportTransactions)) => {
230+
log::warn!("ImportExportSettingsState.update(ExportTransactions)");
231+
if self.modal.is_none() {
232+
let modal = ExportModal::new(daemon, ImportExportType::Transactions);
233+
launch!(self, modal);
209234
}
210235
}
211236
Message::View(view::Message::Settings(view::SettingsMessage::ExportLabels)) => {
237+
log::warn!("ImportExportSettingsState.update(ExportLabels)");
212238
if self.modal.is_none() {
213239
let modal = ExportModal::new(daemon, ImportExportType::ExportLabels);
214-
self.modal = Some(modal);
240+
launch!(self, modal);
215241
}
216242
}
217243
Message::View(view::Message::Settings(view::SettingsMessage::ExportWallet)) => {
244+
log::warn!("ImportExportSettingsState.update(ExportWallet)");
218245
if self.modal.is_none() {
219246
let datadir = cache.datadir_path.clone();
220247
let network = cache.network;
@@ -225,7 +252,8 @@ impl State for ImportExportSettingsState {
225252
async move {
226253
let backup =
227254
Backup::from_app(datadir, network, config, wallet, daemon).await;
228-
backup.unwrap().to_string()
255+
let backup = backup.unwrap();
256+
serde_json::to_string_pretty(&backup).unwrap()
229257
// TODO: do not unwrap, return an error message instead
230258
},
231259
|s| {
@@ -237,20 +265,24 @@ impl State for ImportExportSettingsState {
237265
}
238266
}
239267
Message::View(view::Message::Settings(view::SettingsMessage::ExportBackup(backup))) => {
268+
log::warn!("ImportExportSettingsState.update(ExportBackup)");
240269
let modal = ExportModal::new(daemon, ImportExportType::ExportBackup(backup));
241-
self.modal = Some(modal);
270+
launch!(self, modal);
242271
}
243272
Message::View(view::Message::Settings(view::SettingsMessage::ImportWallet)) => {
273+
log::warn!("ImportExportSettingsState.update(ImportWallet)");
244274
// TODO:
245275
if self.modal.is_none() {
246276
let modal = ExportModal::new(
247277
daemon,
248278
ImportExportType::Descriptor(wallet.main_descriptor.clone()),
249279
);
250-
self.modal = Some(modal);
280+
launch!(self, modal);
251281
}
252282
}
253-
_ => {}
283+
m => {
284+
log::warn!("ImportExportSettingsState.update({:?})", m);
285+
}
254286
}
255287

256288
Task::none()

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

+4-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ pub const HISTORY_EVENT_PAGE_SIZE: u64 = 20;
2020

2121
use crate::{
2222
app::{
23+
self,
2324
cache::Cache,
2425
error::Error,
2526
message::Message,
@@ -276,7 +277,9 @@ impl State for TransactionsPanel {
276277
ImportExportType::Transactions,
277278
));
278279
if let TransactionsModal::Export(m) = &self.modal {
279-
return m.launch();
280+
return m.launch(|m| {
281+
app::message::Message::View(view::Message::ImportExport(m))
282+
});
280283
}
281284
}
282285
}

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ pub fn export_modal<'a>(
6464
card::simple(
6565
Column::new()
6666
.spacing(10)
67-
.push(Container::new(h4_bold(format!("Export {export_type}"))).width(Length::Fill))
67+
.push(Container::new(h4_bold(export_type)).width(Length::Fill))
6868
.push(Space::with_height(Length::Fill))
6969
.push(progress_bar_row)
7070
.push(Space::with_height(Length::Fill))

liana-gui/src/app/view/message.rs

+1
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ pub enum SettingsMessage {
7676
EditWalletSettings,
7777
ImportExportSection,
7878
ExportDescriptor,
79+
ExportTransactions,
7980
ExportLabels,
8081
ExportWallet,
8182
ExportBackup(String),

liana-gui/src/app/view/settings.rs

+8
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,13 @@ pub fn import_export<'a>(cache: &'a Cache, warning: Option<&Error>) -> Element<'
170170
Message::Settings(SettingsMessage::ExportDescriptor),
171171
);
172172

173+
let export_transactions = settings_section(
174+
"Export transactions",
175+
None,
176+
icon::wallet_icon(),
177+
Message::Settings(SettingsMessage::ExportTransactions),
178+
);
179+
173180
let export_labels = settings_section(
174181
"Export labels",
175182
None,
@@ -199,6 +206,7 @@ pub fn import_export<'a>(cache: &'a Cache, warning: Option<&Error>) -> Element<'
199206
.spacing(20)
200207
.push(header)
201208
.push(export_descriptor)
209+
.push(export_transactions)
202210
.push(export_labels)
203211
.push(export_wallet)
204212
.push(import_wallet)

0 commit comments

Comments
 (0)