Exemplo n.º 1
0
        public LegalDocumentsViewModel(NavigationStateViewModel navigationState, string content) :
            base(navigationState)
        {
            Content = content;

            NextCommand = BackCommand;
        }
        public WalletManagerViewModel(NavigationStateViewModel navigationState, string title) : base(navigationState, "WalletManager", title)
        {
#if !USE_DIALOG
            ShowCommand = ReactiveCommand.Create(() => navigationState.Screen().Router.Navigate.Execute(this));
#else
            ShowCommand = ReactiveCommand.Create(() => navigationState.Dialog().Router.Navigate.Execute(this));
#endif

            var navigationStateWalletManager = new NavigationStateViewModel()
            {
                Screen     = () => navigationState.Screen(),
                Dialog     = () => navigationState.Dialog(),
                NextView   = () => _home,
                CancelView = () => _home,
            };

            _items = new ObservableCollection <RoutableViewModel>
            {
                new GenerateWalletViewModel(navigationStateWalletManager, "Create new Wallet", this),
                new RecoverWalletViewModel(navigationStateWalletManager, "Recover Wallet"),
                new LoadWalletViewModel(navigationStateWalletManager, "Import Wallet"),
                new TestPasswordViewModel(navigationStateWalletManager, "Test Password"),
                new HardwareWalletViewModel(navigationStateWalletManager, "Connect HW Wallet")
            };

            _wallets = new ObservableCollection <RoutableViewModel>
            {
                new WalletViewModel(navigationStateWalletManager, "Random Wallet (0 BTC)"),
                new WalletViewModel(navigationStateWalletManager, "Random Wallet 2 (0 BTC)"),
                new WalletViewModel(navigationStateWalletManager, "Random Wallet 3 (0 BTC)"),
                new WalletViewModel(navigationStateWalletManager, "Random Wallet 4 (0 BTC)")
            };
        }
        public GenerateWalletPasswordViewModel(NavigationStateViewModel navigationState, IScreen wizardScreen, string title, WalletViewModel wallet, WalletManagerViewModel walletManager)
            : base(new NavigationStateViewModel()
        {
            Screen     = () => wizardScreen,
            Dialog     = () => navigationState.Dialog(),
            NextView   = () => navigationState.NextView(),
            CancelView = () => navigationState.CancelView(),
        }, "GenerateWalletPassword", title)
        {
            ShowCommand = ReactiveCommand.Create(() => wizardScreen.Router.Navigate.Execute(this));
#if !USE_DIALOG
            CancelCommand = ReactiveCommand.Create(() => navigationState.Screen().Router.Navigate.Execute(navigationState.CancelView()));
#else
            CancelCommand = ReactiveCommand.Create(() =>
            {
                navigationState.Dialog().Router.NavigationStack.Clear();
                navigationState.Screen().Router.Navigate.Execute(navigationState.CancelView());
            });
#endif
            NextCommand = ReactiveCommand.Create(() =>
            {
                wallet.Password = _password;
                wizardScreen.Router.Navigate.Execute(
                    new GenerateWalletRecoveryViewModel(navigationState, wizardScreen, "Create Wallet", wallet, walletManager));
            });
        }
        public ConfirmRecoveryWordsViewModel(NavigationStateViewModel navigationState, List <RecoveryWordViewModel> mnemonicWords, KeyManager keyManager, WalletManager walletManager)
            : base(navigationState, NavigationTarget.DialogScreen)
        {
            _confirmationWordsSourceList = new SourceList <RecoveryWordViewModel>();

            var finishCommandCanExecute =
                _confirmationWordsSourceList
                .Connect()
                .ObserveOn(RxApp.MainThreadScheduler)
                .WhenValueChanged(x => x.IsConfirmed)
                .Select(x => !_confirmationWordsSourceList.Items.Any(x => !x.IsConfirmed));

            NextCommand = ReactiveCommand.Create(
                () =>
            {
                walletManager.AddWallet(keyManager);
                ClearNavigation(NavigationTarget.DialogScreen);
            },
                finishCommandCanExecute);

            CancelCommand = ReactiveCommand.Create(() => ClearNavigation(NavigationTarget.DialogScreen));

            _confirmationWordsSourceList
            .Connect()
            .ObserveOn(RxApp.MainThreadScheduler)
            .OnItemAdded(x => x.Reset())
            .Sort(SortExpressionComparer <RecoveryWordViewModel> .Ascending(x => x.Index))
            .Bind(out _confirmationWords)
            .Subscribe();

            // Select 4 random words to confirm.
            _confirmationWordsSourceList.AddRange(mnemonicWords.OrderBy(x => new Random().NextDouble()).Take(4));
        }
