/// <summary> /// Word add to black list /// </summary> /// <param name="sender"></param> public void AddToBlackList(object sender) { var textBlock = sender as TextBlock; var wordItem = textBlock.DataContext as WordItem; var blackWord = new DiaryBlackWord { Word = wordItem.Word.ToLower() }; using var db = new AppDbContext(); if (!db.DiaryBlackWords.Any(x => x.Word == wordItem.Word.ToLower())) { db.DiaryBlackWords.Add(blackWord); db.SaveChanges(); } WordList.Remove(wordItem); BlackWordsList.Add(new WordItem { Id = blackWord.Id, Word = wordItem.Word, Command = new RelayParameterizedCommand(RemoveFromBlackList) }); }
/// <summary> /// Word remove from black list /// </summary> /// <param name="sender"></param> public void RemoveFromBlackList(object sender) { var textBlock = sender as TextBlock; var wordItem = textBlock.DataContext as WordItem; using var db = new AppDbContext(); db.DiaryBlackWords.Remove(new DiaryBlackWord { Id = wordItem.Id, Word = wordItem.Word }); db.SaveChanges(); var item = BlackWordsList.First(x => x.Word == wordItem.Word); BlackWordsList.Remove(item); WordList.Add(new WordItem { Id = wordItem.Id, Word = wordItem.Word, Count = 0, Command = new RelayParameterizedCommand(AddToBlackList) }); }
/// <summary> /// Retrives diary logs by target year and applies month of days /// </summary> public async Task LoadLogOfDays() { using var db = new AppDbContext(); // diary logs var diaryLogs = db.DiaryLogs .Where(x => EF.Functions.Like(x.Date.Year.ToString(), TargetYear.YearNumber.ToString())) .Select(x => new DiaryLog { Id = x.Id, Date = x.Date, LogContent = x.LogContent, AddedDate = x.AddedDate, UpdateDate = x.UpdateDate, LogContentLength = x.LogContentLength, DiaryLogRate = db.DiaryLogRates.FirstOrDefault(c => c.DiaryLogId == x.Id) }).ToList(); // set diarylogs of days foreach (DiaryLog log in diaryLogs) { var targetMonth = log.Date.Month - 1; if (Months[targetMonth].DiaryDays.Any(x => x.Date == log.Date)) { var day = Months[targetMonth].DiaryDays.First(x => x.Date == log.Date); day.DiaryLog = log; day.DayStatus = log.Date.Date == DateTime.Now.Date ? DayStatus.LoggedToday : DayStatus.LoggedDay; } } // load black list BlackWordsList = db.DiaryBlackWords.Select(x => new WordItem { Id = x.Id, Word = x.Word, Count = x.Word.Length, Command = new RelayParameterizedCommand(RemoveFromBlackList) }).ToObservableCollection(); // load most used words of diarylogs var wordList = diaryLogs.SelectMany(x => x.LogContent .Replace("\n", null).Replace("\r", null).ToLower().Split(new[] { ' ', '.', ',', '\'' })) .GroupBy(x => x) .Select(x => new WordItem { Word = Settings.CultureInfo.TextInfo.ToTitleCase(x.Key), Count = x.Count(), Command = new RelayParameterizedCommand(AddToBlackList) }) .Where(x => x.Word.Length > 2 && x.Count > 10) .OrderBy(a => Guid.NewGuid()) .ToList(); // remove black list items from most used words list for (int i = 0; i < wordList.Count; i++) { if (BlackWordsList.Any(x => x.Word == wordList[i].Word.ToLower())) { wordList.Remove(wordList[i]); } } // set filtered list to ToObservableCollection WordList = wordList.Take(200).ToObservableCollection(); }