fluffychat/lib/utils/event_extension.dart

75 lines
2.1 KiB
Dart
Raw Normal View History

2020-01-19 15:07:42 +01:00
import 'package:famedlysdk/famedlysdk.dart';
2020-05-16 08:02:33 +02:00
import 'package:fluffychat/components/dialogs/simple_dialogs.dart';
2020-05-07 11:19:29 +02:00
import 'package:flutter/foundation.dart';
2020-01-19 15:07:42 +01:00
import 'package:flutter/material.dart';
2020-05-16 08:02:33 +02:00
import 'matrix_file_extension.dart';
2020-09-03 12:58:54 +02:00
import 'app_route.dart';
import '../views/image_view.dart';
2020-01-19 15:07:42 +01:00
extension LocalizedBody on Event {
2020-09-03 12:58:54 +02:00
void openFile(BuildContext context, {bool downloadOnly = false}) async {
if (!downloadOnly &&
[MessageTypes.Image, MessageTypes.Sticker].contains(messageType)) {
await Navigator.of(context).push(
AppRoute(
ImageView(this),
),
);
return;
}
2020-05-16 08:02:33 +02:00
final MatrixFile matrixFile =
await SimpleDialogs(context).tryRequestWithLoadingDialog(
downloadAndDecryptAttachment(),
);
matrixFile.open();
}
2020-03-13 20:09:32 +01:00
IconData get statusIcon {
2020-05-13 15:58:59 +02:00
switch (status) {
2020-03-13 20:09:32 +01:00
case -1:
return Icons.error_outline;
case 0:
return Icons.timer;
case 1:
return Icons.done;
case 2:
return Icons.done_all;
default:
return Icons.done;
}
}
2020-03-13 21:58:48 +01:00
2020-05-07 11:19:29 +02:00
bool get showThumbnail =>
2020-05-10 13:26:52 +02:00
[MessageTypes.Image, MessageTypes.Sticker].contains(messageType) &&
(kIsWeb ||
2020-05-10 13:26:52 +02:00
(content['info'] is Map &&
2020-09-03 12:58:54 +02:00
content['info']['size'] < room.client.database.maxFileSize) ||
(hasThumbnail &&
content['info']['thumbnail_info'] is Map &&
content['info']['thumbnail_info']['size'] <
room.client.database.maxFileSize) ||
(content['url'] is String));
2020-05-07 11:19:29 +02:00
2020-03-13 21:58:48 +01:00
String get sizeString {
2020-05-13 15:58:59 +02:00
if (content['info'] is Map<String, dynamic> &&
content['info'].containsKey('size')) {
num size = content['info']['size'];
2020-03-13 21:58:48 +01:00
if (size < 1000000) {
size = size / 1000;
2020-05-16 08:09:07 +02:00
size = (size * 10).round() / 10;
return '${size.toString()} KB';
2020-03-13 21:58:48 +01:00
} else if (size < 1000000000) {
size = size / 1000000;
2020-05-16 08:09:07 +02:00
size = (size * 10).round() / 10;
return '${size.toString()} MB';
2020-03-13 21:58:48 +01:00
} else {
size = size / 1000000000;
2020-05-16 08:09:07 +02:00
size = (size * 10).round() / 10;
return '${size.toString()} GB';
2020-03-13 21:58:48 +01:00
}
2020-03-14 11:05:28 +01:00
} else {
2020-03-13 21:58:48 +01:00
return null;
2020-03-14 11:05:28 +01:00
}
2020-03-13 21:58:48 +01:00
}
2020-01-19 15:07:42 +01:00
}