diff --git a/src/calibre/gui2/library.py b/src/calibre/gui2/library.py
index c298147497..525fd2aaa1 100644
--- a/src/calibre/gui2/library.py
+++ b/src/calibre/gui2/library.py
@@ -168,6 +168,11 @@ class BooksModel(QAbstractTableModel):
def search_tokens(self, text):
return text_to_tokens(text)
+
+ def books_added(self, num):
+ if num > 0:
+ self.beginInsertRows(QModelIndex(), 0, num-1)
+ self.endInsertRows()
def search(self, text, refinement, reset=True):
tokens, OR = self.search_tokens(text)
diff --git a/src/calibre/gui2/main.py b/src/calibre/gui2/main.py
index 34f720fce9..c5fb6ba86d 100644
--- a/src/calibre/gui2/main.py
+++ b/src/calibre/gui2/main.py
@@ -529,16 +529,18 @@ in which you want to store your books files. Any existing books will be automati
paths[i] = path
else:
formats[i] = 'zip'
- duplicates = model.add_books(paths, formats, metadata)
+ duplicates, number_added = model.add_books(paths, formats, metadata)
if duplicates:
files = _('
Books with the same title as the following already exist in the database. Add them anyway?
')
for mi in duplicates[2]:
files += '- '+mi.title+'
\n'
d = WarningDialog(_('Duplicates found!'), _('Duplicates found!'), files+'
', parent=self)
if d.exec_() == QDialog.Accepted:
- model.add_books(*duplicates, **dict(add_duplicates=True))
- self.library_view.sortByColumn(3, Qt.DescendingOrder)
- model.research()
+ num = model.add_books(*duplicates, **dict(add_duplicates=True))[1]
+ number_added += num
+ #self.library_view.sortByColumn(3, Qt.DescendingOrder)
+ #model.research()
+ model.books_added(number_added)
else:
self.upload_books(paths, names, infos, on_card=on_card)
diff --git a/src/calibre/library/database2.py b/src/calibre/library/database2.py
index 2fba3118da..3e040988de 100644
--- a/src/calibre/library/database2.py
+++ b/src/calibre/library/database2.py
@@ -48,6 +48,7 @@ class CoverCache(QThread):
self.load_queue_lock = QReadWriteLock(QReadWriteLock.Recursive)
self.cache = {}
self.cache_lock = QReadWriteLock()
+ self.id_map_stale = True
self.keep_running = True
def build_id_map(self):
@@ -61,6 +62,7 @@ class CoverCache(QThread):
except:
continue
self.id_map_lock.unlock()
+ self.id_map_stale = False
def set_cache(self, ids):
@@ -80,9 +82,9 @@ class CoverCache(QThread):
def run(self):
while self.keep_running:
- if self.id_map is None:
+ if self.id_map is None or self.id_map_stale:
self.build_id_map()
- while True:
+ while True: # Load images from the load queue
self.load_queue_lock.lockForWrite()
try:
id = self.load_queue.popleft()
@@ -102,6 +104,8 @@ class CoverCache(QThread):
self.id_map_lock.lockForRead()
if id in self.id_map.keys():
path = self.id_map[id]
+ else:
+ self.id_map_stale = True
self.id_map_lock.unlock()
if path and os.access(path, os.R_OK):
try:
@@ -215,6 +219,15 @@ class ResultCache(object):
self._data[id] = conn.execute('SELECT * from meta WHERE id=?', (id,)).fetchone()
return map(self.row, ids)
+ def books_added(self, ids, conn):
+ if not ids:
+ return
+ self._data.extend(repeat(None, max(ids)-len(self._data)+2))
+ for id in ids:
+ self._data[id] = conn.execute('SELECT * from meta WHERE id=?', (id,)).fetchone()
+ self._map[0:0] = ids
+ self._map_filtered[0:0] = ids
+
def refresh(self, db, field, ascending):
field = field.lower()
method = getattr(self, 'sort_on_' + self.METHOD_MAP[field])
@@ -867,13 +880,15 @@ class LibraryDatabase2(LibraryDatabase):
if not hasattr(path, 'read'):
stream.close()
self.conn.commit()
+ if ids:
+ self.data.books_added(ids, self.conn)
if duplicates:
paths = tuple(duplicate[0] for duplicate in duplicates)
formats = tuple(duplicate[1] for duplicate in duplicates)
metadata = tuple(duplicate[2] for duplicate in duplicates)
uris = tuple(duplicate[3] for duplicate in duplicates)
- return (paths, formats, metadata, uris)
- return None
+ return (paths, formats, metadata, uris), len(ids)
+ return None, len(ids)
def import_book(self, mi, formats):
series_index = 1 if mi.series_index is None else mi.series_index
@@ -890,6 +905,7 @@ class LibraryDatabase2(LibraryDatabase):
stream = open(path, 'rb')
self.add_format(id, ext, stream, index_is_id=True)
self.conn.commit()
+ self.data.books_added([id], self.conn)
self.notify('add', [id])
def move_library_to(self, newloc):