diff --git a/libraries/scrcpy/src/options/1_16/options.ts b/libraries/scrcpy/src/options/1_16/options.ts index 2a0d4294..ec097799 100644 --- a/libraries/scrcpy/src/options/1_16/options.ts +++ b/libraries/scrcpy/src/options/1_16/options.ts @@ -120,17 +120,20 @@ export class ScrcpyOptions1_16 extends ScrcpyOptions { return SCRCPY_CONTROL_MESSAGE_TYPES_1_16; } - #clipboardController!: PushReadableStreamController; - #clipboard: ReadableStream; + #clipboardController: PushReadableStreamController | undefined; + #clipboard: ReadableStream | undefined; override get clipboard() { return this.#clipboard; } constructor(init: ScrcpyOptionsInit1_16) { super(ScrcpyOptions0_00, init, ScrcpyOptions1_16.DEFAULTS); - this.#clipboard = new PushReadableStream((controller) => { - this.#clipboardController = controller; - }); + + if (this.value.control) { + this.#clipboard = new PushReadableStream((controller) => { + this.#clipboardController = controller; + }); + } } serialize(): string[] { @@ -181,7 +184,7 @@ export class ScrcpyOptions1_16 extends ScrcpyOptions { async #parseClipboardMessage(stream: AsyncExactReadable) { const message = await ScrcpyClipboardDeviceMessage.deserialize(stream); - await this.#clipboardController.enqueue(message.content); + await this.#clipboardController?.enqueue(message.content); } override async parseDeviceMessage( @@ -200,9 +203,9 @@ export class ScrcpyOptions1_16 extends ScrcpyOptions { override endDeviceMessageStream(e?: unknown): void { if (e) { - this.#clipboardController.error(e); + this.#clipboardController?.error(e); } else { - this.#clipboardController.close(); + this.#clipboardController?.close(); } } diff --git a/libraries/scrcpy/src/options/1_21.ts b/libraries/scrcpy/src/options/1_21.ts index a14d1c42..1363d4ad 100644 --- a/libraries/scrcpy/src/options/1_21.ts +++ b/libraries/scrcpy/src/options/1_21.ts @@ -6,6 +6,7 @@ import { Struct, string, u32, u64, u8 } from "@yume-chan/struct"; import type { ScrcpySetClipboardControlMessage } from "../control/index.js"; +import type { ReadableStream } from "@yume-chan/stream-extra"; import type { ScrcpyOptionsInit1_18 } from "./1_18.js"; import { ScrcpyOptions1_18 } from "./1_18.js"; import { ScrcpyOptions, toScrcpyOptionValue } from "./types.js"; @@ -74,6 +75,14 @@ export class ScrcpyOptions1_21 extends ScrcpyOptions { #clipboardAck = new Map>(); + override get clipboard(): ReadableStream | undefined { + if (this.value.clipboardAutosync) { + return super.clipboard; + } else { + return undefined; + } + } + constructor(init: ScrcpyOptionsInit1_21) { super(ScrcpyOptions1_18, init, ScrcpyOptions1_21.DEFAULTS); } diff --git a/libraries/scrcpy/src/options/types.ts b/libraries/scrcpy/src/options/types.ts index 0a16b2c5..f5de7e9a 100644 --- a/libraries/scrcpy/src/options/types.ts +++ b/libraries/scrcpy/src/options/types.ts @@ -77,7 +77,7 @@ export abstract class ScrcpyOptions { readonly value: Required; - get clipboard(): ReadableStream { + get clipboard(): ReadableStream | undefined { return this.#base.clipboard; }