private async Task SyncWorkerMain() { var ct = _ctSource.Token; ct.ThrowIfCancellationRequested(); // Get a fresh copy of the story collection var storyCollection = _storyContainer.GetAllStories(); // Loop through stories in the story container //foreach (var story in storyCollection) while (_lastStoryIndex < storyCollection.Count) { ct.ThrowIfCancellationRequested(); var story = storyCollection.ElementAt(_lastStoryIndex); var storyStatus = GetStoryStatus(story.ID); try { // Skip this story if we're still waiting for the ITU pause to be over if (storyStatus.State == StorySyncWorkerStoryState.WaitingItu) { var ituPauseDuration = GetSettings().ItuPauseDuration; if ((storyStatus.LastItu + new TimeSpan(0, 0, ituPauseDuration)) > DateTime.Now) // if the last ITU + the pause duration is in the future { int secondsLeft = Convert.ToInt32((storyStatus.LastItu + new TimeSpan(0, 0, ituPauseDuration) - DateTime.Now).TotalSeconds); _log.Debug($"ITU cooldown for '{story.ID}', {secondsLeft}s remaining"); continue; } } // Skip this story if it has an error if (storyStatus.State == StorySyncWorkerStoryState.Error) { _log.Debug($"Skipping story which has experienced an error: {story.ID}"); continue; } // Lets do it await SyncStory(story); } finally { // Always up the index _lastStoryIndex++; // Up the index by 1 } } // End of story loop block _lastStoryIndex = 0; // Reset the index if we're at the end of the story collection SetCurrentStatus(StorySyncWorkerState.Idle, "Idle", string.Empty); }
private void RefreshStoryList() { if (dgvStories.InvokeRequired) { this.Invoke(new RefreshStoryListDelegate(RefreshStoryList)); return; } _log.Debug("Story list refresh"); // Clear dgvStories.Rows.Clear(); // Fill foreach (var story in _storyContainer.GetAllStories()) { _AddStoryRow(story); } }