handleAttachmentTrimmingEvent method
void
handleAttachmentTrimmingEvent(
- Map<String, dynamic> data
)
Implementation
void handleAttachmentTrimmingEvent(Map<String, dynamic> data) {
final Map<String, dynamic>? eventData = data["data"] is Map
? Map<String, dynamic>.from(data["data"] as Map)
: null;
if (eventData == null) return;
final String? eventType = (data["type"] is String)
? (data["type"] as String).toLowerCase()
: null;
final bool isEmergency = eventType == "emergency_trimming";
final AttachmentTrimmingInfo? trimming = isEmergency
? AttachmentTrimmingInfo.fromSseDataEmergency(eventData)
: AttachmentTrimmingInfo.fromSseDataAttachment(eventData);
if (trimming == null) return;
PupauMessage? currentMessage;
final loadingAssistant = messages
.where(
(PupauMessage m) =>
m.isMessageFromAssistant && m.status == MessageStatus.loading,
)
.toList();
if (loadingAssistant.isNotEmpty) {
currentMessage = loadingAssistant.last;
}
if (currentMessage != null) {
if (isEmergency) {
currentMessage.emergencyTrimming = trimming;
} else {
currentMessage.attachmentTrimming = trimming;
}
messages.refresh();
update();
}
final int truncated = trimming.truncatedCount;
final int removed = trimming.removedCount;
final String detail = truncated > 0 && removed > 0
? Strings.attachmentTrimmingDetailBoth.tr
.replaceAll("%1", truncated.toString())
.replaceAll("%2", removed.toString())
: truncated > 0
? Strings.attachmentTrimmingDetailTruncated.tr.replaceAll(
"%1",
truncated.toString(),
)
: Strings.attachmentTrimmingDetailRemoved.tr.replaceAll(
"%1",
removed.toString(),
);
showFeedbackSnackbar(
"${Strings.attachmentTrimmingSnackbar.tr} $detail",
Symbols.content_cut,
isInfo: true,
);
}