rustdesk/flutter/web/js/src/common.ts
2022-05-12 16:50:30 +08:00

78 lines
2.0 KiB
TypeScript

import * as zstd from "zstddec";
import { KeyEvent, controlKeyFromJSON, ControlKey } from "./message";
import { KEY_MAP, LANGS } from "./gen_js_from_hbb";
let decompressor: zstd.ZSTDDecoder;
export async function initZstd() {
const tmp = new zstd.ZSTDDecoder();
await tmp.init();
console.log("zstd ready");
decompressor = tmp;
}
export async function decompress(compressedArray: Uint8Array) {
const MAX = 1024 * 1024 * 64;
const MIN = 1024 * 1024;
let n = 30 * compressedArray.length;
if (n > MAX) {
n = MAX;
}
if (n < MIN) {
n = MIN;
}
try {
if (!decompressor) {
await initZstd();
}
return decompressor.decode(compressedArray, n);
} catch (e) {
console.error("decompress failed: " + e);
return undefined;
}
}
const LANG = getLang();
export function translate(locale: string, text: string): string {
const lang = LANG || locale.substring(locale.length - 2).toLowerCase();
let en = LANGS.en as any;
let dict = (LANGS as any)[lang];
if (!dict) dict = en;
let res = dict[text];
if (!res && lang != "en") res = en[text];
return res || text;
}
const zCode = "z".charCodeAt(0);
const aCode = "a".charCodeAt(0);
export function mapKey(name: string, isDesktop: Boolean) {
const tmp = KEY_MAP[name] || name;
if (tmp.length == 1) {
const chr = tmp.charCodeAt(0);
if (!isDesktop && (chr > zCode || chr < aCode))
return KeyEvent.fromPartial({ unicode: chr });
else return KeyEvent.fromPartial({ chr });
}
const control_key = controlKeyFromJSON(tmp);
if (control_key == ControlKey.UNRECOGNIZED) {
console.error("Unknown control key " + tmp);
}
return KeyEvent.fromPartial({ control_key });
}
export async function sleep(ms: number) {
await new Promise((r) => setTimeout(r, ms));
}
function getLang(): string {
try {
const queryString = window.location.search;
const urlParams = new URLSearchParams(queryString);
return urlParams.get("lang") || "";
} catch (e) {
return "";
}
}