diff --git a/API/Program.cs b/API/Program.cs index 20b73ea..a53b5ac 100644 --- a/API/Program.cs +++ b/API/Program.cs @@ -151,6 +151,7 @@ using (IServiceScope scope = app.Services.CreateScope()) Tranga.ServiceProvider = app.Services; Tranga.StartLogger(new FileInfo("Log4Net.config.xml")); +Tranga.StartupTasks(); Tranga.AddDefaultWorkers(); app.UseCors("AllowAll"); diff --git a/API/Tranga.cs b/API/Tranga.cs index b948cf6..4cc68cd 100644 --- a/API/Tranga.cs +++ b/API/Tranga.cs @@ -32,7 +32,6 @@ public static class Tranga internal static readonly StartNewChapterDownloadsWorker StartNewChapterDownloadsWorker = new(); internal static readonly RemoveOldNotificationsWorker RemoveOldNotificationsWorker = new(); internal static readonly UpdateCoversWorker UpdateCoversWorker = new(); - internal static readonly UpdateLibraryConnectorsWorker UpdateLibraryConnectorsWorker = new(); internal static readonly CleanupMangaconnectorIdsWithoutConnector CleanupMangaconnectorIdsWithoutConnector = new(); // ReSharper restore MemberCanBePrivate.Global @@ -43,18 +42,25 @@ public static class Tranga Log.Info(Constants.TRANGA); } + internal static void StartupTasks() + { + AddWorker(SendNotificationsWorker); + AddWorker(CleanupMangaconnectorIdsWithoutConnector); + AddWorker(UpdateChaptersDownloadedWorker); + AddWorker(CleanupMangaCoversWorker); + Log.Info("Waiting for startup to complete..."); + while (new List() { CleanupMangaconnectorIdsWithoutConnector, UpdateChaptersDownloadedWorker, CleanupMangaCoversWorker}.Any(w => w.State < WorkerExecutionState.Completed)) + Thread.Sleep(100); + Log.Info("Start complete!"); + } + internal static void AddDefaultWorkers() { AddWorker(UpdateMetadataWorker); - AddWorker(SendNotificationsWorker); - AddWorker(UpdateChaptersDownloadedWorker); AddWorker(CheckForNewChaptersWorker); - AddWorker(CleanupMangaCoversWorker); AddWorker(StartNewChapterDownloadsWorker); AddWorker(RemoveOldNotificationsWorker); AddWorker(UpdateCoversWorker); - AddWorker(UpdateLibraryConnectorsWorker); - AddWorker(CleanupMangaconnectorIdsWithoutConnector); } internal static bool TryGetMangaConnector(string name, [NotNullWhen(true)]out MangaConnector? mangaConnector) diff --git a/API/Workers/PeriodicWorkers/MaintenanceWorkers/CleanupMangaCoversWorker.cs b/API/Workers/PeriodicWorkers/MaintenanceWorkers/CleanupMangaCoversWorker.cs index 3ff656d..9c45afd 100644 --- a/API/Workers/PeriodicWorkers/MaintenanceWorkers/CleanupMangaCoversWorker.cs +++ b/API/Workers/PeriodicWorkers/MaintenanceWorkers/CleanupMangaCoversWorker.cs @@ -1,4 +1,5 @@ using API.Schema.MangaContext; +using Microsoft.EntityFrameworkCore; namespace API.Workers.PeriodicWorkers.MaintenanceWorkers; @@ -8,15 +9,15 @@ public class CleanupMangaCoversWorker(TimeSpan? interval = null, IEnumerable DoWorkInternal() + protected override async Task DoWorkInternal() { Log.Info("Removing stale files..."); - string[] usedFiles = DbContext.Mangas.Select(m => m.CoverFileNameInCache).Where(s => s != null).ToArray()!; + string[] usedFiles = await DbContext.Mangas.Where(m => m.CoverFileNameInCache != null).Select(m => m.CoverFileNameInCache!).ToArrayAsync(CancellationToken); CleanupImageCache(usedFiles, TrangaSettings.CoverImageCacheOriginal); CleanupImageCache(usedFiles, TrangaSettings.CoverImageCacheLarge); CleanupImageCache(usedFiles, TrangaSettings.CoverImageCacheMedium); CleanupImageCache(usedFiles, TrangaSettings.CoverImageCacheSmall); - return new Task(() => []); + return []; } private void CleanupImageCache(string[] retainFilenames, string imageCachePath) diff --git a/API/Workers/PeriodicWorkers/UpdateLibraryConnectorsWorker.cs b/API/Workers/PeriodicWorkers/UpdateLibraryConnectorsWorker.cs deleted file mode 100644 index b57d547..0000000 --- a/API/Workers/PeriodicWorkers/UpdateLibraryConnectorsWorker.cs +++ /dev/null @@ -1,20 +0,0 @@ -using API.Schema.LibraryContext; -using API.Schema.LibraryContext.LibraryConnectors; -using Microsoft.EntityFrameworkCore; - -namespace API.Workers.PeriodicWorkers; - -public class UpdateLibraryConnectorsWorker(TimeSpan? interval = null, IEnumerable? dependsOn = null) - : BaseWorkerWithContext(dependsOn), IPeriodic -{ - public DateTime LastExecution { get; set; } = DateTime.UnixEpoch; - public TimeSpan Interval { get; set; } = interval ?? TimeSpan.FromMinutes(10); - - protected override async Task DoWorkInternal() - { - List connectors = await DbContext.LibraryConnectors.ToListAsync(CancellationToken); - foreach (LibraryConnector libraryConnector in connectors) - await libraryConnector.UpdateLibrary(CancellationToken); - return []; - } -} \ No newline at end of file