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");
 }
Beispiel #5
0
        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));
     }
 }
Beispiel #11
0
 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");
 }