From 12768864a59be5ddf477c490072fd682b1f5942a Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Fri, 24 Sep 2010 08:54:06 +0100 Subject: [PATCH] 1) fix exception in set_metadata related to composite custom columns 2) make ondevice work with add_books_from_device --- src/calibre/gui2/actions/add.py | 2 +- src/calibre/gui2/device.py | 16 +++++++++------- src/calibre/gui2/library/models.py | 3 +++ src/calibre/library/custom_columns.py | 2 ++ 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/calibre/gui2/actions/add.py b/src/calibre/gui2/actions/add.py index aa20b8bc16..e0a7b5647e 100644 --- a/src/calibre/gui2/actions/add.py +++ b/src/calibre/gui2/actions/add.py @@ -232,7 +232,7 @@ class AddAction(InterfaceAction): # metadata for this book to the device. This sets the uuid to the # correct value. Note that set_books_in_library might sync_booklists self.gui.set_books_in_library(booklists=[model.db], reset=True) - model.reset() + self.gui.refresh_ondevice() def add_books_from_device(self, view): rows = view.selectionModel().selectedRows() diff --git a/src/calibre/gui2/device.py b/src/calibre/gui2/device.py index a7e55c4619..58c5e5d9ad 100644 --- a/src/calibre/gui2/device.py +++ b/src/calibre/gui2/device.py @@ -721,14 +721,16 @@ class DeviceMixin(object): # {{{ self.device_manager.device.__class__.get_gui_name()+\ _(' detected.'), 3000) self.device_connected = device_kind - self.refresh_ondevice_info (device_connected = True, reset_only = True) + self.library_view.set_device_connected(self.device_connected) + self.refresh_ondevice (reset_only = True) else: self.device_connected = None self.status_bar.device_disconnected() if self.current_view() != self.library_view: self.book_details.reset_info() self.location_manager.update_devices() - self.refresh_ondevice_info(device_connected=False) + self.library_view.set_device_connected(self.device_connected) + self.refresh_ondevice() def info_read(self, job): ''' @@ -760,9 +762,9 @@ class DeviceMixin(object): # {{{ self.card_b_view.set_editable(self.device_manager.device.CAN_SET_METADATA) self.sync_news() self.sync_catalogs() - self.refresh_ondevice_info(device_connected = True) + self.refresh_ondevice() - def refresh_ondevice_info(self, device_connected, reset_only = False): + def refresh_ondevice(self, reset_only = False): ''' Force the library view to refresh, taking into consideration new device books information @@ -770,7 +772,7 @@ class DeviceMixin(object): # {{{ self.book_on_device(None, reset=True) if reset_only: return - self.library_view.set_device_connected(device_connected) + self.library_view.model().refresh_ondevice() # }}} @@ -803,7 +805,7 @@ class DeviceMixin(object): # {{{ self.book_on_device(None, reset=True) # We need to reset the ondevice flags in the library. Use a big hammer, # so we don't need to worry about whether some succeeded or not. - self.refresh_ondevice_info(device_connected=True, reset_only=False) + self.refresh_ondevice(reset_only=False) def dispatch_sync_event(self, dest, delete, specific): rows = self.library_view.selectionModel().selectedRows() @@ -1300,7 +1302,7 @@ class DeviceMixin(object): # {{{ if not self.set_books_in_library(self.booklists(), reset=True): self.upload_booklists() self.book_on_device(None, reset=True) - self.refresh_ondevice_info(device_connected = True) + self.refresh_ondevice() view = self.card_a_view if on_card == 'carda' else \ self.card_b_view if on_card == 'cardb' else self.memory_view diff --git a/src/calibre/gui2/library/models.py b/src/calibre/gui2/library/models.py index 9d9de358c8..640a588d29 100644 --- a/src/calibre/gui2/library/models.py +++ b/src/calibre/gui2/library/models.py @@ -120,6 +120,9 @@ class BooksModel(QAbstractTableModel): # {{{ def set_device_connected(self, is_connected): self.device_connected = is_connected + self.refresh_ondevice() + + def refresh_ondevice(self): self.db.refresh_ondevice() self.refresh() # does a resort() self.research() diff --git a/src/calibre/library/custom_columns.py b/src/calibre/library/custom_columns.py index 2d8634659b..97c8565177 100644 --- a/src/calibre/library/custom_columns.py +++ b/src/calibre/library/custom_columns.py @@ -427,6 +427,8 @@ class CustomColumns(object): data = self.custom_column_label_map[label] if num is not None: data = self.custom_column_num_map[num] + if data['datatype'] == 'composite': + return None if not data['editable']: raise ValueError('Column %r is not editable'%data['label']) table, lt = self.custom_table_names(data['num'])