Beispiel #1
0
        public async Task LeavesTrashAloneAsync()
        {
            var dir = Common.GetWorkDir();

            if (Directory.Exists(dir))
            {
                Directory.Delete(dir, true);
            }

            var res = LegalDocuments.TryLoadAgreed(dir);

            Assert.Null(res);
            var legalDir = Assert.Single(Directory.GetDirectories(dir));

            // Leaves one trash alone.
            var trash1 = File.Create(Path.Combine(legalDir, "foo"));
            await trash1.DisposeAsync();

            res = LegalDocuments.TryLoadAgreed(dir);
            Assert.Null(res);
            Assert.Single(Directory.GetFiles(legalDir));
            Assert.Empty(Directory.GetDirectories(legalDir));

            // Leaves 3 trash alone.
            var trash2 = File.Create(Path.Combine(legalDir, "foo.txt"));
            var trash3 = File.Create(Path.Combine(legalDir, "foo2"));
            await trash2.DisposeAsync();

            await trash3.DisposeAsync();

            res = LegalDocuments.TryLoadAgreed(dir);
            Assert.Null(res);
            Assert.Equal(3, Directory.GetFiles(legalDir).Length);
            Assert.Empty(Directory.GetDirectories(legalDir));
        }
Beispiel #2
0
        public async Task <IActionResult> Edit(int id, [Bind("LegalDocId,LivingWill,LivingWillDateSigned,LivingWillLastUpdated,LivingWillCopyOnFile,FamilyAwareOfInstructions,MedicalPowerOfAttorney,MedPowerOfAttorneyName,MedPowerOfAttorneyDateSigned,MedPowerOfAttorneyDateLastUpdated,MedPowerOfAttorneyCopyOnFile,HealthCareProxy,HealthCareProxyName,HealthCareProxyDateSigned,HealtchCareProxyDateLastUpdated,DoNotResuscitateOrder,DnrDateSigned,DnrDateLastUpdated,OrganDonorDocument,OrganDonorDateSigned,OrganDonorLastUpdate,DocumentsLocation,DocumentContactsFirstName,DocumentContactsLastName,DocumentContactsPhone,AttorneyFirstName,AttorneyLastName,AttorneyPhone,Comments")] LegalDocuments legalDocuments)
        {
            if (id != legalDocuments.LegalDocId)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(legalDocuments);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!LegalDocumentsExists(legalDocuments.LegalDocId))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            return(View(legalDocuments));
        }
        public LegalDocumentsViewModel(string content = null, LegalDocuments legalDoc = null) : base()
        {
            FilePath = legalDoc?.FilePath;
            Content  = content;

            LegalDoc = legalDoc;
            IsAgreed = content is null;             // If content wasn't provided, then the filepath must had been provided. If the file exists, then it's agreed.

            AgreeClicked = ReactiveCommand.CreateFromTask(async() =>
            {
                IsAgreed = true;
                await LegalDoc.ToFileAsync(Content);
                Locator.Current.GetService <Global>().LegalDocuments = LegalDoc;
                Close();
            });

            AgreeClicked
            .ThrownExceptions
            .ObserveOn(RxApp.TaskpoolScheduler)
            .Subscribe(ex =>
            {
                Logging.Logger.LogError(ex);
                NotificationHelpers.Error(ex.ToUserFriendlyString());
            });

            this.WhenAnyValue(x => x.Text)
            .ObserveOn(RxApp.MainThreadScheduler)
            .Subscribe(text => EmptyContent = string.IsNullOrEmpty(text));
        }
Beispiel #4
0
        public async Task CanSerializeFileAsync()
        {
            var dir = Common.GetWorkDir();

            if (Directory.Exists(dir))
            {
                Directory.Delete(dir, true);
            }

            string filePath = Path.Combine(dir, "1.1.txt");
            var    legal    = new LegalDocuments(filePath);

            Assert.False(File.Exists(filePath));
            await legal.ToFileAsync("bar");

            Assert.True(File.Exists(filePath));

            string filePath2 = Path.Combine(dir, "1.2.txt");
            var    legal2    = new LegalDocuments(filePath2);

            Assert.True(File.Exists(filePath));
            Assert.False(File.Exists(filePath2));
            await legal2.ToFileAsync("bar");

            Assert.False(File.Exists(filePath));
            Assert.True(File.Exists(filePath2));
        }
