private static WordEventInfo CreateEventInfo(Word word, WordEventInfo prevEventInfo, WordEvent wordEvent) { if (prevEventInfo == null || wordEvent.EventType != WordEventType.Remembered) { return(new WordEventInfo(word, wordEvent, WordState.Studied, wordEvent.EventDate)); } TimeSpan timeSinceLastStateChange = wordEvent.EventDate - prevEventInfo.LastStateChange; if (prevEventInfo.WordState == WordState.Studied && timeSinceLastStateChange >= WordInfo.TimeToMarkRepeated) { return(new WordEventInfo(word, wordEvent, WordState.Repeated, wordEvent.EventDate)); } if (prevEventInfo.WordState == WordState.Repeated && timeSinceLastStateChange >= WordInfo.TimeToMarkLearned) { return(new WordEventInfo(word, wordEvent, WordState.Learned, wordEvent.EventDate)); } if (prevEventInfo.WordState == WordState.Learned && timeSinceLastStateChange >= WordInfo.TimeToMarkVerified) { return(new WordEventInfo(word, wordEvent, WordState.Verified, wordEvent.EventDate)); } return(new WordEventInfo(word, wordEvent, prevEventInfo.WordState, prevEventInfo.LastStateChange)); }
private void UpdateEvents() { WordState lastState = WordState.Unknown; DateTime lastStateChange = DateTime.MinValue; List <WordEventInfo> eventInfos = new List <WordEventInfo>(); foreach (WordInfo wordInfo in words) { WordEventInfo lastEventInfo = null; foreach (WordEvent wordEvent in wordInfo.Word.Events) { if (wordEvent.EventType == WordEventType.Added || wordEvent.Translation == Translation) { lastEventInfo = CreateEventInfo(wordInfo.Word, lastEventInfo, wordEvent); eventInfos.Add(lastEventInfo); } } if (lastEventInfo != null && (lastState == WordState.Unknown || lastEventInfo.WordState < lastState)) { lastState = lastEventInfo.WordState; lastStateChange = lastEventInfo.LastStateChange; } } State = lastState; LastStateChange = lastStateChange; eventInfos.Reverse(); eventInfos = eventInfos.OrderByDescending(e => e.WordEvent.EventDate).ToList(); Events.Clear(); foreach (WordEventInfo eventInfo in eventInfos) { Events.Add(eventInfo); } }
private void UpdateEvents() { WordEventInfo lastEventInfo = null; List <WordEventInfo> eventInfos = new List <WordEventInfo>(); foreach (WordEvent wordEvent in word.Events) { if (wordEvent.Translation == null) { lastEventInfo = CreateEventInfo(word, lastEventInfo, wordEvent); eventInfos.Add(lastEventInfo); } } eventInfos.Reverse(); LastEvent = eventInfos.FirstOrDefault(); Events.Clear(); foreach (WordEventInfo eventInfo in eventInfos) { Events.Add(eventInfo); } }
private static WordEventInfo CreateEventInfo(Word word, WordEventInfo prevEventInfo, WordEvent wordEvent) { if (prevEventInfo == null || wordEvent.EventType != WordEventType.Remembered) { return new WordEventInfo(word, wordEvent, WordState.Studied, wordEvent.EventDate); } TimeSpan timeSinceLastStateChange = wordEvent.EventDate - prevEventInfo.LastStateChange; if (prevEventInfo.WordState == WordState.Studied && timeSinceLastStateChange >= WordInfo.TimeToMarkRepeated) { return new WordEventInfo(word, wordEvent, WordState.Repeated, wordEvent.EventDate); } if (prevEventInfo.WordState == WordState.Repeated && timeSinceLastStateChange >= WordInfo.TimeToMarkLearned) { return new WordEventInfo(word, wordEvent, WordState.Learned, wordEvent.EventDate); } if (prevEventInfo.WordState == WordState.Learned && timeSinceLastStateChange >= WordInfo.TimeToMarkVerified) { return new WordEventInfo(word, wordEvent, WordState.Verified, wordEvent.EventDate); } return new WordEventInfo(word, wordEvent, prevEventInfo.WordState, prevEventInfo.LastStateChange); }