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

Unverified Commit f5e1a2b7 authored by Simon Chan's avatar Simon Chan
Browse files

feat(adb): include unauthorized devices in in server client mode

parent edf532ca
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -75,6 +75,7 @@ export type AdbServerDeviceSelector =

export interface AdbServerDevice {
    serial: string;
    authenticating: boolean;
    product?: string | undefined;
    model?: string | undefined;
    device?: string | undefined;
@@ -267,7 +268,7 @@ export class AdbServerClient {
            const parts = line.split(" ").filter(Boolean);
            const serial = parts[0]!;
            const status = parts[1]!;
            if (status !== "device") {
            if (status !== "device" && status !== "unauthorized") {
                continue;
            }

@@ -297,6 +298,7 @@ export class AdbServerClient {
            }
            devices.push({
                serial,
                authenticating: status === "unauthorized",
                product,
                model,
                device,
+74 −50
Original line number Diff line number Diff line
import { AdbCommandBase } from "@yume-chan/adb";

const BatteryDumpFields: Record<
    string,
    {
        type: "number" | "boolean" | "string";
        field: keyof DumpSys.Battery.Info;
    }
> = {
    "AC powered": { type: "boolean", field: "acPowered" },
    "USB powered": { type: "boolean", field: "usbPowered" },
    "Wireless powered": { type: "boolean", field: "wirelessPowered" },
    "Dock powered": { type: "boolean", field: "dockPowered" },
    "Max charging current": {
        type: "number",
        field: "maxChargingCurrent",
    },
    "Max charging voltage": {
        type: "number",
        field: "maxChargingVoltage",
    },
    "Charge counter": { type: "number", field: "chargeCounter" },
    status: { type: "number", field: "status" },
    health: { type: "number", field: "health" },
    present: { type: "boolean", field: "present" },
    level: { type: "number", field: "level" },
    scale: { type: "number", field: "scale" },
    voltage: { type: "number", field: "voltage" },
    temperature: { type: "number", field: "temperature" },
    technology: { type: "string", field: "technology" },
    current: { type: "number", field: "current" },
};

export class DumpSys extends AdbCommandBase {
    async diskStats() {
        const output = await this.adb.subprocess.spawnAndWaitLegacy([
@@ -40,74 +71,67 @@ export class DumpSys extends AdbCommandBase {
            "battery",
        ]);

        let acPowered = false;
        let usbPowered = false;
        let wirelessPowered = false;
        let level: number | undefined;
        let scale: number | undefined;
        let voltage: number | undefined;
        let current: number | undefined;
        let status: DumpSys.Battery.Status | undefined;
        let health: DumpSys.Battery.Health | undefined;
        const info: DumpSys.Battery.Info = {
            acPowered: false,
            usbPowered: false,
            wirelessPowered: false,
            dockPowered: false,
            status: DumpSys.Battery.Status.Unknown,
            health: DumpSys.Battery.Health.Unknown,
        };

        for (const line of output.split("\n")) {
            const parts = line.split(":");
            const parts = line.split(":").map((part) => part.trim());
            if (parts.length !== 2) {
                continue;
            }

            switch (parts[0]!.trim()) {
                case "AC powered":
                    acPowered = parts[1]!.trim() === "true";
                    break;
                case "USB powered":
                    usbPowered = parts[1]!.trim() === "true";
                    break;
                case "Wireless powered":
                    wirelessPowered = parts[1]!.trim() === "true";
                    break;
                case "level":
                    level = Number.parseInt(parts[1]!.trim(), 10);
                    break;
                case "scale":
                    scale = Number.parseInt(parts[1]!.trim(), 10);
                    break;
                case "voltage":
                    voltage = Number.parseInt(parts[1]!.trim(), 10);
                    break;
                case "current now":
                    current = Number.parseInt(parts[1]!.trim(), 10);
            const field = BatteryDumpFields[parts[0]!];
            if (!field) {
                continue;
            }

            switch (field.type) {
                case "boolean":
                    info[field.field] = (parts[1]!.trim() === "true") as never;
                    break;
                case "status":
                    status = Number.parseInt(
                case "number":
                    info[field.field] = Number.parseInt(
                        parts[1]!.trim(),
                        10,
                    ) as DumpSys.Battery.Status;
                    ) as never;
                    break;
                case "health":
                    health = Number.parseInt(
                        parts[1]!.trim(),
                        10,
                    ) as DumpSys.Battery.Health;
                case "string":
                    info[field.field] = parts[1]! as never;
                    break;
            }
        }

        return {
            acPowered,
            usbPowered,
            wirelessPowered,
            level,
            scale,
            voltage,
            current,
            status,
            health,
        };
        return info;
    }
}

export namespace DumpSys {
    export namespace Battery {
        export interface Info {
            acPowered: boolean;
            usbPowered: boolean;
            wirelessPowered: boolean;
            dockPowered: boolean;
            maxChargingCurrent?: number;
            maxChargingVoltage?: number;
            chargeCounter?: number;
            status: Status;
            health: Health;
            present?: boolean;
            level?: number;
            scale?: number;
            voltage?: number;
            temperature?: number;
            technology?: string;
            current?: number;
        }

        export enum Status {
            Unknown = 1,
            Charging,