Initial commit
Some checks failed
Main Deploy Workflow / deploy_web (push) Has been cancelled
Main Deploy Workflow / deploy_playstore_internal (push) Has been cancelled
Close stale issues and PRs / stale (push) Has been cancelled

This commit is contained in:
2026-09-11 15:59:56 -03:00
commit 0037b0b9cf
651 changed files with 199705 additions and 0 deletions

View File

@@ -0,0 +1,68 @@
// SPDX-FileCopyrightText: 2019-Present Christian Kußowski
// SPDX-FileCopyrightText: 2019-Present Contributors to FluffyChat
//
// SPDX-License-Identifier: AGPL-3.0-or-later
import 'package:async/async.dart' as async;
import 'package:tatchat/utils/size_string.dart';
import 'package:tatchat/widgets/future_loading_dialog.dart';
import 'package:flutter/foundation.dart';
import 'package:material_ui/material_ui.dart';
import 'package:matrix/matrix.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),
);
},
);
Future<void> saveFile(BuildContext context) async {
final matrixFile = await _getFile(context);
if (!context.mounted) return;
matrixFile.result?.save(context);
}
Future<void> shareFile(BuildContext context) async {
final matrixFile = await _getFile(context);
if (!context.mounted) return;
matrixFile.result?.share(context);
}
bool get isAttachmentSmallEnough =>
infoMap['size'] is int &&
(infoMap['size'] as int) < room.client.database.maxFileSize;
bool get isThumbnailSmallEnough =>
thumbnailInfoMap['size'] is int &&
(thumbnailInfoMap['size'] as int) < 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, Object?>('info')
?.tryGet<int>('size')
?.sizeString;
}