mirror of
https://github.com/yume-chan/ya-webadb.git
synced 2025-10-03 01:39:21 +02:00
142 lines
3.7 KiB
TypeScript
142 lines
3.7 KiB
TypeScript
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 {
|
|
AckClipboardHandler,
|
|
ClipboardStream,
|
|
ControlMessageTypes,
|
|
createMediaStreamTransformer,
|
|
createScrollController,
|
|
Defaults,
|
|
EncoderRegex,
|
|
parseDisplay,
|
|
parseEncoder,
|
|
parseVideoStreamMetadata,
|
|
serialize,
|
|
serializeBackOrScreenOnControlMessage,
|
|
serializeInjectTouchControlMessage,
|
|
serializeSetClipboardControlMessage,
|
|
setListDisplays,
|
|
setListEncoders,
|
|
} from "./impl/index.js";
|
|
|
|
export class ScrcpyOptions1_25
|
|
implements ScrcpyOptions<Init>, ScrcpyOptionsListEncoders
|
|
{
|
|
static readonly Defaults = Defaults;
|
|
|
|
readonly value: Required<Init>;
|
|
|
|
get controlMessageTypes(): typeof ControlMessageTypes {
|
|
return ControlMessageTypes;
|
|
}
|
|
|
|
#clipboard: ClipboardStream | undefined;
|
|
get clipboard(): ReadableStream<string> | undefined {
|
|
return this.#clipboard;
|
|
}
|
|
|
|
#ackClipboardHandler: AckClipboardHandler | undefined;
|
|
|
|
#deviceMessageParsers = new ScrcpyDeviceMessageParsers();
|
|
get deviceMessageParsers() {
|
|
return this.#deviceMessageParsers;
|
|
}
|
|
|
|
constructor(init: Init) {
|
|
this.value = { ...Defaults, ...init };
|
|
|
|
if (this.value.control) {
|
|
if (this.value.clipboardAutosync) {
|
|
this.#clipboard = this.#deviceMessageParsers.add(
|
|
new ClipboardStream(),
|
|
);
|
|
}
|
|
|
|
this.#ackClipboardHandler = this.#deviceMessageParsers.add(
|
|
new AckClipboardHandler(),
|
|
);
|
|
}
|
|
}
|
|
|
|
serialize(): string[] {
|
|
return serialize(this.value, Defaults);
|
|
}
|
|
|
|
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<Uint8Array>,
|
|
): MaybePromiseLike<ScrcpyVideoStream> {
|
|
return parseVideoStreamMetadata(this.value, 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 | [Uint8Array, Promise<void>] {
|
|
return serializeSetClipboardControlMessage(
|
|
message,
|
|
this.#ackClipboardHandler,
|
|
);
|
|
}
|
|
|
|
createScrollController(): ScrcpyScrollController {
|
|
return createScrollController();
|
|
}
|
|
}
|
|
|
|
type Init_ = Init;
|
|
|
|
export namespace ScrcpyOptions1_25 {
|
|
export type Init = Init_;
|
|
}
|