diff --git a/src/calibre/gui2/dialogs/metadata_single.py b/src/calibre/gui2/dialogs/metadata_single.py index 435c0b40cd..84a394eafd 100644 --- a/src/calibre/gui2/dialogs/metadata_single.py +++ b/src/calibre/gui2/dialogs/metadata_single.py @@ -382,6 +382,7 @@ class MetadataSingleDialog(ResizableDialog, Ui_MetadataSingleDialog): self.series_index.setValue(1.0) QObject.connect(self.series, SIGNAL('currentIndexChanged(int)'), self.enable_series_index) QObject.connect(self.series, SIGNAL('editTextChanged(QString)'), self.enable_series_index) + self.series.lineEdit().editingFinished.connect(self.increment_series_index) self.show() height_of_rest = self.frameGeometry().height() - self.cover.height() @@ -597,6 +598,16 @@ class MetadataSingleDialog(ResizableDialog, Ui_MetadataSingleDialog): def enable_series_index(self, *args): self.series_index.setEnabled(True) + 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) + self.series_index.setValue(ns) + except: + traceback.print_exc() + def remove_unused_series(self): self.db.remove_unused_series() idx = qstring_to_unicode(self.series.currentText()) diff --git a/src/calibre/library/database2.py b/src/calibre/library/database2.py index 411e5ee98b..14caf07da1 100644 --- a/src/calibre/library/database2.py +++ b/src/calibre/library/database2.py @@ -10,6 +10,7 @@ import os, re, sys, shutil, cStringIO, glob, collections, textwrap, \ itertools, functools, traceback from itertools import repeat from datetime import datetime +from math import floor from PyQt4.QtCore import QThread, QReadWriteLock try: @@ -1080,7 +1081,18 @@ class LibraryDatabase2(LibraryDatabase): if tags and tag in tags.lower(): yield r[FIELD_MAP['id']] - + def get_next_series_num_for(self, series): + series_id = self.conn.get('SELECT id from series WHERE name=?', + (series,), all=False) + if series_id is None: + return 1.0 + series_num = self.conn.get( + ('SELECT MAX(series_index) FROM books WHERE id IN ' + '(SELECT book FROM books_series_link where series=?)'), + (series_id,), all=False) + if series_num is None: + return 1.0 + return floor(series_num+1) def set(self, row, column, val): '''