Exemplo n.º 5
0
        protected ClosedWalletViewModel(NavigationStateViewModel navigationState, WalletManager walletManager, Wallet wallet) : base(navigationState, wallet)
        {
            _items = new ObservableCollection <NavBarItemViewModel>
            {
                new SettingsPageViewModel(navigationState)
                {
                    Parent = this
                }
            };

            OpenWalletCommand = ReactiveCommand.CreateFromTask(
                async() =>
            {
                try
                {
                    if (wallet.KeyManager.PasswordVerified is true)
                    {
                        // TODO ... new UX will test password earlier...
                    }

                    await Task.Run(async() => await walletManager.StartWalletAsync(Wallet));
                }
                catch (OperationCanceledException ex)
                {
                    Logger.LogTrace(ex);
                }
                catch (Exception ex)
                {
                    NotificationHelpers.Error($"Couldn't load wallet. Reason: {ex.ToUserFriendlyString()}", sender: wallet);
                    Logger.LogError(ex);
                }
            },
                this.WhenAnyValue(x => x.WalletState).Select(x => x == WalletState.Uninitialized));
        }
        public ImportWalletViewModel(NavigationStateViewModel navigationState, string walletName, WalletManager walletManager) : base(navigationState)
        {
            WalletName    = walletName;
            WalletManager = walletManager;

            ImportWallet();
        }
Exemplo n.º 7
0
        static public void NavigateToNextPage(NavigationStateViewModel navigationState, bool isReturningStudent = false)
        {
            var primaryPage = App.Current.MainPage;

            if (primaryPage.Navigation == null)
            {
                return;
            }
            MasterPage Instance = (MasterPage)primaryPage.Navigation.NavigationStack.First();

            Type type = Type.GetType("MobileApps.Views.Navigation.SubViews." + GetNextView(navigationState.CurrentStep));

            if (type == null)
            {
                return;
            }
            View newContent = (View)Activator.CreateInstance(type);


            if (isReturningStudent)
            {
                Instance.WelcomeBackExistingStudent(newContent);
            }
            else
            {
                Instance.UpdateView(newContent);
            }
        }
Exemplo n.º 8
0
        public EnterPasswordViewModel(NavigationStateViewModel navigationState, NavigationTarget navigationTarget, string subtitle) : base(navigationState, navigationTarget)
        {
            Subtitle = subtitle;

            // This means pressing continue will make the password empty string.
            // pressing cancel will return null.
            _password = "";

            this.ValidateProperty(x => x.Password, ValidatePassword);
            this.ValidateProperty(x => x.ConfirmPassword, ValidateConfirmPassword);

            var backCommandCanExecute = this.WhenAnyValue(x => x.IsDialogOpen).ObserveOn(RxApp.MainThreadScheduler);

            var nextCommandCanExecute = this.WhenAnyValue(
                x => x.IsDialogOpen,
                x => x.Password,
                x => x.ConfirmPassword,
                (isDialogOpen, password, confirmPassword) =>
            {
                // This will fire validations before return canExecute value.
                this.RaisePropertyChanged(nameof(Password));
                this.RaisePropertyChanged(nameof(ConfirmPassword));

                return(isDialogOpen && ((string.IsNullOrEmpty(password) && string.IsNullOrEmpty(confirmPassword)) || (!string.IsNullOrEmpty(password) && !string.IsNullOrEmpty(confirmPassword) && !Validations.Any)));
            })
                                        .ObserveOn(RxApp.MainThreadScheduler);

            var cancelCommandCanExecute = this.WhenAnyValue(x => x.IsDialogOpen).ObserveOn(RxApp.MainThreadScheduler);

            BackCommand   = ReactiveCommand.Create(() => Close(), backCommandCanExecute);
            NextCommand   = ReactiveCommand.Create(() => Close(Password), nextCommandCanExecute);
            CancelCommand = ReactiveCommand.Create(() => Close(), cancelCommandCanExecute);
        }
        public LegalDocumentHelpViewModel(NavigationStateViewModel navigationState, string title) : base(navigationState, "LegalDocumentHelp", title)
        {
#if !USE_DIALOG
            ShowCommand = ReactiveCommand.Create(() => navigationState.Screen().Router.Navigate.Execute(this));
#else
            ShowCommand = ReactiveCommand.Create(() => navigationState.Dialog().Router.Navigate.Execute(this));
#endif
        }
        public AnonymityLevelsSettingsViewModel(NavigationStateViewModel navigationState, string title) : base(navigationState, "AnonymityLevelsSettings", title)
        {
#if !USE_DIALOG
            ShowCommand = ReactiveCommand.Create(() => navigationState.Screen().Router.Navigate.Execute(this));
#else
            ShowCommand = ReactiveCommand.Create(() => navigationState.Dialog().Router.Navigate.Execute(this));
#endif
        }
        public RecoverWalletViewModel(NavigationStateViewModel navigationState, string title) : base(navigationState, "RecoverWallet", title)
        {
#if !USE_DIALOG
            ShowCommand = ReactiveCommand.Create(() => navigationState.Screen().Router.Navigate.Execute(this));
#else
            ShowCommand = ReactiveCommand.Create(() => navigationState.Dialog().Router.Navigate.Execute(this));
#endif
        }
Exemplo n.º 12
0
        public AddWalletViewModel(NavigationStateViewModel navigationState, string title, WalletManagerViewModel walletManager) : base(navigationState, "AddWallet", title)
        {
#if !USE_DIALOG
            ShowCommand = ReactiveCommand.Create(() => navigationState.Screen().Router.Navigate.Execute(walletManager));
#else
            ShowCommand = ReactiveCommand.Create(() => navigationState.Dialog().Router.Navigate.Execute(walletManager));
#endif
        }
        protected DialogViewModelBase(NavigationStateViewModel navigationState, NavigationTarget navigationTarget) : base(navigationState, navigationTarget)
        {
            _currentTaskCompletionSource = new TaskCompletionSource <TResult>();

            _disposable = this.WhenAnyValue(x => x.IsDialogOpen)
                          .Skip(1)                                 // Skip the initial value change (which is false).
                          .DistinctUntilChanged()
                          .Subscribe(OnIsDialogOpenChanged);
        }
Exemplo n.º 14
0
 protected NavBarItemViewModel(NavigationStateViewModel navigationState) : base(navigationState)
 {
     _title      = "";
     OpenCommand = ReactiveCommand.Create(
         () =>
     {
         NavigateToSelf();
     });
 }
