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

Unverified Commit d3019ce7 authored by Simon Chan's avatar Simon Chan Committed by GitHub
Browse files

feat(adb): rewrite process spawner API (#739)

parent 46e78401
Loading
Loading
Loading
Loading
+12 −9
Original line number Diff line number Diff line
@@ -135,19 +135,19 @@ createDeviceCommand("shell [args...]")
        const ref = new Ref();

        const adb = await createAdb(options);
        const shell = await adb.subprocess.shell(args);
        const shell = await adb.subprocess.noneProtocol.pty(args);

        const stdinWriter = shell.stdin.getWriter();
        const inputWriter = shell.input.getWriter();

        process.stdin.setRawMode(true);
        process.stdin.on("data", (data: Uint8Array) => {
            stdinWriter.write(data).catch((e) => {
            inputWriter.write(data).catch((e) => {
                console.error(e);
                process.exit(1);
            });
        });

        shell.stdout
        shell.output
            .pipeTo(
                new WritableStream({
                    write(chunk) {
@@ -160,11 +160,11 @@ createDeviceCommand("shell [args...]")
                process.exit(1);
            });

        shell.exit.then(
            (code) => {
        shell.exited.then(
            () => {
                // `process.stdin.on("data")` will keep the process alive,
                // so call `process.exit` explicitly.
                process.exit(code);
                process.exit(0);
            },
            (e) => {
                console.error(e);
@@ -181,12 +181,15 @@ createDeviceCommand("logcat [args...]")
    .configureHelp({ showGlobalOptions: true })
    .action(async (args: string[], options: DeviceCommandOptions) => {
        const adb = await createAdb(options);
        const logcat = await adb.subprocess.spawn(`logcat ${args.join(" ")}`);
        const logcat = await adb.subprocess.noneProtocol.spawn([
            "logcat",
            ...args,
        ]);
        // eslint-disable-next-line @typescript-eslint/no-misused-promises
        process.on("SIGINT", async () => {
            await logcat.kill();
        });
        await logcat.stdout.pipeTo(
        await logcat.output.pipeTo(
            new WritableStream({
                write: (chunk) => {
                    process.stdout.write(chunk);
+9 −2
Original line number Diff line number Diff line
@@ -2,14 +2,21 @@ import type { Adb } from "@yume-chan/adb";
import type { ScrcpyDisplay, ScrcpyEncoder } from "@yume-chan/scrcpy";
import { ScrcpyOptions1_15 } from "@yume-chan/scrcpy";

import type { AdbScrcpyClientOptions } from "../client-options.js";
import type { AdbScrcpyConnection } from "../connection.js";
import { AdbScrcpyOptions } from "../types.js";

import { createConnection, getDisplays, getEncoders } from "./impl/index.js";

export class AdbScrcpyOptions1_15 extends AdbScrcpyOptions<ScrcpyOptions1_15.Init> {
    constructor(init: ScrcpyOptions1_15.Init, version?: string) {
        super(new ScrcpyOptions1_15(init, version));
    constructor(
        init: ScrcpyOptions1_15.Init,
        clientOptions?: AdbScrcpyClientOptions,
    ) {
        super(
            new ScrcpyOptions1_15(init, clientOptions?.version),
            clientOptions?.spawner,
        );
    }

    override getEncoders(adb: Adb, path: string): Promise<ScrcpyEncoder[]> {
+9 −2
Original line number Diff line number Diff line
@@ -7,12 +7,19 @@ import {
    getDisplays,
    getEncoders,
} from "./1_15/impl/index.js";
import type { AdbScrcpyClientOptions } from "./client-options.js";
import type { AdbScrcpyConnection } from "./connection.js";
import { AdbScrcpyOptions } from "./types.js";

export class AdbScrcpyOptions1_15_1 extends AdbScrcpyOptions<ScrcpyOptions1_15_1.Init> {
    constructor(init: ScrcpyOptions1_15_1.Init, version?: string) {
        super(new ScrcpyOptions1_15_1(init, version));
    constructor(
        init: ScrcpyOptions1_15_1.Init,
        clientOptions?: AdbScrcpyClientOptions,
    ) {
        super(
            new ScrcpyOptions1_15_1(init, clientOptions?.version),
            clientOptions?.spawner,
        );
    }

    override getEncoders(adb: Adb, path: string): Promise<ScrcpyEncoder[]> {
+9 −2
Original line number Diff line number Diff line
@@ -7,12 +7,19 @@ import {
    getDisplays,
    getEncoders,
} from "./1_15/impl/index.js";
import type { AdbScrcpyClientOptions } from "./client-options.js";
import type { AdbScrcpyConnection } from "./connection.js";
import { AdbScrcpyOptions } from "./types.js";

export class AdbScrcpyOptions1_16 extends AdbScrcpyOptions<ScrcpyOptions1_16.Init> {
    constructor(init: ScrcpyOptions1_16.Init, version?: string) {
        super(new ScrcpyOptions1_16(init, version));
    constructor(
        init: ScrcpyOptions1_16.Init,
        clientOptions?: AdbScrcpyClientOptions,
    ) {
        super(
            new ScrcpyOptions1_16(init, clientOptions?.version),
            clientOptions?.spawner,
        );
    }

    override getEncoders(adb: Adb, path: string): Promise<ScrcpyEncoder[]> {
+9 −2
Original line number Diff line number Diff line
@@ -7,12 +7,19 @@ import {
    getDisplays,
    getEncoders,
} from "./1_15/impl/index.js";
import type { AdbScrcpyClientOptions } from "./client-options.js";
import type { AdbScrcpyConnection } from "./connection.js";
import { AdbScrcpyOptions } from "./types.js";

export class AdbScrcpyOptions1_17 extends AdbScrcpyOptions<ScrcpyOptions1_17.Init> {
    constructor(init: ScrcpyOptions1_17.Init, version?: string) {
        super(new ScrcpyOptions1_17(init, version));
    constructor(
        init: ScrcpyOptions1_17.Init,
        clientOptions?: AdbScrcpyClientOptions,
    ) {
        super(
            new ScrcpyOptions1_17(init, clientOptions?.version),
            clientOptions?.spawner,
        );
    }

    override getEncoders(adb: Adb, path: string): Promise<ScrcpyEncoder[]> {
Loading