mirror of
https://github.com/Kareadita/Kavita.git
synced 2025-06-03 05:34:21 -04:00
* More cases for parsing regex * Fixed a bug where chapter cover images weren't being updated due to a missed not. * Removed a piece of code that was needed for upgrading, since all beta users agreed to wipe db. * Fixed InProgress to properly respect order and show more recent activity first. Issue is with IEntityDate LastModified not updating in DataContext. * Updated dependencies to lastest stable. * LastModified on Volumes wasn't updating, validated it does update when data is changed. * Rewrote a check to avoid a small heap object warning. * Ensure UpdateSeries checks all libraries for unique name. * Took care of some todos, removed unused imports, on dev go ahead and schedule reoocuring jobs since LiteDB caused the locking issue. * No Tracking when we aren't using entities. * Added code to remove abandoned progress rows after a chapter gets deleted. * RefreshMetadata uses one large query rather than many trips to DB for updating metadata. Significantly faster. * Fixed a bug where UpdateSeries would always complain about a unique name even when we weren't updating name. * Files that are linked to a series but can't parse out Vol/Chapter information are properly grouped like other Specials. * Refresh metadata on UI should call the task directly * Fixed a bug on updating series to make sure we don't complain if we aren't trying to update the name to an existing name. * Fixed #142 - Library cards should be sorted. * Refactored the name of some variables to be more agnostic to comics. * Implemented ScanLibrary but abandoning it. * Code Cleanup & removing ScanSeries code. * Some more tests and new Comparators for natural sorting. * Fixed #137 - When performing I/O on archives, ignore __MACOSX folders completely. * Fixed #137 - When performing I/O on archives, ignore __MACOSX folders completely. * All entities that will show under specials tab should be marked special, rather than just what has a special keyword. * Don't let specials generate cover images * Don't let specials generate cover images * SearchResults should send LocalizedName back since we are searching against it. * Added some tests around macosx folders found from my actual server. * Put extra notes about a case where duplicates come about, logger will now tell user about this issue. * Missed a build issue somehow... * Some code smells
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)).Result.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());
|
|
}
|
|
}
|
|
} |