Beispiel #5
0
        public async Task CanSerializeFileAsync()
        {
            var dir = Path.Combine(Global.Instance.DataDir, EnvironmentHelpers.GetCallerFileName());

            if (Directory.Exists(dir))
            {
                Directory.Delete(dir, true);
            }

            string filePath = Path.Combine(dir, "1.1.txt");
            var    legal    = new LegalDocuments(filePath);

            Assert.False(File.Exists(filePath));
            await legal.ToFileAsync("bar");

            Assert.True(File.Exists(filePath));

            string filePath2 = Path.Combine(dir, "1.2.txt");
            var    legal2    = new LegalDocuments(filePath2);

            Assert.True(File.Exists(filePath));
            Assert.False(File.Exists(filePath2));
            await legal2.ToFileAsync("bar");

            Assert.False(File.Exists(filePath));
            Assert.True(File.Exists(filePath2));
        }
Beispiel #6
0
        public Global()
        {
            using (BenchmarkLogger.Measure())
            {
                StoppingCts = new CancellationTokenSource();
                DataDir     = EnvironmentHelpers.GetDataDir(Path.Combine("MustardWalletLTC", "Client"));
                TorLogsFile = Path.Combine(DataDir, "TorLogs.txt");
                Directory.CreateDirectory(DataDir);

                Logger.InitializeDefaults(Path.Combine(DataDir, "Logs.txt"));

                UiConfig = new UiConfig(Path.Combine(DataDir, "UiConfig.json"));
                UiConfig.LoadOrCreateDefaultFile();
                Config = new Config(Path.Combine(DataDir, "Config.json"));
                Config.LoadOrCreateDefaultFile();

                HostedServices = new HostedServices();
                WalletManager  = new WalletManager(Network, new WalletDirectories(DataDir));

                LegalDocuments = LegalDocuments.TryLoadAgreed(DataDir);

                WalletManager.OnDequeue += WalletManager_OnDequeue;
                WalletManager.WalletRelevantTransactionProcessed += WalletManager_WalletRelevantTransactionProcessed;
            }
        }
Beispiel #7
0
        public async Task LeavesTrashAloneAsync()
        {
            var dir = Path.Combine(Global.Instance.DataDir, EnvironmentHelpers.GetCallerFileName());

            if (Directory.Exists(dir))
            {
                Directory.Delete(dir, true);
            }

            var res = LegalDocuments.TryLoadAgreed(dir);

            Assert.Null(res);
            var legalDir = Assert.Single(Directory.GetDirectories(dir));

            // Leaves one trash alone.
            var trash1 = File.Create(Path.Combine(legalDir, "foo"));
            await trash1.DisposeAsync();

            res = LegalDocuments.TryLoadAgreed(dir);
            Assert.Null(res);
            Assert.Single(Directory.GetFiles(legalDir));
            Assert.Empty(Directory.GetDirectories(legalDir));

            // Leaves 3 trash alone.
            var trash2 = File.Create(Path.Combine(legalDir, "foo.txt"));
            var trash3 = File.Create(Path.Combine(legalDir, "foo2"));
            await trash2.DisposeAsync();

            await trash3.DisposeAsync();

            res = LegalDocuments.TryLoadAgreed(dir);
            Assert.Null(res);
            Assert.Equal(3, Directory.GetFiles(legalDir).Length);
            Assert.Empty(Directory.GetDirectories(legalDir));
        }
Beispiel #8
0
        public async Task CanLoadLegalDocsAsync()
        {
            var legalDir = Common.GetWorkDir();

            if (Directory.Exists(legalDir))
            {
                await IoHelpers.TryDeleteDirectoryAsync(legalDir);
            }

            Directory.CreateDirectory(legalDir);

            var res = await LegalDocuments.LoadAgreedAsync(legalDir);

            Assert.Null(res);

            var version = new Version(1, 1);

            // Deletes them if multiple legal docs found.
            var candidate = File.Create(Path.Combine(legalDir, $"{version}.txt"));
            await candidate.DisposeAsync();

            res = await LegalDocuments.LoadAgreedAsync(legalDir);

            Assert.NotNull(res);
            Assert.Single(Directory.GetFiles(legalDir));
            Assert.Empty(Directory.GetDirectories(legalDir));
            Assert.Equal(version, res?.Version);
        }
Beispiel #9
0
        public Global(string dataDir, string torLogsFile, Config config, UiConfig uiConfig, WalletManager walletManager)
        {
            using (BenchmarkLogger.Measure())
            {
                CrashReporter = new CrashReporter();
                StoppingCts   = new CancellationTokenSource();
                DataDir       = dataDir;
                Config        = config;
                UiConfig      = uiConfig;
                TorLogsFile   = torLogsFile;

                Logger.InitializeDefaults(Path.Combine(DataDir, "Logs.txt"));

                HostedServices = new HostedServices();
                WalletManager  = walletManager;

                LegalDocuments = LegalDocuments.TryLoadAgreed(DataDir);

                WalletManager.OnDequeue += WalletManager_OnDequeue;
                WalletManager.WalletRelevantTransactionProcessed += WalletManager_WalletRelevantTransactionProcessed;

                var indexStore = new IndexStore(Network, new SmartHeaderChain());

                BitcoinStore = new BitcoinStore(
                    Path.Combine(DataDir, "BitcoinStore"), Network,
                    indexStore, new AllTransactionStore(), new MempoolService()
                    );

                SingleInstanceChecker = new SingleInstanceChecker(Network);
            }
        }
Beispiel #10
0
        public async Task Legal(IDialogContext context, LuisResult result)
        {
            context.SendTypingAcitivity();
            LegalDocuments.RetrieveLegalDocuments();
            context.SendTypingAcitivity();
            var itms = LegalDocuments.Legaldocuments;

            itms = itms.Where(cc => cc.OnPreservationHold).ToList();
            var res = "There are " + itms.Count() + " documents are on preservation hold";

            var attch = ResultCard.GetThumbnailCard(
                "Legal Cases",
                res,
                "Click below link to go the Sharepoint portal for Legal Cases",
                new CardImage(url: "http://technoinfotech.com/images/legal-hold-technoarchive.png"),
                new CardAction(ActionTypes.OpenUrl, "Learn More", value: "https://m365x844754.sharepoint.com/sites/ChrevronBot/Shared%20Documents/Forms/AllItems.aspx"));

            IMessageActivity msg = context.MakeMessage();

            msg.Attachments.Add(attch);
            await context.PostAsync(msg);



            msg = context.MakeMessage();
            ResultCard card = new ResultCard();

            card.RenderLegalDocuments(msg, itms);
            await context.PostAsync(msg);

            context.Wait(this.MessageReceived);
        }
Beispiel #11
0
        public async Task CanLoadLegalDocsAsync()
        {
            var dir = Path.Combine(Global.Instance.DataDir, EnvironmentHelpers.GetCallerFileName());

            if (Directory.Exists(dir))
            {
                Directory.Delete(dir, true);
            }

            var res = LegalDocuments.TryLoadAgreed(dir);

            Assert.Null(res);
            var legalDir = Assert.Single(Directory.GetDirectories(dir));

            var version = new Version(1, 1);

            // Deletes them if multiple legal docs found.
            var candidate = File.Create(Path.Combine(legalDir, $"{version}.txt"));
            await candidate.DisposeAsync();

            res = LegalDocuments.TryLoadAgreed(dir);
            Assert.NotNull(res);
            Assert.Single(Directory.GetFiles(legalDir));
            Assert.Empty(Directory.GetDirectories(legalDir));
            Assert.Equal(version, res.Version);
            Assert.Equal(Path.Combine(legalDir, $"{version}.txt"), res.FilePath);
        }
Beispiel #12
0
        public Global(string dataDir, string torLogsFile, Config config, UiConfig uiConfig, WalletManager walletManager)
        {
            using (BenchmarkLogger.Measure())
            {
                StoppingCts = new CancellationTokenSource();
                DataDir     = dataDir;
                Config      = config;
                UiConfig    = uiConfig;
                TorSettings = new TorSettings(DataDir, torLogsFile, distributionFolderPath: EnvironmentHelpers.GetFullBaseDirectory());

                Logger.InitializeDefaults(Path.Combine(DataDir, "Logs.txt"));

                HostedServices = new HostedServices();
                WalletManager  = walletManager;

                LegalDocuments = LegalDocuments.TryLoadAgreed(DataDir);

                WalletManager.OnDequeue += WalletManager_OnDequeue;
                WalletManager.WalletRelevantTransactionProcessed += WalletManager_WalletRelevantTransactionProcessed;

                var networkWorkFolderPath = Path.Combine(DataDir, "BitcoinStore", Network.ToString());
                var transactionStore      = new AllTransactionStore(networkWorkFolderPath, Network);
                var indexStore            = new IndexStore(Path.Combine(networkWorkFolderPath, "IndexStore"), Network, new SmartHeaderChain());
                var mempoolService        = new MempoolService();
                var blocks = new FileSystemBlockRepository(Path.Combine(networkWorkFolderPath, "Blocks"), Network);

                BitcoinStore = new BitcoinStore(indexStore, transactionStore, mempoolService, blocks);

                WasabiClientFactory wasabiClientFactory = Config.UseTor
                                        ? new WasabiClientFactory(Config.TorSocks5EndPoint, backendUriGetter: () => Config.GetCurrentBackendUri())
                                        : new WasabiClientFactory(torEndPoint: null, backendUriGetter: () => Config.GetFallbackBackendUri());

                Synchronizer = new WasabiSynchronizer(Network, BitcoinStore, wasabiClientFactory);
            }
        }
Beispiel #13
0
        public void CanCreateLegalDocuments()
        {
            var version = new Version(1, 1);
            var legal   = new LegalDocuments($"{version}.txt");

            Assert.Equal("1.1.txt", legal.FilePath);
            Assert.Equal(version, legal.Version);
        }
Beispiel #14
0
        public AddWalletPageViewModel(
            LegalDocuments legalDocuments,
            WalletManager walletManager,
            BitcoinStore store,
            Network network)
        {
            Title           = "Add Wallet";
            SelectionMode   = NavBarItemSelectionMode.Button;
            _legalDocuments = legalDocuments;

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

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

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

            ConnectHardwareWalletCommand = ReactiveCommand.Create(() =>
            {
                Navigate().To(new ConnectHardwareWalletViewModel(WalletName, network, walletManager));
            });

            CreateWalletCommand = ReactiveCommand.CreateFromTask(
                async() =>
            {
                var result = await NavigateDialog(
                    new EnterPasswordViewModel("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));
                    });

                    Navigate().To(new RecoveryWordsViewModel(km, mnemonic, walletManager), NavigationMode.Clear);

                    IsBusy = false;
                }
            });

            this.ValidateProperty(x => x.WalletName, errors => ValidateWalletName(errors, walletManager, WalletName));
        }
Beispiel #15
0
        public async Task <IActionResult> Create([Bind("LegalDocId,LivingWill,LivingWillDateSigned,LivingWillLastUpdated,LivingWillCopyOnFile,FamilyAwareOfInstructions,MedicalPowerOfAttorney,MedPowerOfAttorneyName,MedPowerOfAttorneyDateSigned,MedPowerOfAttorneyDateLastUpdated,MedPowerOfAttorneyCopyOnFile,HealthCareProxy,HealthCareProxyName,HealthCareProxyDateSigned,HealtchCareProxyDateLastUpdated,DoNotResuscitateOrder,DnrDateSigned,DnrDateLastUpdated,OrganDonorDocument,OrganDonorDateSigned,OrganDonorLastUpdate,DocumentsLocation,DocumentContactsFirstName,DocumentContactsLastName,DocumentContactsPhone,AttorneyFirstName,AttorneyLastName,AttorneyPhone,Comments")] LegalDocuments legalDocuments)
        {
            if (ModelState.IsValid)
            {
                _context.Add(legalDocuments);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            return(View(legalDocuments));
        }
Beispiel #16
0
        public async Task ResolvesConflictsAsync()
        {
            var legalDir = Common.GetWorkDir();

            if (Directory.Exists(legalDir))
            {
                await IoHelpers.TryDeleteDirectoryAsync(legalDir);
            }

            Directory.CreateDirectory(legalDir);

            var res = await LegalDocuments.LoadAgreedAsync(legalDir);

            Assert.Null(res);

            // Deletes them if multiple legal docs found.
            var candidate1 = File.Create(Path.Combine(legalDir, "1.1.txt"));
            var candidate2 = File.Create(Path.Combine(legalDir, "1.2.txt"));
            await candidate1.DisposeAsync();

            await candidate2.DisposeAsync();

            res = await LegalDocuments.LoadAgreedAsync(legalDir);

            Assert.Null(res);
            Assert.Empty(Directory.GetFiles(legalDir));
            Assert.Empty(Directory.GetDirectories(legalDir));

            // Only the candidates are deleted.
            var trash = File.Create(Path.Combine(legalDir, "1.txt"));

            candidate1 = File.Create(Path.Combine(legalDir, "1.1.txt"));
            candidate2 = File.Create(Path.Combine(legalDir, "1.2.txt"));
            await trash.DisposeAsync();

            await candidate1.DisposeAsync();

            await candidate2.DisposeAsync();

            res = await LegalDocuments.LoadAgreedAsync(legalDir);

            Assert.Null(res);
            Assert.Single(Directory.GetFiles(legalDir));
            Assert.Empty(Directory.GetDirectories(legalDir));
        }
Beispiel #17
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));
        }
Beispiel #18
0
        public void CantLoadNotAgreed()
        {
            var dir = Path.Combine(Global.Instance.DataDir, EnvironmentHelpers.GetCallerFileName());

            if (Directory.Exists(dir))
            {
                Directory.Delete(dir, true);
            }

            var res = LegalDocuments.TryLoadAgreed(dir);

            Assert.Null(res);
            Assert.True(Directory.Exists(dir));
            Assert.Empty(Directory.GetFiles(dir));
            var legalDir = Assert.Single(Directory.GetDirectories(dir));

            Assert.Empty(Directory.GetFiles(legalDir));
            Assert.Empty(Directory.GetDirectories(legalDir));
        }
Beispiel #19
0
        public void CantLoadNotAgreed()
        {
            var dir = Common.GetWorkDir();

            if (Directory.Exists(dir))
            {
                Directory.Delete(dir, true);
            }

            var res = LegalDocuments.TryLoadAgreed(dir);

            Assert.Null(res);
            Assert.True(Directory.Exists(dir));
            Assert.Empty(Directory.GetFiles(dir));
            var legalDir = Assert.Single(Directory.GetDirectories(dir));

            Assert.Empty(Directory.GetFiles(legalDir));
            Assert.Empty(Directory.GetDirectories(legalDir));
        }
Beispiel #20
0
        public async Task ResolvesConflictsAsync()
        {
            var dir = Path.Combine(Global.Instance.DataDir, EnvironmentHelpers.GetCallerFileName());

            if (Directory.Exists(dir))
            {
                Directory.Delete(dir, true);
            }

            var res = LegalDocuments.TryLoadAgreed(dir);

            Assert.Null(res);
            var legalDir = Assert.Single(Directory.GetDirectories(dir));

            // Deletes them if multiple legal docs found.
            var candidate1 = File.Create(Path.Combine(legalDir, "1.1.txt"));
            var candidate2 = File.Create(Path.Combine(legalDir, "1.2.txt"));
            await candidate1.DisposeAsync();

            await candidate2.DisposeAsync();

            res = LegalDocuments.TryLoadAgreed(dir);
            Assert.Null(res);
            Assert.Empty(Directory.GetFiles(legalDir));
            Assert.Empty(Directory.GetDirectories(legalDir));

            // Only the candidates are deleted.
            var trash = File.Create(Path.Combine(legalDir, "1.txt"));

            candidate1 = File.Create(Path.Combine(legalDir, "1.1.txt"));
            candidate2 = File.Create(Path.Combine(legalDir, "1.2.txt"));
            await trash.DisposeAsync();

            await candidate1.DisposeAsync();

            await candidate2.DisposeAsync();

            res = LegalDocuments.TryLoadAgreed(dir);
            Assert.Null(res);
            Assert.Single(Directory.GetFiles(legalDir));
            Assert.Empty(Directory.GetDirectories(legalDir));
        }
Beispiel #21
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));
        }
Beispiel #22
0
        public Global(string dataDir, string torLogsFile, Config config, UiConfig uiConfig, WalletManager walletManager)
        {
            using (BenchmarkLogger.Measure())
            {
                CrashReporter = new CrashReporter();
                StoppingCts   = new CancellationTokenSource();
                DataDir       = dataDir;
                Config        = config;
                UiConfig      = uiConfig;
                TorLogsFile   = torLogsFile;

                Logger.InitializeDefaults(Path.Combine(DataDir, "Logs.txt"));

                HostedServices = new HostedServices();
                WalletManager  = walletManager;

                LegalDocuments = LegalDocuments.TryLoadAgreed(DataDir);

                WalletManager.OnDequeue += WalletManager_OnDequeue;
                WalletManager.WalletRelevantTransactionProcessed += WalletManager_WalletRelevantTransactionProcessed;

                var networkWorkFolderPath = Path.Combine(DataDir, "BitcoinStore", Network.ToString());
                var transactionStore      = new AllTransactionStore(networkWorkFolderPath, Network);
                var indexStore            = new IndexStore(Path.Combine(networkWorkFolderPath, "IndexStore"), Network, new SmartHeaderChain());
                var mempoolService        = new MempoolService();

                BitcoinStore = new BitcoinStore(indexStore, transactionStore, mempoolService);

                SingleInstanceChecker = new SingleInstanceChecker(Network);

                if (Config.UseTor)
                {
                    Synchronizer = new WasabiSynchronizer(Network, BitcoinStore, () => Config.GetCurrentBackendUri(), Config.TorSocks5EndPoint);
                }
                else
                {
                    Synchronizer = new WasabiSynchronizer(Network, BitcoinStore, Config.GetFallbackBackendUri(), null);
                }
            }
        }
        public AddWalletPageViewModel(
            LegalDocuments legalDocuments,
            WalletManager walletManager,
            BitcoinStore store,
            Network network)
        {
            Title           = "Add Wallet";
            SelectionMode   = NavBarItemSelectionMode.Button;
            _legalDocuments = legalDocuments;

            var enableBack = default(IDisposable);

            this.WhenAnyValue(x => x.CurrentTarget)
            .ObserveOn(RxApp.MainThreadScheduler)
            .Subscribe(x =>
            {
                enableBack?.Dispose();
                enableBack = Navigate()
                             .WhenAnyValue(y => y.CanNavigateBack)
                             .Subscribe(y => EnableBack = y);
            });

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

            RecoverWalletCommand = ReactiveCommand.Create(
                () => Navigate().To(new RecoverWalletViewModel(WalletName, network, walletManager)));

            ImportWalletCommand = ReactiveCommand.CreateFromTask(async() =>
            {
                try
                {
                    var filePath = await FileDialogHelper.ShowOpenFileDialogAsync("Import wallet file", new[] { "json" });

                    if (filePath is null)
                    {
                        return;
                    }

                    var keyManager = await ImportWalletHelper.ImportWalletAsync(walletManager, WalletName, filePath);

                    // TODO: get the type from the wallet file
                    Navigate().To(new AddedWalletPageViewModel(walletManager, keyManager));
                }
                catch (Exception ex)
                {
                    Logger.LogError(ex);
                    await ShowErrorAsync(ex.ToUserFriendlyString(), "The wallet file was not valid or compatible with Wasabi.");
                }
            });

            ConnectHardwareWalletCommand = ReactiveCommand.Create(() => Navigate().To(new ConnectHardwareWalletViewModel(WalletName, network, walletManager)));

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

                if (dialogResult.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));
                    });

                    Navigate().To(new RecoveryWordsViewModel(km, mnemonic, walletManager));

                    IsBusy = false;
                }
            });

            this.ValidateProperty(x => x.WalletName, errors => ValidateWalletName(errors, walletManager, WalletName));
        }
Beispiel #24
0
        public void LegalDocumentsCreationFixesPath()
        {
            var legal = new LegalDocuments($"  1.1.txt  ");

            Assert.Equal("1.1.txt", legal.FilePath);
        }