Skip to content

Commit

Permalink
TW-1901: crash app when open play video mobile (#1979)
Browse files Browse the repository at this point in the history
* TW-1844: add try/catch for thumbnail cannot display exception

* TW-1844: add extension for thumbnails when sending images and videos
  • Loading branch information
sherlockvn authored Jul 25, 2024
1 parent a74b6ea commit 3171fe0
Show file tree
Hide file tree
Showing 5 changed files with 35 additions and 21 deletions.
4 changes: 4 additions & 0 deletions lib/config/app_config.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@ import 'package:fluffychat/di/global/get_it_initializer.dart';
import 'package:fluffychat/utils/responsive/responsive_utils.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_image_compress/flutter_image_compress.dart';
import 'package:matrix/matrix.dart';
import 'package:video_thumbnail/video_thumbnail.dart';

abstract class AppConfig {
static ResponsiveUtils responsive = getIt.get<ResponsiveUtils>();
Expand Down Expand Up @@ -115,6 +117,8 @@ abstract class AppConfig {
static const String iOSKeychainSharingAccount = 'app.twake.ios.chat.sessions';
static const int maxFilesSendPerDialog = 6;
static const bool supportMultipleAccountsInTheSameHomeserver = false;
static const imageCompressFormmat = CompressFormat.jpeg;
static const videoThumbnailFormat = ImageFormat.JPEG;

static String? issueId;

Expand Down
4 changes: 2 additions & 2 deletions lib/presentation/extensions/send_file_extension.dart
Original file line number Diff line number Diff line change
Expand Up @@ -575,7 +575,7 @@ extension SendFileExtension on Room {
originalFile.filePath,
targetPath,
quality: AppConfig.thumbnailQuality,
format: CompressFormat.jpeg,
format: AppConfig.imageCompressFormmat,
);
if (result == null) return null;
final size = await result.length();
Expand All @@ -591,7 +591,7 @@ extension SendFileExtension on Room {
}
uploadStreamController?.add(const Right(GenerateThumbnailSuccess()));
return ImageFileInfo(
result.name,
'${result.name}.${AppConfig.imageCompressFormmat.name}',
result.path,
size,
width: width,
Expand Down
9 changes: 6 additions & 3 deletions lib/presentation/extensions/send_file_web_extension.dart
Original file line number Diff line number Diff line change
Expand Up @@ -372,6 +372,7 @@ extension SendFileWebExtension on Room {
final result = await FlutterImageCompress.compressWithList(
originalFile.bytes!,
quality: AppConfig.thumbnailQuality,
format: AppConfig.imageCompressFormmat,
);

final blurHash = await runBenchmarked(
Expand All @@ -385,7 +386,7 @@ extension SendFileWebExtension on Room {

return MatrixImageFile(
bytes: result,
name: originalFile.name,
name: '${originalFile.name}.${AppConfig.imageCompressFormmat.name}',
mimeType: originalFile.mimeType,
width: originalFile.width,
height: originalFile.height,
Expand Down Expand Up @@ -425,9 +426,10 @@ extension SendFileWebExtension on Room {
);
throw exception;
}

final result = await VideoThumbnail.thumbnailData(
video: url,
imageFormat: ImageFormat.JPEG,
imageFormat: AppConfig.videoThumbnailFormat,
quality: AppConfig.thumbnailQuality,
);
final thumbnailBitmap = await convertUint8ListToBitmap(result);
Expand All @@ -442,7 +444,8 @@ extension SendFileWebExtension on Room {

return MatrixImageFile(
bytes: result,
name: originalFile.name,
name:
'${originalFile.name}.${AppConfig.videoThumbnailFormat.name.toLowerCase()}',
mimeType: originalFile.mimeType,
width: thumbnailBitmap?.width,
height: thumbnailBitmap?.height,
Expand Down
4 changes: 4 additions & 0 deletions lib/utils/matrix_sdk_extensions/download_file_extension.dart
Original file line number Diff line number Diff line change
Expand Up @@ -276,6 +276,10 @@ extension DownloadFileExtension on Event {
throw "getFileInfo: This event hasn't any attachment or thumbnail.";
}

if (getThumbnail && thumbnailMimetype.startsWith('image') != true) {
throw ('getFileInfo: This event has a thumbnail but it is not an image.');
}

final isFileEncrypted =
getThumbnail ? isThumbnailEncrypted : isAttachmentEncrypted;
if (isEncryptionDisabled(isFileEncrypted)) {
Expand Down
35 changes: 19 additions & 16 deletions lib/widgets/mxc_image.dart
Original file line number Diff line number Diff line change
Expand Up @@ -182,26 +182,27 @@ class _MxcImageState extends State<MxcImage> {
}

if (event != null) {
if (!PlatformInfos.isWeb) {
final fileInfo = await event.getFileInfo(
getThumbnail: widget.isThumbnail,
);
if (fileInfo != null && fileInfo.filePath.isNotEmpty) {
setState(() {
try {
if (!PlatformInfos.isWeb) {
final fileInfo = await event.getFileInfo(
getThumbnail: widget.isThumbnail,
);
if (fileInfo != null && fileInfo.filePath.isNotEmpty) {
filePath = fileInfo.filePath;
});
return;
return;
}
}
}

final matrixFile = await event.downloadAndDecryptAttachment(
getThumbnail: widget.isThumbnail,
);
if (!mounted) return;
setState(() {
final matrixFile = await event.downloadAndDecryptAttachment(
getThumbnail: widget.isThumbnail,
);
if (!mounted) return;
_imageData = matrixFile.bytes;
});
return;
return;
} catch (e) {
Logs().e('MxcImage::Error while downloading image: $e');
}
if (!mounted) return;
}
}

Expand Down Expand Up @@ -372,6 +373,7 @@ class _ImageWidget extends StatelessWidget {
height: height,
width: width,
fit: BoxFit.cover,
errorBuilder: imageErrorWidgetBuilder,
)
: Image.memory(
data!,
Expand Down Expand Up @@ -426,6 +428,7 @@ class _ImageNativeBuilder extends StatelessWidget {
height: height,
width: width,
fit: BoxFit.cover,
errorBuilder: imageErrorWidgetBuilder,
);
}
return Image.file(
Expand Down

0 comments on commit 3171fe0

Please sign in to comment.