allow editing in/out attachments from messages

This commit is contained in:
Henry Hiles 2026-11-02 17:14:06 -05:00
commit e398043a49
Signed by: Henry-Hiles
SSH key fingerprint: SHA256:VKQUdS31Q90KvX7EkKMHMBpUspcmItAh86a+v7PGiIs
2 changed files with 71 additions and 20 deletions

View file

@ -29,6 +29,8 @@ class AttachmentController(final String roomId)
state = (filename, content);
}
void set((String, MessageContent?)? attachment) => state = attachment;
static final provider = NotifierProvider.family
.autoDispose<AttachmentController, (String, MessageContent?)?, String>(
AttachmentController.new,

View file

@ -8,6 +8,7 @@ import "package:fluttertagger/fluttertagger.dart";
import "package:nexus/controllers/attachment.dart";
import "package:nexus/controllers/client.dart";
import "package:nexus/controllers/rooms.dart";
import "package:nexus/helpers/extensions/is_media.dart";
import "package:nexus/helpers/extensions/send_failed.dart";
import "package:nexus/models/content/content.dart";
import "package:nexus/models/content/image_pack.dart";
@ -231,22 +232,24 @@ class RoomChatController(final ChatParams info)
required RelationType relationType,
int? relatedEventRowId,
}) async {
Content? baseContent;
final events = ref.read(RoomsController.provider)[info.roomId]?.events;
final relatedEvent = relatedEventRowId == null
? null
: ref.read(
RoomsController.provider.select(
(rooms) => rooms[info.roomId]?.events[relatedEventRowId],
),
);
: events?[relatedEventRowId];
if (relationType == .edit && relatedEventRowId != null) {
baseContent = relatedEvent?.content;
} else {
final provider = AttachmentController.provider(info.roomId);
baseContent = ref.read(provider)?.$2;
ref.invalidate(provider);
}
final attachmentProvider = AttachmentController.provider(info.roomId);
final attachment = ref.read(attachmentProvider)?.$2;
ref.invalidate(attachmentProvider);
// Edits of media use the attachment, which starts as the current media
final latestContent = relatedEvent == null
? null
: (events?[relatedEvent.lastEditRowId] ?? relatedEvent).content;
final baseContent =
attachment ??
(relationType == .edit && latestContent?.isMedia == false
? latestContent
: null);
// Replaces each formatted tag, like "@id#name#", with its ID
final taggedMessage = tags.fold(