diff --git a/comicapi/genericmetadata.py b/comicapi/genericmetadata.py
index b3679a2..4195c43 100644
--- a/comicapi/genericmetadata.py
+++ b/comicapi/genericmetadata.py
@@ -319,3 +319,21 @@ class GenericMetadata:
outstr += fmt_str.format(i[0] + ":", i[1])
return outstr
+
+ def fixPublisher(self):
+ if self.publisher is None:
+ return
+ if self.imprint is None:
+ self.imprint = ""
+
+ imprint, publisher = utils.getPublisher(self.publisher)
+
+ self.publisher = publisher
+
+ if self.imprint.lower() in publisher.lower():
+ self.imprint = None
+
+ if self.imprint is None or self.imprint == "":
+ self.imprint = imprint
+ elif self.imprint.lower() in imprint.lower():
+ self.imprint = imprint
diff --git a/comicapi/utils.py b/comicapi/utils.py
index 1303689..fb44a12 100644
--- a/comicapi/utils.py
+++ b/comicapi/utils.py
@@ -592,3 +592,145 @@ def getLanguageFromISO(iso):
return None
else:
return lang_dict[iso]
+
+
+def getPublisher(publisher):
+ if publisher is None:
+ return ("", "")
+ imprint = ""
+
+ for pub in publishers:
+ imprint, publisher, ok = pub[publisher]
+ if ok:
+ break
+
+ return (imprint, publisher)
+
+
+class ImprintDict(dict):
+ '''
+ ImprintDict takes a publisher and a dict or mapping of lowercased
+ imprint names to the proper imprint name. Retreiving a value from an
+ ImportDict returns a tuple of (imprint, publisher, keyExists).
+ if the key does not exist the key is returned as the publisher unchanged
+ '''
+ def __init__(self, publisher, mapping=(), **kwargs):
+ super().__init__(mapping, **kwargs)
+ self.publisher = publisher
+
+ def __missing__(self, key):
+ return None
+
+ def __getitem__(self, k):
+ item = super().__getitem__(k.lower())
+ if item is None:
+ return ("", k, False)
+ else:
+ return (item, self.publisher, True)
+
+Marvel = ImprintDict("Marvel", {
+ "marvel comics":"",
+ "marvel":"",
+ "aircel comics": "Aircel Comics",
+ "aircel": "Aircel Comics",
+ "atlas comics": "Atlas Comics",
+ "atlas": "Atlas Comics",
+ "crossgen comics": "CrossGen comics",
+ "crossgen": "CrossGen comics",
+ "curtis magazines": "Curtis Magazines",
+ "disney books group": "Disney Books Group",
+ "disney books": "Disney Books Group",
+ "disney kingdoms": "Disney Kingdoms",
+ "epic comics": "Epic Comics",
+ "epic": "Epic Comics",
+ "eternity comics": "Eternity Comics",
+ "humorama": "Humorama",
+ "icon comics": "Icon Comics",
+ "infinite comics": "Infinite Comics",
+ "malibu comics": "Malibu Comics",
+ "malibu": "Malibu Comics",
+ "marvel 2099": "Marvel 2099",
+ "marvel absurd": "Marvel Absurd",
+ "marvel adventures": "Marvel Adventures",
+ "marvel age": "Marvel Age",
+ "marvel books": "Marvel Books",
+ "marvel comics 2": "Marvel Comics 2",
+ "marvel edge": "Marvel Edge",
+ "marvel frontier": "Marvel Frontier",
+ "marvel illustrated": "Marvel Illustrated",
+ "marvel knights": "Marvel Knights",
+ "marvel magazine group": "Marvel Magazine Group",
+ "marvel mangaverse": "Marvel Mangaverse",
+ "marvel monsters group": "Marvel Monsters Group",
+ "marvel music": "Marvel Music",
+ "marvel next": "Marvel Next",
+ "marvel noir": "Marvel Noir",
+ "marvel press": "Marvel Press",
+ "marvel uk": "Marvel UK",
+ "marvel unlimited": "Marvel Unlimited",
+ "max": "MAX",
+ "mc2": "Marvel Comics 2",
+ "new universe": "New Universe",
+ "non-pareil publishing corp.": "Non-Pareil Publishing Corp.",
+ "paramount comics": "Paramount Comics",
+ "power comics": "Power Comics",
+ "razorline": "Razorline",
+ "star comics": "Star Comics",
+ "timely comics": "Timely Comics",
+ "timely": "Timely Comics",
+ "tsunami": "Tsunami",
+ "ultimate comics": "Ultimate Comics",
+ "ultimate marvel": "Ultimate Marvel",
+ "vital publications, inc.": "Vital Publications, Inc."
+})
+
+
+DC_Comics = ImprintDict("DC Comics", {
+ "dc comics":"",
+ "dc_comics":"",
+ "dc":"",
+ "dccomics":"",
+ "!mpact Comics": "Impact Comics",
+ "all star dc": "All-Star",
+ "all star": "All-Star",
+ "all-star dc": "All-Star",
+ "all-star": "All-Star",
+ "america's best comics": "America's Best Comics",
+ "black label": "DC Black Label",
+ "cliffhanger": "Cliffhanger",
+ "cmx manga": "CMX Manga",
+ "dc black label": "DC Black Label",
+ "dc focus": "DC Focus",
+ "dc ink": "DC Ink",
+ "dc zoom": "DC Zoom",
+ "earth m": "Earth M",
+ "earth one": "Earth One",
+ "earth-m": "Earth M",
+ "elseworlds": "Elseworlds",
+ "EO": "Earth One",
+ "first wave": "First Wave",
+ "focus": "DC Focus",
+ "helix": "Helix",
+ "homage comics": "Homage Comics",
+ "impact comics": "Impact Comics",
+ "Impact! Comics": "Impact Comics",
+ "johnny dc": "DC Entertainment",
+ "johnny dc": "Johnny DC",
+ "mad": "Mad",
+ "minx": "Minx",
+ "paradox press": "Paradox Press",
+ "piranha press": "Piranha Press",
+ "sandman universe": "Sandman Universe",
+ "tangent comics": "Tangent Comics",
+ "tsr": "TSR",
+ "vertigo": "Vertigo",
+ "wildstorm productions": "WildStorm Productions",
+ "wildstorm signature": "WildStorm Productions",
+ "wildstorm": "WildStorm Productions",
+ "wonder comics": "Wonder Comics",
+ "young animal": "Young Animal",
+ "zuda comics": "Zuda Comics",
+ "zuda": "Zuda Comics",
+})
+
+publishers = [Marvel, DC_Comics]
diff --git a/comictaggerlib/autotagstartwindow.py b/comictaggerlib/autotagstartwindow.py
index 653c369..97ac301 100644
--- a/comictaggerlib/autotagstartwindow.py
+++ b/comictaggerlib/autotagstartwindow.py
@@ -45,6 +45,7 @@ class AutoTagStartWindow(QtWidgets.QDialog):
QtCore.Qt.Unchecked)
self.cbxRemoveAfterSuccess.setCheckState(QtCore.Qt.Unchecked)
self.cbxSpecifySearchString.setCheckState(QtCore.Qt.Unchecked)
+ self.cbxAutoImprint.setCheckState(QtCore.Qt.Unchecked)
self.leNameLengthMatchTolerance.setText(
str(self.settings.id_length_delta_thresh))
self.leSearchString.setEnabled(False)
@@ -62,6 +63,9 @@ class AutoTagStartWindow(QtWidgets.QDialog):
self.cbxRemoveAfterSuccess.setCheckState(QtCore.Qt.Checked)
if self.settings.wait_and_retry_on_rate_limit:
self.cbxWaitForRateLimit.setCheckState(QtCore.Qt.Checked)
+ if self.settings.auto_imprint:
+ self.cbxAutoImprint.setCheckState(QtCore.Qt.Checked)
+
nlmtTip = (
""" The Name Length Match Tolerance is for eliminating automatic
diff --git a/comictaggerlib/cli.py b/comictaggerlib/cli.py
index 688907d..0298de6 100644
--- a/comictaggerlib/cli.py
+++ b/comictaggerlib/cli.py
@@ -132,6 +132,10 @@ def display_match_set_for_choice(label, match_set, opts, settings):
cv_md = actual_issue_data_fetch(
match_set.matches[int(i)], settings, opts)
md.overlay(cv_md)
+
+ if settings.auto_imprint:
+ md.fixPublisher()
+
actual_metadata_save(ca, opts, md)
@@ -219,6 +223,8 @@ def process_file_cli(filename, opts, settings, match_results):
batch_mode = len(opts.file_list) > 1
+ settings.auto_imprint = opts.auto_imprint
+
ca = ComicArchive(
filename,
settings.rar_exe_path,
@@ -473,6 +479,9 @@ def process_file_cli(filename, opts, settings, match_results):
md.overlay(cv_md)
+ if settings.auto_imprint:
+ md.fixPublisher()
+
# ok, done building our metadata. time to save
if not actual_metadata_save(ca, opts, md):
match_results.writeFailures.append(filename)
diff --git a/comictaggerlib/options.py b/comictaggerlib/options.py
index a4e055b..3125e31 100644
--- a/comictaggerlib/options.py
+++ b/comictaggerlib/options.py
@@ -112,6 +112,7 @@ For more help visit the wiki at: http://code.google.com/p/comictagger/
self.filename = None
self.verbose = False
self.terse = False
+ self.auto_imprint = False
self.metadata = None
self.print_tags = False
self.copy_tags = False
@@ -290,6 +291,8 @@ For more help visit the wiki at: http://code.google.com/p/comictagger/
self.delete_tags = True
if o in ("-i", "--interactive"):
self.interactive = True
+ if o in ("-a", "--auto-imprint"):
+ self.auto_imprint = True
if o in ("-c", "--copy"):
self.copy_tags = True
if a.lower() == "cr":
diff --git a/comictaggerlib/settings.py b/comictaggerlib/settings.py
index 3879445..0a98def 100644
--- a/comictaggerlib/settings.py
+++ b/comictaggerlib/settings.py
@@ -104,6 +104,7 @@ class ComicTaggerSettings:
self.clear_form_before_populating_from_cv = False
self.remove_html_tables = False
self.cv_api_key = ""
+ self.auto_imprint = False
# CBL Tranform settings
@@ -380,6 +381,8 @@ class ComicTaggerSettings:
if self.config.has_option('autotag', 'wait_and_retry_on_rate_limit'):
self.wait_and_retry_on_rate_limit = self.config.getboolean(
'autotag', 'wait_and_retry_on_rate_limit')
+ if self.config.has_option('autotag', 'auto_imprint'):
+ self.auto_imprint = self.config.getboolean('autotag', 'auto_imprint')
def save(self):
@@ -543,6 +546,7 @@ class ComicTaggerSettings:
'autotag',
'wait_and_retry_on_rate_limit',
self.wait_and_retry_on_rate_limit)
+ self.config.set('autotag', 'auto_imprint', self.auto_imprint)
with codecs.open(self.settings_file, 'wb', 'utf8') as configfile:
self.config.write(configfile)
diff --git a/comictaggerlib/taggerwindow.py b/comictaggerlib/taggerwindow.py
index 5b2bfab..ce1068a 100644
--- a/comictaggerlib/taggerwindow.py
+++ b/comictaggerlib/taggerwindow.py
@@ -247,6 +247,8 @@ class TaggerWindow(QtWidgets.QMainWindow):
self.fileSelectionList.addAppAction(self.actionRemoveAuto)
self.fileSelectionList.addAppAction(self.actionRepackage)
+ self.btnAutoImprint.clicked.connect(self.autoImprint)
+
if len(file_list) != 0:
self.fileSelectionList.addPathList(file_list)
@@ -1848,6 +1850,9 @@ class TaggerWindow(QtWidgets.QMainWindow):
if cv_md is not None:
md.overlay(cv_md)
+ if self.settings.auto_imprint:
+ md.fixPublisher()
+
if not ca.writeMetadata(md, self.save_data_style):
match_results.writeFailures.append(ca.path)
self.autoTagLog("Save failed ;-(\n")
@@ -2199,3 +2204,8 @@ class TaggerWindow(QtWidgets.QMainWindow):
# self.show()
self.setWindowFlags(flags)
self.show()
+
+ def autoImprint(self):
+ self.formToMetadata()
+ self.metadata.fixPublisher()
+ self.metadataToForm()
diff --git a/comictaggerlib/ui/autotagstartwindow.ui b/comictaggerlib/ui/autotagstartwindow.ui
index dc863d0..04d80a5 100644
--- a/comictaggerlib/ui/autotagstartwindow.ui
+++ b/comictaggerlib/ui/autotagstartwindow.ui
@@ -44,7 +44,7 @@
-
-
-
+
-
@@ -129,6 +129,16 @@
+ -
+
+
+ <html><head/><body><p>Checks the publisher against a list of imprints.</p></body></html>
+
+
+ Auto Imprint
+
+
+
-
@@ -145,7 +155,7 @@
- -
+
-
@@ -155,7 +165,7 @@
- -
+
-
diff --git a/comictaggerlib/ui/taggerwindow.ui b/comictaggerlib/ui/taggerwindow.ui
index d5fcc3b..d4b9e79 100644
--- a/comictaggerlib/ui/taggerwindow.ui
+++ b/comictaggerlib/ui/taggerwindow.ui
@@ -512,6 +512,16 @@
+ -
+
+
+ <html><head/><body><p>Checks the publisher against a list of imprints.</p></body></html>
+
+
+ Auto Imprint
+
+
+
-