gui: update liana:master

This commit is contained in:
edouard 2023-10-23 15:18:30 +02:00
parent 0873cdb944
commit 28aaca919a
8 changed files with 35 additions and 16 deletions

2
gui/Cargo.lock generated
View File

@ -2113,7 +2113,7 @@ dependencies = [
[[package]]
name = "liana"
version = "2.0.0"
source = "git+https://github.com/wizardsardine/liana?branch=master#4f2ff1abc0e2700d563f3077eb71c22ef9573e5c"
source = "git+https://github.com/wizardsardine/liana?branch=master#6869d8554a6214d8e73614adf3c9334c1c6188d4"
dependencies = [
"backtrace",
"bip39",

View File

@ -35,5 +35,5 @@ pub enum Message {
ConnectedHardwareWallets(Vec<HardwareWallet>),
HistoryTransactions(Result<Vec<HistoryTransaction>, Error>),
PendingTransactions(Result<Vec<HistoryTransaction>, Error>),
LabelsUpdated(Result<HashMap<String, String>, Error>),
LabelsUpdated(Result<HashMap<String, Option<String>>, Error>),
}

View File

@ -50,12 +50,18 @@ impl LabelsEdited {
}
}
view::LabelMessage::Confirm => {
let mut updated_labels = HashMap::<LabelItem, String>::new();
let mut updated_labels_str = HashMap::<String, String>::new();
let mut updated_labels = HashMap::<LabelItem, Option<String>>::new();
let mut updated_labels_str = HashMap::<String, Option<String>>::new();
for item in items {
if let Some(label) = self.0.get(&item).cloned() {
updated_labels.insert(label_item_from_str(&item), label.value.clone());
updated_labels_str.insert(item, label.value);
let item_str = label_item_from_str(&item);
if label.value.is_empty() {
updated_labels.insert(item_str, None);
updated_labels_str.insert(item, None);
} else {
updated_labels.insert(item_str, Some(label.value.clone()));
updated_labels_str.insert(item, Some(label.value));
}
}
}
return Ok(Command::perform(

View File

@ -182,9 +182,11 @@ impl Action for SaveAction {
Message::View(view::Message::Spend(view::SpendTxMessage::Confirm)) => {
let daemon = daemon.clone();
let psbt = tx.psbt.clone();
let mut labels = HashMap::<LabelItem, String>::new();
let mut labels = HashMap::<LabelItem, Option<String>>::new();
for (item, label) in tx.labels() {
labels.insert(label_item_from_str(item), label.clone());
if !label.is_empty() {
labels.insert(label_item_from_str(item), Some(label.clone()));
}
}
return Command::perform(
async move {

View File

@ -157,8 +157,8 @@ impl<C: Client + Debug> Daemon for Lianad<C> {
Ok(res.labels)
}
fn update_labels(&self, items: &HashMap<LabelItem, String>) -> Result<(), DaemonError> {
let labels: HashMap<String, String> =
fn update_labels(&self, items: &HashMap<LabelItem, Option<String>>) -> Result<(), DaemonError> {
let labels: HashMap<String, Option<String>> =
HashMap::from_iter(items.iter().map(|(a, l)| (a.to_string(), l.clone())));
let _res: serde_json::value::Value = self.call("updatelabels", Some(vec![labels]))?;
Ok(())

View File

@ -135,7 +135,7 @@ impl Daemon for EmbeddedDaemon {
Ok(self.handle.control.get_labels(items).labels)
}
fn update_labels(&self, items: &HashMap<LabelItem, String>) -> Result<(), DaemonError> {
fn update_labels(&self, items: &HashMap<LabelItem, Option<String>>) -> Result<(), DaemonError> {
self.handle.control.update_labels(items);
Ok(())
}

View File

@ -5,6 +5,7 @@ pub mod model;
use std::collections::{HashMap, HashSet};
use std::fmt::Debug;
use std::io::ErrorKind;
use std::iter::FromIterator;
use liana::{
commands::LabelItem,
@ -80,7 +81,8 @@ pub trait Daemon: Debug {
&self,
labels: &HashSet<LabelItem>,
) -> Result<HashMap<String, String>, DaemonError>;
fn update_labels(&self, labels: &HashMap<LabelItem, String>) -> Result<(), DaemonError>;
fn update_labels(&self, labels: &HashMap<LabelItem, Option<String>>)
-> Result<(), DaemonError>;
fn list_spend_transactions(&self) -> Result<Vec<model::SpendTx>, DaemonError> {
let info = self.get_info()?;
@ -228,7 +230,12 @@ fn load_labels<T: model::Labelled, D: Daemon + ?Sized>(
items.insert(item);
}
}
let labels = daemon.get_labels(&items)?;
let labels = HashMap::from_iter(
daemon
.get_labels(&items)?
.into_iter()
.map(|(k, v)| (k, Some(v))),
);
for target in targets {
target.load_labels(&labels);
}

View File

@ -346,13 +346,17 @@ impl Labelled for HistoryTransaction {
pub trait Labelled {
fn labelled(&self) -> Vec<LabelItem>;
fn labels(&mut self) -> &mut HashMap<String, String>;
fn load_labels(&mut self, new_labels: &HashMap<String, String>) {
fn load_labels(&mut self, new_labels: &HashMap<String, Option<String>>) {
let items = self.labelled();
let labels = self.labels();
for item in items {
let item_str = item.to_string();
if let Some(l) = new_labels.get(&item_str) {
labels.insert(item_str, l.to_string());
if let Some(label) = new_labels.get(&item_str) {
if let Some(l) = label {
labels.insert(item_str, l.to_string());
} else {
labels.remove(&item_str);
}
}
}
}