mirror of
https://github.com/Kareadita/Kavita.git
synced 2025-06-02 13:14:28 -04:00
* Refactored all the config files for Kavita to be loaded from config/. This will allow docker to just mount one folder and for Update functionality to be trivial. * Cleaned up documentation around new update method. * Updated docker files to support config directory * Removed entrypoint, no longer needed * Update appsettings to point to config directory for logs * Updated message for docker users that are upgrading * Ensure that docker users that have not updated their mount points from upgrade cannot start the server * Code smells * More cleanup * Added entrypoint to fix bind mount issues * Updated README with new folder structure * Fixed build system for new setup * Updated string path if user is docker * Updated the migration flow for docker to work properly and Fixed LogFile configuration updating. * Migrating docker images is now working 100% * Fixed config from bad code * Code cleanup Co-authored-by: Chris Plaatjes <kizaing@gmail.com>
92 lines
3.3 KiB
C#
92 lines
3.3 KiB
C#
using System.IO;
|
|
using System.Threading.Tasks;
|
|
using API.Interfaces;
|
|
using API.Interfaces.Services;
|
|
using Hangfire;
|
|
using Microsoft.Extensions.Logging;
|
|
|
|
namespace API.Services.Tasks
|
|
{
|
|
/// <summary>
|
|
/// Cleans up after operations on reoccurring basis
|
|
/// </summary>
|
|
public class CleanupService : ICleanupService
|
|
{
|
|
private readonly ICacheService _cacheService;
|
|
private readonly ILogger<CleanupService> _logger;
|
|
private readonly IBackupService _backupService;
|
|
private readonly IUnitOfWork _unitOfWork;
|
|
|
|
public CleanupService(ICacheService cacheService, ILogger<CleanupService> logger,
|
|
IBackupService backupService, IUnitOfWork unitOfWork)
|
|
{
|
|
_cacheService = cacheService;
|
|
_logger = logger;
|
|
_backupService = backupService;
|
|
_unitOfWork = unitOfWork;
|
|
}
|
|
|
|
public void CleanupCacheDirectory()
|
|
{
|
|
_logger.LogInformation("Cleaning cache directory");
|
|
_cacheService.Cleanup();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Cleans up Temp, cache, deleted cover images, and old database backups
|
|
/// </summary>
|
|
[AutomaticRetry(Attempts = 3, LogEvents = false, OnAttemptsExceeded = AttemptsExceededAction.Fail)]
|
|
public async Task Cleanup()
|
|
{
|
|
_logger.LogInformation("Starting Cleanup");
|
|
_logger.LogInformation("Cleaning temp directory");
|
|
var tempDirectory = DirectoryService.TempDirectory;
|
|
DirectoryService.ClearDirectory(tempDirectory);
|
|
CleanupCacheDirectory();
|
|
_logger.LogInformation("Cleaning old database backups");
|
|
_backupService.CleanupBackups();
|
|
_logger.LogInformation("Cleaning deleted cover images");
|
|
await DeleteSeriesCoverImages();
|
|
await DeleteChapterCoverImages();
|
|
await DeleteTagCoverImages();
|
|
_logger.LogInformation("Cleanup finished");
|
|
}
|
|
|
|
private async Task DeleteSeriesCoverImages()
|
|
{
|
|
var images = await _unitOfWork.SeriesRepository.GetAllCoverImagesAsync();
|
|
var files = DirectoryService.GetFiles(DirectoryService.CoverImageDirectory, ImageService.SeriesCoverImageRegex);
|
|
foreach (var file in files)
|
|
{
|
|
if (images.Contains(Path.GetFileName(file))) continue;
|
|
File.Delete(file);
|
|
|
|
}
|
|
}
|
|
|
|
private async Task DeleteChapterCoverImages()
|
|
{
|
|
var images = await _unitOfWork.ChapterRepository.GetAllCoverImagesAsync();
|
|
var files = DirectoryService.GetFiles(DirectoryService.CoverImageDirectory, ImageService.ChapterCoverImageRegex);
|
|
foreach (var file in files)
|
|
{
|
|
if (images.Contains(Path.GetFileName(file))) continue;
|
|
File.Delete(file);
|
|
|
|
}
|
|
}
|
|
|
|
private async Task DeleteTagCoverImages()
|
|
{
|
|
var images = await _unitOfWork.CollectionTagRepository.GetAllCoverImagesAsync();
|
|
var files = DirectoryService.GetFiles(DirectoryService.CoverImageDirectory, ImageService.CollectionTagCoverImageRegex);
|
|
foreach (var file in files)
|
|
{
|
|
if (images.Contains(Path.GetFileName(file))) continue;
|
|
File.Delete(file);
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|