4a97172346
Add a Wallet menu item (between File and Settings) that opens an in-app overlay showing wallet metadata: file name, network, type (HD seed / xprv / WIF / watch-only), script kind, derivation path, master fingerprint, and account xpub. Includes a seed section: if the wallet has no seed, a note is shown; if it has one and is unencrypted the seed is revealed directly; if encrypted the user must enter the wallet file password before the mnemonic is displayed. The revealed seed is shown in a danger-coloured bordered box with a warning. Closing the overlay (backdrop, Close button, or Esc) always clears the password input and hides the seed. Also adds the private-key password-prompt overlay and its localization keys (shared UI scaffolding used by the following commit).
115 lines
3.5 KiB
C#
115 lines
3.5 KiB
C#
using System.IO;
|
|
using CommunityToolkit.Mvvm.ComponentModel;
|
|
using CommunityToolkit.Mvvm.Input;
|
|
using PalladiumWallet.App.Localization;
|
|
|
|
namespace PalladiumWallet.App.ViewModels;
|
|
|
|
public partial class MainWindowViewModel
|
|
{
|
|
[ObservableProperty]
|
|
private bool isWalletInfoOpen;
|
|
|
|
[ObservableProperty]
|
|
private string walletInfoSeedPasswordInput = "";
|
|
|
|
[ObservableProperty]
|
|
private bool isWalletInfoSeedRevealed;
|
|
|
|
[ObservableProperty]
|
|
private string walletInfoSeedError = "";
|
|
|
|
// ---- computed wallet info (populated when overlay opens) ----
|
|
|
|
public string WalletInfoFileName =>
|
|
_walletPath is null ? "" :
|
|
Path.GetFileNameWithoutExtension(Path.GetFileNameWithoutExtension(_walletPath));
|
|
|
|
public string WalletInfoNetwork => _doc?.Network ?? "";
|
|
|
|
public string WalletInfoType
|
|
{
|
|
get
|
|
{
|
|
if (_doc is null) return "";
|
|
if (_doc.Mnemonic is not null) return Loc.Tr("walletinfo.type.seed");
|
|
if (_doc.AccountXprv is not null) return Loc.Tr("walletinfo.type.xprv");
|
|
if (_doc.WifKeys is { Count: > 0 }) return Loc.Tr("walletinfo.type.wif");
|
|
return Loc.Tr("walletinfo.type.watchonly");
|
|
}
|
|
}
|
|
|
|
public string WalletInfoScriptKind => _doc?.ScriptKind ?? "";
|
|
|
|
public string WalletInfoDerivPath => _doc?.AccountPath ?? "";
|
|
|
|
public string WalletInfoXpub => _doc?.AccountXpub ?? "";
|
|
|
|
public string WalletInfoFingerprint => _doc?.MasterFingerprint ?? "";
|
|
|
|
public bool WalletInfoHasSeed => _doc?.Mnemonic is not null;
|
|
|
|
public bool WalletInfoSeedNeedsPassword => !string.IsNullOrEmpty(_password);
|
|
|
|
public string WalletInfoSeedText => IsWalletInfoSeedRevealed ? (_doc?.Mnemonic ?? "") : "";
|
|
|
|
public bool WalletInfoHasPassphrase => !string.IsNullOrEmpty(_doc?.Passphrase);
|
|
|
|
[RelayCommand]
|
|
private void OpenWalletInfo()
|
|
{
|
|
WalletInfoSeedPasswordInput = "";
|
|
IsWalletInfoSeedRevealed = false;
|
|
WalletInfoSeedError = "";
|
|
OnPropertyChanged(nameof(WalletInfoFileName));
|
|
OnPropertyChanged(nameof(WalletInfoNetwork));
|
|
OnPropertyChanged(nameof(WalletInfoType));
|
|
OnPropertyChanged(nameof(WalletInfoScriptKind));
|
|
OnPropertyChanged(nameof(WalletInfoDerivPath));
|
|
OnPropertyChanged(nameof(WalletInfoXpub));
|
|
OnPropertyChanged(nameof(WalletInfoFingerprint));
|
|
OnPropertyChanged(nameof(WalletInfoHasSeed));
|
|
OnPropertyChanged(nameof(WalletInfoSeedNeedsPassword));
|
|
OnPropertyChanged(nameof(WalletInfoHasPassphrase));
|
|
IsWalletInfoOpen = true;
|
|
}
|
|
|
|
[RelayCommand]
|
|
private void CloseWalletInfo()
|
|
{
|
|
IsWalletInfoOpen = false;
|
|
WalletInfoSeedPasswordInput = "";
|
|
IsWalletInfoSeedRevealed = false;
|
|
WalletInfoSeedError = "";
|
|
OnPropertyChanged(nameof(WalletInfoSeedText));
|
|
}
|
|
|
|
[RelayCommand]
|
|
private void RevealSeed()
|
|
{
|
|
if (_doc?.Mnemonic is null) return;
|
|
|
|
if (WalletInfoSeedNeedsPassword)
|
|
{
|
|
if (WalletInfoSeedPasswordInput != _password)
|
|
{
|
|
WalletInfoSeedError = Loc.Tr("msg.wrongpassword");
|
|
return;
|
|
}
|
|
}
|
|
|
|
WalletInfoSeedError = "";
|
|
IsWalletInfoSeedRevealed = true;
|
|
OnPropertyChanged(nameof(WalletInfoSeedText));
|
|
}
|
|
|
|
[RelayCommand]
|
|
private void HideSeed()
|
|
{
|
|
IsWalletInfoSeedRevealed = false;
|
|
WalletInfoSeedPasswordInput = "";
|
|
WalletInfoSeedError = "";
|
|
OnPropertyChanged(nameof(WalletInfoSeedText));
|
|
}
|
|
}
|