Exemplo n.º 15
0
        public NavBarViewModel(NavigationStateViewModel navigationState, RoutingState router, WalletManagerViewModel walletManager, AddWalletPageViewModel addWalletPage)
        {
            Router         = router;
            _walletManager = walletManager;
            _topItems      = new ObservableCollection <NavBarItemViewModel>();
            _bottomItems   = new ObservableCollection <NavBarItemViewModel>();

            var homePage     = new HomePageViewModel(navigationState, walletManager, addWalletPage);
            var settingsPage = new SettingsPageViewModel(navigationState);
            var searchPage   = new SearchPageViewModel(navigationState, walletManager, addWalletPage, settingsPage, homePage);

            _selectedItem = homePage;

            _topItems.Add(SelectedItem);
            _bottomItems.Add(searchPage);
            _bottomItems.Add(settingsPage);
            _bottomItems.Add(addWalletPage);

            Router.CurrentViewModel
            .OfType <NavBarItemViewModel>()
            .Subscribe(
                x =>
            {
                if (walletManager.Items.Contains(x) || _topItems.Contains(x) || _bottomItems.Contains(x))
                {
                    if (!_isNavigating)
                    {
                        _isNavigating = true;
                        SelectedItem  = x;
                        _isNavigating = false;
                    }
                }
            });

            this.WhenAnyValue(x => x.SelectedItem)
            .OfType <NavBarItemViewModel>()
            .Subscribe(
                x =>
            {
                if (!_isNavigating)
                {
                    _isNavigating = true;
                    x.NavigateToSelfAndReset(x.CurrentTarget);
                    CollapseOnClickAction?.Invoke();

                    _isNavigating = false;
                }
            });

            Observable.FromEventPattern(Router.NavigationStack, nameof(Router.NavigationStack.CollectionChanged))
            .ObserveOn(RxApp.MainThreadScheduler)
            .Subscribe(_ => IsBackButtonVisible = Router.NavigationStack.Count > 1);

            this.WhenAnyValue(x => x.IsOpen)
            .Subscribe(x => SelectedItem.IsExpanded = x);
        }
        public RecoverWalletViewModel(
            NavigationStateViewModel navigationState,
            string walletName,
            Network network,
            WalletManager walletManager) : base(navigationState)
        {
            Suggestions = new Mnemonic(Wordlist.English, WordCount.Twelve).WordList.GetWords();

            Mnemonics.ToObservableChangeSet().ToCollection()
            .Select(x => x.Count == 12 ? new Mnemonic(GetTagsAsConcatString()) : default)
        protected DialogViewModelBase(NavigationStateViewModel navigationState) : base(navigationState)
        {
            _currentTaskCompletionSource = new TaskCompletionSource <TResult>();

            _disposable = this.WhenAnyValue(x => x.IsDialogOpen)
                          .Skip(1)                                 // Skip the initial value change (which is false).
                          .DistinctUntilChanged()
                          .Subscribe(OnIsDialogOpenChanged);

            CancelCommand = ReactiveCommand.Create(() => Close());
        }
Exemplo n.º 18
0
        public HelpViewModel(NavigationStateViewModel navigationState) : base(navigationState, "Help", "Help")
        {
            ShowCommand = ReactiveCommand.Create(() => navigationState.Screen().Router.Navigate.Execute(this));

            _items = new ObservableCollection <RoutableViewModel>
            {
                new AboutHelpViewModel(navigationState, "About"),
                new UserSupportHelpViewModel(navigationState, "User Support"),
                new ReportBugHelpViewModel(navigationState, "Report Bug"),
                new DocumentationHelpViewModel(navigationState, "Documentation"),
                new LegalDocumentHelpViewModel(navigationState, "Legal Document")
            };
        }
Exemplo n.º 19
0
        public SearchPageViewModel(NavigationStateViewModel navigationState, WalletManagerViewModel walletManager, AddWalletPageViewModel addWalletPage, SettingsPageViewModel settingsPage, HomePageViewModel homePage) : base(navigationState)
        {
            Title = "Search";

            _showSettings = true;
            _showWallets  = false;

            var generalCategory       = new SearchCategory("General", 0);
            var generalCategorySource = new SourceList <SearchItemViewModel>();

            generalCategorySource.Add(CreateHomeSearchItem(generalCategory, 0, homePage));
            generalCategorySource.Add(CreateSettingsSearchItem(generalCategory, 1, settingsPage));
            generalCategorySource.Add(CreateAddWalletSearchItem(generalCategory, 2, addWalletPage));

            var settingsCategory       = new SearchCategory("Settings", 1);
            var settingsCategorySource = new SourceList <SearchItemViewModel>();

            settingsCategorySource.AddRange(CreateSettingsSearchItems(settingsCategory, settingsPage));

            var walletCategory = new SearchCategory("Wallets", 2);
            var wallets        = walletManager.Items
                                 .ToObservableChangeSet()
                                 .Transform(x => CreateWalletSearchItem(walletCategory, 0, x))
                                 .Sort(SortExpressionComparer <SearchItemViewModel> .Ascending(i => i.Title));

            var searchItems = generalCategorySource.Connect();

            if (_showSettings)
            {
                searchItems = searchItems.Merge(settingsCategorySource.Connect());
            }

            if (_showWallets)
            {
                searchItems = searchItems.Merge(wallets);
            }

            var queryFilter = this.WhenValueChanged(t => t.SearchQuery)
                              .Throttle(TimeSpan.FromMilliseconds(100))
                              .Select(SearchQueryFilter)
                              .DistinctUntilChanged();

            searchItems
            .Filter(queryFilter)
            .GroupWithImmutableState(x => x.Category)
            .Transform(grouping => new SearchResult(grouping.Key, grouping.Items.OrderBy(x => x.Order).ThenBy(x => x.Title)))
            .Sort(SortExpressionComparer <SearchResult> .Ascending(i => i.Category.Order).ThenByAscending(i => i.Category.Title))
            .ObserveOn(RxApp.MainThreadScheduler)
            .Bind(out _searchResults)
            .AsObservableList();
        }
Exemplo n.º 20
0
        public TestDialogViewModel(NavigationStateViewModel navigationState, NavigationTarget navigationTarget, string message) : base(navigationState, navigationTarget)
        {
            _message = message;

            var backCommandCanExecute = this.WhenAnyValue(x => x.IsDialogOpen).ObserveOn(RxApp.MainThreadScheduler);

            var cancelCommandCanExecute = this.WhenAnyValue(x => x.IsDialogOpen).ObserveOn(RxApp.MainThreadScheduler);

            var nextCommandCanExecute = this.WhenAnyValue(x => x.IsDialogOpen).ObserveOn(RxApp.MainThreadScheduler);

            BackCommand   = ReactiveCommand.Create(() => GoBack(), backCommandCanExecute);
            CancelCommand = ReactiveCommand.Create(() => Close(false), cancelCommandCanExecute);
            NextCommand   = ReactiveCommand.Create(() => Close(true), nextCommandCanExecute);
        }
Exemplo n.º 21
0
        public SettingsViewModel(NavigationStateViewModel navigationState) : base(navigationState, "Settings", "Settings")
        {
            ShowCommand = ReactiveCommand.Create(() => navigationState.Screen().Router.Navigate.Execute(this));

            _items = new ObservableCollection <RoutableViewModel>
            {
                new BitcoinSettingsViewModel(navigationState, "Bitcoin"),
                new TorSettingsViewModel(navigationState, "Tor"),
                new UISettingsViewModel(navigationState, "UI"),
                new LockScreenSettingsViewModel(navigationState, "Lock Screen"),
                new AnonymityLevelsSettingsViewModel(navigationState, "Anonymity Levels"),
                new OtherSettingsSettingsViewModel(navigationState, "Other Settings")
            };
        }
Exemplo n.º 22
0
        public AddWalletPageViewModel(NavigationStateViewModel navigationState, LegalDocuments legalDocuments, WalletManager walletManager,
                                      BitcoinStore store, Network network) : base(navigationState)
        {
            Title           = "Add Wallet";
            _legalDocuments = legalDocuments;

            this.WhenAnyValue(x => x.WalletName)
            .ObserveOn(RxApp.MainThreadScheduler)
            .Select(x => !string.IsNullOrWhiteSpace(x))
            .Subscribe(x => OptionsEnabled = x && !Validations.Any);

            RecoverWalletCommand = ReactiveCommand.Create(() =>
            {
                NavigateTo(new RecoverWalletViewModel(navigationState, WalletName, network, walletManager));
            });

            ImportWalletCommand = ReactiveCommand.Create(() => new ImportWalletViewModel(navigationState, WalletName, walletManager));

            CreateWalletCommand = ReactiveCommand.CreateFromTask(
                async() =>
            {
                var result = await NavigateDialog(new EnterPasswordViewModel(
                                                      navigationState,
                                                      "Type the password of the wallet and click Continue."));

                if (result is { } password)
                {
                    IsBusy = true;

                    var(km, mnemonic) = await Task.Run(
                        () =>
                    {
                        var walletGenerator = new WalletGenerator(
                            walletManager.WalletDirectories.WalletsDir,
                            network)
                        {
                            TipHeight = store.SmartHeaderChain.TipHeight
                        };
                        return(walletGenerator.GenerateWallet(WalletName, password));
                    });

                    NavigateTo(new RecoveryWordsViewModel(navigationState, km, mnemonic, walletManager), true);

                    IsBusy = false;
                }
            });

            this.ValidateProperty(x => x.WalletName, errors => ValidateWalletName(errors, walletManager, WalletName));
        }
 public SearchItemViewModel(
     string title,
     string caption,
     int order,
     SearchCategory category,
     string keywords,
     string iconName,
     NavigationStateViewModel navigationState,
     Func <RoutableViewModel> createTargetView) : base(navigationState)
 {
     Title       = title;
     Caption     = caption;
     Order       = order;
     Category    = category;
     Keywords    = keywords;
     IconName    = iconName;
     OpenCommand = ReactiveCommand.Create(() => NavigateTo(createTargetView(), CurrentTarget));
 }
Exemplo n.º 24
0
        public RecoveryWordsViewModel(
            NavigationStateViewModel navigationState,
            KeyManager keyManager,
            Mnemonic mnemonic,
            WalletManager walletManager)
            : base(navigationState, NavigationTarget.DialogScreen)
        {
            MnemonicWords = new List <RecoveryWordViewModel>();

            for (int i = 0; i < mnemonic.Words.Length; i++)
            {
                MnemonicWords.Add(new RecoveryWordViewModel(i + 1, mnemonic.Words[i]));
            }

            NextCommand = ReactiveCommand.Create(
                () => NavigateTo(new ConfirmRecoveryWordsViewModel(navigationState, MnemonicWords, keyManager, walletManager), NavigationTarget.DialogScreen));

            CancelCommand = ReactiveCommand.Create(() => ClearNavigation(NavigationTarget.DialogScreen));
        }
        protected WalletViewModelBase(NavigationStateViewModel navigationState, Wallet wallet) : base(navigationState)
        {
            Wallet = Guard.NotNull(nameof(wallet), wallet);

            _disposables = new CompositeDisposable();

            Title = WalletName;
            var isHardware = Wallet.KeyManager.IsHardwareWallet;
            var isWatch    = Wallet.KeyManager.IsWatchOnly;

            _titleTip = isHardware ? "Hardware Wallet" : isWatch ? "Watch Only Wallet" : "Hot Wallet";

            WalletState = wallet.State;

            Observable.FromEventPattern <WalletState>(wallet, nameof(wallet.StateChanged))
            .ObserveOn(RxApp.MainThreadScheduler)
            .Subscribe(x => WalletState = x.EventArgs)
            .DisposeWith(_disposables);
        }
Exemplo n.º 26
0
        public WalletExplorerViewModel(NavigationStateViewModel navigationState, WalletManagerViewModel walletManager) : base(navigationState, "WalletExplorer", "Wallet Explorer")
        {
            ShowCommand = ReactiveCommand.Create(() => navigationState.Screen().Router.Navigate.Execute(this));

            var navigationStateWalletExplorer = new NavigationStateViewModel()
            {
                Screen     = () => navigationState.Screen(),
                Dialog     = () => navigationState.Dialog(),
                NextView   = () => this,
                CancelView = () => this,
            };

            var list = new SourceList <RoutableViewModel>();

            list.Add(new AddWalletViewModel(navigationStateWalletExplorer, "Add Wallet", walletManager));

            walletManager.Wallets.ToObservableChangeSet()
            .Merge(list.Connect())
            .Bind(out _items)
            .AsObservableList();
        }
Exemplo n.º 27
0
        public GenerateWalletViewModel(NavigationStateViewModel navigationState, string title, WalletManagerViewModel walletManager) : base(navigationState, "GenerateWallet", title)
        {
            ShowCommand = ReactiveCommand.Create(() =>
            {
#if !USE_DIALOG
                navigationState.Screen().Router.Navigate.Execute(this);
#else
                navigationState.Dialog().Router.Navigate.Execute(this);
#endif
                Router.NavigateAndReset.Execute(
                    new GenerateWalletPasswordViewModel(
                        navigationState,
                        this,
                        "Create Wallet",
                        new WalletViewModel(navigationState, walletManager.Name)
                {
                    Name = walletManager.Name
                },
                        walletManager));
            });
        }
Exemplo n.º 28
0
        public TermsAndConditionsViewModel(NavigationStateViewModel navigationState, LegalDocuments legalDocuments, RoutableViewModel next) : base(navigationState)
        {
            ViewTermsCommand = ReactiveCommand.CreateFromTask(
                async() =>
            {
                var content = await File.ReadAllTextAsync(legalDocuments.FilePath);

                var legalDocs = new LegalDocumentsViewModel(
                    navigationState,
                    content);

                legalDocs.NavigateToSelf(CurrentTarget);
            });

            NextCommand = ReactiveCommand.Create(
                () =>
            {
                NavigateTo(next);
            },
                this.WhenAnyValue(x => x.IsAgreed).ObserveOn(RxApp.MainThreadScheduler));
        }
        public GenerateWalletConfirmViewModel(NavigationStateViewModel navigationState, IScreen wizardScreen, string title, WalletViewModel wallet, WalletManagerViewModel walletManager)
            : base(new NavigationStateViewModel()
        {
            Screen     = () => wizardScreen,
            Dialog     = () => navigationState.Dialog(),
            NextView   = () => navigationState.NextView(),
            CancelView = () => navigationState.CancelView(),
        }, "GenerateWalletConfirm", title)
        {
            _recoveryWords = wallet.RecoveryWords;

            ShowCommand   = ReactiveCommand.Create(() => wizardScreen.Router.Navigate.Execute(this));
            CancelCommand = ReactiveCommand.Create(() => navigationState.Screen().Router.NavigateAndReset.Execute(navigationState.CancelView()));
            NextCommand   = ReactiveCommand.Create(() =>
            {
                walletManager.Wallets.Add(wallet);
#if USE_DIALOG
                navigationState.Dialog().Router.NavigationStack.Clear();
#endif
                navigationState.Screen().Router.NavigateAndReset.Execute(navigationState.NextView());
            });
        }
Exemplo n.º 30
0
        protected WalletViewModel(NavigationStateViewModel navigationState, UiConfig uiConfig, Wallet wallet) : base(navigationState, wallet)
        {
            Disposables = Disposables is null ? new CompositeDisposable() : throw new NotSupportedException($"Cannot open {GetType().Name} before closing it.");

            _actions = new ObservableCollection <ViewModelBase>();

            uiConfig = Locator.Current.GetService <Global>().UiConfig;

            Observable.Merge(
                Observable.FromEventPattern(Wallet.TransactionProcessor, nameof(Wallet.TransactionProcessor.WalletRelevantTransactionProcessed)).Select(_ => Unit.Default))
            .Throttle(TimeSpan.FromSeconds(0.1))
            .Merge(uiConfig.WhenAnyValue(x => x.PrivacyMode).Select(_ => Unit.Default))
            .Merge(Wallet.Synchronizer.WhenAnyValue(x => x.UsdExchangeRate).Select(_ => Unit.Default))
            .ObserveOn(RxApp.MainThreadScheduler)
            .Subscribe(_ =>
            {
                try
                {
                    var balance = Wallet.Coins.TotalAmount();
                    Title       = $"{WalletName} ({(uiConfig.PrivacyMode ? "#########" : balance.ToString(false, true))} BTC)";

                    TitleTip = balance.ToUsdString(Wallet.Synchronizer.UsdExchangeRate, uiConfig.PrivacyMode);
                }
                catch (Exception ex)
                {
                    Logger.LogError(ex);
                }
            })
            .DisposeWith(Disposables);

            if (Wallet.KeyManager.IsHardwareWallet || !Wallet.KeyManager.IsWatchOnly)
            {
            }

            if (!Wallet.KeyManager.IsWatchOnly)
            {
            }
        }