private void GoToSetAction(ItemClickEventArgs args) { CardSetModel cardSetClicked = args.ClickedItem as CardSetModel; prNavigationService.NavigateTo("SetPage"); Messenger.Default.Send(cardSetClicked, "SetView"); }
public static void DeleteCardSet_UWP(CardSetModel deletedCardSet) { string dbpath = Path.Combine(ApplicationData.Current.LocalFolder.Path, prDBName); using (SqliteConnection db = new SqliteConnection($"Filename={dbpath}")) { db.Open(); SqliteCommand deleteAssociatedCardsCommand = new SqliteCommand(); deleteAssociatedCardsCommand.Connection = db; deleteAssociatedCardsCommand.CommandText = "DELETE FROM " + "IndividualFlashcard " + "WHERE " + "ParentSetID = @SetID;"; deleteAssociatedCardsCommand.Parameters.AddWithValue("@SetID", deletedCardSet.SetID); deleteAssociatedCardsCommand.ExecuteReader(); SqliteCommand deleteSetCommand = new SqliteCommand(); deleteSetCommand.Connection = db; deleteSetCommand.CommandText = "DELETE FROM " + "FlashCardSet " + "WHERE " + "SetID = @SetID;"; deleteSetCommand.Parameters.AddWithValue("@SetID", deletedCardSet.SetID); deleteSetCommand.ExecuteReader(); db.Close(); } }
private void InitializeSetPage(List <CardSetModel> cardSetModels) { if (cardSetModels != null && cardSetModels.Count > 0) { OriginalFlashCardSet = null; ImportedFlashcardSets = cardSetModels; TempFlashCardSet = cardSetModels[0]; IndexOfImportedSet = 0; IsCreatingNewSet = true; HasMultipleSetsToEdit = true; prIndexOfLastImportSaved = -1; } else { OriginalFlashCardSet = null; ImportedFlashcardSets = null; TempFlashCardSet = new CardSetModel(); IsCreatingNewSet = true; HasMultipleSetsToEdit = false; } OnPropertyChanged("HasMultipleSetsToEdit"); OnPropertyChanged("ImportedFlashcardSets"); OnPropertyChanged("NumImportedSets"); OnPropertyChanged("IndexOfImportedSet"); OnPropertyChanged("IndexOfImportedSetDisplay"); OnPropertyChanged("OriginalFlashCardSet"); OnPropertyChanged("TempFlashCardSet"); OnPropertyChanged("IsCreatingNewSet"); }
private void InitializeSetPage(CardSetModel cardSetModel, CardSetModel updatedCardSetModel = null) { if (cardSetModel != null) { OriginalFlashCardSet = cardSetModel; TempFlashCardSet = updatedCardSetModel != null ? updatedCardSetModel : OriginalFlashCardSet.Clone(); IsCreatingNewSet = false; } else { OriginalFlashCardSet = null; TempFlashCardSet = new CardSetModel(); IsCreatingNewSet = true; } HasMultipleSetsToEdit = false; ImportedFlashcardSets = null; IndexOfImportedSet = -1; OnPropertyChanged("HasMultipleSetsToEdit"); OnPropertyChanged("ImportedFlashcardSets"); OnPropertyChanged("IndexOfImportedSet"); OnPropertyChanged("IndexOfImportedSetDisplay"); OnPropertyChanged("OriginalFlashCardSet"); OnPropertyChanged("TempFlashCardSet"); OnPropertyChanged("IsCreatingNewSet"); }
private async void ImportSetFromFileAction() { FileOpenPicker openPicker = new FileOpenPicker(); openPicker.SuggestedStartLocation = PickerLocationId.DocumentsLibrary; openPicker.FileTypeFilter.Add(".xlsx"); openPicker.FileTypeFilter.Add(".xls"); openPicker.FileTypeFilter.Add(".docx"); openPicker.FileTypeFilter.Add(".doc"); StorageFile file = await openPicker.PickSingleFileAsync(); if (file != null) { try { CancellationTokenSource cancelSource = new CancellationTokenSource(); Task <ContentDialogResult> loadingScreenTask = new LoadingDialog().ShowAsync().AsTask(cancelSource.Token); Task <CardSetModel> importingTask = ImportFlashcardService.ImportAddToExistingSet(file, cancelSource.Token, FlashCardSet.Clone()); Task firstToFinish = await Task.WhenAny(loadingScreenTask, importingTask); cancelSource.Cancel(); if (firstToFinish == importingTask) { CardSetModel updatedCardSetModel = await importingTask; prNavigationService.NavigateTo("EditSetPage"); Messenger.Default.Send(new Tuple <CardSetModel, CardSetModel>(FlashCardSet, updatedCardSetModel), "EditSetView"); } } catch (Exception ex) { await new MessageDialog(ex.Message).ShowAsync(); } } }
public async static Task <List <CardSetModel> > ImportNewSetsFromFile(StorageFile storageFile, CancellationToken cancellationToken) { if (storageFile.Name.Substring(Math.Max(0, storageFile.Name.Length - 5)).Equals(".xlsx") || storageFile.Name.Substring(Math.Max(0, storageFile.Name.Length - 4)).Equals(".xls")) { ExcelEngine excelEngine = new ExcelEngine(); IWorkbook workbook = await excelEngine.Excel.Workbooks.OpenAsync(await storageFile.OpenStreamForReadAsync()); if (cancellationToken.IsCancellationRequested) { return(null); } VerifyExcelFileIsParseable(workbook); List <CardSetModel> newCardSetModels = new List <CardSetModel>(); foreach (IWorksheet worksheet in workbook.Worksheets) { CardSetModel newCardSetModel = ExcelWorksheetToCardSet(worksheet, cancellationToken); newCardSetModels.Add(newCardSetModel); } return(newCardSetModels); } else if (storageFile.Name.Substring(Math.Max(0, storageFile.Name.Length - 5)).Equals(".docx") || storageFile.Name.Substring(Math.Max(0, storageFile.Name.Length - 4)).Equals(".doc")) { WordDocument wordDocument = new WordDocument(await storageFile.OpenStreamForReadAsync()); VerifyWordFileIsParseable(wordDocument); List <CardSetModel> newCardSetModels = WordDocumentToCardSetModels(wordDocument).ToList(); return(newCardSetModels); } return(null); }
private static CardSetModel ExcelWorksheetToCardSet(IWorksheet worksheet, CancellationToken cancellationToken, CardSetModel cardSetToAddTo = null) { CardSetModel cardSetModel = cardSetToAddTo != null ? cardSetToAddTo : new CardSetModel(); worksheet.UsedRangeIncludesFormatting = false; IRange usedRange = worksheet.UsedRange; int lastRow = usedRange.LastRow; bool thirdColumnIsStarred = worksheet.Range["C1"].Text.Contains("Star", StringComparison.CurrentCultureIgnoreCase); int indexOfFirstUnstarredCard = 0; for (int i = 2; i < lastRow + 1; i++) { if (cancellationToken.IsCancellationRequested) { return(null); } string cardTerm = usedRange[i, 1].Value.Trim(); string cardDefinition = usedRange[i, 2].Value.Trim(); bool overrideStarredValue = bool.TryParse(usedRange[i, (thirdColumnIsStarred ? 3 : 4)].Value, out bool cardIsStarred); bool overrideLearnedValue = bool.TryParse(usedRange[i, (thirdColumnIsStarred ? 4 : 3)].Value, out bool cardIsLearned); if (overrideStarredValue && !cardIsStarred) { cardSetModel.AddCardToSet(cardTerm, cardDefinition, isLearned: overrideLearnedValue ? (bool?)cardIsLearned : null, isStarred: overrideStarredValue ? (bool?)cardIsStarred : null); } else { cardSetModel.AddCardToSet(cardTerm, cardDefinition, isLearned: overrideLearnedValue ? (bool?)cardIsLearned : null, isStarred: overrideStarredValue ? (bool?)cardIsStarred : null, indexOfFirstUnstarredCard); indexOfFirstUnstarredCard++; } } return(cardSetModel); }
public static void EditCardSetRegisterNewReviewSession_UWP(CardSetModel reviewedCardSet) { string dbpath = Path.Combine(ApplicationData.Current.LocalFolder.Path, prDBName); using (SqliteConnection db = new SqliteConnection($"Filename={dbpath}")) { db.Open(); SqliteCommand editCardCommand = new SqliteCommand(); editCardCommand.Connection = db; editCardCommand.CommandText = "UPDATE FlashCardSet " + "SET " + "NumTimesReviewed = @NumTimesReviewed, " + "WhenLastReviewedUTC = @WhenLastReviewedUTC " + "WHERE " + "SetID = @SetID;"; editCardCommand.Parameters.AddWithValue("@NumTimesReviewed", reviewedCardSet.NumTimesReviewed); editCardCommand.Parameters.AddWithValue("@WhenLastReviewedUTC", reviewedCardSet.WhenLastReviewedUTC); editCardCommand.Parameters.AddWithValue("@SetID", reviewedCardSet.SetID); editCardCommand.ExecuteReader(); db.Close(); } }
private async Task InitializeSetPage(CardSetModel cardSetModel) { if (cardSetModel != null && cardSetModel.FlashcardCollection.Count > 0) { FlashCardSet = cardSetModel; CurrentFlashcardIndex = 0; IndexOfFirstUnstarredCard = cardSetModel.FlashcardCollection.Count; for (int i = 0; i < cardSetModel.FlashcardCollection.Count; i++) { if (!cardSetModel.FlashcardCollection[i].IsStarred) { IndexOfFirstUnstarredCard = i; break; } } PopulateQuizOptions(); } else { throw new ArgumentNullException("Can't send null set to study page"); } OnPropertyChanged("FlashCardSet"); OnPropertyChanged("CurrentFlashcardIndex"); OnPropertyChanged("CurrentFlashcard"); lock (myLocker) { prCanUseKeyDown = false; } await InstructionsDialogService.ShowAsync(InstructionDialogType.MultipleChoiceStudyInstructions); lock (myLocker) { prCanUseKeyDown = true; } }
private async Task ReceiveEditSetMessage(CardSetModel editedSet) { if (!CardSets.Contains(editedSet)) { CardSets.Add(editedSet); await Task.Run(() => DataAccess.AddNewCardSet_UWP(editedSet)); } else { await Task.Run(() => DataAccess.EditCardSet_UWP(editedSet)); } }
private void InitializeSetPage(CardSetModel cardSetModel) { if (cardSetModel != null) { FlashCardSet = cardSetModel; } else { FlashCardSet = new CardSetModel(); Messenger.Default.Send(FlashCardSet, "AddSet"); } OnPropertyChanged("FlashCardSet"); }
private async void DeleteSetAction(CardSetModel cardSetModelToDelete) { MessageDialog messageDialog = new MessageDialog("Are you sure you want to permanently delete this set?"); messageDialog.Commands.Add(new UICommand("Yes", null)); messageDialog.Commands.Add(new UICommand("No", null)); messageDialog.DefaultCommandIndex = 0; messageDialog.CancelCommandIndex = 1; IUICommand cmdResult = await messageDialog.ShowAsync(); if (cmdResult.Label == "Yes") { if (CardSets.Remove(cardSetModelToDelete)) { await Task.Run(() => DataAccess.DeleteCardSet_UWP(cardSetModelToDelete)); } } }
private async void ArchiveSetFunction(CardSetModel cardSetModelToArchive) { if (cardSetModelToArchive.IsStarred) { for (int i = 0; i < CardSets.Count; i++) { if (CardSets[i].IsStarred) { CardSets.Move(CardSets.IndexOf(cardSetModelToArchive), i); break; } } cardSetModelToArchive.IsStarred = false; } else { CardSets.Move(CardSets.IndexOf(cardSetModelToArchive), CardSets.Count - 1); cardSetModelToArchive.IsStarred = true; } await Task.Run(() => DataAccess.ArchiveCardSet_UWP(cardSetModelToArchive.SetID, cardSetModelToArchive.IsStarred)); }
public static void AddNewCardSet_UWP(CardSetModel newCardSet) { string dbpath = Path.Combine(ApplicationData.Current.LocalFolder.Path, prDBName); using (SqliteConnection db = new SqliteConnection($"Filename={dbpath}")) { db.Open(); SqliteCommand insertSetCommand = new SqliteCommand(); insertSetCommand.Connection = db; insertSetCommand.CommandText = "INSERT INTO FlashCardSet VALUES " + "(" + "NULL," + "@Name, " + "@Description, " + "@SetID, " + "@NumTimesReviewed, " + "@WhenCreated, " + "@WhenLastReviewedUTC, " + "@IsStarred" + ");"; insertSetCommand.Parameters.AddWithValue("@Name", newCardSet.Name); insertSetCommand.Parameters.AddWithValue("@Description", newCardSet.Description); insertSetCommand.Parameters.AddWithValue("@SetID", newCardSet.SetID); insertSetCommand.Parameters.AddWithValue("@NumTimesReviewed", newCardSet.NumTimesReviewed); insertSetCommand.Parameters.AddWithValue("@WhenCreated", newCardSet.WhenCreated); insertSetCommand.Parameters.AddWithValue("@WhenLastReviewedUTC", newCardSet.WhenLastReviewedUTC); insertSetCommand.Parameters.AddWithValue("@IsStarred", newCardSet.IsStarred); insertSetCommand.ExecuteReader(); foreach (IndividualCardModel individualCard in newCardSet.FlashcardCollection) { AddNewCard(individualCard, newCardSet.SetID, db); } db.Close(); } }
public async static Task <CardSetModel> ImportAddToExistingSet(StorageFile storageFile, CancellationToken cancellationToken, CardSetModel existingSet) { if (storageFile.Name.Substring(Math.Max(0, storageFile.Name.Length - 5)).Equals(".xlsx") || storageFile.Name.Substring(Math.Max(0, storageFile.Name.Length - 4)).Equals(".xls")) { ExcelEngine excelEngine = new ExcelEngine(); IWorkbook workbook = await excelEngine.Excel.Workbooks.OpenAsync(await storageFile.OpenStreamForReadAsync()); if (cancellationToken.IsCancellationRequested) { return(existingSet); } VerifyExcelFileIsParseable(workbook, canContainMultipleWorksheets: false); existingSet = ExcelWorksheetToCardSet(workbook.Worksheets[0], cancellationToken, existingSet); return(existingSet); } else if (storageFile.Name.Substring(Math.Max(0, storageFile.Name.Length - 5)).Equals(".docx") || storageFile.Name.Substring(Math.Max(0, storageFile.Name.Length - 4)).Equals(".doc")) { WordDocument wordDocument = new WordDocument(await storageFile.OpenStreamForReadAsync()); VerifyWordFileIsParseable(wordDocument); return(WordDocumentToCardSetModels(wordDocument, existingSet).ToList()[0]); } return(null); }
private static IEnumerable <CardSetModel> WordDocumentToCardSetModels(WordDocument wordDocument, CardSetModel existingCardSet = null) { bool onlyCreateOneSet = existingCardSet != null; CardSetModel cardSetModel = existingCardSet != null ? existingCardSet : null; foreach (WSection wSection in wordDocument.Sections) { int baseListDepth = 0; string tmpTerm = ""; string tmpDefinition = ""; if (wSection.Paragraphs.Count > 0) { baseListDepth = wSection.Paragraphs[0].ListFormat.ListLevelNumber; } if (onlyCreateOneSet) { baseListDepth--; } for (int i = 0; i < wSection.Paragraphs.Count; i++) { IWParagraph paragraph = wSection.Paragraphs[i]; if (string.IsNullOrWhiteSpace(paragraph.Text)) { continue; } if (paragraph.ListFormat.ListLevelNumber == baseListDepth) { if (cardSetModel != null) { yield return(cardSetModel); } cardSetModel = new CardSetModel(name: paragraph.Text); } else { int peekNextListDepth = (paragraph.NextSibling is IWParagraph) ? (paragraph.NextSibling as IWParagraph).ListFormat.ListLevelNumber : -1; if (paragraph.ListFormat.ListLevelNumber == baseListDepth + 1) { tmpTerm = paragraph.Text; if (peekNextListDepth < baseListDepth + 2) { int indexOfHyphen = Math.Max(tmpTerm.IndexOf('-'), tmpTerm.IndexOf((char)8211)); if (indexOfHyphen > -1) { tmpDefinition = (indexOfHyphen > -1 ? tmpTerm.Substring(indexOfHyphen) : "").Substring(1); tmpTerm = tmpTerm.Substring(0, (indexOfHyphen > -1 ? indexOfHyphen - 1 : tmpTerm.Length)); } cardSetModel.AddCardToSet(tmpTerm.Trim(), tmpDefinition.Trim()); tmpTerm = ""; tmpDefinition = ""; } } else if (paragraph.ListFormat.ListLevelNumber > baseListDepth + 1) { tmpDefinition = tmpDefinition + (string.IsNullOrWhiteSpace(tmpDefinition) ? "" : "\n") + paragraph.Text; if (peekNextListDepth < baseListDepth + 2) { cardSetModel.AddCardToSet(tmpTerm.Trim(), tmpDefinition.Trim()); tmpTerm = ""; tmpDefinition = ""; } } } } } if (cardSetModel != null) { yield return(cardSetModel); } }
public static void EditCardSet_UWP(CardSetModel editedCardSet) { string dbpath = Path.Combine(ApplicationData.Current.LocalFolder.Path, prDBName); using (SqliteConnection db = new SqliteConnection($"Filename={dbpath}")) { db.Open(); SqliteCommand updateSetCommand = new SqliteCommand(); updateSetCommand.Connection = db; updateSetCommand.CommandText = "UPDATE FlashCardSet " + "SET " + "Name = @Name, " + "Description = @Description, " + "NumTimesReviewed = @NumTimesReviewed, " + "WhenCreated = @WhenCreated, " + "WhenLastReviewedUTC = @WhenLastReviewedUTC, " + "IsStarred = @IsStarred " + "WHERE " + "SetID = @SetID;"; updateSetCommand.Parameters.AddWithValue("@Name", editedCardSet.Name); updateSetCommand.Parameters.AddWithValue("@Description", editedCardSet.Description); updateSetCommand.Parameters.AddWithValue("@NumTimesReviewed", editedCardSet.NumTimesReviewed); updateSetCommand.Parameters.AddWithValue("@WhenCreated", editedCardSet.WhenCreated); updateSetCommand.Parameters.AddWithValue("@WhenLastReviewedUTC", editedCardSet.WhenLastReviewedUTC); updateSetCommand.Parameters.AddWithValue("@IsStarred", editedCardSet.IsStarred); updateSetCommand.Parameters.AddWithValue("@SetID", editedCardSet.SetID); updateSetCommand.ExecuteReader(); List <Guid> allCardIDs = new List <Guid>(); foreach (IndividualCardModel individualCard in editedCardSet.FlashcardCollection) { allCardIDs.Add(individualCard.CardID); SqliteCommand queryCardCommand = new SqliteCommand(); queryCardCommand.Connection = db; queryCardCommand.CommandText = "SELECT COUNT(*) FROM IndividualFlashcard WHERE CardID = @CardID;"; queryCardCommand.Parameters.AddWithValue("@CardID", individualCard.CardID); int count = Convert.ToInt32(queryCardCommand.ExecuteScalar()); if (count == 0) { AddNewCard(individualCard, editedCardSet.SetID, db); } else { EditFlashcard(individualCard, db); } } SqliteCommand deleteOldCardsCommand = new SqliteCommand(); deleteOldCardsCommand.Connection = db; deleteOldCardsCommand.CommandText = "DELETE FROM " + "IndividualFlashcard " + "WHERE " + "ParentSetID = @ParentSetID AND " + "CardID NOT IN ("; for (int i = 0; i < allCardIDs.Count; i++) { deleteOldCardsCommand.CommandText += "@CardID" + i + ","; } deleteOldCardsCommand.CommandText = deleteOldCardsCommand.CommandText.TrimEnd(','); deleteOldCardsCommand.CommandText += ");"; deleteOldCardsCommand.Parameters.AddWithValue("@ParentSetID", editedCardSet.SetID); for (int i = 0; i < allCardIDs.Count; i++) { deleteOldCardsCommand.Parameters.AddWithValue("@CardID" + i, allCardIDs[i]).SqliteType = SqliteType.Text; } deleteOldCardsCommand.ExecuteReader(); db.Close(); } }
private void EditSetAction(CardSetModel cardSetModelToEdit) { prNavigationService.NavigateTo("EditSetPage"); Messenger.Default.Send(cardSetModelToEdit, "EditSetView"); }