content: import 'dart:developer';
  
  import 'package:flutter/foundation.dart';
  import 'package:flutter/material.dart';
  
  import 'package:async/async.dart' as async;
  import 'package:matrix/matrix.dart';
  
  import 'package:fluffychat/utils/size_string.dart';
  import 'package:fluffychat/widgets/future_loading_dialog.dart';
  import 'matrix_file_extension.dart';
  
  extension LocalizedBody on Event {
    Future<async.Result<MatrixFile?>> _getFile(BuildContext context) =>
        showFutureLoadingDialog(
          context: context,
          futureWithProgress: (onProgress) {
            final fileSize =
                infoMap['size'] is int ? infoMap['size'] as int : null;
            return downloadAndDecryptAttachment(
              onDownloadProgress: fileSize == null
                  ? null
                  : (bytes) => onProgress(bytes / fileSize),
            );
          },
        );
  
    void saveFile(BuildContext context) async {
      final matrixFile = await _getFile(context);
  
      matrixFile.result?.save(context);
    }
  
    void shareFile(BuildContext context) async {
      final matrixFile = await _getFile(context);
      inspect(matrixFile);
  
      matrixFile.result?.share(context);
    }
  
    bool get isAttachmentSmallEnough =>
        infoMap['size'] is int &&
        infoMap['size'] < room.client.database.maxFileSize;
  
    bool get isThumbnailSmallEnough =>
        thumbnailInfoMap['size'] is int &&
        thumbnailInfoMap['size'] < room.client.database.maxFileSize;
  
    bool get showThumbnail =>
        [MessageTypes.Image, MessageTypes.Sticker, MessageTypes.Video]
            .contains(messageType) &&
        (kIsWeb ||
            isAttachmentSmallEnough ||
            isThumbnailSmallEnough ||
            (content['url'] is String));
  
    String? get sizeString => content
        .tryGetMap<String, dynamic>('info')
        ?.tryGet<int>('size')
        ?.sizeString;
  }
  