From 3b28deb26e10bcf2910cd20b7ef062ad7531974e Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 8 Feb 2010 20:49:49 -0700 Subject: [PATCH] Allow automatic series increment algorithm to be tweaked by editing the config file tweaks.py --- resources/default_tweaks.py | 18 ++++++++++++++++++ src/calibre/gui2/dialogs/metadata_single.py | 12 ++++++++---- src/calibre/gui2/library.py | 8 +++++--- src/calibre/utils/config.py | 20 +++++++++++++++++++- 4 files changed, 50 insertions(+), 8 deletions(-) create mode 100644 resources/default_tweaks.py diff --git a/resources/default_tweaks.py b/resources/default_tweaks.py new file mode 100644 index 0000000000..d9ce18ddc0 --- /dev/null +++ b/resources/default_tweaks.py @@ -0,0 +1,18 @@ +#!/usr/bin/env python +# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai +__license__ = 'GPL v3' +__copyright__ = '2010, Kovid Goyal ' +__docformat__ = 'restructuredtext en' + +''' +Contains various tweaks that affect calibre behavior. Only edit this file if +you know what you are dong. If you delete this file, it will be recreated from +defaults. +''' + + +# The algorithm used to assign a new book in an existing series a series number. +# Possible values are: +# next - Next available number +# const - Assign the number 1 always +series_index_auto_increment = 'next' diff --git a/src/calibre/gui2/dialogs/metadata_single.py b/src/calibre/gui2/dialogs/metadata_single.py index 0d735b82e4..212445cba3 100644 --- a/src/calibre/gui2/dialogs/metadata_single.py +++ b/src/calibre/gui2/dialogs/metadata_single.py @@ -28,7 +28,7 @@ from calibre.ebooks.metadata import authors_to_sort_string, string_to_authors, \ from calibre.ebooks.metadata.library_thing import cover_from_isbn from calibre import islinux from calibre.ebooks.metadata.meta import get_metadata -from calibre.utils.config import prefs +from calibre.utils.config import prefs, tweaks from calibre.customize.ui import run_plugins_on_import, get_isbndb_key from calibre.gui2.dialogs.config.social import SocialMetadata @@ -399,6 +399,7 @@ class MetadataSingleDialog(ResizableDialog, Ui_MetadataSingleDialog): if not pm.isNull(): self.cover.setPixmap(pm) self.cover_data = cover + self.original_series_name = unicode(self.series.text()).strip() def validate_isbn(self, isbn): isbn = unicode(isbn).strip() @@ -610,10 +611,13 @@ class MetadataSingleDialog(ResizableDialog, Ui_MetadataSingleDialog): def increment_series_index(self): if self.db is not None: try: - series = unicode(self.series.text()) - if series: - ns = self.db.get_next_series_num_for(series) + series = unicode(self.series.text()).strip() + if series and series != self.original_series_name: + ns = 1 + if tweaks['series_index_auto_increment'] == 'next': + ns = self.db.get_next_series_num_for(series) self.series_index.setValue(ns) + self.original_series_name = series except: traceback.print_exc() diff --git a/src/calibre/gui2/library.py b/src/calibre/gui2/library.py index 6e9b9b192f..85a1cd805c 100644 --- a/src/calibre/gui2/library.py +++ b/src/calibre/gui2/library.py @@ -24,6 +24,7 @@ from calibre.gui2.widgets import EnLineEdit, TagsLineEdit from calibre.utils.search_query_parser import SearchQueryParser from calibre.ebooks.metadata.meta import set_metadata as _set_metadata from calibre.ebooks.metadata import string_to_authors, fmt_sidx +from calibre.utils.config import tweaks class LibraryDelegate(QItemDelegate): COLOR = QColor("blue") @@ -660,9 +661,10 @@ class BooksModel(QAbstractTableModel): self.db.set_series_index(id, float(match.group(1))) val = pat.sub('', val).strip() elif val: - ni = self.db.get_next_series_num_for(val) - if ni != 1: - self.db.set_series_index(id, ni) + if tweaks['series_index_auto_increment'] == 'next': + ni = self.db.get_next_series_num_for(val) + if ni != 1: + self.db.set_series_index(id, ni) if val: self.db.set_series(id, val) elif column == 'timestamp': diff --git a/src/calibre/utils/config.py b/src/calibre/utils/config.py index 22e31c3005..8bc0039520 100644 --- a/src/calibre/utils/config.py +++ b/src/calibre/utils/config.py @@ -6,7 +6,7 @@ __docformat__ = 'restructuredtext en' ''' Manage application-wide preferences. ''' -import os, re, cPickle, textwrap, traceback, plistlib, json +import os, re, cPickle, textwrap, traceback, plistlib, json, shutil from copy import deepcopy from functools import partial from optparse import OptionParser as _OptionParser @@ -676,6 +676,24 @@ def _prefs(): prefs = ConfigProxy(_prefs()) +# Read tweaks +def read_tweaks(): + tweaks_file = os.path.join(config_dir, 'tweaks.py') + if not os.path.exists(tweaks_file): + shutil.copyfile(P('default_tweaks.py'), tweaks_file) + l, g = {}, {} + try: + exec open(tweaks_file, 'rb') in g, l + except: + print 'Failed to load custom tweaks file' + traceback.print_exc() + dl, dg = {}, {} + exec P('default_tweaks.py', data=True) in dg, dl + dl.update(l) + return dl + +tweaks = read_tweaks() + def migrate(): if hasattr(os, 'geteuid') and os.geteuid() == 0: return