Compare commits

..

No commits in common. "0198eb9e2bd2717015792b7aead7ff10d76b8a74" and "32b570ee5bc5cb6acc1e093ac50b3cdca6de670e" have entirely different histories.

9 changed files with 171 additions and 172 deletions

View File

@ -26,7 +26,6 @@ from comicapi.comicarchive import ComicArchive, metadata_styles
from comicapi.genericmetadata import GenericMetadata
from comictaggerlib.coverimagewidget import CoverImageWidget
from comictaggerlib.ctsettings import ct_ns
from comictaggerlib.md import prepare_metadata
from comictaggerlib.resulttypes import IssueResult, Result
from comictaggerlib.ui import ui_path
from comictaggerlib.ui.qtutils import reduce_widget_font_size
@ -263,7 +262,7 @@ class AutoTagMatchWindow(QtWidgets.QDialog):
return
QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.CursorShape.WaitCursor))
md = prepare_metadata(md, ct_md, self.config)
md.overlay(ct_md, self.config.internal__source_data_overlay, self.config.internal__overlay_merge_lists)
for style in self._styles:
success = ca.write_metadata(md, style)
QtWidgets.QApplication.restoreOverrideCursor()

View File

@ -253,9 +253,7 @@ class CLI:
if ca.has_metadata(style):
try:
t_md = ca.read_metadata(style)
md.overlay(
t_md, self.config.Metadata_Options__comic_merge, self.config.Metadata_Options__comic_merge_lists
)
md.overlay(t_md, self.config.internal__load_data_overlay, self.config.internal__overlay_merge_lists)
break
except Exception as e:
logger.error("Failed to load metadata for %s: %s", ca.path, e)

View File

@ -25,7 +25,7 @@ import subprocess
import settngs
from comicapi import utils
from comicapi import merge, utils
from comicapi.comicarchive import metadata_styles
from comictaggerlib import ctversion
from comictaggerlib.ctsettings.settngs_namespace import SettngsNS as ct_ns
@ -153,6 +153,31 @@ def register_runtime(parser: settngs.Manager) -> None:
help="""Specify the type of tags to write.\nUse commas for multiple types.\nRead types will be used if unspecified\nSee --list-plugins for the available types.\n\n""",
file=False,
)
parser.add_setting(
"--read-style-merge",
metavar=f"{{{','.join(merge.Mode)}}}",
default=merge.Mode.OVERLAY,
choices=merge.Mode,
type=merge.Mode,
help="How to merge additional metadata for enabled read styles (CR, CBL, etc.) See -t, --type-read default: %(default)s",
file=False,
)
parser.add_setting(
"--source-merge",
metavar=f"{{{','.join(merge.Mode)}}}",
default=merge.Mode.OVERLAY,
choices=merge.Mode,
type=merge.Mode,
help="How to merge new metadata from a data source (CV, Metron, GCD, etc.) default: %(default)s",
file=False,
)
parser.add_setting(
"--merge-lists",
action=argparse.BooleanOptionalAction,
default=True,
help="Merge all items of lists when merging new metadata (genres, characters, etc.) default: %(default)s",
file=False,
)
parser.add_setting(
"--skip-existing-metadata",
action=argparse.BooleanOptionalAction,

View File

@ -28,6 +28,9 @@ def internal(parser: settngs.Manager) -> None:
parser.add_setting("install_id", default=uuid.uuid4().hex, cmdline=False)
parser.add_setting("save_data_style", default=["cbi"], cmdline=False)
parser.add_setting("load_data_style", default=["cbi"], cmdline=False)
parser.add_setting("load_data_overlay", default=merge.Mode.OVERLAY, cmdline=False, type=merge.Mode)
parser.add_setting("source_data_overlay", default=merge.Mode.OVERLAY, cmdline=False, type=merge.Mode)
parser.add_setting("overlay_merge_lists", default=True, cmdline=False, action=argparse.BooleanOptionalAction)
parser.add_setting("last_opened_folder", default="", cmdline=False)
parser.add_setting("window_width", default=0, cmdline=False)
parser.add_setting("window_height", default=0, cmdline=False)
@ -161,34 +164,6 @@ def md_options(parser: settngs.Manager) -> None:
action=argparse.BooleanOptionalAction,
help="Enable the ComicRack metadata type. Turn off to only use the CIX metadata type.\ndefault: %(default)s",
)
parser.add_setting(
"--comic-merge",
metavar=f"{{{','.join(merge.Mode)}}}",
default=merge.Mode.OVERLAY,
choices=merge.Mode,
type=merge.Mode,
help="How to merge additional metadata for enabled read styles (CR, CBL, etc.) See -t, --type-read default: %(default)s",
)
parser.add_setting(
"--metadata-merge",
metavar=f"{{{','.join(merge.Mode)}}}",
default=merge.Mode.OVERLAY,
choices=merge.Mode,
type=merge.Mode,
help="How to merge new metadata from a data source (CV, Metron, GCD, etc.) default: %(default)s",
)
parser.add_setting(
"--comic-merge-lists",
action=argparse.BooleanOptionalAction,
default=True,
help="Merge all items of lists when merging new metadata (genres, characters, etc.) default: %(default)s",
)
parser.add_setting(
"--metadata-merge-lists",
action=argparse.BooleanOptionalAction,
default=True,
help="Merge all items of lists when merging new metadata (genres, characters, etc.) default: %(default)s",
)
def rename(parser: settngs.Manager) -> None:

View File

@ -34,12 +34,18 @@ class SettngsNS(settngs.TypedNS):
Runtime_Options__delete_original: bool
Runtime_Options__type_read: list[str]
Runtime_Options__type_modify: list[str]
Runtime_Options__read_style_merge: comicapi.merge.Mode
Runtime_Options__source_merge: comicapi.merge.Mode
Runtime_Options__merge_lists: bool
Runtime_Options__skip_existing_metadata: bool
Runtime_Options__files: list[str]
internal__install_id: str
internal__save_data_style: list[str]
internal__load_data_style: list[str]
internal__load_data_overlay: comicapi.merge.Mode
internal__source_data_overlay: comicapi.merge.Mode
internal__overlay_merge_lists: bool
internal__last_opened_folder: str
internal__window_width: int
internal__window_height: int
@ -78,10 +84,6 @@ class SettngsNS(settngs.TypedNS):
Metadata_Options__apply_transform_on_bulk_operation: bool
Metadata_Options__use_short_metadata_names: bool
Metadata_Options__cr: bool
Metadata_Options__comic_merge: comicapi.merge.Mode
Metadata_Options__metadata_merge: comicapi.merge.Mode
Metadata_Options__comic_merge_lists: bool
Metadata_Options__metadata_merge_lists: bool
File_Rename__template: str
File_Rename__issue_number_padding: int
@ -145,6 +147,9 @@ class Runtime_Options(typing.TypedDict):
delete_original: bool
type_read: list[str]
type_modify: list[str]
read_style_merge: comicapi.merge.Mode
source_merge: comicapi.merge.Mode
merge_lists: bool
skip_existing_metadata: bool
files: list[str]
@ -153,6 +158,9 @@ class internal(typing.TypedDict):
install_id: str
save_data_style: list[str]
load_data_style: list[str]
load_data_overlay: comicapi.merge.Mode
source_data_overlay: comicapi.merge.Mode
overlay_merge_lists: bool
last_opened_folder: str
window_width: int
window_height: int
@ -199,10 +207,6 @@ class Metadata_Options(typing.TypedDict):
apply_transform_on_bulk_operation: bool
use_short_metadata_names: bool
cr: bool
comic_merge: comicapi.merge.Mode
metadata_merge: comicapi.merge.Mode
comic_merge_lists: bool
metadata_merge_lists: bool
class File_Rename(typing.TypedDict):

View File

@ -18,7 +18,7 @@ def prepare_metadata(md: GenericMetadata, new_md: GenericMetadata, opts: Settngs
if opts.Auto_Tag__clear_metadata:
final_md = GenericMetadata()
final_md.overlay(new_md, opts.Metadata_Options__metadata_merge, opts.Metadata_Options__metadata_merge_lists)
final_md.overlay(new_md)
if final_md.tag_origin is not None:
notes = (
f"Tagged with ComicTagger {ctversion.version} using info from {final_md.tag_origin.name} on"

View File

@ -195,8 +195,8 @@ class SettingsWindow(QtWidgets.QDialog):
self.cbFilenameParser.clear()
self.cbFilenameParser.addItems(utils.Parser)
for mode in merge.Mode:
self.cbMergeModeComic.addItem(mode.name.capitalize().replace("_", " "), mode)
self.cbMergeModeMetadata.addItem(mode.name.capitalize().replace("_", " "), mode)
self.cbxOverlayReadStyle.addItem(mode.name.capitalize().replace("_", " "), mode.value)
self.cbxOverlaySource.addItem(mode.name.capitalize().replace("_", " "), mode.value)
self.connect_signals()
self.settings_to_form()
self.rename_test()
@ -431,15 +431,13 @@ class SettingsWindow(QtWidgets.QDialog):
self.cbxApplyCBLTransformOnBatchOperation.setChecked(
self.config[0].Metadata_Options__apply_transform_on_bulk_operation
)
self.cbMergeModeComic.setCurrentIndex(
self.cbMergeModeComic.findData(self.config[0].Metadata_Options__comic_merge)
self.cbxOverlayReadStyle.setCurrentIndex(
self.cbxOverlayReadStyle.findData(self.config[0].internal__load_data_overlay.value)
)
self.cbMergeModeMetadata.setCurrentIndex(
self.cbMergeModeMetadata.findData(self.config[0].Metadata_Options__metadata_merge)
self.cbxOverlaySource.setCurrentIndex(
self.cbxOverlaySource.findData(self.config[0].internal__source_data_overlay.value)
)
self.cbxMergeListsComic.setChecked(self.config[0].Metadata_Options__comic_merge_lists)
self.cbxMergeListsMetadata.setChecked(self.config[0].Metadata_Options__metadata_merge_lists)
self.cbxOverlayMergeLists.setChecked(self.config[0].internal__overlay_merge_lists)
self.cbxShortMetadataNames.setChecked(self.config[0].Metadata_Options__use_short_metadata_names)
self.cbxEnableCR.setChecked(self.config[0].Metadata_Options__cr)
@ -564,12 +562,10 @@ class SettingsWindow(QtWidgets.QDialog):
self.cbxApplyCBLTransformOnBatchOperation.isChecked()
)
self.config[0].Metadata_Options__comic_merge = merge.Mode(self.cbMergeModeComic.currentData())
self.config[0].Metadata_Options__metadata_merge = merge.Mode(self.cbMergeModeMetadata.currentData())
self.config[0].Metadata_Options__comic_merge_lists = self.cbxMergeListsComic.isChecked()
self.config[0].Metadata_Options__metadata_merge_lists = self.cbxMergeListsMetadata.isChecked()
self.config[0].internal__load_data_overlay = merge.Mode[self.cbxOverlayReadStyle.currentData().upper()]
self.config[0].internal__source_data_overlay = merge.Mode[self.cbxOverlaySource.currentData().upper()]
self.config[0].internal__overlay_merge_lists = self.cbxOverlayMergeLists.isChecked()
self.config[0].Metadata_Options__cr = self.cbxEnableCR.isChecked()
# Update metadata style names if required
if self.config[0].Metadata_Options__use_short_metadata_names != self.cbxShortMetadataNames.isChecked():
self.config[0].Metadata_Options__use_short_metadata_names = self.cbxShortMetadataNames.isChecked()

View File

@ -218,13 +218,20 @@ class TaggerWindow(QtWidgets.QMainWindow):
if config[0].Runtime_Options__type_read:
config[0].internal__load_data_style = config[0].Runtime_Options__type_read
# Respect command line overlay settings
if config[0].Runtime_Options__read_style_merge:
config[0].internal__load_data_overlay = config[0].Runtime_Options__read_style_merge
if config[0].Runtime_Options__source_merge:
config[0].internal__source_data_overlay = config[0].Runtime_Options__source_merge
if isinstance(config[0].Runtime_Options__merge_lists, bool):
config[0].internal__overlay_merge_lists = config[0].Runtime_Options__merge_lists
for style in config[0].internal__save_data_style:
if style not in metadata_styles:
config[0].internal__save_data_style.remove(style)
for style in config[0].internal__load_data_style:
if style not in metadata_styles:
config[0].internal__load_data_style.remove(style)
self.save_data_styles: list[str] = config[0].internal__save_data_style
self.load_data_styles: list[str] = config[0].internal__load_data_style
@ -2203,8 +2210,8 @@ class TaggerWindow(QtWidgets.QMainWindow):
metadata = ca.read_metadata(style)
md.overlay(
metadata,
mode=self.config[0].Metadata_Options__comic_merge,
merge_lists=self.config[0].Metadata_Options__comic_merge_lists,
mode=self.config[0].internal__load_data_overlay,
merge_lists=self.config[0].internal__overlay_merge_lists,
)
except Exception as e:
error = e

View File

@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>703</width>
<height>615</height>
<height>597</height>
</rect>
</property>
<property name="windowTitle">
@ -619,8 +619,14 @@ One Publisher per line</string>
</item>
<item row="4" column="0">
<widget class="QGroupBox" name="groupBox_6">
<property name="minimumSize">
<size>
<width>0</width>
<height>165</height>
</size>
</property>
<property name="title">
<string>Merge Modes</string>
<string>Overlay</string>
</property>
<layout class="QGridLayout" name="gridLayout_10">
<property name="leftMargin">
@ -638,106 +644,58 @@ One Publisher per line</string>
<property name="spacing">
<number>6</number>
</property>
<item row="0" column="0">
<widget class="QGroupBox" name="groupBox_7">
<property name="title">
<string>Comic Merge</string>
</property>
<layout class="QFormLayout" name="formLayout">
<item row="0" column="0">
<widget class="QLabel" name="lblOverlayComic">
<property name="toolTip">
<string>The merge mode to use when reading multiple metadata styles from a single comic archive (ComicRack, ComicBookInfo, etc.)</string>
</property>
<property name="text">
<string>Merge Mode:</string>
</property>
<property name="margin">
<number>6</number>
</property>
<property name="buddy">
<cstring>cbxOverlayReadStyle</cstring>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="cbMergeModeComic">
<property name="enabled">
<bool>true</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>The merge mode to use when reading multiple metadata styles from a comic archive (ComicRack, ComicBookInfo, etc.)</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QCheckBox" name="cbxMergeListsComic">
<property name="toolTip">
<string>Merge lists (characters, tags, locations, etc.) together or the &quot;new&quot; list replaces the old</string>
</property>
<property name="text">
<string>Merge Lists</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="1" column="0">
<widget class="QGroupBox" name="groupBox_8">
<property name="title">
<string>Metadata Merge</string>
<widget class="QLabel" name="lblOverlaySource">
<property name="toolTip">
<string>The operation to perform when overlaying source data (Comic Vine, Metron, GCD, etc.)</string>
</property>
<property name="text">
<string>Data Source</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="margin">
<number>6</number>
</property>
<layout class="QFormLayout" name="formLayout_4">
<item row="0" column="0">
<widget class="QLabel" name="lblOverlayMetadata">
<property name="toolTip">
<string>The merge mode to use when fetching metadata from a Metadata Source (Comic Vine, Metron, GCD, etc.)</string>
</property>
<property name="text">
<string>Merge Mode:</string>
</property>
<property name="margin">
<number>6</number>
</property>
<property name="buddy">
<cstring>cbxOverlaySource</cstring>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="cbMergeModeMetadata">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>The merge mode to use when fetching data from a Metadata Source (Comic Vine, Metron, GCD, etc.)</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QCheckBox" name="cbxMergeListsMetadata">
<property name="toolTip">
<string>Merge lists (characters, tags, locations, etc.) together or the &quot;new&quot; list replaces the old</string>
</property>
<property name="text">
<string>Merge Lists</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="0" column="2" rowspan="2">
<item row="0" column="0">
<widget class="QLabel" name="lblOverlayReadStyle">
<property name="toolTip">
<string>The operation to perform when overlaying read styles (ComicRack, ComicBookInfo, etc.)</string>
</property>
<property name="text">
<string>Read Style</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="margin">
<number>6</number>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="cbxOverlaySource">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="toolTip">
<string>The operation to perform when overlaying source data (Comic Vine, Metron, GCD, etc.)</string>
</property>
</widget>
</item>
<item row="0" column="2" rowspan="3">
<widget class="QTabWidget" name="tabWidgetOverlay">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Maximum">
@ -757,6 +715,12 @@ One Publisher per line</string>
<height>200</height>
</size>
</property>
<property name="tabPosition">
<enum>QTabWidget::North</enum>
</property>
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="tOverlay">
<property name="maximumSize">
<size>
@ -795,14 +759,11 @@ One Publisher per line</string>
<bool>false</bool>
</property>
<property name="plainText">
<string>Overlays all the non-empty values of the new metadata (e.g. Comic Vine) on top of the current metadata.
See the Lists tab for controlling how lists are handled.
<string>Overlays all the (non-list) non-empty values of the new metadata (e.g. Comic Vine) on top of the current metadata.
Example:
(Series=the batman, Issue=1, Tags=[batman,joker,robin])
(Series=batman, Issue=1, Tags=[batman,joker,robin])
+ (Series=Batman, Publisher=DC Comics, Tags=[mystery,action])
= (Series=Batman, Issue=1, Publisher=DC Comics, Tags=[mystery,action])</string>
</property>
<property name="textInteractionFlags">
@ -835,15 +796,12 @@ Example:
<item>
<widget class="QPlainTextEdit" name="addTextEdit">
<property name="plainText">
<string>Adds any metadata that is is missing in the current metadata but present in the new metadata (e.g. Comic Vine).
See the Lists tab for controlling how lists are handled.
<string>Adds any (non-list) metadata that is present in the new metadata (e.g. Comic Vine) but is missing in the current metadata.
Example:
(Series=batman, Issue=1, Tags=[batman,joker,robin])
+ (Series=Superman, Issue=10, Publisher=DC Comics, Tags=[mystery,action])
= (Series=batman, Issue=1, Tags=[batman,joker,robin], Publisher=DC Comics)</string>
(Series=batman, Issue=1)
+ (Series=Superman, Issue=10, Publisher=DC Comics)
= (Series=batman, Issue=1, Publisher=DC Comics)</string>
</property>
<property name="textInteractionFlags">
<set>Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
@ -875,12 +833,17 @@ Example:
<item>
<widget class="QPlainTextEdit" name="combineTextEdit">
<property name="plainText">
<string>Checking the &quot;Merge Lists&quot; check box will enable merging of list items, otherwise it will follow the merge mode, see the 'Overlay' and 'Add Missing' tabs.
<string>All lists (tags, characters, genres, credits, etc.) are merged or replaced via the &quot;Merge Lists&quot; check box. Merge will replace duplicates within the list with the &quot;new&quot; data.
Example Merge:
(Tags=[batman,joker,robin])
+ (Tags=[mystery,action])
= (Tags=[batman,joker,robin,mystery,action])</string>
= (Tags=[batman,joker,robin,mystery,action])
Example Replace:
(Tags=[batman,joker,robin])
+ (Tags=[mystery,action])
= (Tags=[mystery,action])</string>
</property>
<property name="textInteractionFlags">
<set>Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
@ -891,6 +854,38 @@ Example Merge:
</widget>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="cbxOverlayReadStyle">
<property name="enabled">
<bool>true</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="toolTip">
<string>The operation to perform when overlaying read styles (ComicRack, ComicBookInfo, etc.)</string>
</property>
</widget>
</item>
<item row="2" column="0" colspan="2">
<widget class="QCheckBox" name="cbxOverlayMergeLists">
<property name="toolTip">
<string>Merge lists (characters, tags, locations, etc.) together or the &quot;new&quot; list replaces the old</string>
</property>
<property name="text">
<string>Merge Lists</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>