Beispiel #1
0
        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));
        }
Beispiel #2
0
        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);
            }
        }
Beispiel #3
0
        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);
            }
        }
Beispiel #4
0
        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);
        }