diff --git a/src/calibre/devices/interface.py b/src/calibre/devices/interface.py index 1336e3c782..7229fc3329 100644 --- a/src/calibre/devices/interface.py +++ b/src/calibre/devices/interface.py @@ -597,6 +597,7 @@ class DevicePlugin(Plugin): ''' device_prefs.set_overrides() + # A driver should implement at most one of the set_library_info methods def set_library_info(self, library_name, library_uuid, field_metadata): ''' Implement this method if you want information about the current calibre @@ -605,6 +606,15 @@ class DevicePlugin(Plugin): ''' pass + def set_library_info_extended(self, library_name, library_uuid, field_metadata, other_info): + ''' + Implement this method if you want information about the current calibre + library. This method is called at startup and when the calibre library + changes while connected. The fourth parameter of this method is a dict + of other information, currently containing only the identifier patterns + ''' + pass + # Dynamic control interface. # The following methods are probably called on the GUI thread. Any driver # that implements these methods must take pains to be thread safe, because diff --git a/src/calibre/devices/smart_device_app/driver.py b/src/calibre/devices/smart_device_app/driver.py index 6bf0504d64..6b8ddd45b8 100644 --- a/src/calibre/devices/smart_device_app/driver.py +++ b/src/calibre/devices/smart_device_app/driver.py @@ -1563,13 +1563,14 @@ class SMART_DEVICE_APP(DeviceConfig, DevicePlugin): self.plugboard_func = pb_func @synchronous('sync_lock') - def set_library_info(self, library_name, library_uuid, field_metadata): + def set_library_info_extended(self, library_name, library_uuid, field_metadata, other_info): self._debug(library_name, library_uuid) if self.can_accept_library_info: self._call_client('SET_LIBRARY_INFO', {'libraryName' : library_name, 'libraryUuid': library_uuid, - 'fieldMetadata': field_metadata.all_metadata()}, + 'fieldMetadata': field_metadata.all_metadata(), + 'otherInfo': other_info}, print_debug_info=True) @synchronous('sync_lock') diff --git a/src/calibre/gui2/device.py b/src/calibre/gui2/device.py index 6de4622126..59172554b9 100644 --- a/src/calibre/gui2/device.py +++ b/src/calibre/gui2/device.py @@ -477,8 +477,15 @@ class DeviceManager(Thread): # {{{ def _set_library_information(self, library_name, library_uuid, field_metadata): '''Give the device the current library information''' + # Try both the new and the old API. This helps with device drivers that + # are user-installed plugins built around the old Interface class self.device.set_library_info(library_name, library_uuid, field_metadata) + other_info = {} + from calibre.ebooks.metadata.sources.prefs import msprefs + other_info['id_link_rules'] = msprefs.get('id_link_rules', {}) + self.device.set_library_info_extended(library_name, library_uuid, field_metadata, other_info) + def set_library_information(self, done, library_name, library_uuid, field_metadata, add_as_step_to_job=None): '''Give the device the current library information'''