From 12a0b0b6f97145eeb50cdc7f06614e7872609cbd Mon Sep 17 00:00:00 2001 From: Reto Brunner Date: Sat, 24 Feb 2024 14:03:05 +0100 Subject: [PATCH] network --- client/js/types.d.ts | 4 ++-- server/models/chan.ts | 16 +++++++--------- shared/types/network.ts | 37 +++++++++++++++++++++++++++++++++++++ 3 files changed, 46 insertions(+), 11 deletions(-) create mode 100644 shared/types/network.ts diff --git a/client/js/types.d.ts b/client/js/types.d.ts index 219c04d8..c1064e40 100644 --- a/client/js/types.d.ts +++ b/client/js/types.d.ts @@ -1,8 +1,8 @@ import {defineComponent} from "vue"; -import Network from "../../server/models/network"; import {SharedMessage} from "../../shared/types/msg"; import {SharedChan} from "../../shared/types/chan"; +import {SharedNetwork} from "../../shared/types/network"; import {SharedUser} from "../../shared/models/user"; import {SharedMention} from "../../shared/models/mention"; import {ClientConfiguration} from "../../server/server"; @@ -46,7 +46,7 @@ type InitClientChan = ClientChan & { }; // We omit channels so we can use ClientChan[] instead of Chan[] -type ClientNetwork = Omit & { +type ClientNetwork = Omit & { isJoinChannelShown: boolean; isCollapsed: boolean; channels: ClientChan[]; diff --git a/server/models/chan.ts b/server/models/chan.ts index d0decbdc..b630fe14 100644 --- a/server/models/chan.ts +++ b/server/models/chan.ts @@ -9,12 +9,7 @@ import Network from "./network"; import Prefix from "./prefix"; import {MessageType} from "../../shared/types/msg"; import {ChanType, SpecialChanType, ChanState} from "../../shared/types/chan"; - -// eslint-disable-next-line no-use-before-define -export type FilteredChannel = Chan & { - users: []; - totalMessages: number; -}; +import {SharedNetworkChan} from "../../shared/types/network"; export type ChanConfig = { name: string; @@ -189,7 +184,10 @@ class Chan { * If true, channel is assumed active. * @param {int} lastMessage - Last message id seen by active client to avoid sending duplicates. */ - getFilteredClone(lastActiveChannel?: number | boolean, lastMessage?: number): FilteredChannel { + getFilteredClone( + lastActiveChannel?: number | boolean, + lastMessage?: number + ): SharedNetworkChan { return Object.keys(this).reduce((newChannel, prop) => { if (Chan.optionalProperties.includes(prop)) { if (this[prop] !== undefined || (Array.isArray(this[prop]) && this[prop].length)) { @@ -213,13 +211,13 @@ class Chan { newChannel[prop] = this[prop].slice(-messagesToSend); } - (newChannel as FilteredChannel).totalMessages = this[prop].length; + (newChannel as SharedNetworkChan).totalMessages = this[prop].length; } else { newChannel[prop] = this[prop]; } return newChannel; - }, {}) as FilteredChannel; + }, {}) as SharedNetworkChan; } writeUserLog(client: Client, msg: Msg) { this.messages.push(msg); diff --git a/shared/types/network.ts b/shared/types/network.ts new file mode 100644 index 00000000..80b22b7a --- /dev/null +++ b/shared/types/network.ts @@ -0,0 +1,37 @@ +import {SharedChan} from "./chan"; + +export type SharedPrefixObject = { + symbol: string; + mode: string; +}; + +export type SharedNetworkChan = SharedChan & { + users: []; // TODO: this thing appears useless + totalMessages: number; +}; + +export type SharedPrefix = { + prefix: SharedPrefixObject[]; + modeToSymbol: {[mode: string]: string}; + symbols: string[]; +}; + +export type SharedServerOptions = { + CHANTYPES: string[]; + PREFIX: SharedPrefix; + NETWORK: string; +}; + +export type SharedNetworkStatus = { + connected: boolean; + secure: boolean; +}; + +export type SharedNetwork = { + uuid: string; + name: string; + nick: string; + serverOptions: SharedServerOptions; + status: SharedNetworkStatus; + channels: SharedNetworkChan[]; +};