Using tr as imported function and changed the shared app declaration build mechanism
parent
b64e4b4dee
commit
1759fb1756
2
file.ts
2
file.ts
|
@ -280,7 +280,7 @@ namespace server {
|
||||||
options = options_;
|
options = options_;
|
||||||
files = _files;
|
files = _files;
|
||||||
|
|
||||||
if(process.env["ssl_enabled"] || use_https) {
|
if(process.env["ssl_enabled"] === "1" || use_https) {
|
||||||
//openssl req -nodes -new -x509 -keyout files_key.pem -out files_cert.pem
|
//openssl req -nodes -new -x509 -keyout files_key.pem -out files_cert.pem
|
||||||
const key_file = process.env["ssl_key"] || path.join(__dirname, "files_key.pem");
|
const key_file = process.env["ssl_key"] || path.join(__dirname, "files_key.pem");
|
||||||
const cert_file = process.env["ssl_cert"] || path.join(__dirname, "files_cert.pem");
|
const cert_file = process.env["ssl_cert"] || path.join(__dirname, "files_cert.pem");
|
||||||
|
|
|
@ -13,8 +13,8 @@ declare global {
|
||||||
StaticSettings: any;
|
StaticSettings: any;
|
||||||
}
|
}
|
||||||
|
|
||||||
const tr: typeof window.tr;
|
//const tr: typeof window.tr;
|
||||||
const tra: typeof window.tra;
|
//const tra: typeof window.tra;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ApplicationLoader {
|
export interface ApplicationLoader {
|
||||||
|
|
|
@ -33,36 +33,35 @@ loader.register_task(Stage.SETUP, {
|
||||||
priority: 1000
|
priority: 1000
|
||||||
});
|
});
|
||||||
|
|
||||||
if(__build.target === "web") {
|
loader.register_task(Stage.SETUP, {
|
||||||
loader.register_task(Stage.SETUP, {
|
name: __build.target === "web" ? "outdated browser checker" : "outdated renderer tester",
|
||||||
name: "outdated browser checker",
|
function: async () => {
|
||||||
function: async () => {
|
const browser = detectBrowser();
|
||||||
const browser = detectBrowser();
|
navigator.browserSpecs = browser;
|
||||||
navigator.browserSpecs = browser;
|
|
||||||
|
|
||||||
if(!browser)
|
if(!browser) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
console.log("Resolved browser manufacturer to \"%s\" version \"%s\" on %s", browser.name, browser.version, browser.os);
|
console.log("Resolved browser manufacturer to \"%s\" version \"%s\" on %s", browser.name, browser.version, browser.os);
|
||||||
if(browser.type !== "browser") {
|
if(browser.type !== "browser") {
|
||||||
loader.critical_error("Your device isn't supported.", "User agent type " + browser.type + " isn't supported.");
|
loader.critical_error("Your device isn't supported.", "User agent type " + browser.type + " isn't supported.");
|
||||||
throw "unsupported user type";
|
throw "unsupported user type";
|
||||||
}
|
}
|
||||||
|
|
||||||
window.detectedBrowser = browser;
|
window.detectedBrowser = browser;
|
||||||
|
|
||||||
switch (browser?.name) {
|
switch (browser?.name) {
|
||||||
case "aol":
|
case "aol":
|
||||||
case "crios":
|
case "crios":
|
||||||
case "ie":
|
case "ie":
|
||||||
loader.critical_error("Browser not supported", "We're sorry, but your browser isn't supported.");
|
loader.critical_error("Browser not supported", "We're sorry, but your browser isn't supported.");
|
||||||
throw "unsupported browser";
|
throw "unsupported browser";
|
||||||
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
priority: 50
|
priority: 50
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
|
||||||
/* directly disable all context menus */
|
/* directly disable all context menus */
|
||||||
if(!location.search.match(/(.*[?&]|^)disableGlobalContextMenu=0($|&.*)/)) {
|
if(!location.search.match(/(.*[?&]|^)disableGlobalContextMenu=0($|&.*)/)) {
|
||||||
|
|
|
@ -12,4 +12,6 @@ export function available_devices() : Promise<Device[]>;
|
||||||
export function set_device(device_id: string) : Promise<void>;
|
export function set_device(device_id: string) : Promise<void>;
|
||||||
export function current_device() : Device;
|
export function current_device() : Device;
|
||||||
|
|
||||||
export function initializeFromGesture();
|
export function initializeFromGesture();
|
||||||
|
|
||||||
|
export function globalAudioContext() : AudioContext;
|
|
@ -1,5 +1,5 @@
|
||||||
import {AddressTarget, ResolveOptions} from "tc-shared/dns";
|
import {AddressTarget, ResolveOptions} from "tc-shared/dns";
|
||||||
import {ServerAddress} from "tc-shared/ui/server";
|
import {ServerAddress} from "tc-shared/tree/Server";
|
||||||
|
|
||||||
export function supported();
|
export function supported();
|
||||||
export function resolve_address(address: ServerAddress, options?: ResolveOptions) : Promise<AddressTarget>;
|
export function resolve_address(address: ServerAddress, options?: ResolveOptions) : Promise<AddressTarget>;
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
declare global {
|
||||||
|
interface Window {
|
||||||
|
tr(message: string) : string;
|
||||||
|
tra(message: string, ...args: (string | number | boolean)[]) : string;
|
||||||
|
tra(message: string, ...args: any[]) : JQuery[];
|
||||||
|
|
||||||
|
log: any;
|
||||||
|
StaticSettings: any;
|
||||||
|
|
||||||
|
detectedBrowser: any;
|
||||||
|
__native_client_init_shared: any;
|
||||||
|
}
|
||||||
|
|
||||||
|
const tr: typeof window.tr;
|
||||||
|
const tra: typeof window.tra;
|
||||||
|
|
||||||
|
/* webpack compiler variable */
|
||||||
|
const __build;
|
||||||
|
const __webpack_require__;
|
||||||
|
}
|
||||||
|
|
||||||
|
export {};
|
|
@ -22,7 +22,7 @@ import * as dns from "tc-backend/dns";
|
||||||
import {EventHandler, Registry} from "./events";
|
import {EventHandler, Registry} from "./events";
|
||||||
import {FileManager} from "./file/FileManager";
|
import {FileManager} from "./file/FileManager";
|
||||||
import {FileTransferState, TransferProvider} from "./file/Transfer";
|
import {FileTransferState, TransferProvider} from "./file/Transfer";
|
||||||
import {traj} from "./i18n/localize";
|
import {traj, tr} from "./i18n/localize";
|
||||||
import {md5} from "./crypto/md5";
|
import {md5} from "./crypto/md5";
|
||||||
import {guid} from "./crypto/uid";
|
import {guid} from "./crypto/uid";
|
||||||
import {ServerEventLog} from "./ui/frames/log/ServerEventLog";
|
import {ServerEventLog} from "./ui/frames/log/ServerEventLog";
|
||||||
|
|
|
@ -4,6 +4,7 @@ import {Settings, settings} from "./settings";
|
||||||
import * as log from "./log";
|
import * as log from "./log";
|
||||||
import {LogCategory} from "./log";
|
import {LogCategory} from "./log";
|
||||||
import {server_connections} from "tc-shared/ConnectionManager";
|
import {server_connections} from "tc-shared/ConnectionManager";
|
||||||
|
import { tr } from "./i18n/localize";
|
||||||
|
|
||||||
export interface KeyControl {
|
export interface KeyControl {
|
||||||
category: string;
|
category: string;
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import { tr } from "./i18n/localize";
|
||||||
|
|
||||||
export enum KeyCode {
|
export enum KeyCode {
|
||||||
KEY_CANCEL = 3,
|
KEY_CANCEL = 3,
|
||||||
KEY_HELP = 6,
|
KEY_HELP = 6,
|
||||||
|
|
|
@ -8,6 +8,7 @@ import {VoiceClient} from "../voice/VoiceClient";
|
||||||
import {VoicePlayerEvents, VoicePlayerLatencySettings, VoicePlayerState} from "../voice/VoicePlayer";
|
import {VoicePlayerEvents, VoicePlayerLatencySettings, VoicePlayerState} from "../voice/VoicePlayer";
|
||||||
import {WhisperSession, WhisperTarget} from "../voice/VoiceWhisper";
|
import {WhisperSession, WhisperTarget} from "../voice/VoiceWhisper";
|
||||||
import {Registry} from "../events";
|
import {Registry} from "../events";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
class DummyVoiceClient implements VoiceClient {
|
class DummyVoiceClient implements VoiceClient {
|
||||||
readonly events: Registry<VoicePlayerEvents>;
|
readonly events: Registry<VoicePlayerEvents>;
|
||||||
|
|
|
@ -2,6 +2,7 @@ import {ConnectionHandler} from "../ConnectionHandler";
|
||||||
import {CommandResult} from "../connection/ServerConnectionDeclaration";
|
import {CommandResult} from "../connection/ServerConnectionDeclaration";
|
||||||
import {AbstractCommandHandler} from "../connection/AbstractCommandHandler";
|
import {AbstractCommandHandler} from "../connection/AbstractCommandHandler";
|
||||||
import {AbstractServerConnection, ServerCommand} from "../connection/ConnectionBase";
|
import {AbstractServerConnection, ServerCommand} from "../connection/ConnectionBase";
|
||||||
|
import { tra } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
export interface PluginCommandInvoker {
|
export interface PluginCommandInvoker {
|
||||||
clientId: number;
|
clientId: number;
|
||||||
|
|
|
@ -4,6 +4,7 @@ import {CommandResult} from "../connection/ServerConnectionDeclaration";
|
||||||
import {ErrorCode} from "../connection/ErrorCode";
|
import {ErrorCode} from "../connection/ErrorCode";
|
||||||
import {LogCategory, logDebug, logTrace, logWarn} from "../log";
|
import {LogCategory, logDebug, logTrace, logWarn} from "../log";
|
||||||
import {ExplicitCommandHandler} from "../connection/AbstractCommandHandler";
|
import {ExplicitCommandHandler} from "../connection/AbstractCommandHandler";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
export type ServerFeatureSupport = "unsupported" | "supported" | "experimental" | "deprecated";
|
export type ServerFeatureSupport = "unsupported" | "supported" | "experimental" | "deprecated";
|
||||||
|
|
||||||
|
|
|
@ -1,17 +1,16 @@
|
||||||
import {ServerConnection} from "tc-backend/web/connection/ServerConnection";
|
|
||||||
import {AbstractServerConnection, ServerCommand, ServerConnectionEvents} from "tc-shared/connection/ConnectionBase";
|
import {AbstractServerConnection, ServerCommand, ServerConnectionEvents} from "tc-shared/connection/ConnectionBase";
|
||||||
import {ConnectionState} from "tc-shared/ConnectionHandler";
|
import {ConnectionState} from "tc-shared/ConnectionHandler";
|
||||||
import * as log from "tc-shared/log";
|
import * as log from "tc-shared/log";
|
||||||
import {LogCategory, logDebug, logError, logTrace, logWarn} from "tc-shared/log";
|
import {LogCategory, logDebug, logError, logTrace, logWarn} from "tc-shared/log";
|
||||||
import {AbstractCommandHandler} from "tc-shared/connection/AbstractCommandHandler";
|
import {AbstractCommandHandler} from "tc-shared/connection/AbstractCommandHandler";
|
||||||
import {CommandResult} from "tc-shared/connection/ServerConnectionDeclaration";
|
import {CommandResult} from "tc-shared/connection/ServerConnectionDeclaration";
|
||||||
import {tr} from "tc-shared/i18n/localize";
|
import {tr, tra} from "tc-shared/i18n/localize";
|
||||||
import {Registry} from "tc-shared/events";
|
import {Registry} from "tc-shared/events";
|
||||||
import {RemoteRTPAudioTrack, RemoteRTPTrackState, RemoteRTPVideoTrack, TrackClientInfo} from "./RemoteTrack";
|
import {RemoteRTPAudioTrack, RemoteRTPTrackState, RemoteRTPVideoTrack, TrackClientInfo} from "./RemoteTrack";
|
||||||
import {SdpCompressor, SdpProcessor} from "./SdpUtils";
|
import {SdpCompressor, SdpProcessor} from "./SdpUtils";
|
||||||
import {context} from "tc-backend/web/audio/player";
|
|
||||||
import {ErrorCode} from "tc-shared/connection/ErrorCode";
|
import {ErrorCode} from "tc-shared/connection/ErrorCode";
|
||||||
import {WhisperTarget} from "tc-shared/voice/VoiceWhisper";
|
import {WhisperTarget} from "tc-shared/voice/VoiceWhisper";
|
||||||
|
import {globalAudioContext} from "tc-backend/audio/player";
|
||||||
|
|
||||||
const kSdpCompressionMode = 1;
|
const kSdpCompressionMode = 1;
|
||||||
|
|
||||||
|
@ -145,7 +144,7 @@ function getIdleTrack(kind: "video" | "audio") : MediaStreamTrack | null {
|
||||||
return dummyVideoTrack;
|
return dummyVideoTrack;
|
||||||
} else if(kind === "audio") {
|
} else if(kind === "audio") {
|
||||||
if(!dummyAudioTrack) {
|
if(!dummyAudioTrack) {
|
||||||
const dest = context().createMediaStreamDestination();
|
const dest = globalAudioContext().createMediaStreamDestination();
|
||||||
dummyAudioTrack = dest.stream.getAudioTracks()[0];
|
dummyAudioTrack = dest.stream.getAudioTracks()[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -459,7 +458,7 @@ export class RTCConnection {
|
||||||
|
|
||||||
private readonly audioSupport: boolean;
|
private readonly audioSupport: boolean;
|
||||||
private readonly events: Registry<RTCConnectionEvents>;
|
private readonly events: Registry<RTCConnectionEvents>;
|
||||||
private readonly connection: ServerConnection;
|
private readonly connection: AbstractServerConnection;
|
||||||
private readonly commandHandler: CommandHandler;
|
private readonly commandHandler: CommandHandler;
|
||||||
private readonly sdpProcessor: SdpProcessor;
|
private readonly sdpProcessor: SdpProcessor;
|
||||||
|
|
||||||
|
@ -489,7 +488,7 @@ export class RTCConnection {
|
||||||
private remoteVideoTracks: {[key: number]: InternalRemoteRTPVideoTrack};
|
private remoteVideoTracks: {[key: number]: InternalRemoteRTPVideoTrack};
|
||||||
private temporaryStreams: {[key: number]: TemporaryRtpStream} = {};
|
private temporaryStreams: {[key: number]: TemporaryRtpStream} = {};
|
||||||
|
|
||||||
constructor(connection: ServerConnection, audioSupport: boolean) {
|
constructor(connection: AbstractServerConnection, audioSupport: boolean) {
|
||||||
this.events = new Registry<RTCConnectionEvents>();
|
this.events = new Registry<RTCConnectionEvents>();
|
||||||
this.connection = connection;
|
this.connection = connection;
|
||||||
this.sdpProcessor = new SdpProcessor();
|
this.sdpProcessor = new SdpProcessor();
|
||||||
|
@ -511,7 +510,7 @@ export class RTCConnection {
|
||||||
return this.audioSupport;
|
return this.audioSupport;
|
||||||
}
|
}
|
||||||
|
|
||||||
getConnection() : ServerConnection {
|
getConnection() : AbstractServerConnection {
|
||||||
return this.connection;
|
return this.connection;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import {SessionDescription} from "sdp-transform";
|
import {SessionDescription} from "sdp-transform";
|
||||||
import * as sdpTransform from "sdp-transform";
|
import * as sdpTransform from "sdp-transform";
|
||||||
|
import { tr, tra } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
export interface RTCNegotiationMediaMapping {
|
export interface RTCNegotiationMediaMapping {
|
||||||
direction: "sendrecv" | "recvonly" | "sendonly" | "inactive",
|
direction: "sendrecv" | "recvonly" | "sendonly" | "inactive",
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import {Registry} from "tc-shared/events";
|
import {Registry} from "tc-shared/events";
|
||||||
import {LogCategory, logWarn} from "tc-shared/log";
|
import {LogCategory, logWarn} from "tc-shared/log";
|
||||||
import {tr} from "tc-shared/i18n/localize";
|
import {tr} from "tc-shared/i18n/localize";
|
||||||
import * as aplayer from "tc-backend/web/audio/player";
|
import {globalAudioContext, on_ready} from "tc-backend/audio/player";
|
||||||
|
|
||||||
export interface TrackClientInfo {
|
export interface TrackClientInfo {
|
||||||
media?: number,
|
media?: number,
|
||||||
|
@ -157,13 +157,13 @@ export class RemoteRTPAudioTrack extends RemoteRTPTrack {
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
aplayer.on_ready(() => {
|
on_ready(() => {
|
||||||
if(!this.mediaStream) {
|
if(!this.mediaStream) {
|
||||||
/* we've already been destroyed */
|
/* we've already been destroyed */
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const audioContext = aplayer.context();
|
const audioContext = globalAudioContext();
|
||||||
this.audioNode = audioContext.createMediaStreamSource(this.mediaStream);
|
this.audioNode = audioContext.createMediaStreamSource(this.mediaStream);
|
||||||
this.gainNode = audioContext.createGain();
|
this.gainNode = audioContext.createGain();
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import * as sdpTransform from "sdp-transform";
|
import * as sdpTransform from "sdp-transform";
|
||||||
import {MediaDescription} from "sdp-transform";
|
import {MediaDescription} from "sdp-transform";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
interface SdpCodec {
|
interface SdpCodec {
|
||||||
payload: number;
|
payload: number;
|
||||||
|
|
|
@ -7,6 +7,7 @@ import {
|
||||||
import {Registry} from "tc-shared/events";
|
import {Registry} from "tc-shared/events";
|
||||||
import {RemoteRTPTrackState, RemoteRTPVideoTrack} from "../RemoteTrack";
|
import {RemoteRTPTrackState, RemoteRTPVideoTrack} from "../RemoteTrack";
|
||||||
import {LogCategory, logWarn} from "tc-shared/log";
|
import {LogCategory, logWarn} from "tc-shared/log";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
export class RtpVideoClient implements VideoClient {
|
export class RtpVideoClient implements VideoClient {
|
||||||
private readonly clientId: number;
|
private readonly clientId: number;
|
||||||
|
|
|
@ -4,6 +4,7 @@ import {guid} from "./crypto/uid";
|
||||||
import * as React from "react";
|
import * as React from "react";
|
||||||
import {useEffect} from "react";
|
import {useEffect} from "react";
|
||||||
import {unstable_batchedUpdates} from "react-dom";
|
import {unstable_batchedUpdates} from "react-dom";
|
||||||
|
import { tr } from "./i18n/localize";
|
||||||
|
|
||||||
export interface Event<Events, T = keyof Events> {
|
export interface Event<Events, T = keyof Events> {
|
||||||
readonly type: T;
|
readonly type: T;
|
||||||
|
|
|
@ -11,7 +11,7 @@ import {formatMessage} from "../ui/frames/chat";
|
||||||
import {CommandResult} from "../connection/ServerConnectionDeclaration";
|
import {CommandResult} from "../connection/ServerConnectionDeclaration";
|
||||||
import {spawnSettingsModal} from "../ui/modal/ModalSettings";
|
import {spawnSettingsModal} from "../ui/modal/ModalSettings";
|
||||||
import {spawnPermissionEditorModal} from "../ui/modal/permission/ModalPermissionEditor";
|
import {spawnPermissionEditorModal} from "../ui/modal/permission/ModalPermissionEditor";
|
||||||
import {tr} from "../i18n/localize";
|
import {tr, tra} from "../i18n/localize";
|
||||||
import {spawnGlobalSettingsEditor} from "tc-shared/ui/modal/global-settings-editor/Controller";
|
import {spawnGlobalSettingsEditor} from "tc-shared/ui/modal/global-settings-editor/Controller";
|
||||||
import {spawnModalCssVariableEditor} from "tc-shared/ui/modal/css-editor/Controller";
|
import {spawnModalCssVariableEditor} from "tc-shared/ui/modal/css-editor/Controller";
|
||||||
import {server_connections} from "tc-shared/ConnectionManager";
|
import {server_connections} from "tc-shared/ConnectionManager";
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import {Registry} from "tc-shared/events";
|
import {Registry} from "tc-shared/events";
|
||||||
|
import { tr, tra } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
export const kIPCIconChannel = "icons";
|
export const kIPCIconChannel = "icons";
|
||||||
export const kGlobalIconHandlerId = "global";
|
export const kGlobalIconHandlerId = "global";
|
||||||
|
|
|
@ -12,6 +12,7 @@ import {IPCChannel} from "../ipc/BrowserIPC";
|
||||||
import {Settings} from "../settings";
|
import {Settings} from "../settings";
|
||||||
import {ChannelMessage} from "../ipc/BrowserIPC";
|
import {ChannelMessage} from "../ipc/BrowserIPC";
|
||||||
import {guid} from "../crypto/uid";
|
import {guid} from "../crypto/uid";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
function isEquivalent(a, b) {
|
function isEquivalent(a, b) {
|
||||||
// Create arrays of property names
|
// Create arrays of property names
|
||||||
|
|
|
@ -2,6 +2,7 @@ import "broadcastchannel-polyfill";
|
||||||
import * as log from "../log";
|
import * as log from "../log";
|
||||||
import {LogCategory} from "../log";
|
import {LogCategory} from "../log";
|
||||||
import {ConnectHandler} from "../ipc/ConnectHandler";
|
import {ConnectHandler} from "../ipc/ConnectHandler";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
export interface BroadcastMessage {
|
export interface BroadcastMessage {
|
||||||
timestamp: number;
|
timestamp: number;
|
||||||
|
|
|
@ -2,6 +2,7 @@ import * as log from "../log";
|
||||||
import {LogCategory} from "../log";
|
import {LogCategory} from "../log";
|
||||||
import {BasicIPCHandler, IPCChannel, ChannelMessage} from "../ipc/BrowserIPC";
|
import {BasicIPCHandler, IPCChannel, ChannelMessage} from "../ipc/BrowserIPC";
|
||||||
import {guid} from "../crypto/uid";
|
import {guid} from "../crypto/uid";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
export type ConnectRequestData = {
|
export type ConnectRequestData = {
|
||||||
address: string;
|
address: string;
|
||||||
|
|
|
@ -2,6 +2,7 @@ import * as log from "../log";
|
||||||
import {LogCategory} from "../log";
|
import {LogCategory} from "../log";
|
||||||
import {BasicIPCHandler, IPCChannel, ChannelMessage} from "../ipc/BrowserIPC";
|
import {BasicIPCHandler, IPCChannel, ChannelMessage} from "../ipc/BrowserIPC";
|
||||||
import {guid} from "../crypto/uid";
|
import {guid} from "../crypto/uid";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
export interface MethodProxyInvokeData {
|
export interface MethodProxyInvokeData {
|
||||||
method_name: string;
|
method_name: string;
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import {Settings, settings} from "./settings";
|
import {Settings, settings} from "./settings";
|
||||||
import * as loader from "tc-loader";
|
import * as loader from "tc-loader";
|
||||||
|
import { tr } from "./i18n/localize";
|
||||||
|
|
||||||
export enum LogCategory {
|
export enum LogCategory {
|
||||||
CHANNEL,
|
CHANNEL,
|
||||||
|
|
|
@ -43,6 +43,10 @@ import "./profiles/ConnectionProfile";
|
||||||
import "./update/UpdaterWeb";
|
import "./update/UpdaterWeb";
|
||||||
import "./file/LocalIcons";
|
import "./file/LocalIcons";
|
||||||
import "./ui/frames/menu-bar/MainMenu";
|
import "./ui/frames/menu-bar/MainMenu";
|
||||||
|
import "./connection/rtc/Connection";
|
||||||
|
import "./connection/rtc/video/Connection";
|
||||||
|
import "./video/VideoSource";
|
||||||
|
import "./media/Video";
|
||||||
|
|
||||||
import {defaultConnectProfile, findConnectProfile} from "tc-shared/profiles/ConnectionProfile";
|
import {defaultConnectProfile, findConnectProfile} from "tc-shared/profiles/ConnectionProfile";
|
||||||
import {server_connections} from "tc-shared/ConnectionManager";
|
import {server_connections} from "tc-shared/ConnectionManager";
|
||||||
|
@ -52,8 +56,6 @@ import {Registry} from "tc-shared/events";
|
||||||
import {ControlBarEvents} from "tc-shared/ui/frames/control-bar/Definitions";
|
import {ControlBarEvents} from "tc-shared/ui/frames/control-bar/Definitions";
|
||||||
import {ControlBar2} from "tc-shared/ui/frames/control-bar/Renderer";
|
import {ControlBar2} from "tc-shared/ui/frames/control-bar/Renderer";
|
||||||
import {initializeControlBarController} from "tc-shared/ui/frames/control-bar/Controller";
|
import {initializeControlBarController} from "tc-shared/ui/frames/control-bar/Controller";
|
||||||
import {spawnVideoSourceSelectModal} from "tc-shared/ui/modal/video-source/Controller";
|
|
||||||
import {getVideoDriver} from "tc-shared/video/VideoSource";
|
|
||||||
|
|
||||||
let preventWelcomeUI = false;
|
let preventWelcomeUI = false;
|
||||||
async function initialize() {
|
async function initialize() {
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
import {MediaStreamRequestResult} from "tc-shared/voice/RecorderBase";
|
import {MediaStreamRequestResult} from "tc-shared/voice/RecorderBase";
|
||||||
import * as log from "tc-shared/log";
|
import * as log from "tc-shared/log";
|
||||||
import {LogCategory, logWarn} from "tc-shared/log";
|
import {LogCategory, logWarn} from "tc-shared/log";
|
||||||
import {inputDeviceList} from "tc-backend/web/audio/RecorderDeviceList";
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
import {Registry} from "tc-shared/events";
|
|
||||||
|
|
||||||
export type MediaStreamType = "audio" | "video";
|
export type MediaStreamType = "audio" | "video";
|
||||||
|
|
||||||
|
@ -12,11 +11,13 @@ export enum MediaPermissionStatus {
|
||||||
Denied
|
Denied
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
export interface MediaStreamEvents {
|
export interface MediaStreamEvents {
|
||||||
notify_permissions_changed: { type: MediaStreamType, newState: MediaPermissionStatus },
|
notify_permissions_changed: { type: MediaStreamType, newState: MediaPermissionStatus },
|
||||||
}
|
}
|
||||||
|
|
||||||
export const mediaStreamEvents = new Registry<MediaStreamEvents>();
|
export const mediaStreamEvents = new Registry<MediaStreamEvents>();
|
||||||
|
*/
|
||||||
|
|
||||||
async function requestMediaStream0(constraints: MediaTrackConstraints, type: MediaStreamType, updateDeviceList: boolean) : Promise<MediaStreamRequestResult | MediaStream> {
|
async function requestMediaStream0(constraints: MediaTrackConstraints, type: MediaStreamType, updateDeviceList: boolean) : Promise<MediaStreamRequestResult | MediaStream> {
|
||||||
const beginTimestamp = Date.now();
|
const beginTimestamp = Date.now();
|
||||||
|
@ -24,10 +25,6 @@ async function requestMediaStream0(constraints: MediaTrackConstraints, type: Med
|
||||||
log.info(LogCategory.AUDIO, tr("Requesting a %s stream for device %s in group %s"), type, constraints.deviceId, constraints.groupId);
|
log.info(LogCategory.AUDIO, tr("Requesting a %s stream for device %s in group %s"), type, constraints.deviceId, constraints.groupId);
|
||||||
const stream = await navigator.mediaDevices.getUserMedia(type === "audio" ? { audio: constraints } : { video: constraints });
|
const stream = await navigator.mediaDevices.getUserMedia(type === "audio" ? { audio: constraints } : { video: constraints });
|
||||||
|
|
||||||
if(updateDeviceList && inputDeviceList.getStatus() === "no-permissions") {
|
|
||||||
inputDeviceList.refresh().then(() => {}); /* added the then body to avoid a inspection warning... */
|
|
||||||
}
|
|
||||||
|
|
||||||
return stream;
|
return stream;
|
||||||
} catch(error) {
|
} catch(error) {
|
||||||
if('name' in error) {
|
if('name' in error) {
|
||||||
|
@ -107,6 +104,6 @@ export function stopMediaStream(stream: MediaStream) {
|
||||||
stream.getVideoTracks().forEach(track => track.stop());
|
stream.getVideoTracks().forEach(track => track.stop());
|
||||||
stream.getAudioTracks().forEach(track => track.stop());
|
stream.getAudioTracks().forEach(track => track.stop());
|
||||||
if('stop' in stream) {
|
if('stop' in stream) {
|
||||||
stream.stop();
|
(stream as any).stop();
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -6,9 +6,10 @@ import {
|
||||||
VideoSource
|
VideoSource
|
||||||
} from "tc-shared/video/VideoSource";
|
} from "tc-shared/video/VideoSource";
|
||||||
import {Registry} from "tc-shared/events";
|
import {Registry} from "tc-shared/events";
|
||||||
import {queryMediaPermissions, requestMediaStream, stopMediaStream} from "tc-backend/web/media/Stream";
|
|
||||||
import {MediaStreamRequestResult} from "tc-shared/voice/RecorderBase";
|
import {MediaStreamRequestResult} from "tc-shared/voice/RecorderBase";
|
||||||
import {LogCategory, logDebug, logError, logWarn} from "tc-shared/log";
|
import {LogCategory, logDebug, logError, logWarn} from "tc-shared/log";
|
||||||
|
import {queryMediaPermissions, requestMediaStream, stopMediaStream} from "tc-shared/media/Stream";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
declare global {
|
declare global {
|
||||||
interface MediaDevices {
|
interface MediaDevices {
|
||||||
|
@ -221,9 +222,14 @@ export class WebVideoDriver implements VideoDriver {
|
||||||
return new WebVideoSource(videoTrack.getSettings().deviceId, tr("Screen"), source);
|
return new WebVideoSource(videoTrack.getSettings().deviceId, tr("Screen"), source);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logWarn(LogCategory.VIDEO, tr("Failed to create a screen source: %o"), error);
|
logWarn(LogCategory.VIDEO, tr("Failed to create a screen source: %o"), error);
|
||||||
|
if(error instanceof Error) {
|
||||||
|
throw error.message;
|
||||||
|
} else if(typeof error === "string") {
|
||||||
|
throw error;
|
||||||
|
} else {
|
||||||
|
throw tr("Failed to create screen source");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return undefined;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,7 @@ import {formatMessage} from "../ui/frames/chat";
|
||||||
import * as loader from "tc-loader";
|
import * as loader from "tc-loader";
|
||||||
import {Stage} from "tc-loader";
|
import {Stage} from "tc-loader";
|
||||||
import {LogCategory, logDebug, logError} from "tc-shared/log";
|
import {LogCategory, logDebug, logError} from "tc-shared/log";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
export class ConnectionProfile {
|
export class ConnectionProfile {
|
||||||
id: string;
|
id: string;
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import {AbstractServerConnection, ServerCommand} from "../connection/ConnectionBase";
|
import {AbstractServerConnection, ServerCommand} from "../connection/ConnectionBase";
|
||||||
import {HandshakeIdentityHandler} from "../connection/HandshakeHandler";
|
import {HandshakeIdentityHandler} from "../connection/HandshakeHandler";
|
||||||
import {AbstractCommandHandler} from "../connection/AbstractCommandHandler";
|
import {AbstractCommandHandler} from "../connection/AbstractCommandHandler";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
export enum IdentitifyType {
|
export enum IdentitifyType {
|
||||||
TEAFORO,
|
TEAFORO,
|
||||||
|
|
|
@ -9,6 +9,7 @@ import {LogCategory} from "../../log";
|
||||||
import {CommandResult} from "../../connection/ServerConnectionDeclaration";
|
import {CommandResult} from "../../connection/ServerConnectionDeclaration";
|
||||||
import {AbstractServerConnection} from "../../connection/ConnectionBase";
|
import {AbstractServerConnection} from "../../connection/ConnectionBase";
|
||||||
import {HandshakeIdentityHandler} from "../../connection/HandshakeHandler";
|
import {HandshakeIdentityHandler} from "../../connection/HandshakeHandler";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
class NameHandshakeHandler extends AbstractHandshakeIdentityHandler {
|
class NameHandshakeHandler extends AbstractHandshakeIdentityHandler {
|
||||||
readonly identity: NameIdentity;
|
readonly identity: NameIdentity;
|
||||||
|
|
|
@ -10,6 +10,7 @@ import {CommandResult} from "../../connection/ServerConnectionDeclaration";
|
||||||
import {AbstractServerConnection} from "../../connection/ConnectionBase";
|
import {AbstractServerConnection} from "../../connection/ConnectionBase";
|
||||||
import {HandshakeIdentityHandler} from "../../connection/HandshakeHandler";
|
import {HandshakeIdentityHandler} from "../../connection/HandshakeHandler";
|
||||||
import * as forum from "./teaspeak-forum";
|
import * as forum from "./teaspeak-forum";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
class TeaForumHandshakeHandler extends AbstractHandshakeIdentityHandler {
|
class TeaForumHandshakeHandler extends AbstractHandshakeIdentityHandler {
|
||||||
readonly identity: TeaForumIdentity;
|
readonly identity: TeaForumIdentity;
|
||||||
|
|
|
@ -3,6 +3,7 @@ import * as loader from "tc-loader";
|
||||||
import * as fidentity from "./TeaForumIdentity";
|
import * as fidentity from "./TeaForumIdentity";
|
||||||
import * as log from "../../log";
|
import * as log from "../../log";
|
||||||
import {LogCategory} from "../../log";
|
import {LogCategory} from "../../log";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
declare global {
|
declare global {
|
||||||
interface Window {
|
interface Window {
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
/* setup jsrenderer */
|
/* setup jsrenderer */
|
||||||
import "jsrender";
|
import "jsrender";
|
||||||
|
import { tr } from "./i18n/localize";
|
||||||
|
|
||||||
if(__build.target === "web") {
|
if(__build.target === "web") {
|
||||||
(window as any).$ = require("jquery");
|
(window as any).$ = require("jquery");
|
||||||
|
|
|
@ -3,6 +3,7 @@ import {LogCategory, logTrace} from "./log";
|
||||||
import * as loader from "tc-loader";
|
import * as loader from "tc-loader";
|
||||||
import {Stage} from "tc-loader";
|
import {Stage} from "tc-loader";
|
||||||
import {Registry} from "./events";
|
import {Registry} from "./events";
|
||||||
|
import { tr } from "./i18n/localize";
|
||||||
|
|
||||||
export type ConfigValueTypes = boolean | number | string | object;
|
export type ConfigValueTypes = boolean | number | string | object;
|
||||||
export type ConfigValueTypeNames = "boolean" | "number" | "string" | "object";
|
export type ConfigValueTypeNames = "boolean" | "number" | "string" | "object";
|
||||||
|
|
|
@ -3,6 +3,7 @@ import {LogCategory} from "../log";
|
||||||
import {Settings, settings} from "../settings";
|
import {Settings, settings} from "../settings";
|
||||||
import {ConnectionHandler} from "../ConnectionHandler";
|
import {ConnectionHandler} from "../ConnectionHandler";
|
||||||
import * as sbackend from "tc-backend/audio/sounds";
|
import * as sbackend from "tc-backend/audio/sounds";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
export enum Sound {
|
export enum Sound {
|
||||||
SOUND_TEST = "sound.test",
|
SOUND_TEST = "sound.test",
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import {LogCategory} from "./log";
|
import {LogCategory} from "./log";
|
||||||
import * as log from "./log";
|
import * as log from "./log";
|
||||||
|
import { tr } from "./i18n/localize";
|
||||||
|
|
||||||
enum CloseCodes {
|
enum CloseCodes {
|
||||||
UNSET = 3000,
|
UNSET = 3000,
|
||||||
|
|
|
@ -5,6 +5,7 @@ import {LogCategory} from "../log";
|
||||||
import {Settings, settings} from "../settings";
|
import {Settings, settings} from "../settings";
|
||||||
import {renderMarkdownAsBBCode} from "../text/markdown";
|
import {renderMarkdownAsBBCode} from "../text/markdown";
|
||||||
import {escapeBBCode} from "../text/bbcode";
|
import {escapeBBCode} from "../text/bbcode";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
const URL_REGEX = /^(([a-zA-Z0-9-]+\.)+[a-zA-Z0-9-]{2,63})(?:\/((?:[^\s?]+)?)(?:\?(\S+))?)?$/gm;
|
const URL_REGEX = /^(([a-zA-Z0-9-]+\.)+[a-zA-Z0-9-]{2,63})(?:\/((?:[^\s?]+)?)(?:\?(\S+))?)?$/gm;
|
||||||
function process_urls(message: string) : string {
|
function process_urls(message: string) : string {
|
||||||
|
|
|
@ -11,6 +11,7 @@ import {
|
||||||
Token
|
Token
|
||||||
} from "remarkable/lib";
|
} from "remarkable/lib";
|
||||||
import {escapeBBCode} from "../text/bbcode";
|
import {escapeBBCode} from "../text/bbcode";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
const { Remarkable } = require("remarkable");
|
const { Remarkable } = require("remarkable");
|
||||||
|
|
||||||
export class MD2BBCodeRenderer {
|
export class MD2BBCodeRenderer {
|
||||||
|
|
|
@ -22,6 +22,7 @@ import {ViewReasonId} from "../ConnectionHandler";
|
||||||
import {EventChannelData} from "../ui/frames/log/Definitions";
|
import {EventChannelData} from "../ui/frames/log/Definitions";
|
||||||
import {ErrorCode} from "../connection/ErrorCode";
|
import {ErrorCode} from "../connection/ErrorCode";
|
||||||
import {ClientIcon} from "svg-sprites/client-icons";
|
import {ClientIcon} from "svg-sprites/client-icons";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
export enum ChannelType {
|
export enum ChannelType {
|
||||||
PERMANENT,
|
PERMANENT,
|
||||||
|
|
|
@ -30,6 +30,7 @@ import {VoiceClient} from "../voice/VoiceClient";
|
||||||
import {VoicePlayerEvents, VoicePlayerState} from "../voice/VoicePlayer";
|
import {VoicePlayerEvents, VoicePlayerState} from "../voice/VoicePlayer";
|
||||||
import {ChannelTreeUIEvents} from "tc-shared/ui/tree/Definitions";
|
import {ChannelTreeUIEvents} from "tc-shared/ui/tree/Definitions";
|
||||||
import {VideoClient} from "tc-shared/connection/VideoConnection";
|
import {VideoClient} from "tc-shared/connection/VideoConnection";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
export enum ClientType {
|
export enum ClientType {
|
||||||
CLIENT_VOICE,
|
CLIENT_VOICE,
|
||||||
|
|
|
@ -13,6 +13,7 @@ import {spawnAvatarList} from "../ui/modal/ModalAvatarList";
|
||||||
import {connection_log} from "../ui/modal/ModalConnect";
|
import {connection_log} from "../ui/modal/ModalConnect";
|
||||||
import {Registry} from "../events";
|
import {Registry} from "../events";
|
||||||
import {ChannelTreeEntry, ChannelTreeEntryEvents} from "./ChannelTreeEntry";
|
import {ChannelTreeEntry, ChannelTreeEntryEvents} from "./ChannelTreeEntry";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
export class ServerProperties {
|
export class ServerProperties {
|
||||||
virtualserver_host: string = "";
|
virtualserver_host: string = "";
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import {RemoteIcon} from "tc-shared/file/Icons";
|
import {RemoteIcon} from "tc-shared/file/Icons";
|
||||||
import {ClientIcon} from "svg-sprites/client-icons";
|
import {ClientIcon} from "svg-sprites/client-icons";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
export type MenuEntryLabel = {
|
export type MenuEntryLabel = {
|
||||||
text: string,
|
text: string,
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import {Settings, settings} from "../../settings";
|
import {Settings, settings} from "../../settings";
|
||||||
import {LogCategory} from "../../log";
|
import {LogCategory} from "../../log";
|
||||||
import * as log from "../../log";
|
import * as log from "../../log";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
declare global {
|
declare global {
|
||||||
interface JQuery<TElement = HTMLElement> {
|
interface JQuery<TElement = HTMLElement> {
|
||||||
|
|
|
@ -2,6 +2,7 @@ import {LogCategory} from "../../log";
|
||||||
import {settings, Settings} from "../../settings";
|
import {settings, Settings} from "../../settings";
|
||||||
import * as log from "../../log";
|
import * as log from "../../log";
|
||||||
import * as loader from "tc-loader";
|
import * as loader from "tc-loader";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
export enum ChatType {
|
export enum ChatType {
|
||||||
GENERAL,
|
GENERAL,
|
||||||
|
|
|
@ -10,6 +10,7 @@ import {MusicInfo} from "../../ui/frames/side/music_info";
|
||||||
import {ConversationManager} from "../../ui/frames/side/ConversationManager";
|
import {ConversationManager} from "../../ui/frames/side/ConversationManager";
|
||||||
import {PrivateConversationManager} from "../../ui/frames/side/PrivateConversationManager";
|
import {PrivateConversationManager} from "../../ui/frames/side/PrivateConversationManager";
|
||||||
import {generateIconJQueryTag, getIconManager} from "tc-shared/file/Icons";
|
import {generateIconJQueryTag, getIconManager} from "tc-shared/file/Icons";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
export enum InfoFrameMode {
|
export enum InfoFrameMode {
|
||||||
NONE = "none",
|
NONE = "none",
|
||||||
|
|
|
@ -6,6 +6,7 @@ import {ConnectionHandlerList} from "tc-shared/ui/frames/connection-handler-list
|
||||||
import {server_connections} from "tc-shared/ConnectionManager";
|
import {server_connections} from "tc-shared/ConnectionManager";
|
||||||
import {LogCategory, logWarn} from "tc-shared/log";
|
import {LogCategory, logWarn} from "tc-shared/log";
|
||||||
import {ConnectionState} from "tc-shared/ConnectionHandler";
|
import {ConnectionState} from "tc-shared/ConnectionHandler";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
export function initializeConnectionUIList() {
|
export function initializeConnectionUIList() {
|
||||||
const container = document.getElementById("connection-handler-list");
|
const container = document.getElementById("connection-handler-list");
|
||||||
|
|
|
@ -23,6 +23,7 @@ import {
|
||||||
import {LogCategory, logWarn} from "tc-shared/log";
|
import {LogCategory, logWarn} from "tc-shared/log";
|
||||||
import {createErrorModal, createInputModal} from "tc-shared/ui/elements/Modal";
|
import {createErrorModal, createInputModal} from "tc-shared/ui/elements/Modal";
|
||||||
import {VideoBroadcastState, VideoBroadcastType, VideoConnectionStatus} from "tc-shared/connection/VideoConnection";
|
import {VideoBroadcastState, VideoBroadcastType, VideoConnectionStatus} from "tc-shared/connection/VideoConnection";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
class InfoController {
|
class InfoController {
|
||||||
private readonly mode: ControlBarMode;
|
private readonly mode: ControlBarMode;
|
||||||
|
|
|
@ -4,6 +4,7 @@ import {Registry} from "tc-shared/events";
|
||||||
import {VoiceConnectionStatus} from "tc-shared/connection/VoiceConnection";
|
import {VoiceConnectionStatus} from "tc-shared/connection/VoiceConnection";
|
||||||
import {VideoConnectionStatus} from "tc-shared/connection/VideoConnection";
|
import {VideoConnectionStatus} from "tc-shared/connection/VideoConnection";
|
||||||
import {LogCategory, logError} from "tc-shared/log";
|
import {LogCategory, logError} from "tc-shared/log";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
enum StatusNotifyState {
|
enum StatusNotifyState {
|
||||||
/* no notify has been scheduled */
|
/* no notify has been scheduled */
|
||||||
|
|
|
@ -2,6 +2,7 @@ import {ConnectionHandler} from "../../ConnectionHandler";
|
||||||
import {settings, Settings} from "../../settings";
|
import {settings, Settings} from "../../settings";
|
||||||
import {LogCategory} from "../../log";
|
import {LogCategory} from "../../log";
|
||||||
import * as log from "../../log";
|
import * as log from "../../log";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
export class Hostbanner {
|
export class Hostbanner {
|
||||||
readonly html_tag: JQuery<HTMLElement>;
|
readonly html_tag: JQuery<HTMLElement>;
|
||||||
|
|
|
@ -11,6 +11,7 @@ import {formatDate} from "../../../MessageFormatter";
|
||||||
import {Settings, settings} from "../../../settings";
|
import {Settings, settings} from "../../../settings";
|
||||||
import {server_connections} from "tc-shared/ConnectionManager";
|
import {server_connections} from "tc-shared/ConnectionManager";
|
||||||
import {getIconManager} from "tc-shared/file/Icons";
|
import {getIconManager} from "tc-shared/file/Icons";
|
||||||
|
import { tra, tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
export type DispatcherLog<T extends keyof TypeInfo> = (data: TypeInfo[T], handlerId: string, eventType: T) => void;
|
export type DispatcherLog<T extends keyof TypeInfo> = (data: TypeInfo[T], handlerId: string, eventType: T) => void;
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,7 @@ import {
|
||||||
DirectoryBookmark
|
DirectoryBookmark
|
||||||
} from "tc-shared/bookmarks";
|
} from "tc-shared/bookmarks";
|
||||||
import {getBackend} from "tc-shared/backend";
|
import {getBackend} from "tc-shared/backend";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
function renderConnectionItems() {
|
function renderConnectionItems() {
|
||||||
const items: MenuBarEntry[] = [];
|
const items: MenuBarEntry[] = [];
|
||||||
|
|
|
@ -10,7 +10,7 @@ import {preprocessChatMessageForSend} from "../../../text/chat";
|
||||||
import {CommandResult} from "../../../connection/ServerConnectionDeclaration";
|
import {CommandResult} from "../../../connection/ServerConnectionDeclaration";
|
||||||
import * as log from "../../../log";
|
import * as log from "../../../log";
|
||||||
import {LogCategory} from "../../../log";
|
import {LogCategory} from "../../../log";
|
||||||
import {tra} from "../../../i18n/localize";
|
import {tra, tr} from "../../../i18n/localize";
|
||||||
import {ErrorCode} from "../../../connection/ErrorCode";
|
import {ErrorCode} from "../../../connection/ErrorCode";
|
||||||
|
|
||||||
export const kMaxChatFrameMessageSize = 50; /* max 100 messages, since the server does not support more than 100 messages queried at once */
|
export const kMaxChatFrameMessageSize = 50; /* max 100 messages, since the server does not support more than 100 messages queried at once */
|
||||||
|
|
|
@ -6,7 +6,7 @@ import {LogCategory} from "../../../log";
|
||||||
import {CommandResult} from "../../../connection/ServerConnectionDeclaration";
|
import {CommandResult} from "../../../connection/ServerConnectionDeclaration";
|
||||||
import {ServerCommand} from "../../../connection/ConnectionBase";
|
import {ServerCommand} from "../../../connection/ConnectionBase";
|
||||||
import {Settings} from "../../../settings";
|
import {Settings} from "../../../settings";
|
||||||
import {traj} from "../../../i18n/localize";
|
import {traj, tr} from "../../../i18n/localize";
|
||||||
import {createErrorModal} from "../../../ui/elements/Modal";
|
import {createErrorModal} from "../../../ui/elements/Modal";
|
||||||
import ReactDOM = require("react-dom");
|
import ReactDOM = require("react-dom");
|
||||||
import {
|
import {
|
||||||
|
|
|
@ -3,6 +3,7 @@ import {Stage} from "tc-loader";
|
||||||
import * as log from "../../../log";
|
import * as log from "../../../log";
|
||||||
import {LogCategory} from "../../../log";
|
import {LogCategory} from "../../../log";
|
||||||
import {ChatEvent} from "../../../ui/frames/side/ConversationDefinitions";
|
import {ChatEvent} from "../../../ui/frames/side/ConversationDefinitions";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
const clientUniqueId2StoreName = uniqueId => "conversation-" + uniqueId;
|
const clientUniqueId2StoreName = uniqueId => "conversation-" + uniqueId;
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,7 @@ import {LogCategory} from "../../../log";
|
||||||
import {queryConversationEvents, registerConversationEvent} from "../../../ui/frames/side/PrivateConversationHistory";
|
import {queryConversationEvents, registerConversationEvent} from "../../../ui/frames/side/PrivateConversationHistory";
|
||||||
import {AbstractChat, AbstractChatManager} from "../../../ui/frames/side/AbstractConversion";
|
import {AbstractChat, AbstractChatManager} from "../../../ui/frames/side/AbstractConversion";
|
||||||
import {ChannelTreeEvents} from "tc-shared/tree/ChannelTree";
|
import {ChannelTreeEvents} from "tc-shared/tree/ChannelTree";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
export type OutOfViewClient = {
|
export type OutOfViewClient = {
|
||||||
nickname: string,
|
nickname: string,
|
||||||
|
|
|
@ -7,6 +7,7 @@ import * as i18nc from "../../../i18n/country";
|
||||||
import {ClientEntry, LocalClientEntry} from "../../../tree/Client";
|
import {ClientEntry, LocalClientEntry} from "../../../tree/Client";
|
||||||
import {format_online_time} from "../../../utils/TimeUtils";
|
import {format_online_time} from "../../../utils/TimeUtils";
|
||||||
import {generateIconJQueryTag, getIconManager} from "tc-shared/file/Icons";
|
import {generateIconJQueryTag, getIconManager} from "tc-shared/file/Icons";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
export class ClientInfo {
|
export class ClientInfo {
|
||||||
readonly handle: Frame;
|
readonly handle: Frame;
|
||||||
|
|
|
@ -7,6 +7,7 @@ import * as image_preview from "../image_preview";
|
||||||
import {Registry} from "../../../events";
|
import {Registry} from "../../../events";
|
||||||
import {ErrorCode} from "../../../connection/ErrorCode";
|
import {ErrorCode} from "../../../connection/ErrorCode";
|
||||||
import {ClientEvents, MusicClientEntry, SongInfo} from "../../../tree/Client";
|
import {ClientEvents, MusicClientEntry, SongInfo} from "../../../tree/Client";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
export interface MusicSidebarEvents {
|
export interface MusicSidebarEvents {
|
||||||
"open": {}, /* triggers when frame should be shown */
|
"open": {}, /* triggers when frame should be shown */
|
||||||
|
|
|
@ -7,6 +7,7 @@ import {ChannelVideoEvents, kLocalVideoId} from "tc-shared/ui/frames/video/Defin
|
||||||
import {VideoBroadcastState, VideoBroadcastType, VideoConnection} from "tc-shared/connection/VideoConnection";
|
import {VideoBroadcastState, VideoBroadcastType, VideoConnection} from "tc-shared/connection/VideoConnection";
|
||||||
import {ClientEntry, ClientType, LocalClientEntry, MusicClientEntry} from "tc-shared/tree/Client";
|
import {ClientEntry, ClientType, LocalClientEntry, MusicClientEntry} from "tc-shared/tree/Client";
|
||||||
import {LogCategory, logWarn} from "tc-shared/log";
|
import {LogCategory, logWarn} from "tc-shared/log";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
const cssStyle = require("./Renderer.scss");
|
const cssStyle = require("./Renderer.scss");
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@ import {ClientEntry} from "../tree/Client";
|
||||||
import {htmlEscape} from "../ui/frames/chat";
|
import {htmlEscape} from "../ui/frames/chat";
|
||||||
import {guid} from "../crypto/uid";
|
import {guid} from "../crypto/uid";
|
||||||
import {server_connections} from "tc-shared/ConnectionManager";
|
import {server_connections} from "tc-shared/ConnectionManager";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
let mouse_coordinates: {x: number, y: number} = {x: 0, y: 0};
|
let mouse_coordinates: {x: number, y: number} = {x: 0, y: 0};
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@ import * as loader from "tc-loader";
|
||||||
import * as moment from "moment";
|
import * as moment from "moment";
|
||||||
import * as log from "../log";
|
import * as log from "../log";
|
||||||
import {LogCategory} from "../log";
|
import {LogCategory} from "../log";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
export function setupJSRender() : boolean {
|
export function setupJSRender() : boolean {
|
||||||
if(!$.views) {
|
if(!$.views) {
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import {createModal} from "../../ui/elements/Modal";
|
import {createModal} from "../../ui/elements/Modal";
|
||||||
import * as log from "../../log";
|
import * as log from "../../log";
|
||||||
import {LogCategory} from "../../log";
|
import {LogCategory} from "../../log";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
function format_date(date: number) {
|
function format_date(date: number) {
|
||||||
const d = new Date(date);
|
const d = new Date(date);
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
//TODO: Test if we could render this image and not only the browser by knowing the type.
|
//TODO: Test if we could render this image and not only the browser by knowing the type.
|
||||||
import {createErrorModal, createModal} from "../../ui/elements/Modal";
|
import {createErrorModal, createModal} from "../../ui/elements/Modal";
|
||||||
import {tra} from "../../i18n/localize";
|
import {tra, tr} from "../../i18n/localize";
|
||||||
import {arrayBufferBase64} from "../../utils/buffers";
|
import {arrayBufferBase64} from "../../utils/buffers";
|
||||||
|
|
||||||
export function spawnAvatarUpload(callback_data: (data: ArrayBuffer | undefined | null) => any) {
|
export function spawnAvatarUpload(callback_data: (data: ArrayBuffer | undefined | null) => any) {
|
||||||
|
|
|
@ -6,6 +6,7 @@ import {base64_encode_ab} from "../../utils/buffers";
|
||||||
import {spawnYesNo} from "../../ui/modal/ModalYesNo";
|
import {spawnYesNo} from "../../ui/modal/ModalYesNo";
|
||||||
import {ClientEntry} from "../../tree/Client";
|
import {ClientEntry} from "../../tree/Client";
|
||||||
import * as moment from "moment";
|
import * as moment from "moment";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
const avatar_to_uid = (id: string) => {
|
const avatar_to_uid = (id: string) => {
|
||||||
const buffer = new Uint8Array(id.length / 2);
|
const buffer = new Uint8Array(id.length / 2);
|
||||||
|
|
|
@ -3,6 +3,7 @@ import {ConnectionHandler} from "../../ConnectionHandler";
|
||||||
import {createModal} from "../../ui/elements/Modal";
|
import {createModal} from "../../ui/elements/Modal";
|
||||||
import {duration_data} from "../../ui/modal/ModalBanList";
|
import {duration_data} from "../../ui/modal/ModalBanList";
|
||||||
import * as tooltip from "../../ui/elements/Tooltip";
|
import * as tooltip from "../../ui/elements/Tooltip";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
export type BanEntry = {
|
export type BanEntry = {
|
||||||
name?: string;
|
name?: string;
|
||||||
|
|
|
@ -10,6 +10,7 @@ import * as htmltags from "../../ui/htmltags";
|
||||||
import {format_time, formatMessage} from "../../ui/frames/chat";
|
import {format_time, formatMessage} from "../../ui/frames/chat";
|
||||||
import * as moment from "moment";
|
import * as moment from "moment";
|
||||||
import {ErrorCode} from "../../connection/ErrorCode";
|
import {ErrorCode} from "../../connection/ErrorCode";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
export function openBanList(client: ConnectionHandler) {
|
export function openBanList(client: ConnectionHandler) {
|
||||||
let modal: Modal;
|
let modal: Modal;
|
||||||
|
|
|
@ -19,6 +19,7 @@ import {LogCategory} from "../../log";
|
||||||
import * as i18nc from "../../i18n/country";
|
import * as i18nc from "../../i18n/country";
|
||||||
import {formatMessage} from "../../ui/frames/chat";
|
import {formatMessage} from "../../ui/frames/chat";
|
||||||
import {generateIconJQueryTag, getIconManager} from "tc-shared/file/Icons";
|
import {generateIconJQueryTag, getIconManager} from "tc-shared/file/Icons";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
export function spawnBookmarkModal() {
|
export function spawnBookmarkModal() {
|
||||||
let modal: Modal;
|
let modal: Modal;
|
||||||
|
|
|
@ -227,6 +227,26 @@ class VolumeChangeModal extends React.Component<{ clientName: string, maxVolume?
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class VolumeChange extends InternalModal {
|
||||||
|
private readonly events: Registry<VolumeChangeEvents>;
|
||||||
|
private readonly client: ClientEntry;
|
||||||
|
|
||||||
|
constructor(events: Registry<VolumeChangeEvents>, client: ClientEntry) {
|
||||||
|
super();
|
||||||
|
|
||||||
|
this.events = events;
|
||||||
|
this.client = client;
|
||||||
|
}
|
||||||
|
|
||||||
|
renderBody() {
|
||||||
|
return <VolumeChangeModal remote={false} clientName={this.client.clientNickName()} events={this.events} />;
|
||||||
|
}
|
||||||
|
|
||||||
|
title() {
|
||||||
|
return <Translatable>Change local volume</Translatable>;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export function spawnClientVolumeChange(client: ClientEntry) {
|
export function spawnClientVolumeChange(client: ClientEntry) {
|
||||||
const events = new Registry<VolumeChangeEvents>();
|
const events = new Registry<VolumeChangeEvents>();
|
||||||
|
|
||||||
|
@ -239,25 +259,35 @@ export function spawnClientVolumeChange(client: ClientEntry) {
|
||||||
client.setAudioVolume(event.newValue);
|
client.setAudioVolume(event.newValue);
|
||||||
});
|
});
|
||||||
|
|
||||||
const modal = spawnReactModal(class extends InternalModal {
|
const modal = spawnReactModal(VolumeChange, events, client);
|
||||||
constructor() {
|
|
||||||
super();
|
|
||||||
}
|
|
||||||
|
|
||||||
renderBody() {
|
events.on("close-modal", () => modal.destroy());
|
||||||
return <VolumeChangeModal remote={false} clientName={client.clientNickName()} events={events} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
title() {
|
|
||||||
return <Translatable>Change local volume</Translatable>;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
events.on("close-modal", event => modal.destroy());
|
|
||||||
modal.show();
|
modal.show();
|
||||||
return modal;
|
return modal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class VolumeChangeBot extends InternalModal {
|
||||||
|
private readonly events: Registry<VolumeChangeEvents>;
|
||||||
|
private readonly client: ClientEntry;
|
||||||
|
private readonly maxValue: number;
|
||||||
|
|
||||||
|
constructor(client: ClientEntry, events: Registry<VolumeChangeEvents>, maxValue: number) {
|
||||||
|
super();
|
||||||
|
|
||||||
|
this.maxValue = maxValue;
|
||||||
|
this.events = events;
|
||||||
|
this.client = client;
|
||||||
|
}
|
||||||
|
|
||||||
|
renderBody() {
|
||||||
|
return <VolumeChangeModal remote={true} clientName={this.client.clientNickName()} maxVolume={this.maxValue} events={this.events} />;
|
||||||
|
}
|
||||||
|
|
||||||
|
title() {
|
||||||
|
return <Translatable>Change remote volume</Translatable>;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export function spawnMusicBotVolumeChange(client: MusicClientEntry, maxValue: number) {
|
export function spawnMusicBotVolumeChange(client: MusicClientEntry, maxValue: number) {
|
||||||
//FIXME: Max value!
|
//FIXME: Max value!
|
||||||
const events = new Registry<VolumeChangeEvents>();
|
const events = new Registry<VolumeChangeEvents>();
|
||||||
|
@ -278,19 +308,7 @@ export function spawnMusicBotVolumeChange(client: MusicClientEntry, maxValue: nu
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
const modal = spawnReactModal(class extends InternalModal {
|
const modal = spawnReactModal(VolumeChangeBot, client, events, maxValue);
|
||||||
constructor() {
|
|
||||||
super();
|
|
||||||
}
|
|
||||||
|
|
||||||
renderBody() {
|
|
||||||
return <VolumeChangeModal remote={true} clientName={client.clientNickName()} maxVolume={maxValue} events={events} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
title() {
|
|
||||||
return <Translatable>Change remote volume</Translatable>;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
events.on("close-modal", event => modal.destroy());
|
events.on("close-modal", event => modal.destroy());
|
||||||
modal.show();
|
modal.show();
|
||||||
|
|
|
@ -4,6 +4,7 @@ import {copy_to_clipboard} from "../../utils/helpers";
|
||||||
import * as tooltip from "../../ui/elements/Tooltip";
|
import * as tooltip from "../../ui/elements/Tooltip";
|
||||||
import {formatMessage} from "../../ui/frames/chat";
|
import {formatMessage} from "../../ui/frames/chat";
|
||||||
import {renderBBCodeAsJQuery} from "tc-shared/text/bbcode";
|
import {renderBBCodeAsJQuery} from "tc-shared/text/bbcode";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
export function openChannelInfo(channel: ChannelEntry) {
|
export function openChannelInfo(channel: ChannelEntry) {
|
||||||
let modal: Modal;
|
let modal: Modal;
|
||||||
|
|
|
@ -7,6 +7,7 @@ import * as tooltip from "../../ui/elements/Tooltip";
|
||||||
import * as moment from "moment";
|
import * as moment from "moment";
|
||||||
import {format_number, network} from "../../ui/frames/chat";
|
import {format_number, network} from "../../ui/frames/chat";
|
||||||
import {generateIconJQueryTag, getIconManager} from "tc-shared/file/Icons";
|
import {generateIconJQueryTag, getIconManager} from "tc-shared/file/Icons";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
type InfoUpdateCallback = (info: ClientConnectionInfo) => any;
|
type InfoUpdateCallback = (info: ClientConnectionInfo) => any;
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,7 @@ import * as i18nc from "../../i18n/country";
|
||||||
import {spawnSettingsModal} from "../../ui/modal/ModalSettings";
|
import {spawnSettingsModal} from "../../ui/modal/ModalSettings";
|
||||||
import {server_connections} from "tc-shared/ConnectionManager";
|
import {server_connections} from "tc-shared/ConnectionManager";
|
||||||
import {generateIconJQueryTag, getIconManager} from "tc-shared/file/Icons";
|
import {generateIconJQueryTag, getIconManager} from "tc-shared/file/Icons";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
//FIXME: Move this shit out of this file!
|
//FIXME: Move this shit out of this file!
|
||||||
export namespace connection_log {
|
export namespace connection_log {
|
||||||
|
|
|
@ -11,6 +11,7 @@ import {spawnIconSelect} from "../../ui/modal/ModalIconSelect";
|
||||||
import {hashPassword} from "../../utils/helpers";
|
import {hashPassword} from "../../utils/helpers";
|
||||||
import {sliderfy} from "../../ui/elements/Slider";
|
import {sliderfy} from "../../ui/elements/Slider";
|
||||||
import {generateIconJQueryTag, getIconManager} from "tc-shared/file/Icons";
|
import {generateIconJQueryTag, getIconManager} from "tc-shared/file/Icons";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
export function createChannelModal(connection: ConnectionHandler, channel: ChannelEntry | undefined, parent: ChannelEntry | undefined, permissions: PermissionManager, callback: (properties?: ChannelProperties, permissions?: PermissionValue[]) => any) {
|
export function createChannelModal(connection: ConnectionHandler, channel: ChannelEntry | undefined, parent: ChannelEntry | undefined, permissions: PermissionManager, callback: (properties?: ChannelProperties, permissions?: PermissionValue[]) => any) {
|
||||||
let properties: ChannelProperties = { } as ChannelProperties; //The changes properties
|
let properties: ChannelProperties = { } as ChannelProperties; //The changes properties
|
||||||
|
|
|
@ -2,6 +2,7 @@ import {createErrorModal, createInfoModal, createModal, Modal} from "../../ui/el
|
||||||
import {TeaSpeakIdentity} from "../../profiles/identities/TeamSpeakIdentity";
|
import {TeaSpeakIdentity} from "../../profiles/identities/TeamSpeakIdentity";
|
||||||
import * as tooltip from "../../ui/elements/Tooltip";
|
import * as tooltip from "../../ui/elements/Tooltip";
|
||||||
import {formatMessage} from "../../ui/frames/chat";
|
import {formatMessage} from "../../ui/frames/chat";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
export function spawnTeamSpeakIdentityImprove(identity: TeaSpeakIdentity, name: string): Modal {
|
export function spawnTeamSpeakIdentityImprove(identity: TeaSpeakIdentity, name: string): Modal {
|
||||||
let modal: Modal;
|
let modal: Modal;
|
||||||
|
|
|
@ -2,6 +2,7 @@ import {settings, Settings} from "../../settings";
|
||||||
import {createModal, Modal} from "../../ui/elements/Modal";
|
import {createModal, Modal} from "../../ui/elements/Modal";
|
||||||
import {ConnectionHandler} from "../../ConnectionHandler";
|
import {ConnectionHandler} from "../../ConnectionHandler";
|
||||||
import {ServerAddress} from "../../tree/Server";
|
import {ServerAddress} from "../../tree/Server";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
type URLGeneratorSettings = {
|
type URLGeneratorSettings = {
|
||||||
flag_direct: boolean,
|
flag_direct: boolean,
|
||||||
|
@ -36,7 +37,7 @@ const url_generators: { [key: string]: URLGenerator } = {
|
||||||
"tea-web": {
|
"tea-web": {
|
||||||
generate: properties => {
|
generate: properties => {
|
||||||
const address = properties.resolved_address ? properties.resolved_address : properties.address;
|
const address = properties.resolved_address ? properties.resolved_address : properties.address;
|
||||||
const address_str = address.host + (address.port === 9987 ? "" : address.port);
|
const address_str = address.host + (address.port === 9987 ? "" : ":" + address.port);
|
||||||
const parameter = "connect_default=" + (properties.flag_direct ? 1 : 0) + "&connect_address=" + encodeURIComponent(address_str);
|
const parameter = "connect_default=" + (properties.flag_direct ? 1 : 0) + "&connect_address=" + encodeURIComponent(address_str);
|
||||||
|
|
||||||
let pathbase = "";
|
let pathbase = "";
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import {createModal} from "../../ui/elements/Modal";
|
import {createModal} from "../../ui/elements/Modal";
|
||||||
import {EventType, key_description, KeyEvent} from "../../PPTListener";
|
import {EventType, key_description, KeyEvent} from "../../PPTListener";
|
||||||
import * as ppt from "tc-backend/ppt";
|
import * as ppt from "tc-backend/ppt";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
export function spawnKeySelect(callback: (key?: KeyEvent) => void) {
|
export function spawnKeySelect(callback: (key?: KeyEvent) => void) {
|
||||||
let modal = createModal({
|
let modal = createModal({
|
||||||
|
|
|
@ -5,7 +5,7 @@ import {modal, Registry} from "../../events";
|
||||||
import {CommandResult} from "../../connection/ServerConnectionDeclaration";
|
import {CommandResult} from "../../connection/ServerConnectionDeclaration";
|
||||||
import * as log from "../../log";
|
import * as log from "../../log";
|
||||||
import {LogCategory} from "../../log";
|
import {LogCategory} from "../../log";
|
||||||
import {tra} from "../../i18n/localize";
|
import {tra, tr} from "../../i18n/localize";
|
||||||
import * as tooltip from "../../ui/elements/Tooltip";
|
import * as tooltip from "../../ui/elements/Tooltip";
|
||||||
import * as i18nc from "../../i18n/country";
|
import * as i18nc from "../../i18n/country";
|
||||||
import {find} from "../../permission/PermissionManager";
|
import {find} from "../../permission/PermissionManager";
|
||||||
|
@ -20,7 +20,7 @@ export function openMusicManage(client: ConnectionHandler, bot: MusicClientEntry
|
||||||
permission_controller(ev_registry, bot, client);
|
permission_controller(ev_registry, bot, client);
|
||||||
|
|
||||||
let modal = createModal({
|
let modal = createModal({
|
||||||
header: tr(tr("Playlist Manage")),
|
header: tr("Playlist Manage"),
|
||||||
body: () => build_modal(ev_registry),
|
body: () => build_modal(ev_registry),
|
||||||
footer: null,
|
footer: null,
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@ import {createModal, Modal} from "../../ui/elements/Modal";
|
||||||
import * as htmltags from "../../ui/htmltags";
|
import * as htmltags from "../../ui/htmltags";
|
||||||
import * as moment from "moment";
|
import * as moment from "moment";
|
||||||
import {renderBBCodeAsJQuery} from "../../text/bbcode";
|
import {renderBBCodeAsJQuery} from "../../text/bbcode";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
let global_modal: PokeModal;
|
let global_modal: PokeModal;
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@ import {createErrorModal, createModal} from "../../ui/elements/Modal";
|
||||||
import {CommandResult} from "../../connection/ServerConnectionDeclaration";
|
import {CommandResult} from "../../connection/ServerConnectionDeclaration";
|
||||||
import {ConnectionHandler} from "../../ConnectionHandler";
|
import {ConnectionHandler} from "../../ConnectionHandler";
|
||||||
import {SingleCommandHandler} from "../../connection/ConnectionBase";
|
import {SingleCommandHandler} from "../../connection/ConnectionBase";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
export function spawnQueryCreate(connection: ConnectionHandler, callback_created?: (user, pass) => any) {
|
export function spawnQueryCreate(connection: ConnectionHandler, callback_created?: (user, pass) => any) {
|
||||||
let modal;
|
let modal;
|
||||||
|
|
|
@ -169,6 +169,7 @@ import {ConnectionHandler} from "../../ConnectionHandler";
|
||||||
import {spawnQueryCreate, spawnQueryCreated} from "../../ui/modal/ModalQuery";
|
import {spawnQueryCreate, spawnQueryCreated} from "../../ui/modal/ModalQuery";
|
||||||
import {formatMessage} from "../../ui/frames/chat";
|
import {formatMessage} from "../../ui/frames/chat";
|
||||||
import {ErrorCode} from "../../connection/ErrorCode";
|
import {ErrorCode} from "../../connection/ErrorCode";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
export function spawnQueryManage(client: ConnectionHandler) {
|
export function spawnQueryManage(client: ConnectionHandler) {
|
||||||
let modal: Modal;
|
let modal: Modal;
|
||||||
|
|
|
@ -7,6 +7,7 @@ import * as tooltip from "../../ui/elements/Tooltip";
|
||||||
import {spawnIconSelect} from "../../ui/modal/ModalIconSelect";
|
import {spawnIconSelect} from "../../ui/modal/ModalIconSelect";
|
||||||
import {network} from "../../ui/frames/chat";
|
import {network} from "../../ui/frames/chat";
|
||||||
import {generateIconJQueryTag, getIconManager} from "tc-shared/file/Icons";
|
import {generateIconJQueryTag, getIconManager} from "tc-shared/file/Icons";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
export function createServerModal(server: ServerEntry, callback: (properties?: ServerProperties) => Promise<void>) {
|
export function createServerModal(server: ServerEntry, callback: (properties?: ServerProperties) => Promise<void>) {
|
||||||
const properties = Object.assign({}, server.properties);
|
const properties = Object.assign({}, server.properties);
|
||||||
|
|
|
@ -14,6 +14,7 @@ import {format_time, formatMessage} from "../../ui/frames/chat";
|
||||||
import {Hostbanner} from "../../ui/frames/hostbanner";
|
import {Hostbanner} from "../../ui/frames/hostbanner";
|
||||||
import * as moment from "moment";
|
import * as moment from "moment";
|
||||||
import {ErrorCode} from "../../connection/ErrorCode";
|
import {ErrorCode} from "../../connection/ErrorCode";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
export function openServerInfo(server: ServerEntry) {
|
export function openServerInfo(server: ServerEntry) {
|
||||||
let modal: Modal;
|
let modal: Modal;
|
||||||
|
|
|
@ -5,6 +5,7 @@ import {Graph} from "../../ui/elements/NetGraph";
|
||||||
import * as tooltip from "../../ui/elements/Tooltip";
|
import * as tooltip from "../../ui/elements/Tooltip";
|
||||||
import {network} from "../../ui/frames/chat";
|
import {network} from "../../ui/frames/chat";
|
||||||
import {ErrorCode} from "../../connection/ErrorCode";
|
import {ErrorCode} from "../../connection/ErrorCode";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
export enum RequestInfoStatus {
|
export enum RequestInfoStatus {
|
||||||
SUCCESS,
|
SUCCESS,
|
||||||
|
|
|
@ -4,6 +4,7 @@ import {CssEditorEvents, CssVariable} from "../../../ui/modal/css-editor/Definit
|
||||||
import {spawnExternalModal} from "../../../ui/react-elements/external-modal";
|
import {spawnExternalModal} from "../../../ui/react-elements/external-modal";
|
||||||
import {Registry} from "../../../events";
|
import {Registry} from "../../../events";
|
||||||
import {LogCategory, logWarn} from "../../../log";
|
import {LogCategory, logWarn} from "../../../log";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
interface CustomVariable {
|
interface CustomVariable {
|
||||||
name: string;
|
name: string;
|
||||||
|
|
|
@ -9,7 +9,7 @@ import {Entry, MenuEntry, MenuEntryType, spawn_context_menu} from "../../../ui/e
|
||||||
import * as ppt from "tc-backend/ppt";
|
import * as ppt from "tc-backend/ppt";
|
||||||
import {SpecialKey} from "../../../PPTListener";
|
import {SpecialKey} from "../../../PPTListener";
|
||||||
import {spawnYesNo} from "../../../ui/modal/ModalYesNo";
|
import {spawnYesNo} from "../../../ui/modal/ModalYesNo";
|
||||||
import {tra, traj} from "../../../i18n/localize";
|
import {tra, traj, tr} from "../../../i18n/localize";
|
||||||
import {
|
import {
|
||||||
FileTransfer,
|
FileTransfer,
|
||||||
FileTransferState,
|
FileTransferState,
|
||||||
|
|
|
@ -232,7 +232,7 @@ function initializeController(events: Registry<ModalVideoSourceEvents>, currentS
|
||||||
fallbackCurrentSourceName = tr("loading...");
|
fallbackCurrentSourceName = tr("loading...");
|
||||||
driver.createScreenSource().then(stream => {
|
driver.createScreenSource().then(stream => {
|
||||||
setCurrentSource(stream);
|
setCurrentSource(stream);
|
||||||
fallbackCurrentSourceName = stream.getName();
|
fallbackCurrentSourceName = stream?.getName() || tr("No stream");
|
||||||
}).catch(error => {
|
}).catch(error => {
|
||||||
fallbackCurrentSourceName = "screen capture failed";
|
fallbackCurrentSourceName = "screen capture failed";
|
||||||
if(typeof error === "string") {
|
if(typeof error === "string") {
|
||||||
|
|
|
@ -3,6 +3,7 @@ import * as React from "react";
|
||||||
import * as ReactDOM from "react-dom";
|
import * as ReactDOM from "react-dom";
|
||||||
import {AbstractModal, ModalController, ModalEvents, ModalOptions, ModalState} from "../../../ui/react-elements/ModalDefinitions";
|
import {AbstractModal, ModalController, ModalEvents, ModalOptions, ModalState} from "../../../ui/react-elements/ModalDefinitions";
|
||||||
import {InternalModalRenderer} from "../../../ui/react-elements/internal-modal/Renderer";
|
import {InternalModalRenderer} from "../../../ui/react-elements/internal-modal/Renderer";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
export class InternalModalController<InstanceType extends InternalModal = InternalModal> implements ModalController {
|
export class InternalModalController<InstanceType extends InternalModal = InternalModal> implements ModalController {
|
||||||
readonly events: Registry<ModalEvents>;
|
readonly events: Registry<ModalEvents>;
|
||||||
|
|
|
@ -10,6 +10,7 @@ import {ChannelTree} from "tc-shared/tree/ChannelTree";
|
||||||
import {ModalController} from "tc-shared/ui/react-elements/ModalDefinitions";
|
import {ModalController} from "tc-shared/ui/react-elements/ModalDefinitions";
|
||||||
import {ChannelTreePopoutEvents} from "tc-shared/ui/tree/popout/Definitions";
|
import {ChannelTreePopoutEvents} from "tc-shared/ui/tree/popout/Definitions";
|
||||||
import {ConnectionState} from "tc-shared/ConnectionHandler";
|
import {ConnectionState} from "tc-shared/ConnectionHandler";
|
||||||
|
import { tr, tra } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
export class ChannelTreePopoutController {
|
export class ChannelTreePopoutController {
|
||||||
readonly channelTree: ChannelTree;
|
readonly channelTree: ChannelTree;
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import {Updater} from "./Updater";
|
import {Updater} from "./Updater";
|
||||||
import {ChangeLog} from "../update/ChangeLog";
|
import {ChangeLog} from "../update/ChangeLog";
|
||||||
import {spawnUpdatedModal} from "../ui/modal/whats-new/Controller";
|
import {spawnUpdatedModal} from "../ui/modal/whats-new/Controller";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
const kIsNewUserKey = "updater-set";
|
const kIsNewUserKey = "updater-set";
|
||||||
let updaterUi: Updater;
|
let updaterUi: Updater;
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import {Settings, settings} from "../settings";
|
import {Settings, settings} from "../settings";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
export enum ColloquialFormat {
|
export enum ColloquialFormat {
|
||||||
YESTERDAY,
|
YESTERDAY,
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
export function format_online_time(secs: number) : string {
|
export function format_online_time(secs: number) : string {
|
||||||
let years = Math.floor(secs / (60 * 60 * 24 * 365));
|
let years = Math.floor(secs / (60 * 60 * 24 * 365));
|
||||||
let days = Math.floor(secs / (60 * 60 * 24)) % 365;
|
let days = Math.floor(secs / (60 * 60 * 24)) % 365;
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import * as sha1 from "../crypto/sha";
|
import * as sha1 from "../crypto/sha";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
export function hashPassword(password: string) : Promise<string> {
|
export function hashPassword(password: string) : Promise<string> {
|
||||||
return new Promise<string>((resolve, reject) => {
|
return new Promise<string>((resolve, reject) => {
|
||||||
|
|
|
@ -10,6 +10,7 @@ import {global_client_actions} from "../events/GlobalEvents";
|
||||||
import {createErrorModal} from "../ui/elements/Modal";
|
import {createErrorModal} from "../ui/elements/Modal";
|
||||||
import {ModalController} from "../ui/react-elements/ModalDefinitions";
|
import {ModalController} from "../ui/react-elements/ModalDefinitions";
|
||||||
import {server_connections} from "tc-shared/ConnectionManager";
|
import {server_connections} from "tc-shared/ConnectionManager";
|
||||||
|
import { tr, tra } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
const parseWatcherId = (id: string): { clientId: number, clientUniqueId: string} => {
|
const parseWatcherId = (id: string): { clientId: number, clientUniqueId: string} => {
|
||||||
const [ clientIdString, clientUniqueId ] = id.split(" - ");
|
const [ clientIdString, clientUniqueId ] = id.split(" - ");
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import {PluginCmdHandler, PluginCommandInvoker} from "../connection/PluginCmdHandler";
|
import {PluginCmdHandler, PluginCommandInvoker} from "../connection/PluginCmdHandler";
|
||||||
import {Event, Registry} from "../events";
|
import {Event, Registry} from "../events";
|
||||||
import {PlayerStatus} from "../video-viewer/Definitions";
|
import {PlayerStatus} from "../video-viewer/Definitions";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
export interface W2GEvents {
|
export interface W2GEvents {
|
||||||
notify_watcher_add: { watcher: W2GWatcher },
|
notify_watcher_add: { watcher: W2GWatcher },
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import {Registry} from "tc-shared/events";
|
import {Registry} from "tc-shared/events";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
export interface VideoSource {
|
export interface VideoSource {
|
||||||
getId() : string;
|
getId() : string;
|
||||||
|
|
|
@ -8,6 +8,7 @@ import * as aplayer from "tc-backend/audio/player";
|
||||||
import * as ppt from "tc-backend/ppt";
|
import * as ppt from "tc-backend/ppt";
|
||||||
import {getRecorderBackend, IDevice} from "../audio/recorder";
|
import {getRecorderBackend, IDevice} from "../audio/recorder";
|
||||||
import {FilterType, StateFilter, ThresholdFilter} from "../voice/Filter";
|
import {FilterType, StateFilter, ThresholdFilter} from "../voice/Filter";
|
||||||
|
import { tr } from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
export type VadType = "threshold" | "push_to_talk" | "active";
|
export type VadType = "threshold" | "push_to_talk" | "active";
|
||||||
export interface RecorderProfileConfig {
|
export interface RecorderProfileConfig {
|
||||||
|
|
|
@ -1,12 +0,0 @@
|
||||||
{
|
|
||||||
"source_files": [
|
|
||||||
"**/*.ts",
|
|
||||||
"**/*.tsx"
|
|
||||||
],
|
|
||||||
"exclude": [
|
|
||||||
"workers/**/*.ts"
|
|
||||||
],
|
|
||||||
"base_directory": "shared/js/",
|
|
||||||
"target_directory": "../../declarations/shared-app",
|
|
||||||
"modular": true
|
|
||||||
}
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"target": "es6",
|
||||||
|
"module": "commonjs",
|
||||||
|
"jsx": "react",
|
||||||
|
"experimentalDecorators": true,
|
||||||
|
"declarationDir": "../../declarations/shared-app/",
|
||||||
|
"declaration": true,
|
||||||
|
"emitDeclarationOnly": true,
|
||||||
|
"baseUrl": "../../",
|
||||||
|
"paths": {
|
||||||
|
"tc-shared/*": ["shared/js/*"],
|
||||||
|
// "tc-backend/web/*": ["web/app/*"], /* specific web part */
|
||||||
|
"tc-backend/*": ["shared/backend.d/*"],
|
||||||
|
"tc-loader": ["loader/exports/loader.d.ts"],
|
||||||
|
"svg-sprites/*": ["shared/svg-sprites/*"],
|
||||||
|
"vendor/xbbcode/*": ["vendor/xbbcode/src/*"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"exclude": [
|
||||||
|
"../js/workers"
|
||||||
|
],
|
||||||
|
"include": [
|
||||||
|
"../declaration_fix.d.ts",
|
||||||
|
"../backend.d",
|
||||||
|
"../js/**/*.ts"
|
||||||
|
]
|
||||||
|
}
|
|
@ -1,30 +0,0 @@
|
||||||
/*
|
|
||||||
config for generating one single file
|
|
||||||
Note: loader declarations have to be generated first
|
|
||||||
*/
|
|
||||||
{
|
|
||||||
"extends": "./tsconfig.json",
|
|
||||||
"compilerOptions": {
|
|
||||||
"target": "es6",
|
|
||||||
"module": "none",
|
|
||||||
"outFile": "../generated/shared.js",
|
|
||||||
"plugins": [ /* ttypescript */
|
|
||||||
{
|
|
||||||
"transform": "../../tools/trgen/ttsc_transformer.js",
|
|
||||||
"type": "program",
|
|
||||||
"target_file": "../generated/messages_script.json",
|
|
||||||
"verbose": true
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"exclude": [
|
|
||||||
"../js/workers"
|
|
||||||
],
|
|
||||||
"include": [
|
|
||||||
"../types",
|
|
||||||
"../declarations/imports_*.d.ts",
|
|
||||||
"../declarations/exports_loader_app.d.ts",
|
|
||||||
"../js/**/*.ts",
|
|
||||||
"../backend"
|
|
||||||
]
|
|
||||||
}
|
|
|
@ -10,14 +10,13 @@
|
||||||
"jsx": "react",
|
"jsx": "react",
|
||||||
"baseUrl": ".",
|
"baseUrl": ".",
|
||||||
"paths": {
|
"paths": {
|
||||||
"*": ["shared/declarations/*"],
|
|
||||||
"tc-shared/*": ["shared/js/*"],
|
"tc-shared/*": ["shared/js/*"],
|
||||||
"tc-backend/audio-lib/*": ["web/audio-lib/pkg/*"], /* specific web part */
|
"tc-backend/audio-lib/*": ["web/audio-lib/pkg/*"], /* specific web part */
|
||||||
"tc-backend/web/*": ["web/app/*"], /* specific web part */
|
"tc-backend/web/*": ["web/app/*"], /* specific web part */
|
||||||
"tc-backend/*": ["shared/backend.d/*"],
|
"tc-backend/*": ["shared/backend.d/*"],
|
||||||
"tc-loader": ["loader/exports/loader.d.ts"],
|
"tc-loader": ["loader/exports/loader.d.ts"],
|
||||||
"svg-sprites/*": ["shared/svg-sprites/*"],
|
|
||||||
|
|
||||||
|
"svg-sprites/*": ["shared/svg-sprites/*"],
|
||||||
"vendor/xbbcode/*": ["vendor/xbbcode/src/*"]
|
"vendor/xbbcode/*": ["vendor/xbbcode/src/*"]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -5,6 +5,7 @@ import {ChannelMessage} from "tc-shared/ipc/BrowserIPC";
|
||||||
import {LogCategory, logDebug, logWarn} from "tc-shared/log";
|
import {LogCategory, logDebug, logWarn} from "tc-shared/log";
|
||||||
import {Popout2ControllerMessages, PopoutIPCMessage} from "tc-shared/ui/react-elements/external-modal/IPCMessage";
|
import {Popout2ControllerMessages, PopoutIPCMessage} from "tc-shared/ui/react-elements/external-modal/IPCMessage";
|
||||||
import {RegistryMap} from "tc-shared/events";
|
import {RegistryMap} from "tc-shared/events";
|
||||||
|
import {tr, tra} from "tc-shared/i18n/localize";
|
||||||
|
|
||||||
export class ExternalModalController extends AbstractExternalModalController {
|
export class ExternalModalController extends AbstractExternalModalController {
|
||||||
private readonly uniqueModalId: string;
|
private readonly uniqueModalId: string;
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue