From 0017903a4fb96a27ddf279c4bac530c430370ed9 Mon Sep 17 00:00:00 2001 From: "beville@gmail.com" Date: Mon, 17 Dec 2012 21:19:21 +0000 Subject: [PATCH] Got CBL transformer working git-svn-id: http://comictagger.googlecode.com/svn/trunk@270 6c5673fe-1810-88d6-992b-cd32ca31540c --- cbltransformer.py | 84 ++++++++++++++++++++++++++++++++++++++++++++++ comictagger.py | 9 +++++ comicvinetalker.py | 28 ++-------------- settingswindow.py | 6 ++-- taggerwindow.py | 5 +++ 5 files changed, 104 insertions(+), 28 deletions(-) create mode 100644 cbltransformer.py diff --git a/cbltransformer.py b/cbltransformer.py new file mode 100644 index 0000000..66c484d --- /dev/null +++ b/cbltransformer.py @@ -0,0 +1,84 @@ +""" +Class to manage modifying metadata specifically for CBL/CBI +""" + +""" +Copyright 2012 Anthony Beville + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +""" + +import os +import utils + + +class CBLTransformer: + def __init__( self, metadata, settings ): + self.metadata = metadata + self.settings = settings + + + def apply( self ): + # helper funcs + def append_to_tags_if_unique( item ): + if item.lower() not in (tag.lower() for tag in self.metadata.tags): + self.metadata.tags.append( item ) + + def add_string_list_to_tags( str_list ): + if str_list is not None and str_list != "": + items = [ s.strip() for s in str_list.split(',') ] + for item in items: + append_to_tags_if_unique( item ) + + if self.settings.assume_lone_credit_is_primary: + + # helper + def setLonePrimary( role_list ): + lone_credit = None + count = 0 + for c in self.metadata.credits: + if c['role'].lower() in role_list: + count += 1 + lone_credit = c + if count > 1: + lone_credit = None + break + if lone_credit is not None: + lone_credit['primary'] = True + return lone_credit, count + + #need to loop three times, once for 'writer', 'artist', and then 'penciler' if no artist + setLonePrimary( ['writer'] ) + c, count = setLonePrimary( ['artist'] ) + if c is None and count == 0: + c, count = setLonePrimary( ['penciler', 'penciller'] ) + if c is not None: + c['primary'] = False + self.metadata.addCredit( c['person'], 'Artist', True ) + + if self.settings.copy_characters_to_tags: + add_string_list_to_tags( self.metadata.characters ) + + if self.settings.copy_teams_to_tags: + add_string_list_to_tags( self.metadata.teams ) + + if self.settings.copy_locations_to_tags: + add_string_list_to_tags( self.metadata.locations ) + + if self.settings.copy_notes_to_tags: + append_to_tags_if_unique( self.metadata.notes) + + return self.metadata + + + diff --git a/comictagger.py b/comictagger.py index e2b4502..4763cd0 100755 --- a/comictagger.py +++ b/comictagger.py @@ -44,6 +44,7 @@ from issueidentifier import IssueIdentifier from genericmetadata import GenericMetadata from comicvinetalker import ComicVineTalker, ComicVineTalkerException from filerenamer import FileRenamer +from cbltransformer import CBLTransformer import utils import codecs @@ -70,6 +71,10 @@ def actual_issue_data_fetch( match, settings ): except ComicVineTalkerException: print "Network error while getting issue details. Save aborted" return None + + if settings.apply_cbl_transform_on_cv_import: + cv_md = CBLTransformer( cv_md, settings ).apply() + return cv_md def actual_metadata_save( ca, opts, md ): @@ -284,6 +289,10 @@ def process_file_cli( filename, opts, settings, match_results ): if has[ opts.copy_source ]: if not opts.dryrun: md = ca.readMetadata( opts.copy_source ) + + if settings.apply_cbl_transform_on_bulk_operation: + md = CBLTransformer( md, settings ).apply() + if not ca.writeMetadata( md, opts.data_style ): print "{0}: Tag copy seemed to fail!".format( filename ) else: diff --git a/comicvinetalker.py b/comicvinetalker.py index cffd5c9..af5f747 100644 --- a/comicvinetalker.py +++ b/comicvinetalker.py @@ -45,6 +45,7 @@ from comicvinecacher import ComicVineCacher from genericmetadata import GenericMetadata from issuestring import IssueString + class ComicVineTalkerException(Exception): pass @@ -226,32 +227,7 @@ class ComicVineTalker(QObject): for role in person['roles']: # can we determine 'primary' from CV?? role_name = role['role'].title() - metadata.addCredit( person['name'], role['role'].title(), False ) - - if settings.assume_lone_credit_is_primary: - def setLonePrimary( role ): - lone_credit = None - count = 0 - for c in metadata.credits: - if c['role'].lower() == role: - count += 1 - lone_credit = c - if count > 1: - lone_credit = None - break - if lone_credit is not None: - lone_credit['primary'] = True - return lone_credit, count - - #need to loop three times, once for 'writer', 'artist', and then 'penciler' if no artist - setLonePrimary( 'writer' ) - c, count = setLonePrimary( 'artist' ) - if c is None and count == 0: - c, count = setLonePrimary( 'penciler' ) - if c is not None: - c['primary'] = False - metadata.addCredit( c['person'], 'Artist', True ) - + metadata.addCredit( person['name'], role['role'].title(), False ) character_credits = issue_results['character_credits'] character_list = list() diff --git a/settingswindow.py b/settingswindow.py index 10006b9..94f88a1 100644 --- a/settingswindow.py +++ b/settingswindow.py @@ -150,8 +150,10 @@ class SettingsWindow(QtGui.QDialog): utils.addtopath(os.path.dirname(self.settings.unrar_exe_path)) if not str(self.leNameLengthDeltaThresh.text()).isdigit(): - QtGui.QMessageBox.information(self,"Settings", "The Name Length Delta Threshold must be a number!") - return + self.leNameLengthDeltaThresh.setText("0") + + if not str(self.leIssueNumPadding.text()).isdigit(): + self.leIssueNumPadding.setText("0") self.settings.id_length_delta_thresh = int(self.leNameLengthDeltaThresh.text()) self.settings.id_publisher_blacklist = str(self.tePublisherBlacklist.toPlainText()) diff --git a/taggerwindow.py b/taggerwindow.py index 3b79a57..fbda56f 100644 --- a/taggerwindow.py +++ b/taggerwindow.py @@ -44,6 +44,7 @@ from filenameparser import FileNameParser from logwindow import LogWindow from optionalmsgdialog import OptionalMessageDialog from pagelisteditor import PageListEditor +from cbltransformer import CBLTransformer import utils import ctversion @@ -871,6 +872,10 @@ class TaggerWindow( QtGui.QMainWindow): else: QtGui.QApplication.restoreOverrideCursor() if new_metadata is not None: + + if self.settings.apply_cbl_transform_on_cv_import: + new_metadata = CBLTransformer( new_metadata, self.settings ).apply() + self.metadata.overlay( new_metadata ) # Now push the new combined data into the edit controls self.metadataToForm()