diff --git a/booklore-api/src/main/java/com/adityachandel/booklore/util/MetadataChangeDetector.java b/booklore-api/src/main/java/com/adityachandel/booklore/util/MetadataChangeDetector.java index 3a557b4a9..f31f6bd4e 100644 --- a/booklore-api/src/main/java/com/adityachandel/booklore/util/MetadataChangeDetector.java +++ b/booklore-api/src/main/java/com/adityachandel/booklore/util/MetadataChangeDetector.java @@ -3,6 +3,7 @@ package com.adityachandel.booklore.util; import com.adityachandel.booklore.model.MetadataClearFlags; import com.adityachandel.booklore.model.dto.BookMetadata; import com.adityachandel.booklore.model.entity.BookMetadataEntity; +import lombok.extern.slf4j.Slf4j; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -10,10 +11,9 @@ import java.util.*; import java.util.function.Supplier; import java.util.stream.Collectors; +@Slf4j public class MetadataChangeDetector { - private static final Logger log = LoggerFactory.getLogger(MetadataChangeDetector.class); - public static boolean isDifferent(BookMetadata newMeta, BookMetadataEntity existingMeta, MetadataClearFlags clear) { if (clear == null) return true; @@ -46,6 +46,12 @@ public class MetadataChangeDetector { compare(changes, "authors", clear.isAuthors(), newMeta.getAuthors(), toNameSet(existingMeta.getAuthors()), () -> !isTrue(existingMeta.getAuthorsLocked()), newMeta.getAuthorsLocked(), existingMeta.getAuthorsLocked()); compare(changes, "categories", clear.isCategories(), newMeta.getCategories(), toNameSet(existingMeta.getCategories()), () -> !isTrue(existingMeta.getCategoriesLocked()), newMeta.getCategoriesLocked(), existingMeta.getCategoriesLocked()); + Boolean coverLockedNew = newMeta.getCoverLocked(); + Boolean coverLockedExisting = existingMeta.getCoverLocked(); + if (differsLock(coverLockedNew, coverLockedExisting)) { + changes.add("cover lock: [" + isTrue(coverLockedExisting) + "] → [" + isTrue(coverLockedNew) + "]"); + } + if (!changes.isEmpty()) { /*changes.forEach(change -> log.info("Metadata change: {}", change));*/ return true; diff --git a/booklore-ui/src/app/metadata/book-metadata-center-component/metadata-editor/metadata-editor.component.ts b/booklore-ui/src/app/metadata/book-metadata-center-component/metadata-editor/metadata-editor.component.ts index 32f71d899..062120f43 100644 --- a/booklore-ui/src/app/metadata/book-metadata-center-component/metadata-editor/metadata-editor.component.ts +++ b/booklore-ui/src/app/metadata/book-metadata-center-component/metadata-editor/metadata-editor.component.ts @@ -134,7 +134,7 @@ export class MetadataEditorComponent implements OnInit { seriesNameLocked: new FormControl(false), seriesNumberLocked: new FormControl(false), seriesTotalLocked: new FormControl(false), - thumbnailUrlLocked: new FormControl(false), + coverLocked: new FormControl(false), }); } @@ -227,7 +227,7 @@ export class MetadataEditorComponent implements OnInit { seriesNameLocked: metadata.seriesNameLocked ?? false, seriesNumberLocked: metadata.seriesNumberLocked ?? false, seriesTotalLocked: metadata.seriesTotalLocked ?? false, - thumbnailUrlLocked: metadata.coverLocked ?? false, + coverLocked: metadata.coverLocked ?? false, }); const lockableFields: { key: keyof BookMetadata; control: string }[] = [ @@ -256,7 +256,8 @@ export class MetadataEditorComponent implements OnInit { {key: 'descriptionLocked', control: 'description'}, {key: 'seriesNameLocked', control: 'seriesName'}, {key: 'seriesNumberLocked', control: 'seriesNumber'}, - {key: 'seriesTotalLocked', control: 'seriesTotal'} + {key: 'seriesTotalLocked', control: 'seriesTotal'}, + {key: 'coverLocked', control: 'thumbnailUrl'}, ]; for (const {key, control} of lockableFields) { @@ -287,6 +288,9 @@ export class MetadataEditorComponent implements OnInit { } toggleLock(field: string): void { + if (field === 'thumbnailUrl') { + field = 'cover' + } const isLocked = this.metadataForm.get(field + 'Locked')?.value; const updatedLockedState = !isLocked; this.metadataForm.get(field + 'Locked')?.setValue(updatedLockedState); @@ -396,7 +400,7 @@ export class MetadataEditorComponent implements OnInit { seriesNameLocked: form.get('seriesNameLocked')?.value, seriesNumberLocked: form.get('seriesNumberLocked')?.value, seriesTotalLocked: form.get('seriesTotalLocked')?.value, - coverLocked: form.get('thumbnailUrlLocked')?.value, + coverLocked: form.get('coverLocked')?.value, ...(shouldLockAllFields !== undefined && {allFieldsLocked: shouldLockAllFields}) }; diff --git a/booklore-ui/src/app/metadata/book-metadata-center-component/metadata-picker/metadata-picker.component.ts b/booklore-ui/src/app/metadata/book-metadata-center-component/metadata-picker/metadata-picker.component.ts index 82743ccd3..c96b33a1f 100644 --- a/booklore-ui/src/app/metadata/book-metadata-center-component/metadata-picker/metadata-picker.component.ts +++ b/booklore-ui/src/app/metadata/book-metadata-center-component/metadata-picker/metadata-picker.component.ts @@ -144,7 +144,7 @@ export class MetadataPickerComponent implements OnInit { seriesNameLocked: new FormControl(false), seriesNumberLocked: new FormControl(false), seriesTotalLocked: new FormControl(false), - thumbnailUrlLocked: new FormControl(false), + coverLocked: new FormControl(false), }); } @@ -221,7 +221,7 @@ export class MetadataPickerComponent implements OnInit { seriesNameLocked: metadata.seriesNameLocked || false, seriesNumberLocked: metadata.seriesNumberLocked || false, seriesTotalLocked: metadata.seriesTotalLocked || false, - thumbnailUrlLocked: metadata.coverLocked || false, + coverLocked: metadata.coverLocked || false, }); if (metadata.titleLocked) this.metadataForm.get('title')?.disable(); @@ -330,7 +330,7 @@ export class MetadataPickerComponent implements OnInit { seriesNameLocked: this.metadataForm.get('seriesNameLocked')?.value, seriesNumberLocked: this.metadataForm.get('seriesNumberLocked')?.value, seriesTotalLocked: this.metadataForm.get('seriesTotalLocked')?.value, - coverLocked: this.metadataForm.get('thumbnailUrlLocked')?.value, + coverLocked: this.metadataForm.get('coverLocked')?.value, ...(shouldLockAllFields !== undefined && {allFieldsLocked: shouldLockAllFields}), }; @@ -407,6 +407,9 @@ export class MetadataPickerComponent implements OnInit { } toggleLock(field: string): void { + if (field === 'thumbnailUrl') { + field = 'cover' + } const isLocked = this.metadataForm.get(field + 'Locked')?.value; const updatedLockedState = !isLocked; this.metadataForm.get(field + 'Locked')?.setValue(updatedLockedState); @@ -437,6 +440,9 @@ export class MetadataPickerComponent implements OnInit { } copyFetchedToCurrent(field: string): void { + if (field === 'thumbnailUrl') { + field = 'cover'; + } const isLocked = this.metadataForm.get(`${field}Locked`)?.value; if (isLocked) { this.messageService.add({ @@ -446,6 +452,9 @@ export class MetadataPickerComponent implements OnInit { }); return; } + if (field === 'cover') { + field = 'thumbnailUrl'; + } const value = this.fetchedMetadata[field]; if (value) { this.metadataForm.get(field)?.setValue(value);