From 2ae0cc048d489204161f29e825485920c0604662 Mon Sep 17 00:00:00 2001
From: Charles Haley <>
Date: Mon, 27 Jun 2011 17:18:51 +0100
Subject: [PATCH 1/4] Make get_categories respect a search restriction that
finds no books. This is an incompatible change, as [] used to mean no
restriction and now it means no books. Tested with tag browser and content
server.
---
src/calibre/library/database2.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/calibre/library/database2.py b/src/calibre/library/database2.py
index 8b4ad47284..9229d44cac 100644
--- a/src/calibre/library/database2.py
+++ b/src/calibre/library/database2.py
@@ -1442,7 +1442,7 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
raise ValueError('sort ' + sort + ' not a valid value')
self.books_list_filter.change([] if not ids else ids)
- id_filter = None if not ids else frozenset(ids)
+ id_filter = None if ids is None else frozenset(ids)
tb_cats = self.field_metadata
tcategories = {}
@@ -1520,7 +1520,7 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
rating_dex = self.FIELD_MAP['rating']
tag_class = LibraryDatabase2.TCat_Tag
for book in self.data.iterall():
- if id_filter and book[id_dex] not in id_filter:
+ if id_filter is not None and book[id_dex] not in id_filter:
continue
rating = book[rating_dex]
# We kept track of all possible category field_map positions above
From 1441bce41c71f87ee9a9c2bf818a7322e79c5ffd Mon Sep 17 00:00:00 2001
From: Charles Haley <>
Date: Mon, 27 Jun 2011 17:19:31 +0100
Subject: [PATCH 2/4] Remove spacer that shouldn't be there. Add 2-criteria
sorting for series.
---
src/calibre/gui2/dialogs/quickview.py | 21 +++++++++++++++++----
src/calibre/gui2/dialogs/quickview.ui | 13 -------------
2 files changed, 17 insertions(+), 17 deletions(-)
diff --git a/src/calibre/gui2/dialogs/quickview.py b/src/calibre/gui2/dialogs/quickview.py
index 3a69368730..ec8e6b6bc7 100644
--- a/src/calibre/gui2/dialogs/quickview.py
+++ b/src/calibre/gui2/dialogs/quickview.py
@@ -18,16 +18,29 @@ class TableItem(QTableWidgetItem):
A QTableWidgetItem that sorts on a separate string and uses ICU rules
'''
- def __init__(self, val, sort):
+ def __init__(self, val, sort, idx=0):
self.sort = sort
+ self.sort_idx = idx
QTableWidgetItem.__init__(self, val)
self.setFlags(Qt.ItemIsEnabled|Qt.ItemIsSelectable)
def __ge__(self, other):
- return sort_key(self.sort) >= sort_key(other.sort)
+ l = sort_key(self.sort)
+ r = sort_key(other.sort)
+ if l > r:
+ return 1
+ if l == r:
+ return self.sort_idx >= other.sort_idx
+ return 0
def __lt__(self, other):
- return sort_key(self.sort) < sort_key(other.sort)
+ l = sort_key(self.sort)
+ r = sort_key(other.sort)
+ if l < r:
+ return 1
+ if l == r:
+ return self.sort_idx < other.sort_idx
+ return 0
class Quickview(QDialog, Ui_Quickview):
@@ -185,7 +198,7 @@ class Quickview(QDialog, Ui_Quickview):
series = mi.format_field('series')[1]
if series is None:
series = ''
- a = TableItem(series, series)
+ a = TableItem(series, mi.series, mi.series_index)
a.setToolTip(tt)
self.books_table.setItem(row, 2, a)
self.books_table.setRowHeight(row, self.books_table_row_height)
diff --git a/src/calibre/gui2/dialogs/quickview.ui b/src/calibre/gui2/dialogs/quickview.ui
index 2cdc7b7379..4b040e34d3 100644
--- a/src/calibre/gui2/dialogs/quickview.ui
+++ b/src/calibre/gui2/dialogs/quickview.ui
@@ -57,19 +57,6 @@
- -
-
-
- Qt::Vertical
-
-
-
- 0
- 0
-
-
-
-
-
-
From 2930304cd8eb549dfe6edb2a5983a461ba2c8393 Mon Sep 17 00:00:00 2001
From: Charles Haley <>
Date: Mon, 27 Jun 2011 18:00:38 +0100
Subject: [PATCH 3/4] tag_view: Fix uses of py_name that should be
category_key.
---
src/calibre/gui2/tag_browser/model.py | 4 ++--
src/calibre/gui2/tag_browser/view.py | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/calibre/gui2/tag_browser/model.py b/src/calibre/gui2/tag_browser/model.py
index 5589a1bcb4..e759783d7b 100644
--- a/src/calibre/gui2/tag_browser/model.py
+++ b/src/calibre/gui2/tag_browser/model.py
@@ -514,7 +514,7 @@ class TagsModel(QAbstractItemModel): # {{{
# }}}
for category in self.category_nodes:
- process_one_node(category, state_map.get(category.py_name, {}))
+ process_one_node(category, state_map.get(category.category_key, {}))
# Drag'n Drop {{{
def mimeTypes(self):
@@ -851,7 +851,7 @@ class TagsModel(QAbstractItemModel): # {{{
def index_for_category(self, name):
for row, category in enumerate(self.category_nodes):
- if category.py_name == name:
+ if category.category_key == name:
return self.index(row, 0, QModelIndex())
def columnCount(self, parent):
diff --git a/src/calibre/gui2/tag_browser/view.py b/src/calibre/gui2/tag_browser/view.py
index 1fad4eb9a3..c833f7fa43 100644
--- a/src/calibre/gui2/tag_browser/view.py
+++ b/src/calibre/gui2/tag_browser/view.py
@@ -129,10 +129,10 @@ class TagsView(QTreeView): # {{{
expanded_categories = []
for row, category in enumerate(self._model.category_nodes):
if self.isExpanded(self._model.index(row, 0, QModelIndex())):
- expanded_categories.append(category.py_name)
+ expanded_categories.append(category.category_key)
states = [c.tag.state for c in category.child_tags()]
names = [(c.tag.name, c.tag.category) for c in category.child_tags()]
- state_map[category.py_name] = dict(izip(names, states))
+ state_map[category.category_key] = dict(izip(names, states))
return expanded_categories, state_map
def reread_collapse_parameters(self):
From 7f1905b779ce141df4943cc954d0e01f6281a79b Mon Sep 17 00:00:00 2001
From: Charles Haley <>
Date: Mon, 27 Jun 2011 18:18:01 +0100
Subject: [PATCH 4/4] Make quickview survive changing the library.
---
src/calibre/gui2/actions/show_quickview.py | 3 +++
src/calibre/gui2/dialogs/quickview.py | 9 +++++++++
2 files changed, 12 insertions(+)
diff --git a/src/calibre/gui2/actions/show_quickview.py b/src/calibre/gui2/actions/show_quickview.py
index 78352e6da8..4f7bbc0473 100644
--- a/src/calibre/gui2/actions/show_quickview.py
+++ b/src/calibre/gui2/actions/show_quickview.py
@@ -38,3 +38,6 @@ class ShowQuickviewAction(InterfaceAction):
Quickview(self.gui, self.gui.library_view, index)
self.current_instance.show()
+ def library_changed(self, db):
+ if self.current_instance and not self.current_instance.is_closed:
+ self.current_instance.set_database(db)
diff --git a/src/calibre/gui2/dialogs/quickview.py b/src/calibre/gui2/dialogs/quickview.py
index ec8e6b6bc7..30b68a7b7d 100644
--- a/src/calibre/gui2/dialogs/quickview.py
+++ b/src/calibre/gui2/dialogs/quickview.py
@@ -108,6 +108,15 @@ class Quickview(QDialog, Ui_Quickview):
self.search_button.clicked.connect(self.do_search)
view.model().new_bookdisplay_data.connect(self.book_was_changed)
+ def set_database(self, db):
+ self.db = db
+ self.items.blockSignals(True)
+ self.books_table.blockSignals(True)
+ self.items.clear()
+ self.books_table.setRowCount(0)
+ self.books_table.blockSignals(False)
+ self.items.blockSignals(False)
+
# search button
def do_search(self):
if self.last_search is not None: