mirror of
https://github.com/immense/Remotely.git
synced 2025-10-26 11:27:15 +00:00
163 lines
7.8 KiB
TypeScript
163 lines
7.8 KiB
TypeScript
import { MainRc } from "./Main.js";
|
|
import { RemoteControlMode } from "../Enums/RemoteControlMode.js";
|
|
import { Point } from "../Models/Point.js";
|
|
import { GetDistanceBetween, ConvertUInt8ArrayToBase64 } from "../Utilities.js";
|
|
import { UploadFiles } from "./FileUploader.js";
|
|
import { Sound } from "../Sound.js";
|
|
import { WindowsSession, SessionType } from "./RtcDtos.js";
|
|
|
|
export var AudioButton = document.getElementById("audioButton") as HTMLButtonElement;
|
|
export var MenuButton = document.getElementById("menuButton") as HTMLButtonElement;
|
|
export var MenuFrame = document.getElementById("menuFrame") as HTMLDivElement;
|
|
export var SessionIDInput = document.getElementById("sessionIDInput") as HTMLInputElement;
|
|
export var ConnectButton = document.getElementById("connectButton") as HTMLButtonElement;
|
|
export var RequesterNameInput = document.getElementById("nameInput") as HTMLInputElement;
|
|
export var StatusMessage = document.getElementById("statusMessage") as HTMLDivElement;
|
|
export var ScreenViewer = document.getElementById("screenViewer") as HTMLCanvasElement;
|
|
export var ScreenViewerWrapper = document.getElementById("screenViewerWrapper") as HTMLDivElement;
|
|
export var Screen2DContext = ScreenViewer.getContext("2d");
|
|
export var HorizontalBars = document.querySelectorAll(".horizontal-button-bar");
|
|
export var ConnectBox = document.getElementById("connectBox") as HTMLDivElement;
|
|
export var ScreenSelectBar = document.getElementById("screenSelectBar") as HTMLDivElement;
|
|
export var QualityBar = document.getElementById("qualityBar") as HTMLDivElement;
|
|
export var QualitySlider = document.getElementById("qualityRangeInput") as HTMLInputElement;
|
|
export var AutoQualityAdjustCheckBox = document.getElementById("autoAdjustQualityCheckBox") as HTMLInputElement;
|
|
export var ActionsBar = document.getElementById("actionsBar") as HTMLDivElement;
|
|
export var ViewBar = document.getElementById("viewBar") as HTMLDivElement;
|
|
export var ChangeScreenButton = document.getElementById("changeScreenButton") as HTMLButtonElement;
|
|
export var QualityButton = document.getElementById("qualityButton") as HTMLButtonElement;
|
|
export var FitToScreenButton = document.getElementById("fitToScreenButton") as HTMLButtonElement;
|
|
export var BlockInputButton = document.getElementById("blockInputButton") as HTMLButtonElement;
|
|
export var DisconnectButton = document.getElementById("disconnectButton") as HTMLButtonElement;
|
|
export var FileTransferInput = document.getElementById("fileTransferInput") as HTMLInputElement;
|
|
export var FileTransferProgress = document.getElementById("fileTransferProgress") as HTMLProgressElement;
|
|
export var FileTransferNameSpan = document.getElementById("fileTransferNameSpan") as HTMLSpanElement;
|
|
export var KeyboardButton = document.getElementById("keyboardButton") as HTMLButtonElement;
|
|
export var InviteButton = document.getElementById("inviteButton") as HTMLButtonElement;
|
|
export var FileTransferButton = document.getElementById("fileTransferButton") as HTMLButtonElement;
|
|
export var CtrlAltDelButton = document.getElementById("ctrlAltDelButton") as HTMLButtonElement;
|
|
export var TouchKeyboardTextArea = document.getElementById("touchKeyboardTextArea") as HTMLTextAreaElement;
|
|
export var ClipboardTransferBar = document.getElementById("clipboardTransferBar") as HTMLDivElement;
|
|
export var ClipboardTransferButton = document.getElementById("clipboardTransferButton") as HTMLButtonElement;
|
|
export var TypeClipboardButton = document.getElementById("typeClipboardButton") as HTMLButtonElement;
|
|
export var ConnectionP2PIcon = document.getElementById("connectionP2PIcon") as HTMLElement;
|
|
export var ConnectionRelayedIcon = document.getElementById("connectionRelayedIcon") as HTMLElement;
|
|
export var ToastsWrapper = document.getElementById("toastsWrapper") as HTMLDivElement;
|
|
export var WindowsSessionSelect = document.getElementById("windowsSessionSelect") as HTMLSelectElement;
|
|
export var RecordSessionButton = document.getElementById("recordSessionButton") as HTMLButtonElement;
|
|
export var DownloadRecordingButton = document.getElementById("downloadRecordingButton") as HTMLButtonElement;
|
|
|
|
export function Prompt(promptMessage: string): Promise<string> {
|
|
return new Promise((resolve, reject) => {
|
|
var modalDiv = document.createElement("div");
|
|
modalDiv.classList.add("modal-prompt");
|
|
|
|
var messageDiv = document.createElement("div");
|
|
messageDiv.innerHTML = promptMessage;
|
|
|
|
var responseInput = document.createElement("input");
|
|
|
|
var buttonsDiv = document.createElement("div");
|
|
buttonsDiv.classList.add("buttons-footer");
|
|
|
|
var cancelButton = document.createElement("button");
|
|
cancelButton.innerHTML = "Cancel";
|
|
|
|
var okButton = document.createElement("button");
|
|
okButton.innerHTML = "OK";
|
|
|
|
buttonsDiv.appendChild(okButton);
|
|
buttonsDiv.appendChild(cancelButton);
|
|
modalDiv.appendChild(messageDiv);
|
|
modalDiv.appendChild(responseInput);
|
|
modalDiv.appendChild(buttonsDiv);
|
|
|
|
document.body.appendChild(modalDiv);
|
|
|
|
okButton.onclick = () => {
|
|
modalDiv.remove();
|
|
resolve(responseInput.value);
|
|
}
|
|
|
|
cancelButton.onclick = () => {
|
|
modalDiv.remove();
|
|
resolve(null);
|
|
}
|
|
});
|
|
}
|
|
|
|
export function SetScreenSize(width: number, height: number) {
|
|
ScreenViewer.width = width;
|
|
ScreenViewer.height = height;
|
|
Screen2DContext.clearRect(0, 0, width, height);
|
|
}
|
|
|
|
export function ShowMessage(message: string) {
|
|
var messageDiv = document.createElement("div");
|
|
messageDiv.classList.add("toast-message");
|
|
messageDiv.innerHTML = message;
|
|
ToastsWrapper.appendChild(messageDiv);
|
|
window.setTimeout(() => {
|
|
messageDiv.remove();
|
|
}, 5000);
|
|
}
|
|
|
|
export function UpdateCursor(imageBytes: Uint8Array, hotSpotX: number, hotSpotY: number, cssOverride: string) {
|
|
if (cssOverride) {
|
|
ScreenViewer.style.cursor = cssOverride;
|
|
}
|
|
else if (imageBytes.byteLength == 0) {
|
|
ScreenViewer.style.cursor = "default";
|
|
}
|
|
else {
|
|
var base64 = ConvertUInt8ArrayToBase64(imageBytes);
|
|
ScreenViewer.style.cursor = `url('data:image/png;base64,${base64}') ${hotSpotX} ${hotSpotY}, default`;
|
|
}
|
|
}
|
|
|
|
export function UpdateDisplays(selectedDisplay: string, displayNames: string[]) {
|
|
ScreenSelectBar.innerHTML = "";
|
|
for (let i = 0; i < displayNames.length; i++) {
|
|
var button = document.createElement("button");
|
|
button.innerHTML = `Monitor ${i}`;
|
|
button.classList.add("horizontal-bar-button");
|
|
if (displayNames[i] == selectedDisplay) {
|
|
button.classList.add("toggled");
|
|
}
|
|
ScreenSelectBar.appendChild(button);
|
|
button.onclick = (ev: MouseEvent) => {
|
|
MainRc.MessageSender.SendSelectScreen(displayNames[i]);
|
|
document.querySelectorAll("#screenSelectBar .horizontal-bar-button").forEach(button => {
|
|
button.classList.remove("toggled");
|
|
});
|
|
(ev.currentTarget as HTMLButtonElement).classList.add("toggled");
|
|
};
|
|
}
|
|
}
|
|
|
|
export function UpdateWindowsSessions(windowsSessions: Array<WindowsSession>) {
|
|
while (WindowsSessionSelect.options.length > 0) {
|
|
WindowsSessionSelect.options.remove(0);
|
|
}
|
|
|
|
WindowsSessionSelect.options.add(document.createElement("option"));
|
|
|
|
windowsSessions.forEach(x => {
|
|
var sessionType = "";
|
|
|
|
if (typeof x.Type == "number") {
|
|
sessionType = x.Type == SessionType.Console ? "Console" : "RDP";
|
|
}
|
|
else {
|
|
sessionType = x.Type;
|
|
}
|
|
|
|
var option = document.createElement("option");
|
|
option.value = String(x.ID);
|
|
option.text = `${sessionType} (ID: ${x.ID} | User: ${x.Username})`;
|
|
option.title = `${sessionType} Session (ID: ${x.ID} | User: ${x.Username})`;
|
|
WindowsSessionSelect.options.add(option);
|
|
});
|
|
}
|
|
|