1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
use crate::imports::*;

#[derive(Default, Handler)]
#[help("Manage application settings")]
pub struct Settings;

impl Settings {
    async fn main(self: Arc<Self>, ctx: &Arc<dyn Context>, _argv: Vec<String>, _cmd: &str) -> Result<()> {
        let ctx = ctx.clone().downcast_arc::<KaspaCli>()?;

        tprintln!(ctx, "\nSettings:\n");
        let list = WalletSettings::list();
        let list = list
            .iter()
            .map(|setting| {
                let value: String = ctx.wallet().settings().get(setting.clone()).unwrap_or_else(|| "-".to_string());
                let descr = setting.descr();
                (setting.as_str().to_lowercase(), value, descr)
            })
            .collect::<Vec<(_, _, _)>>();
        let c1 = list.iter().map(|(c, _, _)| c.len()).fold(0, |a, b| a.max(b)) + 4;
        let c2 = list.iter().map(|(_, c, _)| c.len()).fold(0, |a, b| a.max(b)) + 4;

        list.iter().for_each(|(k, v, d)| {
            tprintln!(ctx, "{}: {} \t {}", k.pad_to_width_with_alignment(c1, pad::Alignment::Right), v.pad_to_width(c2), d);
        });

        tprintln!(ctx);

        /*

                this is deprecated in favor of dedicated `network`, `server` and `open <wallet name>` commands


                else if argv.len() != 2 {
                    tprintln!(ctx, "usage: set <key> <value>");
                    return Ok(());
                } else {
                    let key = argv[0].as_str();
                    let value = argv[1].as_str().trim();

                    if value.contains(' ') || value.contains('\t') {
                        return Err(Error::Custom("Whitespace in settings is not allowed".to_string()));
                    }

                    match key {
                        "network" => {
                            let network: NetworkId = value.parse()?;
                            ctx.wallet().settings().set(WalletSettings::Network, network).await?;
                        }
                        "server" => {
                            ctx.wallet().settings().set(WalletSettings::Server, value).await?;
                        }
                        "wallet" => {
                            ctx.wallet().settings().set(WalletSettings::Wallet, value).await?;
                        }
                        // "scrollback" => {
                        //     ctx.wallet().settings().set(WalletSettings::Wallet, value).await?;
                        // }
                        _ => return Err(Error::Custom(format!("Unknown setting '{}'", key))),
                    }
                    ctx.wallet().settings().try_store().await?;
                }
        */

        Ok(())
    }
}