fix: Bug - Sending files and attachment issues

Hydrate playable media after disk receive, relay file-announce to sibling
devices via account_sync, bind DM attachments to pre-allocated message ids,
and improve gallery retry/cancel UX with bounded parallel auto-downloads.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-14 13:05:23 +02:00
co-authored by Cursor
parent bb0ac930ad
commit fa45052432
30 changed files with 785 additions and 71 deletions
@@ -47,6 +47,7 @@ import {
ChatMessageDeleteEvent,
ChatMessageEditEvent,
ChatMessageEmbedRemoveEvent,
ChatMessageAttachmentEvent,
ChatMessageImageContextMenuEvent,
ChatMessageImageLightboxEvent,
ChatMessageReactionEvent,
@@ -340,14 +341,17 @@ export class ChatMessagesComponent {
}
openImageGallery(attachments: Attachment[]): void {
const availableImages = attachments.filter((attachment) => attachment.available && attachment.objectUrl);
if (availableImages.length < 2) {
if (attachments.length < 2) {
return;
}
this.attachmentsSvc.pinDisplayBlobs(availableImages);
this.galleryAttachments.set(availableImages);
const displayableImages = attachments.filter((attachment) => attachment.available && attachment.objectUrl);
if (displayableImages.length > 0) {
this.attachmentsSvc.pinDisplayBlobs(displayableImages);
}
this.galleryAttachments.set(attachments);
}
closeImageGallery(): void {
@@ -372,6 +376,20 @@ export class ChatMessagesComponent {
await this.attachmentDownload.downloadToUserLocation(attachment);
}
retryGalleryImage(event: ChatMessageAttachmentEvent): void {
const { messageId, attachment } = event;
if ((attachment.receivedBytes ?? 0) > 0 || this.attachmentsSvc.hasPendingRequest(messageId, attachment.id)) {
this.attachmentsSvc.cancelRequest(messageId, attachment);
}
void this.attachmentsSvc.requestImageFromAnyPeer(messageId, attachment);
}
cancelGalleryImage(event: ChatMessageAttachmentEvent): void {
this.attachmentsSvc.cancelRequest(event.messageId, event.attachment);
}
async copyImageToClipboard(attachment: Attachment): Promise<void> {
this.closeImageContextMenu();