mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-07 10:14:46 -04:00
Don't resort when adding books to library. Fixes #1023
This commit is contained in:
parent
3502579474
commit
c66ea072e9
@ -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)
|
||||
|
@ -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 = _('<p>Books with the same title as the following already exist in the database. Add them anyway?<ul>')
|
||||
for mi in duplicates[2]:
|
||||
files += '<li>'+mi.title+'</li>\n'
|
||||
d = WarningDialog(_('Duplicates found!'), _('Duplicates found!'), files+'</ul></p>', 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)
|
||||
|
||||
|
@ -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):
|
||||
|
Loading…
x
Reference in New Issue
Block a user