private async void MenuFlyoutEdit_Click(object sender, RoutedEventArgs e) { SPMScheme scheme = (SPMScheme)((MenuFlyoutItem)sender).Tag; manager.CurrentScheme = scheme; Frame.Navigate(typeof(SchemeEditingPage)); }
public static async Task <bool> WriteSchemesAsync(List <SPMScheme> schemes) { if (schemes == null) { return(true); } try { var folder = await OpenSchemeFolderAsync(); foreach (var scheme in schemes) { var file = await folder.CreateFileAsync(scheme.Name + ".xml", CreationCollisionOption.ReplaceExisting); await FileIO.WriteTextAsync(file, SPMScheme.SerializeXml(scheme)); } } catch (Exception) { // TODO: add log return(false); } return(true); }
public static async Task <List <SPMScheme> > ReadAllSchemesAsync() { List <SPMScheme> result = new List <SPMScheme>(); try { var folder = await OpenSchemeFolderAsync(); var files = await folder.GetFilesAsync(); foreach (var file in files) { if (file.Name.EndsWith(".xml")) { string content = await FileIO.ReadTextAsync(file); SPMScheme scheme = SPMScheme.DeserializeXml(content); if (scheme != null) { result.Add(scheme); } } } } catch (Exception) { // TODO: add log return(null); } return(result); }
private async void MenuFlyoutDuplicate_Click(object sender, RoutedEventArgs e) { SPMScheme scheme = (SPMScheme)((MenuFlyoutItem)sender).Tag; manager.CurrentScheme = scheme; // get a name string n = null; bool prompting = true; while (prompting) { n = await this.PromptForInput("Duplicate Scheme", "Give the new scheme a name:", scheme.Name); if (!SPMScheme.IsNameValid(n)) { await this.ShowMessage("Invalid Name", "The name of scheme should have at most 32 characters of letters, numbers, and these characters: []().,_ But it shall not end with a dot or a space."); continue; } if (manager.Schemes.Find(sc => String.Compare(n, sc.Name) == 0) == null) { prompting = false; } else { bool cont = await this.ShowYesNoMessage("Name Collision", "There is already a scheme with the same name (not case-sensative). Please change the name of the scheme. Tap Yes to try again, No to give up."); if (!cont) { return; } } } SPMScheme s = new SPMScheme(manager.CurrentScheme); s.Name = n; manager.Schemes.Insert(manager.Schemes.IndexOf(manager.CurrentScheme) + 1, s); manager.CurrentScheme = s; bool result = await manager.SaveCurrentSchemeAsync(); if (!result) { await this.ShowMessage("Error", "An error occurred while writing the new scheme. Sorry."); manager.CurrentScheme = null; manager.Schemes.Remove(s); return; } updateSchemesList(); }
private void sePage_Loaded(object sender, RoutedEventArgs e) { if (manager.CurrentScheme == null) { currScheme = new SPMScheme(); isNewScheme = true; } else { currScheme = new SPMScheme(manager.CurrentScheme); } if (currScheme.Fields.Count == 0) { currScheme.Fields.Add(new SPMSchemeField() { Name = "Default", Description = "Just fill in something.", SaltingType = SPMSchemeSaltingType.ALWAYS }); } fieldsForList = new ListExtraMemberHelper <SPMSchemeField>(); fieldsForList.members = currScheme.Fields; fieldsForList.membersAfter = new List <SPMSchemeField>() { new SPMSchemeField() { Name = "Add a new field", Description = "Tap here to add a new field", isActual = false } }; updateFieldsList(); foreach (var field in currScheme.Fields) { this.iterFieldCombo.Items.Add(field.Name); } int procIndex = CSHelper.IndexOfEnum(procCombo.Items, currScheme.ProcessType); this.procCombo.SelectedIndex = procIndex >= 0 ? procIndex : 0; if (currScheme.TimeToHashType == SPMSchemeTimeToHashType.FROM_FIELD) { this.iterChoiceLength.IsChecked = true; this.iterFieldCombo.SelectedIndex = currScheme.TimeToHashParam >= 0 && currScheme.TimeToHashParam < this.iterFieldCombo.Items.Count ? currScheme.TimeToHashParam : 0; } else { this.numIterBox.Text = currScheme.TimeToHashParam.ToString(); this.iterFieldCombo.SelectedIndex = 0; } this.nameBox.Text = currScheme.Name; this.descBox.Text = currScheme.Description; }
private async void schemesList_ItemClick(object sender, ItemClickEventArgs e) { SPMScheme scheme = (SPMScheme)e.ClickedItem; if (schemesForList.membersAfter.FindIndex(s => ReferenceEquals(scheme, s)) < 0) { manager.CurrentScheme = scheme; Frame.Navigate(typeof(PasswordGeneratingPage)); } else { manager.CurrentScheme = null; Frame.Navigate(typeof(SchemeEditingPage)); } }
private async Task <bool> UpdateCurrSchemeExceptFields() { if (!SPMScheme.IsNameValid(nameBox.Text)) { await this.ShowMessage("Invalid Name", "The name of scheme should have at most 32 characters of letters, numbers, and these characters: []().,_ But it shall not end with a dot or a space."); return(false); } bool iterIsFixed = iterChoiceFixed.IsChecked ?? false; int param = 0; if (iterIsFixed) { if (!int.TryParse(numIterBox.Text, out param)) { await this.ShowMessage("Invalid Number", "The number of iteration is not valid."); return(false); } else { if (param < 1 || param > 1000) { await this.ShowMessage("Iteration Out of Range", "The number of iteration should be in [1, 1000]"); return(false); } } } else { param = iterFieldCombo.SelectedIndex; } currScheme.Name = nameBox.Text; currScheme.Description = descBox.Text; currScheme.ProcessType = (SPMSchemeProcessType)procCombo.SelectedItem; currScheme.TimeToHashType = iterIsFixed ? SPMSchemeTimeToHashType.FIXED : SPMSchemeTimeToHashType.FROM_FIELD; currScheme.TimeToHashParam = param; return(true); }
private async void MenuFlyoutDelete_Click(object sender, RoutedEventArgs e) { SPMScheme scheme = (SPMScheme)((MenuFlyoutItem)sender).Tag; manager.CurrentScheme = scheme; bool sure = await this.ShowYesNoMessage(String.Format("Delete \"{0}\"", scheme.Name), "Are you sure?"); if (sure) { bool result = await manager.DeleteCurrentSchemeAsync(); if (!result) { await this.ShowMessage("Error", "An error occurred while deleting. Sorry."); return; } manager.Schemes.Remove(manager.CurrentScheme); manager.CurrentScheme = null; updateSchemesList(); } }