diff --git a/API/TrangaSettings.cs b/API/TrangaSettings.cs index b773fb2..679186d 100644 --- a/API/TrangaSettings.cs +++ b/API/TrangaSettings.cs @@ -49,6 +49,8 @@ public struct TrangaSettings() public Dictionary RequestLimits { get; set; } = DefaultRequestLimits; public string DownloadLanguage { get; set; } = "en"; + + public int MaxConcurrentDownloads { get; set; } = 5; public static TrangaSettings Load() { @@ -109,4 +111,10 @@ public struct TrangaSettings() this.DownloadLanguage = language; Save(); } + + public void SetMaxConcurrentDownloads(int value) + { + this.MaxConcurrentDownloads = value; + Save(); + } } \ No newline at end of file diff --git a/API/Workers/PeriodicWorkers/StartNewChapterDownloadsWorker.cs b/API/Workers/PeriodicWorkers/StartNewChapterDownloadsWorker.cs index e02c04b..272cb9f 100644 --- a/API/Workers/PeriodicWorkers/StartNewChapterDownloadsWorker.cs +++ b/API/Workers/PeriodicWorkers/StartNewChapterDownloadsWorker.cs @@ -24,8 +24,15 @@ public class StartNewChapterDownloadsWorker(TimeSpan? interval = null, IEnumerab Log.Debug($"Found {missingChapters.Count} missing downloads."); + // Maximum Concurrent workers + int downloadWorkers = Tranga.GetRunningWorkers().Count(w => w.GetType() == typeof(DownloadChapterFromMangaconnectorWorker)); + int amountNewWorkers = Math.Min(Tranga.Settings.MaxConcurrentDownloads, Tranga.Settings.MaxConcurrentDownloads - downloadWorkers); + Log.Debug($"{downloadWorkers} running download Workers. {amountNewWorkers} new download Workers."); + IEnumerable> newDownloadChapters = missingChapters.Take(amountNewWorkers); + + // Create new jobs - List newWorkers = missingChapters.Select(mcId => new DownloadChapterFromMangaconnectorWorker(mcId)).ToList(); + List newWorkers = newDownloadChapters.Select(mcId => new DownloadChapterFromMangaconnectorWorker(mcId)).ToList(); return newWorkers.ToArray(); }