mirror of
https://github.com/yume-chan/ya-webadb.git
synced 2025-10-06 03:50:18 +02:00
refactor(scrcpy): rewrite option classes to improve tree-shaking
This commit is contained in:
parent
db8466f6ee
commit
92472007db
218 changed files with 5412 additions and 2380 deletions
156
libraries/scrcpy/src/2_3/options.ts
Normal file
156
libraries/scrcpy/src/2_3/options.ts
Normal file
|
@ -0,0 +1,156 @@
|
|||
import type { MaybePromiseLike } from "@yume-chan/async";
|
||||
import type { ReadableStream, TransformStream } from "@yume-chan/stream-extra";
|
||||
import type { AsyncExactReadable } from "@yume-chan/struct";
|
||||
|
||||
import type {
|
||||
ScrcpyAudioStreamMetadata,
|
||||
ScrcpyControlMessageType,
|
||||
ScrcpyDisplay,
|
||||
ScrcpyEncoder,
|
||||
ScrcpyMediaStreamPacket,
|
||||
ScrcpyOptions,
|
||||
ScrcpyScrollController,
|
||||
ScrcpyVideoStream,
|
||||
} 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,
|
||||
parseAudioStreamMetadata,
|
||||
parseDisplay,
|
||||
parseEncoder,
|
||||
parseVideoStreamMetadata,
|
||||
serialize,
|
||||
serializeBackOrScreenOnControlMessage,
|
||||
serializeInjectTouchControlMessage,
|
||||
setListDisplays,
|
||||
setListEncoders,
|
||||
} from "./impl/index.js";
|
||||
|
||||
export class ScrcpyOptions2_3 implements ScrcpyOptions<Init> {
|
||||
readonly value: Required<Init>;
|
||||
|
||||
get controlMessageTypes(): readonly ScrcpyControlMessageType[] {
|
||||
return ControlMessageTypes;
|
||||
}
|
||||
|
||||
#clipboard: ClipboardStream | undefined;
|
||||
get clipboard(): ReadableStream<string> | undefined {
|
||||
return this.#clipboard;
|
||||
}
|
||||
|
||||
#ackClipboardHandler: AckClipboardHandler | undefined;
|
||||
|
||||
constructor(init: Init) {
|
||||
this.value = { ...Defaults, ...init };
|
||||
|
||||
if (this.value.control && this.value.clipboardAutosync) {
|
||||
this.#clipboard = new ClipboardStream();
|
||||
this.#ackClipboardHandler = 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);
|
||||
}
|
||||
|
||||
parseVideoStreamMetadata(
|
||||
stream: ReadableStream<Uint8Array>,
|
||||
): MaybePromiseLike<ScrcpyVideoStream> {
|
||||
return parseVideoStreamMetadata(this.value, stream);
|
||||
}
|
||||
|
||||
parseAudioStreamMetadata(
|
||||
stream: ReadableStream<Uint8Array>,
|
||||
): MaybePromiseLike<ScrcpyAudioStreamMetadata> {
|
||||
return parseAudioStreamMetadata(stream, this.value);
|
||||
}
|
||||
|
||||
async parseDeviceMessage(
|
||||
id: number,
|
||||
stream: AsyncExactReadable,
|
||||
): Promise<void> {
|
||||
if (await this.#clipboard?.parse(id, stream)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (await this.#ackClipboardHandler?.parse(id, stream)) {
|
||||
return;
|
||||
}
|
||||
|
||||
throw new Error("Unknown device message");
|
||||
}
|
||||
|
||||
endDeviceMessageStream(e?: unknown): void {
|
||||
if (e) {
|
||||
this.#clipboard?.error(e);
|
||||
this.#ackClipboardHandler?.error(e);
|
||||
} else {
|
||||
this.#clipboard?.close();
|
||||
this.#ackClipboardHandler?.close();
|
||||
}
|
||||
}
|
||||
|
||||
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 this.#ackClipboardHandler!.serializeSetClipboardControlMessage(
|
||||
message,
|
||||
);
|
||||
}
|
||||
|
||||
createScrollController(): ScrcpyScrollController {
|
||||
return createScrollController();
|
||||
}
|
||||
}
|
||||
|
||||
type Init_ = Init;
|
||||
|
||||
export namespace ScrcpyOptions2_3 {
|
||||
export type Init = Init_;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue