Skip to content

Commit

Permalink
fix(adb): fix initial value of daemon device observer
Browse files Browse the repository at this point in the history
  • Loading branch information
yume-chan committed Jan 12, 2025
1 parent 6ebb975 commit 01f812e
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 9 deletions.
4 changes: 2 additions & 2 deletions libraries/adb-daemon-webusb/src/manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ export class AdbDaemonWebUsbDeviceManager {

trackDevices(
options: AdbDaemonWebUsbDeviceManager.RequestDeviceOptions = {},
): AdbDaemonWebUsbDeviceObserver {
return new AdbDaemonWebUsbDeviceObserver(this.#usbManager, options);
): Promise<AdbDaemonWebUsbDeviceObserver> {
return AdbDaemonWebUsbDeviceObserver.create(this.#usbManager, options);
}
}
30 changes: 23 additions & 7 deletions libraries/adb-daemon-webusb/src/observer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,14 @@ import { matchFilters } from "./utils.js";
export class AdbDaemonWebUsbDeviceObserver
implements DeviceObserver<AdbDaemonWebUsbDevice>
{
static async create(
usb: USB,
options: AdbDaemonWebUsbDeviceManager.RequestDeviceOptions = {},
) {
const devices = await usb.getDevices();
return new AdbDaemonWebUsbDeviceObserver(usb, devices, options);
}

#filters: (USBDeviceFilter & UsbInterfaceFilter)[];
#exclusionFilters?: USBDeviceFilter[] | undefined;
#usbManager: USB;
Expand All @@ -33,31 +41,39 @@ export class AdbDaemonWebUsbDeviceObserver

constructor(
usb: USB,
initial: USBDevice[],
options: AdbDaemonWebUsbDeviceManager.RequestDeviceOptions = {},
) {
this.#filters = mergeDefaultAdbInterfaceFilter(options.filters);
this.#exclusionFilters = options.exclusionFilters;
this.#usbManager = usb;
this.current = initial
.map((device) => this.#convertDevice(device))
.filter((device) => !!device);

this.#usbManager.addEventListener("connect", this.#handleConnect);
this.#usbManager.addEventListener("disconnect", this.#handleDisconnect);
}

#handleConnect = (e: USBConnectionEvent) => {
#convertDevice(device: USBDevice): AdbDaemonWebUsbDevice | undefined {
const interface_ = matchFilters(
e.device,
device,
this.#filters,
this.#exclusionFilters,
);
if (!interface_) {
return undefined;
}

return new AdbDaemonWebUsbDevice(device, interface_, this.#usbManager);
}

#handleConnect = (e: USBConnectionEvent) => {
const device = this.#convertDevice(e.device);
if (!device) {
return;
}

const device = new AdbDaemonWebUsbDevice(
e.device,
interface_,
this.#usbManager,
);
this.#onDeviceAdd.fire([device]);
this.current.push(device);
this.#onListChange.fire(this.current);
Expand Down

0 comments on commit 01f812e

Please sign in to comment.