mirror of
https://github.com/Kareadita/Kavita.git
synced 2026-05-24 00:22:31 -04:00
Custom keybinds, Default language per Library, and bugfixes (#4162)
Co-authored-by: Joseph Milazzo <josephmajora@gmail.com>
This commit is contained in:
@@ -89,7 +89,7 @@ public class BackupService : IBackupService
|
||||
await SendProgress(0F, "Started backup");
|
||||
await SendProgress(0.1F, "Copying core files");
|
||||
|
||||
var dateString = $"{DateTime.UtcNow.ToShortDateString()}_{DateTime.UtcNow.ToLongTimeString()}".Replace("/", "_").Replace(":", "_");
|
||||
var dateString = $"{DateTime.UtcNow.ToShortDateString()}_{DateTime.UtcNow:s}Z".Replace("/", "_").Replace(":", "_");
|
||||
var zipPath = _directoryService.FileSystem.Path.Join(backupDirectory, $"kavita_backup_{dateString}_v{BuildInfo.Version}.zip");
|
||||
|
||||
if (File.Exists(zipPath))
|
||||
|
||||
@@ -21,7 +21,7 @@ public interface ICleanupService
|
||||
{
|
||||
Task Cleanup();
|
||||
Task CleanupDbEntries();
|
||||
void CleanupCacheAndTempDirectories();
|
||||
Task CleanupCacheAndTempDirectories();
|
||||
void CleanupCacheDirectory();
|
||||
Task DeleteSeriesCoverImages();
|
||||
Task DeleteChapterCoverImages();
|
||||
@@ -80,38 +80,34 @@ public class CleanupService : ICleanupService
|
||||
}
|
||||
|
||||
_logger.LogInformation("Starting Cleanup");
|
||||
|
||||
var cleanupSteps = new List<(Func<Task>, string)>
|
||||
{
|
||||
(() => Task.Run(() => _directoryService.ClearDirectory(_directoryService.TempDirectory)), "Cleaning temp directory"),
|
||||
(CleanupCacheAndTempDirectories, "Cleaning cache and temp directories"),
|
||||
(CleanupBackups, "Cleaning old database backups"),
|
||||
(ConsolidateProgress, "Consolidating Progress Events"),
|
||||
(CleanupMediaErrors, "Consolidating Media Errors"),
|
||||
(CleanupDbEntries, "Cleaning abandoned database rows"), // Cleanup DB before removing files linked to DB entries
|
||||
(DeleteSeriesCoverImages, "Cleaning deleted series cover images"),
|
||||
(DeleteChapterCoverImages, "Cleaning deleted chapter cover images"),
|
||||
(() => Task.WhenAll(DeleteTagCoverImages(), DeleteReadingListCoverImages(), DeletePersonCoverImages()), "Cleaning deleted cover images"),
|
||||
(CleanupLogs, "Cleaning old logs"),
|
||||
(EnsureChapterProgressIsCapped, "Cleaning progress events that exceed 100%")
|
||||
};
|
||||
|
||||
await SendProgress(0F, "Starting cleanup");
|
||||
|
||||
_logger.LogInformation("Cleaning temp directory");
|
||||
_directoryService.ClearDirectory(_directoryService.TempDirectory);
|
||||
for (var i = 0; i < cleanupSteps.Count; i++)
|
||||
{
|
||||
var (method, subtitle) = cleanupSteps[i];
|
||||
var progress = (float)(i + 1) / (cleanupSteps.Count + 1);
|
||||
|
||||
await SendProgress(0.1F, "Cleaning temp directory");
|
||||
CleanupCacheAndTempDirectories();
|
||||
_logger.LogInformation("{Message}", subtitle);
|
||||
await method();
|
||||
await SendProgress(progress, subtitle);
|
||||
}
|
||||
|
||||
await SendProgress(0.25F, "Cleaning old database backups");
|
||||
_logger.LogInformation("Cleaning old database backups");
|
||||
await CleanupBackups();
|
||||
|
||||
await SendProgress(0.35F, "Consolidating Progress Events");
|
||||
await ConsolidateProgress();
|
||||
|
||||
await SendProgress(0.4F, "Consolidating Media Errors");
|
||||
await CleanupMediaErrors();
|
||||
|
||||
await SendProgress(0.50F, "Cleaning deleted cover images");
|
||||
_logger.LogInformation("Cleaning deleted cover images");
|
||||
await DeleteSeriesCoverImages();
|
||||
await SendProgress(0.6F, "Cleaning deleted cover images");
|
||||
await DeleteChapterCoverImages();
|
||||
await SendProgress(0.7F, "Cleaning deleted cover images");
|
||||
await DeleteTagCoverImages();
|
||||
await DeleteReadingListCoverImages();
|
||||
await SendProgress(0.8F, "Cleaning old logs");
|
||||
await CleanupLogs();
|
||||
await SendProgress(0.9F, "Cleaning progress events that exceed 100%");
|
||||
await EnsureChapterProgressIsCapped();
|
||||
await SendProgress(0.95F, "Cleaning abandoned database rows");
|
||||
await CleanupDbEntries();
|
||||
await SendProgress(1F, "Cleanup finished");
|
||||
_logger.LogInformation("Cleanup finished");
|
||||
}
|
||||
@@ -174,10 +170,20 @@ public class CleanupService : ICleanupService
|
||||
_directoryService.DeleteFiles(files.Where(file => !images.Contains(_directoryService.FileSystem.Path.GetFileName(file))));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Remove all person cover images no longer associated with a person in the database
|
||||
/// </summary>
|
||||
public async Task DeletePersonCoverImages()
|
||||
{
|
||||
var images = await _unitOfWork.PersonRepository.GetAllCoverImagesAsync();
|
||||
var files = _directoryService.GetFiles(_directoryService.CoverImageDirectory, ImageService.PersonCoverImageRegex);
|
||||
_directoryService.DeleteFiles(files.Where(file => !images.Contains(_directoryService.FileSystem.Path.GetFileName(file))));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Removes all files and directories in the cache and temp directory
|
||||
/// </summary>
|
||||
public void CleanupCacheAndTempDirectories()
|
||||
public Task CleanupCacheAndTempDirectories()
|
||||
{
|
||||
_logger.LogInformation("Performing cleanup of Cache & Temp directories");
|
||||
_directoryService.ExistOrCreate(_directoryService.CacheDirectory);
|
||||
@@ -194,6 +200,8 @@ public class CleanupService : ICleanupService
|
||||
}
|
||||
|
||||
_logger.LogInformation("Cache and temp directory purged");
|
||||
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
public void CleanupCacheDirectory()
|
||||
|
||||
@@ -30,7 +30,7 @@ public interface ICoverDbService
|
||||
Task<string> DownloadPublisherImageAsync(string publisherName, EncodeFormat encodeFormat);
|
||||
Task<string?> DownloadPersonImageAsync(Person person, EncodeFormat encodeFormat);
|
||||
Task<string?> DownloadPersonImageAsync(Person person, EncodeFormat encodeFormat, string url);
|
||||
Task SetPersonCoverByUrl(Person person, string url, bool fromBase64 = true, bool checkNoImagePlaceholder = false);
|
||||
Task SetPersonCoverByUrl(Person person, string url, bool fromBase64 = true, bool checkNoImagePlaceholder = false, bool chooseBetterImage = true);
|
||||
Task SetSeriesCoverByUrl(Series series, string url, bool fromBase64 = true, bool chooseBetterImage = false);
|
||||
Task SetChapterCoverByUrl(Chapter chapter, string url, bool fromBase64 = true, bool chooseBetterImage = false);
|
||||
}
|
||||
@@ -472,7 +472,8 @@ public class CoverDbService : ICoverDbService
|
||||
/// <param name="url"></param>
|
||||
/// <param name="fromBase64"></param>
|
||||
/// <param name="checkNoImagePlaceholder">Will check against all known null image placeholders to avoid writing it</param>
|
||||
public async Task SetPersonCoverByUrl(Person person, string url, bool fromBase64 = true, bool checkNoImagePlaceholder = false)
|
||||
/// <param name="chooseBetterImage">If we check cross-reference the current cover for the better option</param>
|
||||
public async Task SetPersonCoverByUrl(Person person, string url, bool fromBase64 = true, bool checkNoImagePlaceholder = false, bool chooseBetterImage = true)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(url))
|
||||
{
|
||||
@@ -504,7 +505,7 @@ public class CoverDbService : ICoverDbService
|
||||
|
||||
try
|
||||
{
|
||||
if (!string.IsNullOrEmpty(person.CoverImage))
|
||||
if (!string.IsNullOrEmpty(person.CoverImage) && chooseBetterImage)
|
||||
{
|
||||
var existingPath = Path.Combine(_directoryService.CoverImageDirectory, person.CoverImage);
|
||||
var betterImage = existingPath.GetBetterImage(tempFullPath)!;
|
||||
|
||||
@@ -331,9 +331,16 @@ public class ProcessSeries : IProcessSeries
|
||||
series.Metadata.Summary = firstChapter.Summary;
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(firstChapter?.Language) && !series.Metadata.LanguageLocked)
|
||||
if (!series.Metadata.LanguageLocked)
|
||||
{
|
||||
series.Metadata.Language = firstChapter.Language;
|
||||
if (!string.IsNullOrEmpty(firstChapter?.Language))
|
||||
{
|
||||
series.Metadata.Language = firstChapter.Language;
|
||||
}
|
||||
else if (!string.IsNullOrEmpty(library.DefaultLanguage))
|
||||
{
|
||||
series.Metadata.Language = library.DefaultLanguage;
|
||||
}
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(firstChapter?.WebLinks) && library.InheritWebLinksFromFirstChapter)
|
||||
|
||||
Reference in New Issue
Block a user