mirror of
https://github.com/nextcloud/spreed.git
synced 2025-12-17 21:12:20 +01:00
[wip] fix(chat-relay): localize system messages
Signed-off-by: Maksim Sukharev <antreesy.web@gmail.com>
This commit is contained in:
parent
ead2a61dea
commit
18a7b761a1
2 changed files with 80 additions and 10 deletions
|
|
@ -26,6 +26,7 @@ import { EventBus } from '../services/EventBus.ts'
|
|||
import { useChatStore } from '../stores/chat.ts'
|
||||
import { useChatExtrasStore } from '../stores/chatExtras.ts'
|
||||
import { debugTimer } from '../utils/debugTimer.ts'
|
||||
import { tryLocalizeSystemMessage } from '../utils/message.ts'
|
||||
import { useGetThreadId } from './useGetThreadId.ts'
|
||||
import { useGetToken } from './useGetToken.ts'
|
||||
|
||||
|
|
@ -612,6 +613,22 @@ export function useGetMessagesProvider() {
|
|||
return
|
||||
}
|
||||
|
||||
if (message.systemMessage !== '') {
|
||||
// Attempt to localize non-system messages
|
||||
try {
|
||||
// FIXME
|
||||
console.log('[Chat Relay] New message received via signaling >>', message.message)
|
||||
|
||||
message.message = tryLocalizeSystemMessage(message)
|
||||
|
||||
// FIXME
|
||||
console.log('[Chat Relay] New message localized fr signaling <<', message.message)
|
||||
} catch (exception) {
|
||||
tryPollNewMessages()
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
chatStore.processChatBlocks(token, [message], { mergeBy: chatStore.getLastKnownId(token) })
|
||||
store.dispatch('processMessage', { token, message })
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,8 +5,49 @@
|
|||
|
||||
import type { ChatMessage } from '../types/index.ts'
|
||||
|
||||
import { t } from '@nextcloud/l10n'
|
||||
import { MESSAGE } from '../constants.ts'
|
||||
|
||||
/**
|
||||
* Sync with server-side constant SYSTEM_MESSAGE_TYPE_RELAY in lib/Signaling/Listener.php
|
||||
*/
|
||||
const SYSTEM_MESSAGE_TYPE_RELAY = [
|
||||
MESSAGE.SYSTEM_TYPE.CALL_STARTED, // 'call_started',
|
||||
MESSAGE.SYSTEM_TYPE.CALL_JOINED, // 'call_joined',
|
||||
MESSAGE.SYSTEM_TYPE.CALL_LEFT, // 'call_left',
|
||||
MESSAGE.SYSTEM_TYPE.CALL_ENDED, // 'call_ended',
|
||||
MESSAGE.SYSTEM_TYPE.CALL_ENDED_EVERYONE, // 'call_ended_everyone',
|
||||
MESSAGE.SYSTEM_TYPE.THREAD_CREATED, // 'thread_created',
|
||||
MESSAGE.SYSTEM_TYPE.THREAD_RENAMED, // 'thread_renamed',
|
||||
MESSAGE.SYSTEM_TYPE.MESSAGE_DELETED, // 'message_deleted',
|
||||
MESSAGE.SYSTEM_TYPE.MESSAGE_EDITED, // 'message_edited',
|
||||
MESSAGE.SYSTEM_TYPE.MODERATOR_PROMOTED, // 'moderator_promoted',
|
||||
MESSAGE.SYSTEM_TYPE.MODERATOR_DEMOTED, // 'moderator_demoted',
|
||||
MESSAGE.SYSTEM_TYPE.GUEST_MODERATOR_PROMOTED, // 'guest_moderator_promoted',
|
||||
MESSAGE.SYSTEM_TYPE.GUEST_MODERATOR_DEMOTED, // 'guest_moderator_demoted',
|
||||
MESSAGE.SYSTEM_TYPE.FILE_SHARED, // 'file_shared',
|
||||
MESSAGE.SYSTEM_TYPE.OBJECT_SHARED, // 'object_shared',
|
||||
MESSAGE.SYSTEM_TYPE.HISTORY_CLEARED, // 'history_cleared',
|
||||
MESSAGE.SYSTEM_TYPE.POLL_VOTED, // 'poll_voted',
|
||||
MESSAGE.SYSTEM_TYPE.POLL_CLOSED, // 'poll_closed',
|
||||
MESSAGE.SYSTEM_TYPE.RECORDING_STARTED, // 'recording_started',
|
||||
MESSAGE.SYSTEM_TYPE.RECORDING_STOPPED, // 'recording_stopped',
|
||||
] as const
|
||||
|
||||
/**
|
||||
* System messages that aren't shown separately in the chat
|
||||
*/
|
||||
const SYSTEM_MESSAGE_TYPE_HIDDEN = [
|
||||
MESSAGE.SYSTEM_TYPE.REACTION,
|
||||
MESSAGE.SYSTEM_TYPE.REACTION_DELETED,
|
||||
MESSAGE.SYSTEM_TYPE.REACTION_REVOKED,
|
||||
MESSAGE.SYSTEM_TYPE.POLL_VOTED,
|
||||
MESSAGE.SYSTEM_TYPE.MESSAGE_DELETED,
|
||||
MESSAGE.SYSTEM_TYPE.MESSAGE_EDITED,
|
||||
MESSAGE.SYSTEM_TYPE.THREAD_CREATED,
|
||||
MESSAGE.SYSTEM_TYPE.THREAD_RENAMED,
|
||||
] as const
|
||||
|
||||
/**
|
||||
* Returns whether the given system message should be hidden in the UI
|
||||
*
|
||||
|
|
@ -14,14 +55,26 @@ import { MESSAGE } from '../constants.ts'
|
|||
* @return whether the message is hidden in the UI
|
||||
*/
|
||||
export function isHiddenSystemMessage(message: ChatMessage): boolean {
|
||||
return [
|
||||
MESSAGE.SYSTEM_TYPE.REACTION,
|
||||
MESSAGE.SYSTEM_TYPE.REACTION_DELETED,
|
||||
MESSAGE.SYSTEM_TYPE.REACTION_REVOKED,
|
||||
MESSAGE.SYSTEM_TYPE.POLL_VOTED,
|
||||
MESSAGE.SYSTEM_TYPE.MESSAGE_DELETED,
|
||||
MESSAGE.SYSTEM_TYPE.MESSAGE_EDITED,
|
||||
MESSAGE.SYSTEM_TYPE.THREAD_CREATED,
|
||||
MESSAGE.SYSTEM_TYPE.THREAD_RENAMED,
|
||||
].includes(message.systemMessage)
|
||||
return SYSTEM_MESSAGE_TYPE_HIDDEN.includes(message.systemMessage)
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether the given system message should be hidden in the UI
|
||||
*
|
||||
* @param message Chat message
|
||||
* @return whether the message is hidden in the UI
|
||||
*/
|
||||
export function tryLocalizeSystemMessage(message: ChatMessage): string {
|
||||
if (isHiddenSystemMessage(message)) {
|
||||
// Don't localize hidden system messages
|
||||
return message.message
|
||||
}
|
||||
|
||||
if (!SYSTEM_MESSAGE_TYPE_RELAY.includes(message.systemMessage)) {
|
||||
// Don't localize non-supported relayed system messages
|
||||
throw new Error()
|
||||
}
|
||||
|
||||
// FIXME do it normal way
|
||||
return t('spreed', message.message)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue