From 07282e7a799c62a2f7467c020ff85a3869938c5e Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 9 May 2010 16:35:45 -0600 Subject: [PATCH 1/3] Update on device and in library columns when sending books to device --- src/calibre/gui2/device.py | 74 ++++++++++++++++++++++--------------- src/calibre/gui2/library.py | 5 ++- src/calibre/gui2/ui.py | 5 +-- 3 files changed, 48 insertions(+), 36 deletions(-) diff --git a/src/calibre/gui2/device.py b/src/calibre/gui2/device.py index 855d05ff58..b051b2e937 100644 --- a/src/calibre/gui2/device.py +++ b/src/calibre/gui2/device.py @@ -971,13 +971,29 @@ class DeviceGUI(object): self.upload_booklists() + books_to_be_deleted = [] + if memory and memory[1]: + books_to_be_deleted = memory[1] + self.library_view.model().delete_books_by_id(books_to_be_deleted) + + self.set_books_in_library(self.booklists(), + reset=bool(books_to_be_deleted)) + view = self.card_a_view if on_card == 'carda' else self.card_b_view if on_card == 'cardb' else self.memory_view view.model().resort(reset=False) view.model().research() for f in files: getattr(f, 'close', lambda : True)() - if memory and memory[1]: - self.library_view.model().delete_books_by_id(memory[1]) + + self.book_on_device(None, reset=True) + if metadata: + changed = set([]) + for mi in metadata: + id_ = getattr(mi, 'application_id', None) + if id_ is not None: + changed.add(id_) + if changed: + self.library_view.model().refresh_ids(list(changed)) def book_on_device(self, index, format=None, reset=False): loc = [None, None, None] @@ -1013,34 +1029,32 @@ class DeviceGUI(object): break return loc - def set_books_in_library(self, booklist, reset = False): + def set_books_in_library(self, booklists, reset=False): if reset: - self.book_in_library_cache = None - return - - # First build a self.book_in_library_cache of the library, so the search isn't On**2 - self.book_in_library_cache = {} - for id, title in self.library_view.model().db.all_titles(): - title = re.sub('(?u)\W|[_]', '', title.lower()) - if title not in self.book_in_library_cache: - self.book_in_library_cache[title] = {'authors':set(), 'db_ids':set()} - au = self.library_view.model().db.authors(id, index_is_id=True) - authors = au.lower() if au else '' - authors = re.sub('(?u)\W|[_]', '', authors) - self.book_in_library_cache[title]['authors'].add(authors) - self.book_in_library_cache[title]['db_ids'].add(id) + # First build a self.book_in_library_cache of the library, so the search isn't On**2 + self.book_in_library_cache = {} + for id, title in self.library_view.model().db.all_titles(): + title = re.sub('(?u)\W|[_]', '', title.lower()) + if title not in self.book_in_library_cache: + self.book_in_library_cache[title] = {'authors':set(), 'db_ids':set()} + au = self.library_view.model().db.authors(id, index_is_id=True) + authors = au.lower() if au else '' + authors = re.sub('(?u)\W|[_]', '', authors) + self.book_in_library_cache[title]['authors'].add(authors) + self.book_in_library_cache[title]['db_ids'].add(id) # Now iterate through all the books on the device, setting the in_library field - for book in booklist: - book_title = book.title.lower() if book.title else '' - book_title = re.sub('(?u)\W|[_]', '', book_title) - book.in_library = False - d = self.book_in_library_cache.get(book_title, None) - if d is not None: - if book.db_id in d['db_ids']: - book.in_library = True - continue - book_authors = authors_to_string(book.authors).lower() if book.authors else '' - book_authors = re.sub('(?u)\W|[_]', '', book_authors) - if book_authors in d['authors']: - book.in_library = True + for booklist in booklists: + for book in booklist: + book_title = book.title.lower() if book.title else '' + book_title = re.sub('(?u)\W|[_]', '', book_title) + book.in_library = False + d = self.book_in_library_cache.get(book_title, None) + if d is not None: + if book.db_id in d['db_ids']: + book.in_library = True + continue + book_authors = authors_to_string(book.authors).lower() if book.authors else '' + book_authors = re.sub('(?u)\W|[_]', '', book_authors) + if book_authors in d['authors']: + book.in_library = True diff --git a/src/calibre/gui2/library.py b/src/calibre/gui2/library.py index 75b1d672cd..6b02ef6843 100644 --- a/src/calibre/gui2/library.py +++ b/src/calibre/gui2/library.py @@ -390,8 +390,8 @@ class BooksModel(QAbstractTableModel): if row == current_row: self.emit(SIGNAL('new_bookdisplay_data(PyQt_PyObject)'), self.get_book_display_info(row)) - self.emit(SIGNAL('dataChanged(QModelIndex,QModelIndex)'), - self.index(row, 0), self.index(row, self.columnCount(QModelIndex())-1)) + self.dataChanged.emit(self.index(row, 0), self.index(row, + self.columnCount(QModelIndex())-1)) def close(self): self.db.close() @@ -724,6 +724,7 @@ class BooksModel(QAbstractTableModel): img = self.default_image return img + def build_data_convertors(self): def authors(r, idx=-1): au = self.db.data[r][idx] diff --git a/src/calibre/gui2/ui.py b/src/calibre/gui2/ui.py index e97665909f..bc03f0c025 100644 --- a/src/calibre/gui2/ui.py +++ b/src/calibre/gui2/ui.py @@ -992,16 +992,13 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI): else: self.device_job_exception(job) return - self.set_books_in_library(None, reset=True) + self.set_books_in_library(job.result, reset=True) mainlist, cardalist, cardblist = job.result self.memory_view.set_database(mainlist) - self.set_books_in_library(mainlist) self.memory_view.set_editable(self.device_manager.device.CAN_SET_METADATA) self.card_a_view.set_database(cardalist) - self.set_books_in_library(cardalist) self.card_a_view.set_editable(self.device_manager.device.CAN_SET_METADATA) self.card_b_view.set_database(cardblist) - self.set_books_in_library(cardblist) self.card_b_view.set_editable(self.device_manager.device.CAN_SET_METADATA) for view in (self.memory_view, self.card_a_view, self.card_b_view): view.sortByColumn(3, Qt.DescendingOrder) From 973ed28a3727f2dfaa662f9af8fa7e14a657624f Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 9 May 2010 16:53:35 -0600 Subject: [PATCH 2/3] Move on device column to ne second column by default --- src/calibre/gui2/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/calibre/gui2/__init__.py b/src/calibre/gui2/__init__.py index 1eff46aca1..5f0cf2e1ae 100644 --- a/src/calibre/gui2/__init__.py +++ b/src/calibre/gui2/__init__.py @@ -24,8 +24,8 @@ gprefs = JSONConfig('gui') NONE = QVariant() #: Null value to return from the data function of item models UNDEFINED_QDATE = QDate(UNDEFINED_DATE) -ALL_COLUMNS = ['title', 'authors', 'size', 'timestamp', 'rating', 'publisher', - 'tags', 'series', 'pubdate', 'ondevice'] +ALL_COLUMNS = ['title', 'ondevice', 'authors', 'size', 'timestamp', 'rating', 'publisher', + 'tags', 'series', 'pubdate'] def _config(): c = Config('gui', 'preferences for the calibre GUI') From 580b5538378bcdde4b050b11719dea13f45453a1 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 9 May 2010 17:56:12 -0600 Subject: [PATCH 3/3] version 0.6.92 --- src/calibre/constants.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/calibre/constants.py b/src/calibre/constants.py index ad34e8bc6f..2617603e25 100644 --- a/src/calibre/constants.py +++ b/src/calibre/constants.py @@ -2,7 +2,7 @@ __license__ = 'GPL v3' __copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net' __docformat__ = 'restructuredtext en' __appname__ = 'calibre' -__version__ = '0.6.91' +__version__ = '0.6.92' __author__ = "Kovid Goyal " import re