mirror of
https://github.com/Kareadita/Kavita.git
synced 2025-06-03 21:54:47 -04:00
* Changed how natural sort works to cover more cases * Changed the name of CoverImage regex for Parser and added more cases. * Changed how we get result from Task.Run() * Defer execution of a loop till we really need it and added another TODO for later this iteration. * Big refactor to cover image code to unify between IOCompression and SharpCompress. Both use methods to find the correct file. This results in one extra loop through entries, but simplifies code signficantly. In addition, new unit tests for the methods that actually do the logic on choosing cover file and first file. * Removed dead code * Added missing doc
99 lines
4.0 KiB
C#
99 lines
4.0 KiB
C#
using System.IO;
|
|
using System.Threading.Tasks;
|
|
using API.Entities.Enums;
|
|
using API.Helpers.Converters;
|
|
using API.Interfaces;
|
|
using API.Interfaces.Services;
|
|
using Hangfire;
|
|
using Microsoft.Extensions.Logging;
|
|
|
|
namespace API.Services
|
|
{
|
|
public class TaskScheduler : ITaskScheduler
|
|
{
|
|
private readonly ICacheService _cacheService;
|
|
private readonly ILogger<TaskScheduler> _logger;
|
|
private readonly IScannerService _scannerService;
|
|
private readonly IUnitOfWork _unitOfWork;
|
|
private readonly IMetadataService _metadataService;
|
|
private readonly IBackupService _backupService;
|
|
private readonly ICleanupService _cleanupService;
|
|
|
|
public static BackgroundJobServer Client => new BackgroundJobServer();
|
|
|
|
|
|
public TaskScheduler(ICacheService cacheService, ILogger<TaskScheduler> logger, IScannerService scannerService,
|
|
IUnitOfWork unitOfWork, IMetadataService metadataService, IBackupService backupService, ICleanupService cleanupService)
|
|
{
|
|
_cacheService = cacheService;
|
|
_logger = logger;
|
|
_scannerService = scannerService;
|
|
_unitOfWork = unitOfWork;
|
|
_metadataService = metadataService;
|
|
_backupService = backupService;
|
|
_cleanupService = cleanupService;
|
|
|
|
ScheduleTasks();
|
|
}
|
|
|
|
public void ScheduleTasks()
|
|
{
|
|
_logger.LogInformation("Scheduling reoccurring tasks");
|
|
|
|
string setting = Task.Run(() => _unitOfWork.SettingsRepository.GetSettingAsync(ServerSettingKey.TaskScan)).GetAwaiter().GetResult().Value;
|
|
if (setting != null)
|
|
{
|
|
_logger.LogDebug("Scheduling Scan Library Task for {Setting}", setting);
|
|
RecurringJob.AddOrUpdate("scan-libraries", () => _scannerService.ScanLibraries(),
|
|
() => CronConverter.ConvertToCronNotation(setting));
|
|
}
|
|
else
|
|
{
|
|
RecurringJob.AddOrUpdate("scan-libraries", () => _scannerService.ScanLibraries(), Cron.Daily);
|
|
}
|
|
|
|
setting = Task.Run(() => _unitOfWork.SettingsRepository.GetSettingAsync(ServerSettingKey.TaskBackup)).Result.Value;
|
|
if (setting != null)
|
|
{
|
|
_logger.LogDebug("Scheduling Backup Task for {Setting}", setting);
|
|
RecurringJob.AddOrUpdate("backup", () => _backupService.BackupDatabase(), () => CronConverter.ConvertToCronNotation(setting));
|
|
}
|
|
else
|
|
{
|
|
RecurringJob.AddOrUpdate("backup", () => _backupService.BackupDatabase(), Cron.Weekly);
|
|
}
|
|
|
|
RecurringJob.AddOrUpdate("cleanup", () => _cleanupService.Cleanup(), Cron.Daily);
|
|
}
|
|
|
|
public void ScanLibrary(int libraryId, bool forceUpdate = false)
|
|
{
|
|
_logger.LogInformation("Enqueuing library scan for: {LibraryId}", libraryId);
|
|
BackgroundJob.Enqueue(() => _scannerService.ScanLibrary(libraryId, forceUpdate));
|
|
// When we do a scan, force cache to re-unpack in case page numbers change
|
|
BackgroundJob.Enqueue(() => _cleanupService.Cleanup());
|
|
}
|
|
|
|
public void CleanupChapters(int[] chapterIds)
|
|
{
|
|
BackgroundJob.Enqueue(() => _cacheService.CleanupChapters(chapterIds));
|
|
}
|
|
|
|
public void RefreshMetadata(int libraryId, bool forceUpdate = true)
|
|
{
|
|
_logger.LogInformation("Enqueuing library metadata refresh for: {LibraryId}", libraryId);
|
|
BackgroundJob.Enqueue((() => _metadataService.RefreshMetadata(libraryId, forceUpdate)));
|
|
}
|
|
|
|
public void CleanupTemp()
|
|
{
|
|
var tempDirectory = Path.Join(Directory.GetCurrentDirectory(), "temp");
|
|
BackgroundJob.Enqueue((() => DirectoryService.ClearDirectory(tempDirectory)));
|
|
}
|
|
|
|
public void BackupDatabase()
|
|
{
|
|
BackgroundJob.Enqueue(() => _backupService.BackupDatabase());
|
|
}
|
|
}
|
|
} |