private void DoStoryStatusChange(StorySyncWorkerStoryStatus oldStatus, StorySyncWorkerStoryStatus newStatus)
 {
     OnStoryStatusChange?.Invoke(this, new StorySyncWorkerStoryStatusEventArgs()
     {
         OldStatus = oldStatus, NewStatus = newStatus
     });
 }
        public void SetStoryStatus(StorySyncWorkerStoryStatus newStatus)
        {
            lock (_storyStatusLock)
            {
                _SetStoryStatus(newStatus);
            }

            DoStoryStatusChange(newStatus);
        }
        private void _SetStoryStatus(StorySyncWorkerStoryStatus newStatus)
        {
            if (newStatus == null)
            {
                throw new ArgumentNullException("newStatus");
            }

            var storyID = newStatus.StoryID;

            if (!_storyStatusList.ContainsKey(storyID))
            {
                _storyStatusList.Add(storyID, newStatus);
            }
            else
            {
                var existingStatus = _storyStatusList[storyID];

                // Was the state changed from Error? If so, clear the error message.
                if (existingStatus.State == StorySyncWorkerStoryState.Error && newStatus.State != StorySyncWorkerStoryState.Error)
                {
                    newStatus.ErrorMessage = String.Empty;
                }

                if (existingStatus.State != newStatus.State && newStatus.State == StorySyncWorkerStoryState.WaitingItu)
                {
                    newStatus.LastItu = DateTime.Now;
                }

                // Did the state change? if so, update the LastStateChange timestamp
                if (existingStatus.State != newStatus.State)
                {
                    newStatus.StateLastSet = DateTime.Now;
                }

                _storyStatusList[storyID] = newStatus;
            }
        }
        private void DoStoryStatusChange(StorySyncWorkerStoryStatus newStatus)
        {
            var oldStatus = GetStoryStatus(newStatus.StoryID);

            DoStoryStatusChange(oldStatus, newStatus);
        }