2021-02-20 18:55:36 +01:00

147 lines
4.2 KiB
TypeScript

import { RemoteIconInfo } from "tc-shared/file/Icons";
export declare type ChannelEditablePermissions = "join" | "view" | "view-description" | "subscribe" | "modify" | "delete" | "browse" | "upload" | "download" | "rename" | "directory-create" | "file-delete";
export declare type ChannelEditablePermissionValue = {
state: "editable" | "readonly" | "applying";
value: number;
} | {
state: "loading" | "unsupported";
};
export declare type ChannelEditPermissionsState = {
state: "editable" | "loading";
} | {
state: "no-permissions";
failedPermission: string;
} | {
state: "error";
reason: string;
};
export interface ChannelEditableProperty {
"name": {
rawName: string;
parsedName?: string;
parsedAlignment?: "center" | "right" | "left" | "normal" | "repetitive";
maxNameLength?: number;
hasParent?: boolean;
spacerUniqueId?: string;
};
"phoneticName": string;
"icon": {
iconId: number;
remoteIcon?: RemoteIconInfo;
};
"type": {
type: "default" | "permanent" | "semi-permanent" | "temporary";
originallyDefault?: boolean;
};
sideBar: "conversation" | "description" | "file-transfer" | "unknown" | "not-supported";
"password": {
state: "set";
password?: string;
} | {
state: "clear";
};
"sortingOrder": {
previousChannelId: number;
availableChannels: {
channelName: string;
channelId: number;
}[] | undefined;
};
"topic": string;
"description": string;
"codec": {
type: number;
quality: number;
};
"talkPower": number;
"encryptedVoiceData": {
encrypted: boolean;
serverSetting?: "encrypted" | "unencrypted" | "individual";
};
"maxUsers": "unlimited" | number;
"maxFamilyUsers": "unlimited" | "inherited" | number;
"deleteDelay": number;
}
export interface ChannelPropertyPermission {
name: boolean;
icon: boolean;
password: {
editable: boolean;
enforced: boolean;
};
talkPower: boolean;
sortingOrder: boolean;
topic: boolean;
description: boolean;
channelType: {
permanent: boolean;
semiPermanent: boolean;
temporary: boolean;
default: boolean;
};
sidebarMode: boolean;
maxUsers: boolean;
maxFamilyUsers: boolean;
codec: {
opusVoice: boolean;
opusMusic: boolean;
};
codecQuality: boolean;
deleteDelay: {
editable: boolean;
maxDelay: number | -1;
};
encryptVoiceData: boolean;
}
export interface ChannelPropertyStatus {
name: boolean;
password: boolean;
}
export declare type ChannelEditPropertyEvent<T extends keyof ChannelEditableProperty> = {
property: T;
value: ChannelEditableProperty[T];
};
export declare type ChannelEditPermissionEvent<T extends keyof ChannelPropertyPermission> = {
permission: T;
value: ChannelPropertyPermission[T];
};
export interface ChannelEditEvents {
action_cancel: {};
action_apply: {};
action_change_property: {
property: keyof ChannelEditableProperty;
value: ChannelEditableProperty[keyof ChannelEditableProperty];
};
action_change_permission: {
permission: ChannelEditablePermissions;
value: number;
};
action_icon_select: {};
query_property: {
property: keyof ChannelEditableProperty;
};
query_property_permission: {
permission: keyof ChannelPropertyPermission;
};
query_permission: {
permission: ChannelEditablePermissions;
};
query_permissions: {};
query_property_valid_state: {
property: keyof ChannelEditableProperty;
};
notify_property: ChannelEditPropertyEvent<keyof ChannelEditableProperty>;
notify_property_permission: ChannelEditPermissionEvent<keyof ChannelPropertyPermission>;
notify_permission: {
permission: ChannelEditablePermissions;
value: ChannelEditablePermissionValue;
};
notify_permissions: {
state: ChannelEditPermissionsState;
};
notify_property_validate_state: {
property: keyof ChannelEditableProperty;
valid: boolean;
};
}