示例#1
0
    public CoinJoinHistoryItemViewModel(
        int orderIndex,
        TransactionSummary transactionSummary,
        WalletViewModel walletViewModel,
        Money balance,
        IObservable <Unit> updateTrigger,
        bool isSingleCoinJoinTransaction)
        : base(orderIndex, transactionSummary)
    {
        IsConfirmed                 = transactionSummary.IsConfirmed();
        Date                        = transactionSummary.DateTime.ToLocalTime();
        Balance                     = balance;
        IsCoinJoin                  = true;
        CoinJoinTransaction         = transactionSummary;
        IsSingleCoinJoinTransaction = isSingleCoinJoinTransaction;

        var amount = transactionSummary.Amount;

        if (amount < Money.Zero)
        {
            OutgoingAmount = amount * -1;
        }
        else
        {
            IncomingAmount = amount;
        }

        ShowDetailsCommand = ReactiveCommand.Create(() =>
                                                    RoutableViewModel.Navigate(NavigationTarget.DialogScreen).To(
                                                        new CoinJoinDetailsViewModel(this, updateTrigger)));

        DateString = $"{Date.ToLocalTime():MM/dd/yyyy HH:mm}";
    }
示例#2
0
        public HistoryItemViewModel(int orderIndex, TransactionSummary transactionSummary, WalletViewModel walletViewModel, Money balance, IObservable <Unit> updateTrigger)
        {
            TransactionSummary = transactionSummary;
            Date       = transactionSummary.DateTime.ToLocalTime();
            IsCoinJoin = transactionSummary.IsLikelyCoinJoinOutput;
            OrderIndex = orderIndex;
            Balance    = balance;
            var wallet = walletViewModel.Wallet;

            var confirmations = transactionSummary.Height.Type == HeightType.Chain ? (int)wallet.BitcoinStore.SmartHeaderChain.TipHeight - transactionSummary.Height.Value + 1 : 0;

            IsConfirmed = confirmations > 0;

            var amount = transactionSummary.Amount;

            if (amount < Money.Zero)
            {
                OutgoingAmount = amount * -1;
            }
            else
            {
                IncomingAmount = amount;
            }

            ShowDetailsCommand = ReactiveCommand.Create(() => RoutableViewModel.Navigate(NavigationTarget.DialogScreen).To(new TransactionDetailsViewModel(transactionSummary, wallet, updateTrigger)));
        }
示例#3
0
    public TransactionHistoryItemViewModel(
        int orderIndex,
        TransactionSummary transactionSummary,
        WalletViewModel walletViewModel,
        Money balance,
        IObservable <Unit> updateTrigger)
        : base(orderIndex, transactionSummary)
    {
        Label         = transactionSummary.Label.Take(1).FirstOrDefault();
        FilteredLabel = transactionSummary.Label.Skip(1).ToList();
        IsConfirmed   = transactionSummary.IsConfirmed();
        Date          = transactionSummary.DateTime.ToLocalTime();
        Balance       = balance;

        var amount = transactionSummary.Amount;

        if (amount < Money.Zero)
        {
            OutgoingAmount = amount * -1;
        }
        else
        {
            IncomingAmount = amount;
        }

        ShowDetailsCommand = ReactiveCommand.Create(() =>
                                                    RoutableViewModel.Navigate(NavigationTarget.DialogScreen).To(
                                                        new TransactionDetailsViewModel(transactionSummary, walletViewModel.Wallet, updateTrigger)));

        DateString = $"{Date.ToLocalTime():MM/dd/yy HH:mm}";
    }
    public CoinJoinsHistoryItemViewModel(int orderIndex, TransactionSummary firstItem)
        : base(orderIndex, firstItem)
    {
        CoinJoinTransactions = new List <TransactionSummary>();
        Label         = "Coinjoins";
        FilteredLabel = new List <string>();
        IsCoinJoin    = true;

        ShowDetailsCommand = ReactiveCommand.Create(() => RoutableViewModel.Navigate(NavigationTarget.DialogScreen).To(new CoinJoinDetailsViewModel(this)));

        Add(firstItem);
    }
示例#5
0
        public void WhenNavigatedToObservableFiresWhenViewModelAddedToNavigationStack()
        {
            var count = 0;

            var screen = new TestScreen();
            var vm     = new RoutableViewModel(screen);

            vm.WhenNavigatedToObservable().Subscribe(_ => {
                count++;
            });

            screen.Router.Navigate.Execute(vm);

            Assert.Equal(1, count);
        }
