import type { MaybePromiseLike } from "@yume-chan/async"; import type { ReadableStream, TransformStream } from "@yume-chan/stream-extra"; import type { ScrcpyDisplay, ScrcpyEncoder, ScrcpyMediaStreamPacket, ScrcpyOptions, ScrcpyOptionsListEncoders, ScrcpyScrollController, ScrcpyVideoStream, } from "../base/index.js"; import { ScrcpyDeviceMessageParsers } from "../base/index.js"; import type { ScrcpyBackOrScreenOnControlMessage, ScrcpyInjectTouchControlMessage, ScrcpySetClipboardControlMessage, } from "../latest.js"; import type { Init } from "./impl/index.js"; import { ClipboardStream, ControlMessageTypes, createMediaStreamTransformer, createScrollController, Defaults, EncoderRegex, parseDisplay, parseEncoder, parseVideoStreamMetadata, serialize, serializeBackOrScreenOnControlMessage, serializeInjectTouchControlMessage, SerializeOrder, serializeSetClipboardControlMessage, setListDisplays, setListEncoders, } from "./impl/index.js"; export class ScrcpyOptions1_18 implements ScrcpyOptions, ScrcpyOptionsListEncoders { static readonly Defaults = Defaults; readonly value: Required; get controlMessageTypes(): typeof ControlMessageTypes { return ControlMessageTypes; } #clipboard: ClipboardStream | undefined; get clipboard(): ReadableStream | undefined { return this.#clipboard; } #deviceMessageParsers = new ScrcpyDeviceMessageParsers(); get deviceMessageParsers() { return this.#deviceMessageParsers; } constructor(init: Init) { this.value = { ...Defaults, ...init }; if (this.value.control) { this.#clipboard = this.#deviceMessageParsers.add( new ClipboardStream(), ); } } serialize(): string[] { return serialize(this.value, SerializeOrder); } setListDisplays(): void { setListDisplays(this.value); } parseDisplay(line: string): ScrcpyDisplay | undefined { return parseDisplay(line); } setListEncoders() { setListEncoders(this.value); } parseEncoder(line: string): ScrcpyEncoder | undefined { return parseEncoder(line, EncoderRegex); } parseVideoStreamMetadata( stream: ReadableStream, ): MaybePromiseLike { return parseVideoStreamMetadata(stream); } createMediaStreamTransformer(): TransformStream< Uint8Array, ScrcpyMediaStreamPacket > { return createMediaStreamTransformer(this.value); } serializeInjectTouchControlMessage( message: ScrcpyInjectTouchControlMessage, ): Uint8Array { return serializeInjectTouchControlMessage(message); } serializeBackOrScreenOnControlMessage( message: ScrcpyBackOrScreenOnControlMessage, ): Uint8Array | undefined { return serializeBackOrScreenOnControlMessage(message); } serializeSetClipboardControlMessage( message: ScrcpySetClipboardControlMessage, ): Uint8Array { return serializeSetClipboardControlMessage(message); } createScrollController(): ScrcpyScrollController { return createScrollController(); } } type Init_ = Init; export namespace ScrcpyOptions1_18 { export type Init = Init_; }