Polish 2 (#3555)
Co-authored-by: Robbie Davis <robbie@therobbiedavis.com> Co-authored-by: Fesaa <77553571+Fesaa@users.noreply.github.com>
This commit is contained in:
parent
b858729c9e
commit
9565fe7360
57 changed files with 777 additions and 314 deletions
|
|
@ -33,6 +33,8 @@ public interface ICleanupService
|
|||
/// </summary>
|
||||
/// <returns></returns>
|
||||
Task CleanupWantToRead();
|
||||
|
||||
Task ConsolidateProgress();
|
||||
}
|
||||
/// <summary>
|
||||
/// Cleans up after operations on reoccurring basis
|
||||
|
|
@ -74,13 +76,21 @@ public class CleanupService : ICleanupService
|
|||
|
||||
_logger.LogInformation("Starting Cleanup");
|
||||
await SendProgress(0F, "Starting cleanup");
|
||||
|
||||
_logger.LogInformation("Cleaning temp directory");
|
||||
_directoryService.ClearDirectory(_directoryService.TempDirectory);
|
||||
|
||||
await SendProgress(0.1F, "Cleaning temp directory");
|
||||
CleanupCacheAndTempDirectories();
|
||||
|
||||
await SendProgress(0.25F, "Cleaning old database backups");
|
||||
_logger.LogInformation("Cleaning old database backups");
|
||||
await CleanupBackups();
|
||||
|
||||
await SendProgress(0.35F, "Consolidating Progress Events");
|
||||
_logger.LogInformation("Consolidating Progress Events");
|
||||
await ConsolidateProgress();
|
||||
|
||||
await SendProgress(0.50F, "Cleaning deleted cover images");
|
||||
_logger.LogInformation("Cleaning deleted cover images");
|
||||
await DeleteSeriesCoverImages();
|
||||
|
|
@ -226,6 +236,61 @@ public class CleanupService : ICleanupService
|
|||
_logger.LogInformation("Finished cleanup of Database backups at {Time}", DateTime.Now);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Find any progress events that have duplicate, find the highest page read event, then copy over information from that and delete others, to leave one.
|
||||
/// </summary>
|
||||
public async Task ConsolidateProgress()
|
||||
{
|
||||
// AppUserProgress
|
||||
var allProgress = await _unitOfWork.AppUserProgressRepository.GetAllProgress();
|
||||
|
||||
// Group by the unique identifiers that would make a progress entry unique
|
||||
var duplicateGroups = allProgress
|
||||
.GroupBy(p => new
|
||||
{
|
||||
p.AppUserId,
|
||||
p.ChapterId,
|
||||
})
|
||||
.Where(g => g.Count() > 1);
|
||||
|
||||
foreach (var group in duplicateGroups)
|
||||
{
|
||||
// Find the entry with the highest pages read
|
||||
var highestProgress = group
|
||||
.OrderByDescending(p => p.PagesRead)
|
||||
.ThenByDescending(p => p.LastModifiedUtc)
|
||||
.First();
|
||||
|
||||
// Get the duplicate entries to remove (all except the highest progress)
|
||||
var duplicatesToRemove = group
|
||||
.Where(p => p.Id != highestProgress.Id)
|
||||
.ToList();
|
||||
|
||||
// Copy over any non-null BookScrollId if the highest progress entry doesn't have one
|
||||
if (string.IsNullOrEmpty(highestProgress.BookScrollId))
|
||||
{
|
||||
var firstValidScrollId = duplicatesToRemove
|
||||
.FirstOrDefault(p => !string.IsNullOrEmpty(p.BookScrollId))
|
||||
?.BookScrollId;
|
||||
|
||||
if (firstValidScrollId != null)
|
||||
{
|
||||
highestProgress.BookScrollId = firstValidScrollId;
|
||||
highestProgress.MarkModified();
|
||||
}
|
||||
}
|
||||
|
||||
// Remove the duplicates
|
||||
foreach (var duplicate in duplicatesToRemove)
|
||||
{
|
||||
_unitOfWork.AppUserProgressRepository.Remove(duplicate);
|
||||
}
|
||||
}
|
||||
|
||||
// Save changes
|
||||
await _unitOfWork.CommitAsync();
|
||||
}
|
||||
|
||||
public async Task CleanupLogs()
|
||||
{
|
||||
_logger.LogInformation("Performing cleanup of logs directory");
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue