private async Task GetChaptersImageList(CancellationToken ct) { while (!ct.IsCancellationRequested) { foreach (var chapterToDownload in ChaptersToDownload.Where(x => x.Status == ChapterToDownload.ChapterStatus.Pending)) { try { chapterToDownload.Status = ChapterToDownload.ChapterStatus.GettingImageList; if (chapterToDownload.ImagesUrls.Count < 1) { await chapterToDownload.GetImages(ct); } chapterToDownload.Status = ChapterToDownload.ChapterStatus.ReadyToDownload; } catch { chapterToDownload.Status = ChapterToDownload.ChapterStatus.Error; } } await Task.Delay(1000, ct); } }
private void SetDownloadsPending() { foreach (var chapter in ChaptersToDownload.Where( ch => ch.Status != ChapterToDownload.ChapterStatus.Complete)) { chapter.Status = ChapterToDownload.ChapterStatus.Pending; } }
private void RmChaptersFromDownloadInternal(IList chapters) { if (chapters.Count < 1) { return; } foreach (var chapter in chapters.Cast <ChapterToDownload>().ToList()) { ChaptersToDownload.Remove(chapter); } }
private void AddChaptersToDownloadInternal(IEnumerable <Chapter> chapters) { foreach (var chapter in chapters .ToList() .Where(chapter => ChaptersToDownload.All(chapterToDownload => chapterToDownload.Url != chapter.Url)) .Reverse()) { ChaptersToDownload.Add(new ChapterToDownload(CurrentManga, chapter)); } }
private async Task CheckForNewDownloads(CancellationToken ct) { while (true) { ct.ThrowIfCancellationRequested(); Progress = ChaptersToDownload.Sum(ch => ch.Progress) / ChaptersToDownload.Count; if (NoNewDownloads) { await CancelDownload.Execute(); } if (AnyNewDownload) { await _currentDownloads.WaitAsync(ct); _ = DownloadChapterImages(ChapterReadyToDownload, ct); } await Task.Delay(500, ct); } }