diff --git a/API/Schema/MangaContext/MangaConnectorId.cs b/API/Schema/MangaContext/MangaConnectorId.cs index ba70755..88fe430 100644 --- a/API/Schema/MangaContext/MangaConnectorId.cs +++ b/API/Schema/MangaContext/MangaConnectorId.cs @@ -38,22 +38,24 @@ public class MangaConnectorId : Identifiable where T : Identifiable [StringLength(256)] [Required] public string IdOnConnectorSite { get; init; } [Url] [StringLength(512)] public string? WebsiteUrl { get; internal init; } + public bool UseForDownload { get; internal set; } private readonly ILazyLoader _lazyLoader = null!; - public MangaConnectorId(T obj, MangaConnector mangaConnector, string idOnConnectorSite, string? websiteUrl) + public MangaConnectorId(T obj, MangaConnector mangaConnector, string idOnConnectorSite, string? websiteUrl, bool useForDownload = false) : base(TokenGen.CreateToken(typeof(MangaConnectorId), mangaConnector.Name, idOnConnectorSite)) { this.Obj = obj; this.MangaConnector = mangaConnector; this.IdOnConnectorSite = idOnConnectorSite; this.WebsiteUrl = websiteUrl; + this.UseForDownload = useForDownload; } /// /// EF CORE ONLY!!! /// - public MangaConnectorId(ILazyLoader lazyLoader, string key, string objId, string mangaConnectorName, string idOnConnectorSite, string? websiteUrl) + public MangaConnectorId(ILazyLoader lazyLoader, string key, string objId, string mangaConnectorName, string idOnConnectorSite, bool useForDownload, string? websiteUrl) : base(key) { this._lazyLoader = lazyLoader; @@ -61,6 +63,7 @@ public class MangaConnectorId : Identifiable where T : Identifiable this.MangaConnectorName = mangaConnectorName; this.IdOnConnectorSite = idOnConnectorSite; this.WebsiteUrl = websiteUrl; + this.UseForDownload = useForDownload; } public override string ToString() => $"{base.ToString()} {_obj}"; diff --git a/API/TrangaSettings.cs b/API/TrangaSettings.cs index aa63209..60b57d3 100644 --- a/API/TrangaSettings.cs +++ b/API/TrangaSettings.cs @@ -1,8 +1,6 @@ using System.Runtime.InteropServices; using API.MangaDownloadClients; -using API.Schema.NotificationsContext; using Newtonsoft.Json; -using Newtonsoft.Json.Linq; namespace API; @@ -50,6 +48,8 @@ public struct TrangaSettings() }; public Dictionary RequestLimits { get; private set; } = DefaultRequestLimits; + public string DownloadLanguage { get; private set; } = "en"; + public static TrangaSettings Load() { return JsonConvert.DeserializeObject(File.ReadAllText(settingsFilePath)); @@ -101,4 +101,10 @@ public struct TrangaSettings() this.FlareSolverrUrl = url; Save(); } + + public void SetDownloadLanguage(string language) + { + this.DownloadLanguage = language; + Save(); + } } \ No newline at end of file diff --git a/API/Workers/CheckForNewChaptersWorker.cs b/API/Workers/CheckForNewChaptersWorker.cs new file mode 100644 index 0000000..0187166 --- /dev/null +++ b/API/Workers/CheckForNewChaptersWorker.cs @@ -0,0 +1,24 @@ +using API.Schema.MangaContext; + +namespace API.Workers; + +public class CheckForNewChaptersWorker(Manga manga, TimeSpan? interval = null, IEnumerable? dependsOn = null) + : BaseWorkerWithContext(dependsOn), IPeriodic +{ + public Manga Manga = manga; + public DateTime LastExecution { get; set; } = DateTime.UtcNow; + public TimeSpan Interval { get; set; } = interval??TimeSpan.FromMinutes(60); + + protected override BaseWorker[] DoWorkInternal() + { + ICollection> connectorIdsManga = Manga.MangaConnectorIds; + IEnumerable> mangasToDownload = connectorIdsManga.Where(id => id.UseForDownload); + + List newWorkers = new(); + foreach (MangaConnectorId mangaConnectorId in mangasToDownload) + newWorkers.Add(new RetrieveMangaChaptersFromMangaconnectorWorker(mangaConnectorId, Tranga.Settings.DownloadLanguage)); + + return newWorkers.ToArray(); + } + +} \ No newline at end of file diff --git a/API/Workers/MangaDownloadWorkers/DownloadChapterFromMangaconnectorWorker.cs b/API/Workers/MangaDownloadWorkers/DownloadChapterFromMangaconnectorWorker.cs index f9b9652..917ccf7 100644 --- a/API/Workers/MangaDownloadWorkers/DownloadChapterFromMangaconnectorWorker.cs +++ b/API/Workers/MangaDownloadWorkers/DownloadChapterFromMangaconnectorWorker.cs @@ -2,6 +2,7 @@ using System.IO.Compression; using System.Runtime.InteropServices; using API.MangaDownloadClients; using API.Schema.MangaContext; +using API.Schema.MangaContext.MangaConnectors; using SixLabors.ImageSharp; using SixLabors.ImageSharp.Formats.Jpeg; using SixLabors.ImageSharp.Processing; @@ -10,21 +11,21 @@ using static System.IO.UnixFileMode; namespace API.Workers; -public class DownloadChapterFromMangaconnectorWorker(Chapter chapter, IEnumerable? dependsOn = null) +public class DownloadChapterFromMangaconnectorWorker(MangaConnectorId chId, IEnumerable? dependsOn = null) : BaseWorkerWithContext(dependsOn) { + public MangaConnectorId MangaConnectorId { get; init; } = chId; protected override BaseWorker[] DoWorkInternal() { + MangaConnector mangaConnector = MangaConnectorId.MangaConnector; + Chapter chapter = MangaConnectorId.Obj; if (chapter.Downloaded) { Log.Info("Chapter was already downloaded."); return []; } - //TODO MangaConnector Selection - MangaConnectorId mcId = chapter.MangaConnectorIds.First(); - - string[] imageUrls = mcId.MangaConnector.GetChapterImageUrls(mcId); + string[] imageUrls = mangaConnector.GetChapterImageUrls(MangaConnectorId); if (imageUrls.Length < 1) { Log.Info($"No imageUrls for chapter {chapter}");