From e994898f36a8f2d025e6ce9e4298c6108bf66640 Mon Sep 17 00:00:00 2001 From: Maksim Sukharev Date: Thu, 14 Nov 2024 10:18:48 +0100 Subject: [PATCH 1/5] fix(matterbridge): fix selecting an option, cleanup Signed-off-by: Maksim Sukharev --- .../Matterbridge/MatterbridgeSettings.vue | 23 +++---------------- 1 file changed, 3 insertions(+), 20 deletions(-) diff --git a/src/components/ConversationSettings/Matterbridge/MatterbridgeSettings.vue b/src/components/ConversationSettings/Matterbridge/MatterbridgeSettings.vue index ac2a56f655e..b3d650bb49f 100644 --- a/src/components/ConversationSettings/Matterbridge/MatterbridgeSettings.vue +++ b/src/components/ConversationSettings/Matterbridge/MatterbridgeSettings.vue @@ -20,8 +20,7 @@
- this.getBridgeProcessState(token), 60000) }, - clickAddPart() { - const typeKey = this.selectedType.type + clickAddPart(event) { + const typeKey = event.type const type = this.types[typeKey] const newPart = { type: typeKey, @@ -554,7 +538,6 @@ export default { newPart[fieldKey] = '' } this.parts.unshift(newPart) - this.selectedType = null }, onDelete(i) { this.parts.splice(i, 1) From 718182e89d9231b890f00d9de9ca6b88a0727675 Mon Sep 17 00:00:00 2001 From: Maksim Sukharev Date: Thu, 14 Nov 2024 10:25:07 +0100 Subject: [PATCH 2/5] fix(matterbridge): extract types constant Signed-off-by: Maksim Sukharev --- .../Matterbridge/MatterbridgeSettings.vue | 378 +---------------- .../Matterbridge/matterbridgeTypes.ts | 382 ++++++++++++++++++ 2 files changed, 391 insertions(+), 369 deletions(-) create mode 100644 src/components/ConversationSettings/Matterbridge/matterbridgeTypes.ts diff --git a/src/components/ConversationSettings/Matterbridge/MatterbridgeSettings.vue b/src/components/ConversationSettings/Matterbridge/MatterbridgeSettings.vue index b3d650bb49f..ebe8fb02245 100644 --- a/src/components/ConversationSettings/Matterbridge/MatterbridgeSettings.vue +++ b/src/components/ConversationSettings/Matterbridge/MatterbridgeSettings.vue @@ -68,7 +68,7 @@
  • { - const t = this.types[k] - return { - displayName: t.name, - type: k, - iconUrl: t.iconUrl, - } - }) + return Object.entries(this.matterbridgeTypes).map(([type, value]) => ({ + type, + displayName: value.name, + iconUrl: value.iconUrl, + })) }, processStateText() { return this.processRunning === null @@ -529,7 +169,7 @@ export default { }, clickAddPart(event) { const typeKey = event.type - const type = this.types[typeKey] + const type = this.matterbridgeTypes[typeKey] const newPart = { type: typeKey, editing: true, diff --git a/src/components/ConversationSettings/Matterbridge/matterbridgeTypes.ts b/src/components/ConversationSettings/Matterbridge/matterbridgeTypes.ts new file mode 100644 index 00000000000..9872c1e2a95 --- /dev/null +++ b/src/components/ConversationSettings/Matterbridge/matterbridgeTypes.ts @@ -0,0 +1,382 @@ +/** + * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +import { t } from '@nextcloud/l10n' +import { imagePath } from '@nextcloud/router' + +type InputField = { + type: 'url' | 'text' | 'password', + placeholder: string, + icon: string, +} | { + type: 'checkbox', + labelText: string, +} +type MatterbridgeType = { + name: string, + iconUrl: string, + infoTarget: string, + fields: Record + mainField: string, +} + +export const matterbridgeTypes: Record = { + nctalk: { + name: 'Nextcloud Talk', + iconUrl: imagePath('spreed', 'app-dark.svg'), + infoTarget: 'https://github.com/42wim/matterbridge/wiki/Section-Nextcloud-Talk-%28basic%29', + fields: { + server: { + type: 'url', + placeholder: t('spreed', 'Nextcloud URL'), + icon: 'icon-link', + }, + login: { + type: 'text', + placeholder: t('spreed', 'Nextcloud user'), + icon: 'icon-user', + }, + password: { + type: 'password', + placeholder: t('spreed', 'User password'), + icon: 'icon-category-auth', + }, + channel: { + type: 'text', + placeholder: t('spreed', 'Talk conversation'), + icon: 'icon-group', + }, + }, + mainField: 'server', + }, + matrix: { + name: 'Matrix', + iconUrl: imagePath('spreed', 'bridge-services/matrix.svg'), + infoTarget: 'https://github.com/42wim/matterbridge/wiki/Settings#matrix', + fields: { + server: { + type: 'url', + placeholder: t('spreed', 'Matrix server URL'), + icon: 'icon-link', + }, + login: { + type: 'text', + placeholder: t('spreed', 'User'), + icon: 'icon-user', + }, + password: { + type: 'password', + placeholder: t('spreed', 'User password'), + icon: 'icon-category-auth', + }, + channel: { + type: 'text', + placeholder: t('spreed', 'Matrix channel'), + icon: 'icon-group', + }, + }, + mainField: 'server', + }, + mattermost: { + name: 'Mattermost', + iconUrl: imagePath('spreed', 'bridge-services/mattermost.svg'), + infoTarget: 'https://github.com/42wim/matterbridge/wiki/Settings#mattermost', + fields: { + server: { + type: 'url', + placeholder: t('spreed', 'Mattermost server URL'), + icon: 'icon-link', + }, + login: { + type: 'text', + placeholder: t('spreed', 'Mattermost user'), + icon: 'icon-user', + }, + password: { + type: 'password', + placeholder: t('spreed', 'User password'), + icon: 'icon-category-auth', + }, + team: { + type: 'text', + placeholder: t('spreed', 'Team name'), + icon: 'icon-group', + }, + channel: { + type: 'text', + placeholder: t('spreed', 'Channel name'), + icon: 'icon-group', + }, + }, + mainField: 'server', + }, + rocketchat: { + name: 'Rocket.Chat', + iconUrl: imagePath('spreed', 'bridge-services/rocketchat.svg'), + infoTarget: 'https://github.com/42wim/matterbridge/wiki/Settings#rocketchat', + fields: { + server: { + type: 'url', + placeholder: t('spreed', 'Rocket.Chat server URL'), + icon: 'icon-link', + }, + login: { + type: 'text', + placeholder: t('spreed', 'User name or email address'), + icon: 'icon-user', + }, + password: { + type: 'password', + placeholder: t('spreed', 'Password'), + icon: 'icon-category-auth', + }, + channel: { + type: 'text', + placeholder: t('spreed', 'Rocket.Chat channel'), + icon: 'icon-group', + }, + skiptls: { + type: 'checkbox', + labelText: t('spreed', 'Skip TLS verification'), + }, + }, + mainField: 'server', + }, + zulip: { + name: 'Zulip', + iconUrl: imagePath('spreed', 'bridge-services/zulip.svg'), + infoTarget: 'https://github.com/42wim/matterbridge/wiki/Settings#zulip', + fields: { + server: { + type: 'url', + placeholder: t('spreed', 'Zulip server URL'), + icon: 'icon-link', + }, + login: { + type: 'text', + placeholder: t('spreed', 'Bot user name'), + icon: 'icon-user', + }, + token: { + type: 'password', + placeholder: t('spreed', 'Bot API key'), + icon: 'icon-category-auth', + }, + channel: { + type: 'text', + placeholder: t('spreed', 'Zulip channel'), + icon: 'icon-group', + }, + }, + mainField: 'server', + }, + slack: { + name: 'Slack', + iconUrl: imagePath('spreed', 'bridge-services/slack.svg'), + infoTarget: 'https://github.com/42wim/matterbridge/wiki/Slack-bot-setup', + fields: { + token: { + type: 'password', + placeholder: t('spreed', 'API token'), + icon: 'icon-category-auth', + }, + channel: { + type: 'text', + placeholder: t('spreed', 'Slack channel'), + icon: 'icon-group', + }, + }, + mainField: 'channel', + }, + discord: { + name: 'Discord', + iconUrl: imagePath('spreed', 'bridge-services/discord.svg'), + infoTarget: 'https://github.com/42wim/matterbridge/wiki/Discord-bot-setup', + fields: { + token: { + type: 'password', + placeholder: t('spreed', 'API token'), + icon: 'icon-category-auth', + }, + server: { + type: 'text', + placeholder: t('spreed', 'Server ID or name'), + icon: 'icon-group', + }, + channel: { + type: 'text', + placeholder: t('spreed', 'Channel ID or name'), + icon: 'icon-group', + }, + }, + mainField: 'server', + }, + telegram: { + name: 'Telegram', + iconUrl: imagePath('spreed', 'bridge-services/telegram.svg'), + infoTarget: 'https://github.com/42wim/matterbridge/wiki/Settings#telegram', + fields: { + token: { + type: 'password', + placeholder: t('spreed', 'API token'), + icon: 'icon-category-auth', + }, + channel: { + type: 'text', + placeholder: t('spreed', 'Channel'), + icon: 'icon-group', + }, + }, + mainField: 'chatid', + }, + steam: { + name: 'Steam', + iconUrl: imagePath('spreed', 'bridge-services/steam.svg'), + infoTarget: 'https://github.com/42wim/matterbridge/wiki/Settings#steam', + fields: { + login: { + type: 'text', + placeholder: t('spreed', 'Login'), + icon: 'icon-user', + }, + password: { + type: 'password', + placeholder: t('spreed', 'Password'), + icon: 'icon-category-auth', + }, + channel: { + type: 'text', + placeholder: t('spreed', 'Chat ID'), + icon: 'icon-group', + }, + }, + mainField: 'chatid', + }, + irc: { + name: 'IRC', + iconUrl: imagePath('spreed', 'bridge-services/irc.svg'), + infoTarget: 'https://github.com/42wim/matterbridge/wiki/Settings#irc', + fields: { + server: { + type: 'url', + placeholder: t('spreed', 'IRC server URL (e.g. chat.freenode.net:6667)'), + icon: 'icon-link', + }, + nick: { + type: 'text', + placeholder: t('spreed', 'Nickname'), + icon: 'icon-user', + }, + password: { + type: 'password', + placeholder: t('spreed', 'Connection password'), + icon: 'icon-category-auth', + }, + channel: { + type: 'text', + placeholder: t('spreed', 'IRC channel'), + icon: 'icon-group', + }, + channelpassword: { + type: 'password', + placeholder: t('spreed', 'Channel password'), + icon: 'icon-category-auth', + }, + nickservnick: { + type: 'text', + placeholder: t('spreed', 'NickServ nickname'), + icon: 'icon-user', + }, + nickservpassword: { + type: 'password', + placeholder: t('spreed', 'NickServ password'), + icon: 'icon-category-auth', + }, + usetls: { + type: 'checkbox', + labelText: t('spreed', 'Use TLS'), + }, + usesasl: { + type: 'checkbox', + labelText: t('spreed', 'Use SASL'), + }, + skiptls: { + type: 'checkbox', + labelText: t('spreed', 'Skip TLS verification'), + }, + }, + mainField: 'channel', + }, + msteams: { + name: 'Microsoft Teams', + iconUrl: imagePath('spreed', 'bridge-services/msteams.svg'), + infoTarget: 'https://github.com/42wim/matterbridge/wiki/MS-Teams-setup', + fields: { + tenantid: { + type: 'text', + placeholder: t('spreed', 'Tenant ID'), + icon: 'icon-user', + }, + clientid: { + type: 'password', + placeholder: t('spreed', 'Client ID'), + icon: 'icon-user', + }, + teamid: { + type: 'text', + placeholder: t('spreed', 'Team ID'), + icon: 'icon-category-auth', + }, + channel: { + type: 'text', + placeholder: t('spreed', 'Thread ID'), + icon: 'icon-group', + }, + }, + mainField: 'threadid', + }, + xmpp: { + name: 'XMPP/Jabber', + iconUrl: imagePath('spreed', 'bridge-services/xmpp.svg'), + infoTarget: 'https://github.com/42wim/matterbridge/wiki/Settings#xmpp', + fields: { + server: { + type: 'url', + placeholder: t('spreed', 'XMPP/Jabber server URL'), + icon: 'icon-link', + }, + muc: { + type: 'url', + placeholder: t('spreed', 'MUC server URL'), + icon: 'icon-link', + }, + jid: { + type: 'text', + placeholder: t('spreed', 'Jabber ID'), + icon: 'icon-user', + }, + nick: { + type: 'text', + placeholder: t('spreed', 'Nickname'), + icon: 'icon-user', + }, + password: { + type: 'password', + placeholder: t('spreed', 'Password'), + icon: 'icon-category-auth', + }, + channel: { + type: 'text', + placeholder: t('spreed', 'Channel'), + icon: 'icon-group', + }, + skiptls: { + type: 'checkbox', + labelText: t('spreed', 'Skip TLS verification'), + }, + }, + mainField: 'channel', + }, +} From f8dfc790407286822e0de851a91135d114878103 Mon Sep 17 00:00:00 2001 From: Maksim Sukharev Date: Thu, 14 Nov 2024 10:33:03 +0100 Subject: [PATCH 3/5] fix(matterbridge): refactor computed properties Signed-off-by: Maksim Sukharev --- .../Matterbridge/MatterbridgeSettings.vue | 39 ++++++++++++------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/src/components/ConversationSettings/Matterbridge/MatterbridgeSettings.vue b/src/components/ConversationSettings/Matterbridge/MatterbridgeSettings.vue index ebe8fb02245..76d5416b872 100644 --- a/src/components/ConversationSettings/Matterbridge/MatterbridgeSettings.vue +++ b/src/components/ConversationSettings/Matterbridge/MatterbridgeSettings.vue @@ -23,7 +23,7 @@