示例#6
0
        public void WhenNavigatingFromObservableFiresWhenViewModelLosesFocus()
        {
            var count  = 0;
            var screen = new TestScreen();
            var vm     = new RoutableViewModel(screen);
            var vm2    = new RoutableViewModel(screen);

            vm.WhenNavigatingFromObservable().Subscribe(_ => {
                count++;
            });

            screen.Router.Navigate.Execute(vm);
            screen.Router.Navigate.Execute(vm2);

            Assert.Equal(1, count);
        }
示例#7
0
        public void WhenNavigatingFromObservableCompletesWhenViewModelIsRemovedFromNavigationStack()
        {
            var count = 0;

            var screen = new TestScreen();
            var vm     = new RoutableViewModel(screen);

            vm.WhenNavigatingFromObservable().Subscribe(
                _ => {},
                () => { count++; });

            screen.Router.Navigate.Execute(vm);
            screen.Router.NavigateBack.Execute();

            Assert.Equal(1, count);
        }
示例#8
0
        public void WhenNavigatingFromObservableCompletesWhenNavigationStackIsReset()
        {
            var count = 0;

            var screen = new TestScreen();
            var vm1    = new RoutableViewModel(screen);
            var vm2    = new RoutableViewModel(screen);

            vm1.WhenNavigatingFromObservable().Subscribe(
                _ => { },
                () => { count++; });

            screen.Router.Navigate.Execute(vm1);
            screen.Router.NavigateAndReset.Execute(vm2);

            Assert.Equal(1, count);
        }
示例#9
0
        public void WhenNavigatedToCallsOnNavigatedToWhenViewModelIsFirstAdded()
        {
            var count = 0;

            var screen = new TestScreen();
            var vm     = new RoutableViewModel(screen);

            vm.WhenNavigatedTo(() => {
                count++;

                return(Disposable.Empty);
            });

            screen.Router.Navigate.Execute(vm);

            Assert.Equal(1, count);
        }
示例#10
0
    public CoinJoinsHistoryItemViewModel(
        int orderIndex,
        TransactionSummary firstItem,
        WalletViewModel walletViewModel,
        IObservable <Unit> updateTrigger)
        : base(orderIndex, firstItem)
    {
        _walletViewModel = walletViewModel;
        _updateTrigger   = updateTrigger;

        CoinJoinTransactions = new List <TransactionSummary>();
        Label      = "Coinjoins";
        IsCoinJoin = true;

        ShowDetailsCommand = ReactiveCommand.Create(() => RoutableViewModel.Navigate(NavigationTarget.DialogScreen).To(new CoinJoinDetailsViewModel(this)));

        Add(firstItem);
    }
示例#11
0
        public TermsAndConditionsViewModel(LegalDocuments legalDocuments, RoutableViewModel next)
        {
            Title = "Welcome to Wasabi Wallet";

            ViewTermsCommand = ReactiveCommand.CreateFromTask(
                async() =>
            {
                var content = await File.ReadAllTextAsync(legalDocuments.FilePath);

                var legalDocs = new LegalDocumentsViewModel(content);

                Navigate().To(legalDocs);
            });

            NextCommand = ReactiveCommand.Create(
                () => Navigate().BackTo(next),
                this.WhenAnyValue(x => x.IsAgreed).ObserveOn(RxApp.MainThreadScheduler));
        }
示例#12
0
        public void WhenNavigatedToCallsDisposeWhenViewModelLosesFocus()
        {
            var count = 0;

            var screen = new TestScreen();
            var vm     = new RoutableViewModel(screen);
            var vm2    = new RoutableViewModel(screen);

            vm.WhenNavigatedTo(() => {
                return(Disposable.Create(() => count++));
            });

            screen.Router.Navigate.Execute(vm);

            Assert.Equal(0, count);

            screen.Router.Navigate.Execute(vm2);

            Assert.Equal(1, count);
        }
        public TermsAndConditionsViewModel(LegalChecker legalChecker, RoutableViewModel next)
        {
            ViewTermsCommand = ReactiveCommand.Create(
                () =>
            {
                if (legalChecker.TryGetNewLegalDocs(out _))
                {
                    var legalDocs = new LegalDocumentsViewModel(legalChecker);
                    Navigate().To(legalDocs);
                }
            });

            NextCommand = ReactiveCommand.CreateFromTask(
                async() =>
            {
                await legalChecker.AgreeAsync();
                Navigate().To(next, NavigationMode.Clear);
            },
                this.WhenAnyValue(x => x.IsAgreed).ObserveOn(RxApp.MainThreadScheduler));
        }
示例#14
0
    public TransactionHistoryItemViewModel(
        int orderIndex,
        TransactionSummary transactionSummary,
        WalletViewModel walletViewModel,
        Money balance,
        IObservable <Unit> updateTrigger)
        : base(orderIndex, transactionSummary)
    {
        Label       = transactionSummary.Label;
        IsConfirmed = transactionSummary.IsConfirmed();
        Date        = transactionSummary.DateTime.ToLocalTime();
        Balance     = balance;

        var amount = transactionSummary.Amount;

        if (amount < Money.Zero)
        {
            OutgoingAmount = amount * -1;
        }
        else
        {
            IncomingAmount = amount;
        }

        ShowDetailsCommand = ReactiveCommand.Create(() =>
                                                    RoutableViewModel.Navigate(NavigationTarget.DialogScreen).To(
                                                        new TransactionDetailsViewModel(transactionSummary, walletViewModel.Wallet, updateTrigger)));

        var speedUpTransactionCommandCanExecute = this.WhenAnyValue(x => x.IsConfirmed)
                                                  .Select(x => !x)
                                                  .ObserveOn(RxApp.MainThreadScheduler);

        SpeedUpTransactionCommand = ReactiveCommand.Create(
            () =>
        {
            // TODO: Show speed up transaction dialog.
        },
            speedUpTransactionCommandCanExecute);

        DateString = $"{Date.ToLocalTime():MM/dd/yyyy HH:mm}";
    }
        public void WhenNavigatedToCallsOnNavigatedToWhenViewModelReturnsToTopOfStack()
        {
            var count = 0;

            var screen = new TestScreen();
            var vm = new RoutableViewModel(screen);
            var vm2 = new RoutableViewModel(screen);

            vm.WhenNavigatedTo(() =>
            {
                count++;

                return Disposable.Empty;
            });

            screen.Router.Navigate.Execute(vm);
            screen.Router.Navigate.Execute(vm2);
            screen.Router.Navigate.Execute(vm);

            Assert.Equal(2, count);
        }
示例#16
0
        public void WhenNavigatedToCallsDisposeWhenNavigationStackIsReset()
        {
            var count = 0;

            var screen = new TestScreen();
            var vm1    = new RoutableViewModel(screen);
            var vm2    = new RoutableViewModel(screen);

            vm1.WhenNavigatedTo(() =>
            {
                return(Disposable.Create(() => count++));
            });

            screen.Router.Navigate.Execute(vm1);

            Assert.Equal(0, count);

            screen.Router.NavigateAndReset.Execute(vm2);

            Assert.Equal(1, count);
        }
        public HistoryItemViewModel(int orderIndex, TransactionSummary transactionSummary, WalletViewModel walletViewModel, Money balance, IObservable <Unit> updateTrigger)
        {
            TransactionSummary = transactionSummary;
            Date       = transactionSummary.DateTime.ToLocalTime();
            IsCoinJoin = transactionSummary.IsLikelyCoinJoinOutput;
            OrderIndex = orderIndex;
            Balance    = balance;

            var confirmations = transactionSummary.Height.Type == HeightType.Chain ? (int)Services.BitcoinStore.SmartHeaderChain.TipHeight - transactionSummary.Height.Value + 1 : 0;

            IsConfirmed = confirmations > 0;

            var amount = transactionSummary.Amount;

            if (amount < Money.Zero)
            {
                OutgoingAmount = amount * -1;
            }
            else
            {
                IncomingAmount = amount;
            }

            Label         = transactionSummary.Label.Take(1).ToList();
            FilteredLabel = transactionSummary.Label.Skip(1).ToList();

            ShowDetailsCommand = ReactiveCommand.Create(() => RoutableViewModel.Navigate(NavigationTarget.DialogScreen).To(new TransactionDetailsViewModel(transactionSummary, walletViewModel.Wallet, updateTrigger)));

            this.WhenAnyValue(x => x.IsFlashing)
            .Where(x => x)
            .Subscribe(async _ =>
            {
                await Task.Delay(1260);
                IsFlashing = false;
            });
        }
 public InstanceGenerator(RoutableViewModel generate)
 {
     Generate = generate;
 }
示例#19
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));
        }