Default implementation of Model metadata for USBMS devices

This commit is contained in:
Kovid Goyal 2025-02-26 19:51:27 +05:30
parent ef9353d7af
commit a879c947e4
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -21,7 +21,7 @@ from itertools import repeat
from calibre import prints
from calibre.constants import is_debugging, isfreebsd, islinux, ismacos, iswindows
from calibre.devices.errors import DeviceError
from calibre.devices.interface import DevicePlugin
from calibre.devices.interface import DevicePlugin, ModelMetadata
from calibre.devices.usbms.deviceconfig import DeviceConfig
from calibre.utils.filenames import ascii_filename as sanitize
from polyglot.builtins import iteritems, string_or_bytes
@ -125,6 +125,44 @@ class Device(DeviceConfig, DevicePlugin):
#: Put news in its own folder
NEWS_IN_FOLDER = True
@classmethod
def model_metadata(cls) -> tuple[ModelMetadata, ...]:
def get_representative_ids() -> tuple[int, int, int]:
vid = pid = bcd = 0
if isinstance(cls.VENDOR_ID, dict):
for vid, pid_map in cls.VENDOR_ID.items():
for pid, bcds in pid_map.items():
if isinstance(bcds, int):
bcds = (bcds,)
for bcd in bcds:
if bcd is None:
bcd = 0
return vid, pid, bcd
elif isinstance(cls.VENDOR_ID, (list, tuple)):
vid = cls.VENDOR_ID[-1]
else:
vid = cls.VENDOR_ID or 0
if isinstance(cls.PRODUCT_ID, (list, tuple)):
pid = cls.PRODUCT_ID[-1]
else:
pid = cls.PRODUCT_ID or 0
if isinstance(cls.BCD, (list, tuple)):
bcd = cls.BCD[-1]
else:
bcd = cls.BCD or 0
return vid, pid, bcd
vid, pid, bcd = get_representative_ids()
model_name = cls.get_gui_name()
parts = model_name.split(' ', 1)
manufacturer = ''
if len(parts) > 1:
manufacturer, model_name = parts
else:
manufacturer = _('Miscellaneous')
return (
ModelMetadata(manufacturer, model_name, vid, pid, bcd, cls),
)
def reset(self, key='-1', log_packets=False, report_progress=None,
detected_device=None):
self._main_prefix = self._card_a_prefix = self._card_b_prefix = None