feat(metadata): add 'Replace When Provided' option to metadata replacement modes (#2379)

Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
This commit is contained in:
Balázs Szücs
2026-01-22 06:40:40 +01:00
committed by GitHub
parent 270813d93e
commit 14fa7b058b
4 changed files with 21 additions and 27 deletions

View File

@@ -2,5 +2,6 @@ package com.adityachandel.booklore.model.enums;
public enum MetadataReplaceMode {
REPLACE_ALL,
REPLACE_MISSING
REPLACE_MISSING,
REPLACE_WHEN_PROVIDED
}

View File

@@ -186,10 +186,14 @@ public class BookMetadataUpdater {
if (newValue != null) setter.accept(newValue);
return;
}
if (mode == MetadataReplaceMode.REPLACE_ALL) {
setter.accept(newValue);
} else if (mode == MetadataReplaceMode.REPLACE_MISSING && isValueMissing(getter.get())) {
setter.accept(newValue);
switch (mode) {
case REPLACE_ALL -> setter.accept(newValue);
case REPLACE_MISSING -> {
if (isValueMissing(getter.get())) setter.accept(newValue);
}
case REPLACE_WHEN_PROVIDED -> {
if (!isValueMissing(newValue)) setter.accept(newValue);
}
}
}
@@ -223,14 +227,11 @@ public class BookMetadataUpdater {
if (newAuthors.isEmpty()) return;
boolean replaceAll = replaceMode == MetadataReplaceMode.REPLACE_ALL;
boolean replaceMissing = replaceMode == MetadataReplaceMode.REPLACE_MISSING;
if (replaceAll) {
if (replaceMode == MetadataReplaceMode.REPLACE_ALL || replaceMode == MetadataReplaceMode.REPLACE_WHEN_PROVIDED) {
if (!merge) e.getAuthors().clear();
e.getAuthors().addAll(newAuthors);
e.updateSearchText();
} else if (replaceMissing && e.getAuthors().isEmpty()) {
} else if (replaceMode == MetadataReplaceMode.REPLACE_MISSING && e.getAuthors().isEmpty()) {
e.getAuthors().addAll(newAuthors);
e.updateSearchText();
} else if (replaceMode == null) {
@@ -264,13 +265,10 @@ public class BookMetadataUpdater {
if (newCategories.isEmpty()) return;
boolean replaceAll = replaceMode == MetadataReplaceMode.REPLACE_ALL;
boolean replaceMissing = replaceMode == MetadataReplaceMode.REPLACE_MISSING;
if (replaceAll) {
if (replaceMode == MetadataReplaceMode.REPLACE_ALL || replaceMode == MetadataReplaceMode.REPLACE_WHEN_PROVIDED) {
if (!merge) e.getCategories().clear();
e.getCategories().addAll(newCategories);
} else if (replaceMissing && e.getCategories().isEmpty()) {
} else if (replaceMode == MetadataReplaceMode.REPLACE_MISSING && e.getCategories().isEmpty()) {
e.getCategories().addAll(newCategories);
} else if (replaceMode == null) {
if (!merge) e.getCategories().clear();
@@ -302,13 +300,10 @@ public class BookMetadataUpdater {
if (newMoods.isEmpty()) return;
boolean replaceAll = replaceMode == MetadataReplaceMode.REPLACE_ALL;
boolean replaceMissing = replaceMode == MetadataReplaceMode.REPLACE_MISSING;
if (replaceAll) {
if (replaceMode == MetadataReplaceMode.REPLACE_ALL || replaceMode == MetadataReplaceMode.REPLACE_WHEN_PROVIDED) {
if (!merge) e.getMoods().clear();
e.getMoods().addAll(newMoods);
} else if (replaceMissing && e.getMoods().isEmpty()) {
} else if (replaceMode == MetadataReplaceMode.REPLACE_MISSING && e.getMoods().isEmpty()) {
e.getMoods().addAll(newMoods);
} else if (replaceMode == null) {
if (!merge) e.getMoods().clear();
@@ -340,13 +335,10 @@ public class BookMetadataUpdater {
if (newTags.isEmpty()) return;
boolean replaceAll = replaceMode == MetadataReplaceMode.REPLACE_ALL;
boolean replaceMissing = replaceMode == MetadataReplaceMode.REPLACE_MISSING;
if (replaceAll) {
if (replaceMode == MetadataReplaceMode.REPLACE_ALL || replaceMode == MetadataReplaceMode.REPLACE_WHEN_PROVIDED) {
if (!merge) e.getTags().clear();
e.getTags().addAll(newTags);
} else if (replaceMissing && e.getTags().isEmpty()) {
} else if (replaceMode == MetadataReplaceMode.REPLACE_MISSING && e.getTags().isEmpty()) {
e.getTags().addAll(newTags);
} else if (replaceMode == null) {
if (!merge) e.getTags().clear();

View File

@@ -64,7 +64,8 @@ export class MetadataAdvancedFetchOptionsComponent implements OnChanges {
replaceModeOptions: { label: string; value: MetadataReplaceMode }[] = [
{ label: 'Replace Missing Only', value: 'REPLACE_MISSING' },
{ label: 'Replace All Fields', value: 'REPLACE_ALL' }
{ label: 'Replace All Fields', value: 'REPLACE_ALL' },
{ label: 'Replace When Provided', value: 'REPLACE_WHEN_PROVIDED' }
];
fieldOptions: FieldOptions = this.initializeFieldOptions();

View File

@@ -1,4 +1,4 @@
export type MetadataReplaceMode = 'REPLACE_ALL' | 'REPLACE_MISSING';
export type MetadataReplaceMode = 'REPLACE_ALL' | 'REPLACE_MISSING' | 'REPLACE_WHEN_PROVIDED';
export interface MetadataRefreshOptions {
libraryId: number | null;