Pass the new ID URL patterns to devices while maintaining compatibility with the old interface.

This commit is contained in:
Charles Haley 2016-04-16 13:38:53 +02:00
parent e5c7274ba7
commit ee942b9506
3 changed files with 20 additions and 2 deletions

View File

@ -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

View File

@ -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')

View File

@ -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'''