Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit 01f812ea authored by Simon Chan's avatar Simon Chan
Browse files

fix(adb): fix initial value of daemon device observer

parent 6ebb9753
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -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);
    }
}
+23 −7
Original line number Diff line number Diff line
@@ -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;
@@ -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);