From 5335bd7856829737f16db6e242703b6c00e79dfe Mon Sep 17 00:00:00 2001 From: Maksim Sukharev Date: Tue, 4 Aug 2026 17:14:00 +0200 Subject: [PATCH 1/2] refactor: inject nextMessageId to AudioPlayer - FilePreview does not need it - prep for extracting richParameters Assisted-by: ClaudeCode:claude-opus-5 Signed-off-by: Maksim Sukharev --- .../MessagesList/MessagesGroup/Message/MessageItem.vue | 6 +++--- .../MessagesGroup/Message/MessagePart/AudioPlayer.vue | 8 +++----- .../MessagesGroup/Message/MessagePart/FilePreview.vue | 6 ------ 3 files changed, 6 insertions(+), 14 deletions(-) diff --git a/src/components/MessagesList/MessagesGroup/Message/MessageItem.vue b/src/components/MessagesList/MessagesGroup/Message/MessageItem.vue index 248027f1e48..2a34266acb5 100644 --- a/src/components/MessagesList/MessagesGroup/Message/MessageItem.vue +++ b/src/components/MessagesList/MessagesGroup/Message/MessageItem.vue @@ -95,7 +95,7 @@ import { showError, showSuccess, showWarning, TOAST_DEFAULT_TIMEOUT } from '@nextcloud/dialogs' import { t } from '@nextcloud/l10n' import { useIsSmallMobile } from '@nextcloud/vue/composables/useIsMobile' -import { defineAsyncComponent, inject } from 'vue' +import { computed, defineAsyncComponent, inject, provide } from 'vue' import IconPin from 'vue-material-design-icons/PinOutline.vue' import MessageButtonsBar from './MessageButtonsBar/MessageButtonsBar.vue' import MessageForwarder from './MessageButtonsBar/MessageForwarder.vue' @@ -152,10 +152,11 @@ export default { }, }, - setup() { + setup(props) { const isSidebar = inject('chatView:isSidebar', false) const threadId = useGetThreadId() const isSplitViewEnabled = inject('messagesList:isSplitViewEnabled', true) + provide('message:nextMessageId', computed(() => Number(props.nextMessageId) || 0)) return { chatExtrasStore: useChatExtrasStore(), @@ -236,7 +237,6 @@ export default { props: { token: this.message.token, messageId: this.message.id, - nextMessageId: this.nextMessageId, itemType: getItemTypeFromMessage(this.message, p), referenceId: this.message.messageParameters[p].referenceId ?? this.message.referenceId, file: this.message.messageParameters[p], diff --git a/src/components/MessagesList/MessagesGroup/Message/MessagePart/AudioPlayer.vue b/src/components/MessagesList/MessagesGroup/Message/MessagePart/AudioPlayer.vue index 9741b5cbe1d..6518cb0756b 100644 --- a/src/components/MessagesList/MessagesGroup/Message/MessagePart/AudioPlayer.vue +++ b/src/components/MessagesList/MessagesGroup/Message/MessagePart/AudioPlayer.vue @@ -23,6 +23,7 @@ import { t } from '@nextcloud/l10n' import { encodePath } from '@nextcloud/paths' import { generateRemoteUrl } from '@nextcloud/router' +import { inject } from 'vue' import { EventBus } from '../../../../../services/EventBus.ts' import { useActorStore } from '../../../../../stores/actor.ts' @@ -68,11 +69,6 @@ export default { default: 0, }, - nextMessageId: { - type: Number, - default: 0, - }, - showFileName: { type: Boolean, default: false, @@ -82,6 +78,8 @@ export default { setup() { return { actorStore: useActorStore(), + // Id of the next message in the list, to auto play the next audio message + nextMessageId: inject('message:nextMessageId', 0), } }, diff --git a/src/components/MessagesList/MessagesGroup/Message/MessagePart/FilePreview.vue b/src/components/MessagesList/MessagesGroup/Message/MessagePart/FilePreview.vue index a9ab8fa5748..e2a556ca817 100644 --- a/src/components/MessagesList/MessagesGroup/Message/MessagePart/FilePreview.vue +++ b/src/components/MessagesList/MessagesGroup/Message/MessagePart/FilePreview.vue @@ -148,11 +148,6 @@ export default { default: 0, }, - nextMessageId: { - type: [String, Number], - default: 0, - }, - /** * File object */ @@ -272,7 +267,6 @@ export default { link: this.file.link, localUrl: this.fallbackLocalUrl, messageId: Number(this.messageId), - nextMessageId: Number(this.nextMessageId), showFileName: this.shouldShowFileDetail && !this.isVoiceMessage, } } From c3c903d4a079379bf3e4413ed2c023da454c09cf Mon Sep 17 00:00:00 2001 From: Maksim Sukharev Date: Mon, 17 Aug 2026 16:58:03 +0200 Subject: [PATCH 2/2] fix: align if-else order for AudioPlayer rendering - filePreviewElement and filePreviewBinding should return consistent results (warning noticed for temp voice message) Assisted-by: ClaudeCode:claude-opus-5 Signed-off-by: Maksim Sukharev --- .../MessagesGroup/Message/MessagePart/FilePreview.vue | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/MessagesList/MessagesGroup/Message/MessagePart/FilePreview.vue b/src/components/MessagesList/MessagesGroup/Message/MessagePart/FilePreview.vue index e2a556ca817..cd88d296205 100644 --- a/src/components/MessagesList/MessagesGroup/Message/MessagePart/FilePreview.vue +++ b/src/components/MessagesList/MessagesGroup/Message/MessagePart/FilePreview.vue @@ -258,9 +258,7 @@ export default { }, filePreviewBinding() { - if (this.isUploadEditor || this.isTemporaryUpload) { - return - } else if (this.isAudioPlayer) { + if (this.isAudioPlayer) { return { name: this.file.name, path: this.file.path, @@ -269,6 +267,8 @@ export default { messageId: Number(this.messageId), showFileName: this.shouldShowFileDetail && !this.isVoiceMessage, } + } else if (this.isUploadEditor || this.isTemporaryUpload) { + return } return { href: this.file.link,