A few more bug fixes (#3876)
Co-authored-by: Joseph Milazzo <joseph.v.milazzo@gmail.com>
This commit is contained in:
parent
4b9bbc5d78
commit
d909e03baf
21 changed files with 3940 additions and 45 deletions
|
|
@ -2,6 +2,7 @@ using System.Threading.Tasks;
|
|||
using API.Data;
|
||||
using API.DTOs.Koreader;
|
||||
using API.DTOs.Progress;
|
||||
using API.Extensions;
|
||||
using API.Helpers;
|
||||
using API.Helpers.Builders;
|
||||
using Kavita.Common;
|
||||
|
|
@ -39,7 +40,7 @@ public class KoreaderService : IKoreaderService
|
|||
/// <param name="userId"></param>
|
||||
public async Task SaveProgress(KoreaderBookDto koreaderBookDto, int userId)
|
||||
{
|
||||
_logger.LogDebug("Saving Koreader progress for {UserId}: {KoreaderProgress}", userId, koreaderBookDto.Progress);
|
||||
_logger.LogDebug("Saving Koreader progress for User ({UserId}): {KoreaderProgress}", userId, koreaderBookDto.Progress.Sanitize());
|
||||
var file = await _unitOfWork.MangaFileRepository.GetByKoreaderHash(koreaderBookDto.Document);
|
||||
if (file == null) throw new KavitaException(await _localizationService.Translate(userId, "file-missing"));
|
||||
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ using API.DTOs.Scrobbling;
|
|||
using API.DTOs.SeriesDetail;
|
||||
using API.Entities;
|
||||
using API.Entities.Enums;
|
||||
using API.Entities.Interfaces;
|
||||
using API.Entities.Metadata;
|
||||
using API.Entities.MetadataMatching;
|
||||
using API.Entities.Person;
|
||||
|
|
@ -526,6 +527,7 @@ public class ExternalMetadataService : IExternalMetadataService
|
|||
if (madeMetadataModification)
|
||||
{
|
||||
_unitOfWork.SeriesRepository.Update(series);
|
||||
_unitOfWork.SeriesRepository.Update(series.Metadata);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
|
@ -782,7 +784,7 @@ public class ExternalMetadataService : IExternalMetadataService
|
|||
|
||||
if (externalCharacters == null || externalCharacters.Count == 0) return false;
|
||||
|
||||
if (series.Metadata.CharacterLocked && !settings.HasOverride(MetadataSettingField.People))
|
||||
if (series.Metadata.CharacterLocked && !HasForceOverride(settings, series.Metadata, MetadataSettingField.People))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
|
@ -849,7 +851,7 @@ public class ExternalMetadataService : IExternalMetadataService
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
series.Metadata.AddKPlusOverride(MetadataSettingField.People);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -864,7 +866,7 @@ public class ExternalMetadataService : IExternalMetadataService
|
|||
|
||||
if (upstreamArtists.Count == 0) return false;
|
||||
|
||||
if (series.Metadata.CoverArtistLocked && !settings.HasOverride(MetadataSettingField.People))
|
||||
if (series.Metadata.CoverArtistLocked && !HasForceOverride(settings, series.Metadata, MetadataSettingField.People))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
|
@ -907,6 +909,7 @@ public class ExternalMetadataService : IExternalMetadataService
|
|||
|
||||
await DownloadAndSetPersonCovers(upstreamArtists);
|
||||
|
||||
series.Metadata.AddKPlusOverride(MetadataSettingField.People);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -920,7 +923,7 @@ public class ExternalMetadataService : IExternalMetadataService
|
|||
|
||||
if (upstreamWriters.Count == 0) return false;
|
||||
|
||||
if (series.Metadata.WriterLocked && !settings.HasOverride(MetadataSettingField.People))
|
||||
if (series.Metadata.WriterLocked && !HasForceOverride(settings, series.Metadata, MetadataSettingField.People))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
|
@ -963,7 +966,7 @@ public class ExternalMetadataService : IExternalMetadataService
|
|||
await _unitOfWork.CommitAsync();
|
||||
|
||||
await DownloadAndSetPersonCovers(upstreamWriters);
|
||||
|
||||
series.Metadata.AddKPlusOverride(MetadataSettingField.People);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -973,7 +976,7 @@ public class ExternalMetadataService : IExternalMetadataService
|
|||
|
||||
if (!settings.EnableTags || processedTags.Count == 0) return false;
|
||||
|
||||
if (series.Metadata.TagsLocked && !settings.HasOverride(MetadataSettingField.Tags))
|
||||
if (series.Metadata.TagsLocked && !HasForceOverride(settings, series.Metadata, MetadataSettingField.Tags))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
|
@ -990,6 +993,11 @@ public class ExternalMetadataService : IExternalMetadataService
|
|||
madeModification = true;
|
||||
}, () => series.Metadata.TagsLocked = true);
|
||||
|
||||
if (madeModification)
|
||||
{
|
||||
series.Metadata.AddKPlusOverride(MetadataSettingField.Tags);
|
||||
}
|
||||
|
||||
return madeModification;
|
||||
}
|
||||
|
||||
|
|
@ -1014,7 +1022,7 @@ public class ExternalMetadataService : IExternalMetadataService
|
|||
|
||||
if (!settings.EnableGenres || processedGenres.Count == 0) return false;
|
||||
|
||||
if (series.Metadata.GenresLocked && !settings.HasOverride(MetadataSettingField.Genres))
|
||||
if (series.Metadata.GenresLocked && !HasForceOverride(settings, series.Metadata, MetadataSettingField.Genres))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
|
@ -1035,6 +1043,12 @@ public class ExternalMetadataService : IExternalMetadataService
|
|||
{
|
||||
if (series.Metadata.Genres.FirstOrDefault(g => g.NormalizedTitle == genre.NormalizedTitle) != null) continue;
|
||||
series.Metadata.Genres.Add(genre);
|
||||
madeModification = true;
|
||||
}
|
||||
|
||||
if (madeModification)
|
||||
{
|
||||
series.Metadata.AddKPlusOverride(MetadataSettingField.Genres);
|
||||
}
|
||||
|
||||
return madeModification;
|
||||
|
|
@ -1044,7 +1058,7 @@ public class ExternalMetadataService : IExternalMetadataService
|
|||
{
|
||||
if (!settings.EnablePublicationStatus) return false;
|
||||
|
||||
if (series.Metadata.PublicationStatusLocked && !settings.HasOverride(MetadataSettingField.PublicationStatus))
|
||||
if (series.Metadata.PublicationStatusLocked && !HasForceOverride(settings, series.Metadata, MetadataSettingField.PublicationStatus))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
|
@ -1058,6 +1072,7 @@ public class ExternalMetadataService : IExternalMetadataService
|
|||
|
||||
series.Metadata.PublicationStatus = status;
|
||||
series.Metadata.PublicationStatusLocked = true;
|
||||
series.Metadata.AddKPlusOverride(MetadataSettingField.PublicationStatus);
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
|
@ -1071,7 +1086,7 @@ public class ExternalMetadataService : IExternalMetadataService
|
|||
private bool UpdateAgeRating(Series series, MetadataSettingsDto settings, IEnumerable<string> allExternalTags)
|
||||
{
|
||||
|
||||
if (series.Metadata.AgeRatingLocked && !settings.HasOverride(MetadataSettingField.AgeRating))
|
||||
if (series.Metadata.AgeRatingLocked && !HasForceOverride(settings, series.Metadata, MetadataSettingField.AgeRating))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
|
@ -1087,6 +1102,7 @@ public class ExternalMetadataService : IExternalMetadataService
|
|||
if (series.Metadata.AgeRating <= ageRating)
|
||||
{
|
||||
series.Metadata.AgeRating = ageRating;
|
||||
series.Metadata.AddKPlusOverride(MetadataSettingField.AgeRating);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
@ -1127,7 +1143,10 @@ public class ExternalMetadataService : IExternalMetadataService
|
|||
madeModification = UpdateChapterTitle(chapter, settings, potentialMatch.Title, series.Name) || madeModification;
|
||||
madeModification = UpdateChapterSummary(chapter, settings, potentialMatch.Summary) || madeModification;
|
||||
madeModification = UpdateChapterReleaseDate(chapter, settings, potentialMatch.ReleaseDate) || madeModification;
|
||||
madeModification = await UpdateChapterPublisher(chapter, settings, potentialMatch.Publisher) || madeModification;
|
||||
|
||||
var hasUpdatedPublisher = await UpdateChapterPublisher(chapter, settings, potentialMatch.Publisher);
|
||||
if (hasUpdatedPublisher) chapter.AddKPlusOverride(MetadataSettingField.ChapterPublisher);
|
||||
madeModification = hasUpdatedPublisher || madeModification;
|
||||
|
||||
madeModification = await UpdateChapterPeople(chapter, settings, PersonRole.CoverArtist, potentialMatch.Artists) || madeModification;
|
||||
madeModification = await UpdateChapterPeople(chapter, settings, PersonRole.Writer, potentialMatch.Writers) || madeModification;
|
||||
|
|
@ -1245,17 +1264,18 @@ public class ExternalMetadataService : IExternalMetadataService
|
|||
|
||||
if (string.IsNullOrEmpty(summary)) return false;
|
||||
|
||||
if (chapter.SummaryLocked && !settings.HasOverride(MetadataSettingField.ChapterSummary))
|
||||
if (chapter.SummaryLocked && !HasForceOverride(settings, chapter, MetadataSettingField.ChapterSummary))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(summary) && !settings.HasOverride(MetadataSettingField.ChapterSummary))
|
||||
if (!string.IsNullOrWhiteSpace(summary) && !HasForceOverride(settings, chapter, MetadataSettingField.ChapterSummary))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
chapter.Summary = StringHelper.RemoveSourceInDescription(StringHelper.SquashBreaklines(summary));
|
||||
chapter.AddKPlusOverride(MetadataSettingField.ChapterSummary);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -1265,17 +1285,18 @@ public class ExternalMetadataService : IExternalMetadataService
|
|||
|
||||
if (string.IsNullOrEmpty(title)) return false;
|
||||
|
||||
if (chapter.TitleNameLocked && !settings.HasOverride(MetadataSettingField.ChapterTitle))
|
||||
if (chapter.TitleNameLocked && !HasForceOverride(settings, chapter, MetadataSettingField.ChapterTitle))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!title.Contains(seriesName) && !settings.HasOverride(MetadataSettingField.ChapterTitle))
|
||||
if (!title.Contains(seriesName) && !HasForceOverride(settings, chapter, MetadataSettingField.ChapterTitle))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
chapter.TitleName = title;
|
||||
chapter.AddKPlusOverride(MetadataSettingField.ChapterTitle);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -1285,17 +1306,18 @@ public class ExternalMetadataService : IExternalMetadataService
|
|||
|
||||
if (releaseDate == null || releaseDate == DateTime.MinValue) return false;
|
||||
|
||||
if (chapter.ReleaseDateLocked && !settings.HasOverride(MetadataSettingField.ChapterReleaseDate))
|
||||
if (chapter.ReleaseDateLocked && !HasForceOverride(settings, chapter, MetadataSettingField.ChapterReleaseDate))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!settings.HasOverride(MetadataSettingField.ChapterReleaseDate))
|
||||
if (!HasForceOverride(settings, chapter, MetadataSettingField.ChapterReleaseDate))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
chapter.ReleaseDate = releaseDate.Value;
|
||||
chapter.AddKPlusOverride(MetadataSettingField.ChapterReleaseDate);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -1305,12 +1327,12 @@ public class ExternalMetadataService : IExternalMetadataService
|
|||
|
||||
if (string.IsNullOrEmpty(publisher)) return false;
|
||||
|
||||
if (chapter.PublisherLocked && !settings.HasOverride(MetadataSettingField.ChapterPublisher))
|
||||
if (chapter.PublisherLocked && !HasForceOverride(settings, chapter, MetadataSettingField.ChapterPublisher))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(publisher) && !settings.HasOverride(MetadataSettingField.ChapterPublisher))
|
||||
if (!string.IsNullOrWhiteSpace(publisher) && !HasForceOverride(settings, chapter, MetadataSettingField.ChapterPublisher))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
|
@ -1332,7 +1354,7 @@ public class ExternalMetadataService : IExternalMetadataService
|
|||
|
||||
if (string.IsNullOrEmpty(coverUrl)) return false;
|
||||
|
||||
if (chapter.CoverImageLocked && !settings.HasOverride(MetadataSettingField.ChapterCovers))
|
||||
if (chapter.CoverImageLocked && !HasForceOverride(settings, chapter, MetadataSettingField.ChapterCovers))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
|
@ -1343,6 +1365,7 @@ public class ExternalMetadataService : IExternalMetadataService
|
|||
}
|
||||
|
||||
await DownloadChapterCovers(chapter, coverUrl);
|
||||
chapter.AddKPlusOverride(MetadataSettingField.ChapterCovers);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -1352,7 +1375,7 @@ public class ExternalMetadataService : IExternalMetadataService
|
|||
|
||||
if (staff?.Count == 0) return false;
|
||||
|
||||
if (chapter.IsPersonRoleLocked(role) && !settings.HasOverride(MetadataSettingField.People))
|
||||
if (chapter.IsPersonRoleLocked(role) && !HasForceOverride(settings, chapter, MetadataSettingField.People))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
|
@ -1401,7 +1424,7 @@ public class ExternalMetadataService : IExternalMetadataService
|
|||
|
||||
if (string.IsNullOrEmpty(externalMetadata.CoverUrl)) return false;
|
||||
|
||||
if (series.CoverImageLocked && !settings.HasOverride(MetadataSettingField.Covers))
|
||||
if (series.CoverImageLocked && !HasForceOverride(settings, series.Metadata, MetadataSettingField.Covers))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
|
@ -1412,6 +1435,7 @@ public class ExternalMetadataService : IExternalMetadataService
|
|||
}
|
||||
|
||||
await DownloadSeriesCovers(series, externalMetadata.CoverUrl);
|
||||
series.Metadata.AddKPlusOverride(MetadataSettingField.Covers);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -1422,17 +1446,18 @@ public class ExternalMetadataService : IExternalMetadataService
|
|||
|
||||
if (!externalMetadata.StartDate.HasValue) return false;
|
||||
|
||||
if (series.Metadata.ReleaseYearLocked && !settings.HasOverride(MetadataSettingField.StartDate))
|
||||
if (series.Metadata.ReleaseYearLocked && !HasForceOverride(settings, series.Metadata, MetadataSettingField.StartDate))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (series.Metadata.ReleaseYear != 0 && !settings.HasOverride(MetadataSettingField.StartDate))
|
||||
if (series.Metadata.ReleaseYear != 0 && !HasForceOverride(settings, series.Metadata, MetadataSettingField.StartDate))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
series.Metadata.ReleaseYear = externalMetadata.StartDate.Value.Year;
|
||||
series.Metadata.AddKPlusOverride(MetadataSettingField.StartDate);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -1440,12 +1465,12 @@ public class ExternalMetadataService : IExternalMetadataService
|
|||
{
|
||||
if (!settings.EnableLocalizedName) return false;
|
||||
|
||||
if (series.LocalizedNameLocked && !settings.HasOverride(MetadataSettingField.LocalizedName))
|
||||
if (series.LocalizedNameLocked && !HasForceOverride(settings, series.Metadata, MetadataSettingField.LocalizedName))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(series.LocalizedName) && !settings.HasOverride(MetadataSettingField.LocalizedName))
|
||||
if (!string.IsNullOrWhiteSpace(series.LocalizedName) && !HasForceOverride(settings, series.Metadata, MetadataSettingField.LocalizedName))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
|
@ -1471,6 +1496,7 @@ public class ExternalMetadataService : IExternalMetadataService
|
|||
}
|
||||
|
||||
|
||||
series.Metadata.AddKPlusOverride(MetadataSettingField.LocalizedName);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -1480,17 +1506,18 @@ public class ExternalMetadataService : IExternalMetadataService
|
|||
|
||||
if (string.IsNullOrEmpty(externalMetadata.Summary)) return false;
|
||||
|
||||
if (series.Metadata.SummaryLocked && !settings.HasOverride(MetadataSettingField.Summary))
|
||||
if (series.Metadata.SummaryLocked && !HasForceOverride(settings, series.Metadata, MetadataSettingField.Summary))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(series.Metadata.Summary) && !settings.HasOverride(MetadataSettingField.Summary))
|
||||
if (!string.IsNullOrWhiteSpace(series.Metadata.Summary) && !HasForceOverride(settings, series.Metadata, MetadataSettingField.Summary))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
series.Metadata.Summary = StringHelper.RemoveSourceInDescription(StringHelper.SquashBreaklines(externalMetadata.Summary));
|
||||
series.Metadata.AddKPlusOverride(MetadataSettingField.Summary);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -1509,7 +1536,8 @@ public class ExternalMetadataService : IExternalMetadataService
|
|||
{
|
||||
try
|
||||
{
|
||||
await _coverDbService.SetSeriesCoverByUrl(series, coverUrl, false, true);
|
||||
// Only choose the better image if we're overriding a user provided cover
|
||||
await _coverDbService.SetSeriesCoverByUrl(series, coverUrl, false, !series.Metadata.HasSetKPlusMetadata(MetadataSettingField.Covers));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
|
@ -1881,4 +1909,10 @@ public class ExternalMetadataService : IExternalMetadataService
|
|||
|
||||
return null;
|
||||
}
|
||||
|
||||
private static bool HasForceOverride(MetadataSettingsDto settings, IHasKPlusMetadata kPlusMetadata,
|
||||
MetadataSettingField field)
|
||||
{
|
||||
return settings.HasOverride(field) || kPlusMetadata.HasSetKPlusMetadata(field);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,7 +11,9 @@ using API.DTOs.Person;
|
|||
using API.DTOs.SeriesDetail;
|
||||
using API.Entities;
|
||||
using API.Entities.Enums;
|
||||
using API.Entities.Interfaces;
|
||||
using API.Entities.Metadata;
|
||||
using API.Entities.MetadataMatching;
|
||||
using API.Entities.Person;
|
||||
using API.Extensions;
|
||||
using API.Helpers;
|
||||
|
|
@ -120,23 +122,27 @@ public class SeriesService : ISeriesService
|
|||
{
|
||||
series.Metadata.ReleaseYear = updateSeriesMetadataDto.SeriesMetadata.ReleaseYear;
|
||||
series.Metadata.ReleaseYearLocked = true;
|
||||
series.Metadata.KPlusOverrides.Remove(MetadataSettingField.StartDate);
|
||||
}
|
||||
|
||||
if (series.Metadata.PublicationStatus != updateSeriesMetadataDto.SeriesMetadata.PublicationStatus)
|
||||
{
|
||||
series.Metadata.PublicationStatus = updateSeriesMetadataDto.SeriesMetadata.PublicationStatus;
|
||||
series.Metadata.PublicationStatusLocked = true;
|
||||
series.Metadata.KPlusOverrides.Remove(MetadataSettingField.PublicationStatus);
|
||||
}
|
||||
|
||||
if (string.IsNullOrEmpty(updateSeriesMetadataDto.SeriesMetadata.Summary))
|
||||
{
|
||||
updateSeriesMetadataDto.SeriesMetadata.Summary = string.Empty;
|
||||
series.Metadata.KPlusOverrides.Remove(MetadataSettingField.Summary);
|
||||
}
|
||||
|
||||
if (series.Metadata.Summary != updateSeriesMetadataDto.SeriesMetadata.Summary.Trim())
|
||||
{
|
||||
series.Metadata.Summary = updateSeriesMetadataDto.SeriesMetadata?.Summary.Trim() ?? string.Empty;
|
||||
series.Metadata.SummaryLocked = true;
|
||||
series.Metadata.KPlusOverrides.Remove(MetadataSettingField.Summary);
|
||||
}
|
||||
|
||||
if (series.Metadata.Language != updateSeriesMetadataDto.SeriesMetadata?.Language)
|
||||
|
|
@ -195,6 +201,7 @@ public class SeriesService : ISeriesService
|
|||
series.Metadata.AgeRating = updateSeriesMetadataDto.SeriesMetadata?.AgeRating ?? AgeRating.Unknown;
|
||||
series.Metadata.AgeRatingLocked = true;
|
||||
await _readingListService.UpdateReadingListAgeRatingForSeries(series.Id, series.Metadata.AgeRating);
|
||||
series.Metadata.KPlusOverrides.Remove(MetadataSettingField.AgeRating);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -206,6 +213,7 @@ public class SeriesService : ISeriesService
|
|||
if (updatedRating > series.Metadata.AgeRating)
|
||||
{
|
||||
series.Metadata.AgeRating = updatedRating;
|
||||
series.Metadata.KPlusOverrides.Remove(MetadataSettingField.AgeRating);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -319,6 +327,7 @@ public class SeriesService : ISeriesService
|
|||
return true;
|
||||
}
|
||||
|
||||
_unitOfWork.SeriesRepository.Update(series.Metadata);
|
||||
await _unitOfWork.CommitAsync();
|
||||
|
||||
// Trigger code to clean up tags, collections, people, etc
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue