diff --git a/docs/constants.md b/docs/constants.md index f227a894c9c..e30c13b00c8 100644 --- a/docs/constants.md +++ b/docs/constants.md @@ -125,6 +125,7 @@ title: Constants * `media` - Shared files with mimetype starting with image or video * `other` - Shared objects not falling into any other category * `voice` - Voice messages +* `recording` - Audio and video recording file of a call ## Poll diff --git a/lib/Chat/Parser/SystemMessage.php b/lib/Chat/Parser/SystemMessage.php index 503d722ee6f..532d87e0a08 100644 --- a/lib/Chat/Parser/SystemMessage.php +++ b/lib/Chat/Parser/SystemMessage.php @@ -411,8 +411,14 @@ public function parseMessage(Message $chatMessage): void { $parsedParameters['file'] = $this->getFileFromShare($participant, $parameters['share']); $parsedMessage = '{file}'; $metaData = $parameters['metaData'] ?? []; - if (isset($metaData['messageType']) && $metaData['messageType'] === 'voice-message') { - $chatMessage->setMessageType('voice-message'); + if (isset($metaData['messageType'])) { + if ($metaData['messageType'] === 'voice-message') { + $chatMessage->setMessageType('voice-message'); + } elseif ($metaData['messageType'] === 'record-audio') { + $chatMessage->setMessageType('record-audio'); + } elseif ($metaData['messageType'] === 'record-video') { + $chatMessage->setMessageType('record-video'); + } } else { $chatMessage->setMessageType(ChatManager::VERB_MESSAGE); } diff --git a/lib/Controller/ChatController.php b/lib/Controller/ChatController.php index 68bbb6e8e9c..7ed27684dc0 100644 --- a/lib/Controller/ChatController.php +++ b/lib/Controller/ChatController.php @@ -819,6 +819,7 @@ public function getObjectsSharedInRoomOverview(int $limit = 7): DataResponse { Attachment::TYPE_MEDIA, Attachment::TYPE_OTHER, Attachment::TYPE_POLL, + Attachment::TYPE_RECORDING, Attachment::TYPE_VOICE, ]; diff --git a/lib/Model/Attachment.php b/lib/Model/Attachment.php index a896ef1b8cb..91aaf2fa24f 100644 --- a/lib/Model/Attachment.php +++ b/lib/Model/Attachment.php @@ -47,6 +47,7 @@ class Attachment extends Entity { public const TYPE_MEDIA = 'media'; public const TYPE_OTHER = 'other'; public const TYPE_POLL = 'poll'; + public const TYPE_RECORDING = 'recording'; public const TYPE_VOICE = 'voice'; /** @var int */ diff --git a/lib/Service/AttachmentService.php b/lib/Service/AttachmentService.php index 52a5006b94f..b0b3f92ede7 100644 --- a/lib/Service/AttachmentService.php +++ b/lib/Service/AttachmentService.php @@ -61,7 +61,11 @@ public function createAttachmentEntry(Room $room, IComment $comment, string $mes $messageType = $parameters['metaData']['messageType'] ?? ''; $mimetype = $parameters['metaData']['mimeType'] ?? ''; - if ($messageType === 'voice-message') { + if ($messageType === 'record-audio') { + $attachment->setObjectType(Attachment::TYPE_RECORDING); + } elseif ($messageType === 'record-video') { + $attachment->setObjectType(Attachment::TYPE_RECORDING); + } elseif ($messageType === 'voice-message') { $attachment->setObjectType(Attachment::TYPE_VOICE); } elseif (str_starts_with($mimetype, 'audio/')) { $attachment->setObjectType(Attachment::TYPE_AUDIO); diff --git a/src/components/RightSidebar/SharedItems/SharedItemsTab.vue b/src/components/RightSidebar/SharedItems/SharedItemsTab.vue index 57645c840f5..75d6da91614 100644 --- a/src/components/RightSidebar/SharedItems/SharedItemsTab.vue +++ b/src/components/RightSidebar/SharedItems/SharedItemsTab.vue @@ -190,6 +190,8 @@ export default { return t('spreed', 'Show all locations') case SHARED_ITEM.TYPES.AUDIO: return t('spreed', 'Show all audio') + case SHARED_ITEM.TYPES.RECORDING: + return t('spreed', 'Show all call recordings') case SHARED_ITEM.TYPES.OTHER: default: return t('spreed', 'Show all other') diff --git a/src/constants.js b/src/constants.js index 88379470eef..3283f183fa6 100644 --- a/src/constants.js +++ b/src/constants.js @@ -158,6 +158,7 @@ export const SHARED_ITEM = { MEDIA: 'media', OTHER: 'other', POLL: 'poll', + RECORDING: 'recording', VOICE: 'voice', }, } diff --git a/src/mixins/sharedItems.js b/src/mixins/sharedItems.js index 93db849eddf..0cd037b5cf6 100644 --- a/src/mixins/sharedItems.js +++ b/src/mixins/sharedItems.js @@ -26,7 +26,7 @@ const sharedItems = { computed: { // Defines the order of the sections sharedItemsOrder() { - return [SHARED_ITEM.TYPES.MEDIA, SHARED_ITEM.TYPES.FILE, SHARED_ITEM.TYPES.POLL, SHARED_ITEM.TYPES.VOICE, SHARED_ITEM.TYPES.AUDIO, SHARED_ITEM.TYPES.LOCATION, SHARED_ITEM.TYPES.DECK_CARD, SHARED_ITEM.TYPES.OTHER] + return [SHARED_ITEM.TYPES.MEDIA, SHARED_ITEM.TYPES.FILE, SHARED_ITEM.TYPES.RECORDING, SHARED_ITEM.TYPES.POLL, SHARED_ITEM.TYPES.VOICE, SHARED_ITEM.TYPES.AUDIO, SHARED_ITEM.TYPES.LOCATION, SHARED_ITEM.TYPES.DECK_CARD, SHARED_ITEM.TYPES.OTHER] }, }, @@ -45,6 +45,8 @@ const sharedItems = { return t('spreed', 'Voice messages') case SHARED_ITEM.TYPES.LOCATION: return t('spreed', 'Locations') + case SHARED_ITEM.TYPES.RECORDING: + return t('spreed', 'Call recordings') case SHARED_ITEM.TYPES.AUDIO: return t('spreed', 'Audio') default: diff --git a/src/store/sharedItemsStore.js b/src/store/sharedItemsStore.js index 23338c75d7c..b0959cd350d 100644 --- a/src/store/sharedItemsStore.js +++ b/src/store/sharedItemsStore.js @@ -39,8 +39,9 @@ const getItemTypeFromMessage = function(message) { } else { const messageType = message.messageType || '' const mimetype = message.messageParameters.file?.mimetype || '' - - if (messageType === 'voice-message') { + if (messageType === 'record-audio' || messageType === 'record-video') { + return SHARED_ITEM.TYPES.RECORDING + } else if (messageType === 'voice-message') { return SHARED_ITEM.TYPES.VOICE } else if (mimetype.startsWith('audio/')) { return SHARED_ITEM.TYPES.AUDIO diff --git a/tests/integration/features/sharing/delete.feature b/tests/integration/features/sharing/delete.feature index 4b29d5bc56c..d5d472001ec 100644 --- a/tests/integration/features/sharing/delete.feature +++ b/tests/integration/features/sharing/delete.feature @@ -363,25 +363,27 @@ Feature: delete | room | actorType | actorId | actorDisplayName | message | messageParameters | | public room | users | participant1 | participant1-displayname | {file} | "IGNORE" | And user "participant1" sees the following shared summarized overview in room "public room" with 200 - | audio | 0 | - | deckcard | 0 | - | file | 1 | - | location | 0 | - | media | 0 | - | other | 0 | - | poll | 0 | - | voice | 0 | + | audio | 0 | + | deckcard | 0 | + | file | 1 | + | location | 0 | + | media | 0 | + | other | 0 | + | poll | 0 | + | voice | 0 | + | recording | 0 | When user "participant1" deletes file "welcome.txt" Then user "participant1" sees the following shared file in room "public room" with 200 And user "participant1" sees the following shared summarized overview in room "public room" with 200 - | audio | 0 | - | deckcard | 0 | - | file | 0 | - | location | 0 | - | media | 0 | - | other | 0 | - | poll | 0 | - | voice | 0 | + | audio | 0 | + | deckcard | 0 | + | file | 0 | + | location | 0 | + | media | 0 | + | other | 0 | + | poll | 0 | + | voice | 0 | + | recording | 0 | And user "participant1" sees the following system messages in room "public room" with 200 | room | actorType | actorId | actorDisplayName | systemMessage | | public room | users | participant1 | participant1-displayname | file_shared |