private async void OnUnhandledException(object sender, Windows.UI.Xaml.UnhandledExceptionEventArgs unhandledExceptionEventArgs) { // Save the argument exception because it's cleared on first access var exception = unhandledExceptionEventArgs.Exception; var realException = exception is TargetInvocationException && exception.InnerException != null ? exception.InnerException : exception; if (realException is SaveException) { unhandledExceptionEventArgs.Handled = true; //_hockey.TrackException(realException); await _dialog.ShowMessage(realException.Message, _resource.GetResourceValue("MessageDialogSaveErrorTitle"), _resource.GetResourceValue("MessageDialogSaveErrorButtonSaveAs"), _resource.GetResourceValue("MessageDialogSaveErrorButtonDiscard"), async isOk => { if (isOk) { var database = await _mediator.Send(new GetDatabaseQuery()); var savePicker = new FileSavePicker { SuggestedStartLocation = PickerLocationId.DocumentsLibrary, SuggestedFileName = $"{database.Name} - copy" }; savePicker.FileTypeChoices.Add( _resource.GetResourceValue("MessageDialogSaveErrorFileTypeDesc"), new List <string> { ".kdbx" }); var file = await savePicker.PickSaveFileAsync().AsTask(); if (file != null) { var token = StorageApplicationPermissions.FutureAccessList.Add(file, file.Name); await _mediator.Send(new SaveDatabaseCommand { FilePath = token }); } } }); } else { await _dialog.ShowError(realException, realException.Message, "OK", () => { }); } }
private async Task CreateKeyFile() { var file = await _file.CreateFile(_resource.GetResourceValue("CompositeKeyFileNameSuggestion"), Constants.Extensions.Key, _resource.GetResourceValue("CompositeKeyFileTypeDesc"), false); if (file == null) { return; } SetKeyFileInfo(file); await _mediator.Send(new GenerateKeyFileCommand { KeyFilePath = KeyFilePath }); }
private async Task SaveAs() { var file = await _file.CreateFile(_resource.GetResourceValue("MessageDialogSaveNameSuggestion"), Domain.Common.Constants.Extensions.Kdbx, _resource.GetResourceValue("MessageDialogSaveErrorFileTypeDesc"), true); if (file == null) { return; } await _mediator.Send(new SaveDatabaseCommand { FilePath = file.Id }); _navigation.NavigateTo(Constants.Navigation.MainPage); }
private async Task CreateDatabaseFile() { var file = await _file.CreateFile(_resource.GetResourceValue("MessageDialogSaveNameSuggestion"), Domain.Common.Constants.Extensions.Kdbx, _resource.GetResourceValue("MessageDialogSaveErrorFileTypeDesc"), true); if (file == null) { return; } Token = file.Id; Path = file.Path; Name = file.Name; }
private async Task HandleSaveError(SaveErrorMessage message) { _notification.Show(_resource.GetResourceValue("MessageDialogSaveErrorTitle"), message?.Message); var database = await _mediator.Send(new GetDatabaseQuery()); var file = await _file.CreateFile($"{database.Name} - copy", Domain.Common.Constants.Extensions.Kdbx, _resource.GetResourceValue("MessageDialogSaveErrorFileTypeDesc"), true); if (file != null) { await _mediator.Send(new SaveDatabaseCommand { FilePath = file.Id }); _messenger.Send(new DatabaseSavedMessage()); } }
private async Task AskForDelete() { if (IsCurrentEntry) { if (IsRecycleOnDelete) { await Delete(); _notification.Show(_resource.GetResourceValue("EntityDeleting"), string.Format(_resource.GetResourceValue("EntryRecycled"), Title)); } else { await _dialog.ShowMessage( string.Format(_resource.GetResourceValue("EntryDeletingConfirmation"), Title), _resource.GetResourceValue("EntityDeleting"), _resource.GetResourceValue("EntityDeleteActionButton"), _resource.GetResourceValue("EntityDeleteCancelButton"), async isOk => { if (isOk) { await Delete(); } }); } } else { await _dialog.ShowMessage(_resource.GetResourceValue("HistoryDeleteDescription"), _resource.GetResourceValue("HistoryDeleteTitle"), _resource.GetResourceValue("EntityDeleteActionButton"), _resource.GetResourceValue("EntityDeleteCancelButton"), async isOk => { if (!isOk) { return; } await _mediator.Send(new DeleteHistoryCommand { Entry = History[0] as EntryVm, HistoryIndex = History.Count - SelectedIndex - 1 }); History.RemoveAt(SelectedIndex); }); } }
public OpenDatabaseControlVm(IMediator mediator, IResourceProxy resource, INotificationService notification, IFileProxy file, IDialogService dialog) { _mediator = mediator; _resource = resource; _notification = notification; _file = file; _dialog = dialog; OpenKeyFileCommand = new RelayCommand(async() => await OpenKeyFile()); OpenDatabaseCommand = new RelayCommand <string>(async databaseFilePath => await TryOpenDatabase(databaseFilePath), _ => IsValid); _keyFileText = _resource.GetResourceValue("CompositeKeyDefaultKeyFile"); }
public async Task UpdateDatabaseCredentials(CredentialsSetMessage message) { await _mediator.Send(new UpdateCredentialsCommand { KeyFilePath = message.KeyFilePath, Password = message.Password }); var database = await _mediator.Send(new GetDatabaseQuery()); _notification.Show(database.Name, _resource.GetResourceValue("CompositeKeyUpdated")); }
public async Task OpenDatabase(string databaseFilePath) { IsOpening = true; try { await _mediator.Send(new OpenDatabaseQuery { FilePath = databaseFilePath, KeyFilePath = HasKeyFile ? KeyFilePath : null, Password = HasPassword ? Password : null, }); var database = await _mediator.Send(new GetDatabaseQuery()); if (database.Size > Common.Constants.File.OneMegaByte) { await _dialog.ShowMessage(_resource.GetResourceValue("DatabaseTooBigDescription"), _resource.GetResourceValue("DatabaseTooBigTitle")); } MessengerInstance.Send(new DatabaseOpenedMessage { RootGroupId = database.RootGroupId }); } catch (ArgumentException) { var errorMessage = new StringBuilder($"{_resource.GetResourceValue("CompositeKeyErrorOpen")}\n"); if (HasPassword) { errorMessage.AppendLine(_resource.GetResourceValue("CompositeKeyErrorUserPassword")); } if (HasKeyFile) { errorMessage.AppendLine(_resource.GetResourceValue("CompositeKeyErrorUserKeyFile")); } Status = errorMessage.ToString(); IsError = true; } catch (FileNotFoundException) { _notification.Show( $"{_resource.GetResourceValue("FileNotFoundTitle")}", $"{_resource.GetResourceValue("FileNotFoundDescription")}"); MessengerInstance.Send(new FileNotFoundMessage()); IsError = true; } catch (Exception e) { Status = $"{_resource.GetResourceValue("CompositeKeyErrorOpen")}{e.Message}"; IsError = true; } finally { IsOpening = false; } }
public SetCredentialsVm(IMediator mediator, IResourceProxy resource, IFileProxy file) { _mediator = mediator; _resource = resource; _file = file; OpenKeyFileCommand = new RelayCommand(async() => await OpenKeyFile(), () => HasKeyFile); CreateKeyFileCommand = new RelayCommand(async() => await CreateKeyFile(), () => HasKeyFile); GenerateCredentialsCommand = new RelayCommand(GenerateCredentials, () => IsValid); _keyFileText = resource.GetResourceValue("CompositeKeyDefaultKeyFile"); MessengerInstance.Register <PasswordGeneratedMessage>(this, message => { Password = message.Password; ConfirmPassword = message.Password; }); }
public SettingsVm(IMediator mediator, IResourceProxy resource) { var database = mediator.Send(new GetDatabaseQuery()).GetAwaiter().GetResult(); var menuItems = new ObservableCollection <ListMenuItemVm> { new ListMenuItemVm { Title = resource.GetResourceValue("SettingsMenuItemNew"), Group = resource.GetResourceValue("SettingsMenuGroupApplication"), SymbolIcon = Symbol.Add, PageType = typeof(SettingsNewDatabasePage), IsSelected = true }, new ListMenuItemVm { Title = resource.GetResourceValue("SettingsMenuItemGeneral"), Group = resource.GetResourceValue("SettingsMenuGroupApplication"), SymbolIcon = Symbol.Setting, PageType = typeof(SettingsGeneralPage) }, new ListMenuItemVm { Title = resource.GetResourceValue("SettingsMenuItemSecurity"), Group = resource.GetResourceValue("SettingsMenuGroupDatabase"), SymbolIcon = Symbol.Permissions, PageType = typeof(SettingsSecurityPage), IsEnabled = database.IsOpen }, new ListMenuItemVm { Title = resource.GetResourceValue("SettingsMenuItemHistory"), Group = resource.GetResourceValue("SettingsMenuGroupDatabase"), SymbolIcon = Symbol.Undo, PageType = typeof(SettingsHistoryPage), IsEnabled = database.IsOpen }, new ListMenuItemVm { Title = resource.GetResourceValue("SettingsMenuItemRecycleBin"), Group = resource.GetResourceValue("SettingsMenuGroupDatabase"), SymbolIcon = Symbol.Delete, PageType = typeof(SettingsRecycleBinPage), IsEnabled = database.IsOpen }, new ListMenuItemVm { Title = resource.GetResourceValue("SettingsMenuItemCredentials"), Group = resource.GetResourceValue("SettingsMenuGroupDatabase"), SymbolIcon = Symbol.Account, PageType = typeof(SettingsCredentialsPage), IsEnabled = database.IsOpen } }; SelectedItem = menuItems.FirstOrDefault(m => m.IsSelected); MenuItems = from item in menuItems group item by item.Group into grp orderby grp.Key select grp; }
public async Task Initialize(Frame referenceFrame, Frame destinationFrame, FileInfo databaseFile = null) { var database = await _mediator.Send(new GetDatabaseQuery()); var mainMenuItems = new ObservableCollection <MainMenuItemVm> { new MainMenuItemVm { Title = _resource.GetResourceValue("MainMenuItemOpen"), PageType = typeof(OpenDatabasePage), Destination = destinationFrame, Parameter = databaseFile, SymbolIcon = Symbol.Page2, IsSelected = databaseFile != null }, new MainMenuItemVm { Title = _resource.GetResourceValue("MainMenuItemNew"), PageType = typeof(NewDatabasePage), Destination = destinationFrame, SymbolIcon = Symbol.Add }, new MainMenuItemVm { Title = _resource.GetResourceValue("MainMenuItemSave"), PageType = typeof(SaveDatabasePage), Destination = destinationFrame, Parameter = referenceFrame, SymbolIcon = Symbol.Save, IsSelected = database.IsOpen, IsEnabled = database.IsOpen }, new MainMenuItemVm { Title = _resource.GetResourceValue("MainMenuItemRecent"), PageType = typeof(RecentDatabasesPage), Destination = destinationFrame, Parameter = referenceFrame, SymbolIcon = Symbol.Copy, IsSelected = !database.IsOpen && _recent.EntryCount > 0, IsEnabled = _recent.EntryCount > 0 }, new MainMenuItemVm { Title = _resource.GetResourceValue("MainMenuItemSettings"), PageType = typeof(SettingsPage), Destination = referenceFrame, SymbolIcon = Symbol.Setting }, new MainMenuItemVm { Title = _resource.GetResourceValue("MainMenuItemAbout"), PageType = typeof(AboutPage), Destination = destinationFrame, SymbolIcon = Symbol.Help }, new MainMenuItemVm { Title = _resource.GetResourceValue("MainMenuItemDonate"), PageType = typeof(DonatePage), Destination = destinationFrame, SymbolIcon = Symbol.Shop } }; // Auto-select the Recent Items menu item if the conditions are met SelectedItem = mainMenuItems.FirstOrDefault(m => m.IsSelected); // Add currently opened database to the menu if (database.IsOpen) { mainMenuItems.Add(new MainMenuItemVm { Title = database.Name, PageType = typeof(GroupDetailPage), Destination = referenceFrame, Parameter = new NavigationItem { Id = database.RootGroupId }, Group = "Databases", SymbolIcon = Symbol.ProtectedDocument }); } MainMenuItems = from item in mainMenuItems group item by item.Group into grp orderby grp.Key select grp; }
private async Task AskForDelete() { if (IsRecycleOnDelete) { await Delete(); _notification.Show(_resource.GetResourceValue("EntityDeleting"), string.Format(_resource.GetResourceValue("GroupRecycled"), Title)); } else { await _dialog.ShowMessage( string.Format(_resource.GetResourceValue("GroupDeletingConfirmation"), Title), _resource.GetResourceValue("EntityDeleting"), _resource.GetResourceValue("EntityDeleteActionButton"), _resource.GetResourceValue("EntityDeleteCancelButton"), async isOk => { if (isOk) { await Delete(); } }); } }