handleAttachmentTrimmingEvent method

void handleAttachmentTrimmingEvent(
  1. 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,
  );
}