I have a version of the 'connected_device_name' built-in template function that returns the configured device name. I also found the problem causing the incorrect value (a value) displayed in the selected book when the device disconnects. There is a race condition in gui2.device.
FYI: here is the source of the function.
Code:
def evaluate(self, formatter, kwargs, mi, locals, storage_location):
if hasattr(mi, '_proxy_metadata'):
# Do the import here so that we don't entangle the GUI when using
# command line functions
from calibre.gui2.ui import get_gui
info = get_gui().device_manager.get_current_device_information()
if info is None:
return ''
try:
if storage_location not in {'main', 'carda', 'cardb'}:
raise ValueError(
_('connected_device_name: invalid storage location "{0}"'
.format(storage_location)))
info = info['info'][4]
if storage_location not in info:
return ''
return info[storage_location]['device_name']
except:
traceback.print_exc()
raise
return _('This function can be used only in the GUI')