Kavita+ Comic Metadata Matching (#3740)
This commit is contained in:
parent
4521965315
commit
ed154e4768
46 changed files with 4207 additions and 98 deletions
|
@ -32,6 +32,7 @@ public interface ICoverDbService
|
|||
Task<string?> DownloadPersonImageAsync(Person person, EncodeFormat encodeFormat, string url);
|
||||
Task SetPersonCoverByUrl(Person person, string url, bool fromBase64 = true, bool checkNoImagePlaceholder = false);
|
||||
Task SetSeriesCoverByUrl(Series series, string url, bool fromBase64 = true, bool chooseBetterImage = false);
|
||||
Task SetChapterCoverByUrl(Chapter chapter, string url, bool fromBase64 = true, bool chooseBetterImage = false);
|
||||
}
|
||||
|
||||
|
||||
|
@ -580,6 +581,51 @@ public class CoverDbService : ICoverDbService
|
|||
}
|
||||
}
|
||||
|
||||
public async Task SetChapterCoverByUrl(Chapter chapter, string url, bool fromBase64 = true, bool chooseBetterImage = false)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(url))
|
||||
{
|
||||
var filePath = await CreateThumbnail(url, $"{ImageService.GetChapterFormat(chapter.Id, chapter.VolumeId)}", fromBase64);
|
||||
|
||||
if (!string.IsNullOrEmpty(filePath))
|
||||
{
|
||||
// Additional check to see if downloaded image is similar and we have a higher resolution
|
||||
if (chooseBetterImage && !string.IsNullOrEmpty(chapter.CoverImage))
|
||||
{
|
||||
try
|
||||
{
|
||||
var betterImage = Path.Join(_directoryService.CoverImageDirectory, chapter.CoverImage)
|
||||
.GetBetterImage(Path.Join(_directoryService.CoverImageDirectory, filePath))!;
|
||||
filePath = Path.GetFileName(betterImage);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "There was an issue trying to choose a better cover image for Chapter: {FileName} ({ChapterId})", chapter.Range, chapter.Id);
|
||||
}
|
||||
}
|
||||
|
||||
chapter.CoverImage = filePath;
|
||||
chapter.CoverImageLocked = true;
|
||||
_imageService.UpdateColorScape(chapter);
|
||||
_unitOfWork.ChapterRepository.Update(chapter);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
chapter.CoverImage = null;
|
||||
chapter.CoverImageLocked = false;
|
||||
_imageService.UpdateColorScape(chapter);
|
||||
_unitOfWork.ChapterRepository.Update(chapter);
|
||||
}
|
||||
|
||||
if (_unitOfWork.HasChanges())
|
||||
{
|
||||
await _unitOfWork.CommitAsync();
|
||||
await _eventHub.SendMessageAsync(MessageFactory.CoverUpdate,
|
||||
MessageFactory.CoverUpdateEvent(chapter.Id, MessageFactoryEntityTypes.Chapter), false);
|
||||
}
|
||||
}
|
||||
|
||||
private async Task<string> CreateThumbnail(string url, string filename, bool fromBase64 = true)
|
||||
{
|
||||
var settings = await _unitOfWork.SettingsRepository.GetSettingsDtoAsync();
|
||||
|
|
|
@ -977,26 +977,26 @@ public class ProcessSeries : IProcessSeries
|
|||
chapter.ReleaseDate = new DateTime(comicInfo.Year, month, day);
|
||||
}
|
||||
|
||||
if (!chapter.ColoristLocked)
|
||||
if (!chapter.IsPersonRoleLocked(PersonRole.Colorist))
|
||||
{
|
||||
var people = TagHelper.GetTagValues(comicInfo.Colorist);
|
||||
await UpdateChapterPeopleAsync(chapter, people, PersonRole.Colorist);
|
||||
}
|
||||
|
||||
if (!chapter.CharacterLocked)
|
||||
if (!chapter.IsPersonRoleLocked(PersonRole.Character))
|
||||
{
|
||||
var people = TagHelper.GetTagValues(comicInfo.Characters);
|
||||
await UpdateChapterPeopleAsync(chapter, people, PersonRole.Character);
|
||||
}
|
||||
|
||||
|
||||
if (!chapter.TranslatorLocked)
|
||||
if (!chapter.IsPersonRoleLocked(PersonRole.Translator))
|
||||
{
|
||||
var people = TagHelper.GetTagValues(comicInfo.Translator);
|
||||
await UpdateChapterPeopleAsync(chapter, people, PersonRole.Translator);
|
||||
}
|
||||
|
||||
if (!chapter.WriterLocked)
|
||||
if (!chapter.IsPersonRoleLocked(PersonRole.Writer))
|
||||
{
|
||||
var personSw = Stopwatch.StartNew();
|
||||
var people = TagHelper.GetTagValues(comicInfo.Writer);
|
||||
|
@ -1004,55 +1004,55 @@ public class ProcessSeries : IProcessSeries
|
|||
_logger.LogTrace("[TIME] Kavita took {Time} ms to process writer on Chapter: {File} for {Count} people", personSw.ElapsedMilliseconds, chapter.Files.First().FileName, people.Count);
|
||||
}
|
||||
|
||||
if (!chapter.EditorLocked)
|
||||
if (!chapter.IsPersonRoleLocked(PersonRole.Editor))
|
||||
{
|
||||
var people = TagHelper.GetTagValues(comicInfo.Editor);
|
||||
await UpdateChapterPeopleAsync(chapter, people, PersonRole.Editor);
|
||||
}
|
||||
|
||||
if (!chapter.InkerLocked)
|
||||
if (!chapter.IsPersonRoleLocked(PersonRole.Inker))
|
||||
{
|
||||
var people = TagHelper.GetTagValues(comicInfo.Inker);
|
||||
await UpdateChapterPeopleAsync(chapter, people, PersonRole.Inker);
|
||||
}
|
||||
|
||||
if (!chapter.LettererLocked)
|
||||
if (!chapter.IsPersonRoleLocked(PersonRole.Letterer))
|
||||
{
|
||||
var people = TagHelper.GetTagValues(comicInfo.Letterer);
|
||||
await UpdateChapterPeopleAsync(chapter, people, PersonRole.Letterer);
|
||||
}
|
||||
|
||||
if (!chapter.PencillerLocked)
|
||||
if (!chapter.IsPersonRoleLocked(PersonRole.Penciller))
|
||||
{
|
||||
var people = TagHelper.GetTagValues(comicInfo.Penciller);
|
||||
await UpdateChapterPeopleAsync(chapter, people, PersonRole.Penciller);
|
||||
}
|
||||
|
||||
if (!chapter.CoverArtistLocked)
|
||||
if (!chapter.IsPersonRoleLocked(PersonRole.CoverArtist))
|
||||
{
|
||||
var people = TagHelper.GetTagValues(comicInfo.CoverArtist);
|
||||
await UpdateChapterPeopleAsync(chapter, people, PersonRole.CoverArtist);
|
||||
}
|
||||
|
||||
if (!chapter.PublisherLocked)
|
||||
if (!chapter.IsPersonRoleLocked(PersonRole.Publisher))
|
||||
{
|
||||
var people = TagHelper.GetTagValues(comicInfo.Publisher);
|
||||
await UpdateChapterPeopleAsync(chapter, people, PersonRole.Publisher);
|
||||
}
|
||||
|
||||
if (!chapter.ImprintLocked)
|
||||
if (!chapter.IsPersonRoleLocked(PersonRole.Imprint))
|
||||
{
|
||||
var people = TagHelper.GetTagValues(comicInfo.Imprint);
|
||||
await UpdateChapterPeopleAsync(chapter, people, PersonRole.Imprint);
|
||||
}
|
||||
|
||||
if (!chapter.TeamLocked)
|
||||
if (!chapter.IsPersonRoleLocked(PersonRole.Team))
|
||||
{
|
||||
var people = TagHelper.GetTagValues(comicInfo.Teams);
|
||||
await UpdateChapterPeopleAsync(chapter, people, PersonRole.Team);
|
||||
}
|
||||
|
||||
if (!chapter.LocationLocked)
|
||||
if (!chapter.IsPersonRoleLocked(PersonRole.Location))
|
||||
{
|
||||
var people = TagHelper.GetTagValues(comicInfo.Locations);
|
||||
await UpdateChapterPeopleAsync(chapter, people, PersonRole.Location);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue