using System.Net; using Tranga.Connectors; namespace Tranga.TrangaTasks; public class MonitorPublicationTask : TrangaTask { public string connectorName { get; } public Publication publication { get; } // ReSharper disable once MemberCanBePrivate.Global public string language { get; } public MonitorPublicationTask(string connectorName, Publication publication, TimeSpan reoccurrence, string language = "en") : base(Task.MonitorPublication, reoccurrence) { this.connectorName = connectorName; this.publication = publication; this.language = language; } protected override HttpStatusCode ExecuteTask(TaskManager taskManager, CancellationToken? cancellationToken = null) { if (cancellationToken?.IsCancellationRequested ?? false) return HttpStatusCode.RequestTimeout; Connector connector = taskManager.GetConnector(this.connectorName); //Check if Publication already has a Folder publication.CreatePublicationFolder(taskManager.settings.downloadLocation); List newChapters = connector.GetNewChaptersList(publication, language, ref taskManager.collection); connector.CopyCoverFromCacheToDownloadLocation(publication); publication.SaveSeriesInfoJson(taskManager.settings.downloadLocation); foreach (Chapter newChapter in newChapters) { DownloadChapterTask newTask = new (this.connectorName, publication, newChapter, this.language, this); this.childTasks.Add(newTask); newTask.state = ExecutionState.Enqueued; taskManager.AddTask(newTask); } return HttpStatusCode.OK; } public override TrangaTask Clone() { return new MonitorPublicationTask(this.connectorName, this.publication, this.reoccurrence, this.language); } protected override double GetProgress() { if (this.childTasks.Count > 0) return this.childTasks.Sum(ct => ct.progress) / childTasks.Count; return 1; } public override string ToString() { return $"{base.ToString()}, {connectorName}, {publication.sortName} {publication.internalId}"; } }