From cad623aa1957a412615147deb2ec57b5ca659416 Mon Sep 17 00:00:00 2001 From: Piotr Bartman-Szwarc Date: Wed, 5 Jun 2024 09:38:18 +0200 Subject: [PATCH] q-dev: keep partial backward compatibility for auto-attachment --- qubesusbproxy/core3ext.py | 11 +++++++++-- qubesusbproxy/utils.py | 3 ++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/qubesusbproxy/core3ext.py b/qubesusbproxy/core3ext.py index 11b2166..1c29c45 100644 --- a/qubesusbproxy/core3ext.py +++ b/qubesusbproxy/core3ext.py @@ -39,11 +39,14 @@ from qubes.device_protocol import DeviceInterface from qubes.ext import utils from qubes.devices import UnrecognizedDevice + + def get_assigned_devices(devices): + yield from devices.get_assigned_devices() except ImportError: # This extension supports both the legacy and new device API. # In the case of the legacy backend, functionality is limited. from qubes.devices import DeviceInfo as LegacyDeviceInfo - import qubesusbproxy.utils + from qubesusbproxy import utils class DescriptionOverrider: @property @@ -77,6 +80,10 @@ class DeviceInterface: class UnrecognizedDevice(ValueError): pass + def get_assigned_devices(devices): + yield from devices.assignments(persistent=True) + + import qubes.devices import qubes.ext import qubes.vm.adminvm @@ -650,7 +657,7 @@ async def on_device_detach_usb(self, vm, event, device): @qubes.ext.handler('domain-start') async def on_domain_start(self, vm, _event, **_kwargs): # pylint: disable=unused-argument - for assignment in vm.devices['usb'].get_assigned_devices(): + for assignment in get_assigned_devices(vm.devices['usb']): await self.attach_and_notify( vm, assignment.device, assignment.options) diff --git a/qubesusbproxy/utils.py b/qubesusbproxy/utils.py index 939e609..da49b4f 100644 --- a/qubesusbproxy/utils.py +++ b/qubesusbproxy/utils.py @@ -57,7 +57,8 @@ def device_list_change( for front_vm in vm.app.domains: if not front_vm.is_running(): continue - for assignment in front_vm.devices[devclass].get_assigned_devices(): + for assignment in front_vm.devices[devclass].assignments( + persistent=True): if (assignment.backend_domain == vm and assignment.ident in added and assignment.ident not in attached