From 540ac1a87f221a1c57796b6e44b1e1c73d6cedbc Mon Sep 17 00:00:00 2001 From: HuyNguyen Date: Fri, 4 Oct 2024 13:43:41 +0700 Subject: [PATCH] fixup! fixup! fixup! fixup! TW-2066: Update change avatar in chat details --- .../config_web_app_for_public_platform.md | 4 +- lib/config/app_config.dart | 62 ++----------------- lib/pages/chat_details/chat_details_edit.dart | 11 ++-- lib/pages/new_group/new_group_chat_info.dart | 10 +-- .../new_group/new_group_chat_info_view.dart | 6 +- .../new_group/new_group_info_controller.dart | 4 +- .../settings_profile/settings_profile.dart | 5 +- .../settings_profile_view_mobile.dart | 3 +- lib/widgets/stream_image_view.dart | 2 +- 9 files changed, 25 insertions(+), 82 deletions(-) diff --git a/docs/configurations/config_web_app_for_public_platform.md b/docs/configurations/config_web_app_for_public_platform.md index 2bf2945f0a..308fb8fd9d 100644 --- a/docs/configurations/config_web_app_for_public_platform.md +++ b/docs/configurations/config_web_app_for_public_platform.md @@ -27,7 +27,7 @@ in [config.sample.json](https://github.com/linagora/twake-on-matrix/blob/main/co "app_grid_dashboard_available": true, "homeserver": "https://example.com/", "platform": "platform" - "default_max_upload_avatar_size": 1000000 + "default_max_upload_avatar_size_in_bytes": 1000000 } ``` @@ -44,6 +44,6 @@ in [config.sample.json](https://github.com/linagora/twake-on-matrix/blob/main/co - `app_grid_dashboard_available`: Enable App Grid - `homeserver`: Homeserver - `platform`: Platform, `saas` for the case of public platform -- `default_max_upload_avatar_size`: Default max upload avatar size +- `default_max_upload_avatar_size_in_bytes`: Default max upload avatar size If you want to disable it, please change the value or remove this from `config.sample.json` \ No newline at end of file diff --git a/lib/config/app_config.dart b/lib/config/app_config.dart index daaa88fa5d..f933c6a657 100644 --- a/lib/config/app_config.dart +++ b/lib/config/app_config.dart @@ -22,17 +22,13 @@ abstract class AppConfig { static String _applicationName = 'Twake Chat'; static String get applicationName => _applicationName; - static String? _applicationWelcomeMessage; static String? get applicationWelcomeMessage => _applicationWelcomeMessage; - static String _defaultHomeserver = 'matrix.linagora.com'; static String get defaultHomeserver => _defaultHomeserver; - static double bubbleSizeFactor = 1; - static double fontSizeFactor = 1; static String sampleValue = 'sampleValue'; @@ -57,127 +53,76 @@ abstract class AppConfig { static double toolbarHeight(BuildContext context) => responsive.isMobile(context) ? 48 : 56; static const Color chatColor = primaryColor; - static Color colorSchemeSeed = primaryColor; - static const double messageFontSize = 17.0; - static const bool allowOtherHomeservers = true; - static const bool enableRegistration = true; - static const Color primaryColor = Color.fromARGB(255, 135, 103, 172); - static const Color primaryColorLight = Color(0xFFCCBDEA); - static const Color secondaryColor = Color(0xFF41a2bc); static String get privacyUrl => _appPolicy; - static const String enablePushTutorial = 'https://gitlab.com/famedly/fluffychat/-/wikis/Push-Notifications-without-Google-Services'; - static const String encryptionTutorial = 'https://gitlab.com/famedly/fluffychat/-/wikis/How-to-use-end-to-end-encryption-in-FluffyChat'; - static const String appOpenUrlScheme = 'twake.chat'; - static String _webBaseUrl = 'https://fluffychat.im/web'; static String get webBaseUrl => _webBaseUrl; - static const String sourceCodeUrl = 'https://github.com/linagora/twake-on-matrix'; - static const String supportUrl = 'https://github.com/linagora/twake-on-matrix/issues'; - static bool renderHtml = true; - static bool hideRedactedEvents = false; - static bool hideUnknownEvents = true; - static bool hideUnimportantStateEvents = true; - static bool showDirectChatsInSpaces = true; - static bool separateChatTypes = false; - static bool autoplayImages = true; - static bool experimentalVoip = false; - static bool appGridDashboardAvailable = true; - static const bool hideTypingUsernames = false; - static const bool hideAllStateEvents = false; - static const String inviteLinkPrefix = 'https://matrix.to/#/'; - static const String deepLinkPrefix = 'im.fluffychat://chat/'; - static const String schemePrefix = 'matrix:'; - static const String pushNotificationsChannelId = 'twake_push'; - static const String pushNotificationsChannelName = 'Twake Chat push channel'; - static const String pushNotificationsChannelDescription = 'Push notifications for Twake Chat'; - static String pushNotificationsAppId = Platform.isIOS ? kReleaseMode ? "app.twake.ios.chat" : "app.twake.ios.chat.sandbox" : "app.twake.android.chat"; - static const String pushNotificationsGatewayUrl = 'https://sygnal.lin-saas.dev/_matrix/push/v1/notify'; - static const String pushNotificationsPusherFormat = 'event_id_only'; - static const String emojiFontName = 'Noto Emoji'; - static const String emojiFontUrl = 'https://github.com/googlefonts/noto-emoji/'; - static const double borderRadius = 20.0; - static const double columnWidth = 360.0; - static const int maxFetchContacts = 100000; - static const int chatRoomSearchKeywordMin = 2; - static const bool chatRoomSearchWordStrategy = false; - static const String defaultImageBlurHash = 'LEHV6nWB2yk8pyo0adR*.7kCMdnj'; - static const String defaultVideoBlurHash = 'L5H2EC=PM+yV0g-mq.wG9c010J}I'; - static const int thumbnailQuality = 70; - static const int blurHashSize = 32; - static const int imageQuality = 50; - static const String iOSKeychainSharingId = 'KUT463DS29.app.twake.ios.chat'; - 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; - static int defaultMaxUploadAvtarSize = 10 * (1024 * 1024); + static int defaultMaxUploadAvtarSizeInBytes = 10 * (1024 * 1024); static const String appGridConfigurationPath = "configurations/app_dashboard.json"; @@ -294,8 +239,9 @@ abstract class AppConfig { if (json['platform'] is String?) { platform = json['platform']; } - if (json['default_max_upload_avatar_size'] is int) { - defaultMaxUploadAvtarSize = json['default_max_upload_avatar_size']; + if (json['default_max_upload_avatar_size_in_bytes'] is int) { + defaultMaxUploadAvtarSizeInBytes = + json['default_max_upload_avatar_size_in_bytes']; } } } diff --git a/lib/pages/chat_details/chat_details_edit.dart b/lib/pages/chat_details/chat_details_edit.dart index 09ea9a5168..05cb55851b 100644 --- a/lib/pages/chat_details/chat_details_edit.dart +++ b/lib/pages/chat_details/chat_details_edit.dart @@ -185,7 +185,6 @@ class ChatDetailsEditController extends State ) async { final result = await FilePicker.platform.pickFiles( type: FileType.image, - withData: false, withReadStream: true, ); Logs().d( @@ -198,18 +197,15 @@ class ChatDetailsEditController extends State Logs().d( 'ChatDetailsEditController::_getImageOnWeb(): FilePickerResult - ${matrixFile.size}', ); - if (matrixFile.size > AppConfig.defaultMaxUploadAvtarSize) { + if (matrixFile.size > AppConfig.defaultMaxUploadAvtarSizeInBytes) { TwakeSnackBar.show( context, L10n.of(context)!.fileTooBig( - AppConfig.defaultMaxUploadAvtarSize.bytesToMBInt(), + AppConfig.defaultMaxUploadAvtarSizeInBytes.bytesToMBInt(), ), ); return; } - if (!isEditedGroupInfoNotifier.value) { - isEditedGroupInfoNotifier.toggle(); - } updateGroupAvatarNotifier.value = Right( ChatDetailsGetAvatarInByteSuccess( matrixFile: matrixFile, @@ -222,6 +218,9 @@ class ChatDetailsEditController extends State } void updateAvatarFilePicker(MatrixFile matrixFile) { + if (!isEditedGroupInfoNotifier.value) { + isEditedGroupInfoNotifier.toggle(); + } avatarFilePicker = matrixFile; } diff --git a/lib/pages/new_group/new_group_chat_info.dart b/lib/pages/new_group/new_group_chat_info.dart index 7bf9857635..dd6ca4faec 100644 --- a/lib/pages/new_group/new_group_chat_info.dart +++ b/lib/pages/new_group/new_group_chat_info.dart @@ -61,7 +61,7 @@ class NewGroupChatInfoController extends State getIt.get(); final groupNameTextEditingController = TextEditingController(); final avatarAssetEntityNotifier = ValueNotifier(null); - MatrixFile? avatarFilePickerNotifier; + final avatarFilePickerNotifier = ValueNotifier(null); final groupNameFocusNode = FocusNode(); StreamSubscription? createNewGroupChatInteractorStreamSubscription; @@ -267,7 +267,6 @@ class NewGroupChatInfoController extends State ) async { final result = await FilePicker.platform.pickFiles( type: FileType.image, - withData: false, withReadStream: true, ); if (result == null || result.files.single.readStream == null) { @@ -277,11 +276,11 @@ class NewGroupChatInfoController extends State Logs().d( 'NewGroupController::_getImageOnWeb(): FilePickerResult - ${matrixFile.size}', ); - if (matrixFile.size > AppConfig.defaultMaxUploadAvtarSize) { + if (matrixFile.size > AppConfig.defaultMaxUploadAvtarSizeInBytes) { TwakeSnackBar.show( context, L10n.of(context)!.fileTooBig( - AppConfig.defaultMaxUploadAvtarSize.bytesToMBInt(), + AppConfig.defaultMaxUploadAvtarSizeInBytes.bytesToMBInt(), ), ); return; @@ -295,7 +294,7 @@ class NewGroupChatInfoController extends State } void updateAvatarFilePicker(MatrixFile matrixFile) { - avatarFilePickerNotifier = matrixFile; + avatarFilePickerNotifier.value = matrixFile; } void showImagesPickerAction({ @@ -364,6 +363,7 @@ class NewGroupChatInfoController extends State createNewGroupChatInteractorStreamSubscription?.cancel(); groupNameTextEditingController.dispose(); groupNameFocusNode.dispose(); + avatarFilePickerNotifier.dispose(); } @override diff --git a/lib/pages/new_group/new_group_chat_info_view.dart b/lib/pages/new_group/new_group_chat_info_view.dart index cfabbe7602..6e128a6c34 100644 --- a/lib/pages/new_group/new_group_chat_info_view.dart +++ b/lib/pages/new_group/new_group_chat_info_view.dart @@ -53,7 +53,8 @@ class NewGroupChatInfoView extends StatelessWidget { ), Text( L10n.of(context)!.maxImageSize( - AppConfig.defaultMaxUploadAvtarSize.bytesToMBInt(), + AppConfig.defaultMaxUploadAvtarSizeInBytes + .bytesToMBInt(), ), style: Theme.of(context).textTheme.bodySmall?.copyWith( color: LinagoraRefColors.material().neutral[40], @@ -297,8 +298,7 @@ class _AvatarForWebBuilder extends StatelessWidget { builder: (context, uiState, child) => uiState.fold((failure) => child!, (success) { if (success is GetAvatarInStreamUIStateSuccess) { - if (success.matrixFile != null && - success.matrixFile?.readStream == null) { + if (success.matrixFile?.readStream == null) { return child!; } return ClipOval( diff --git a/lib/pages/new_group/new_group_info_controller.dart b/lib/pages/new_group/new_group_info_controller.dart index cbe3daf239..d340be6bdc 100644 --- a/lib/pages/new_group/new_group_info_controller.dart +++ b/lib/pages/new_group/new_group_info_controller.dart @@ -15,10 +15,10 @@ extension NewGroupInfoControllerExtension on NewGroupChatInfoController { } void _handleUploadAvatarInBytes(Client client) { - if (avatarFilePickerNotifier != null) { + if (avatarFilePickerNotifier.value != null) { uploadAvatarNewGroupChatInBytes( matrixClient: client, - matrixFile: avatarFilePickerNotifier!, + matrixFile: avatarFilePickerNotifier.value!, ); } else { createNewGroup(); diff --git a/lib/pages/settings_dashboard/settings_profile/settings_profile.dart b/lib/pages/settings_dashboard/settings_profile/settings_profile.dart index 4b25b089db..831e7c737e 100644 --- a/lib/pages/settings_dashboard/settings_profile/settings_profile.dart +++ b/lib/pages/settings_dashboard/settings_profile/settings_profile.dart @@ -185,7 +185,6 @@ class SettingsProfileController extends State ) async { final result = await FilePicker.platform.pickFiles( type: FileType.image, - withData: false, withReadStream: true, ); if (result == null || result.files.single.readStream == null) { @@ -195,11 +194,11 @@ class SettingsProfileController extends State Logs().d( 'SettingsProfile::_getImageOnWeb(): AvatarWebNotifier - ${matrixFile.size}', ); - if (matrixFile.size > AppConfig.defaultMaxUploadAvtarSize) { + if (matrixFile.size > AppConfig.defaultMaxUploadAvtarSizeInBytes) { TwakeSnackBar.show( context, L10n.of(context)!.fileTooBig( - AppConfig.defaultMaxUploadAvtarSize.bytesToMBInt(), + AppConfig.defaultMaxUploadAvtarSizeInBytes.bytesToMBInt(), ), ); return; diff --git a/lib/pages/settings_dashboard/settings_profile/settings_profile_view_mobile.dart b/lib/pages/settings_dashboard/settings_profile/settings_profile_view_mobile.dart index aa8ac907cd..9ae4cb04f9 100644 --- a/lib/pages/settings_dashboard/settings_profile/settings_profile_view_mobile.dart +++ b/lib/pages/settings_dashboard/settings_profile/settings_profile_view_mobile.dart @@ -112,8 +112,7 @@ class SettingsProfileViewMobile extends StatelessWidget { } if (success is GetAvatarInBytesUIStateSuccess && PlatformInfos.isWeb) { - if (success.matrixFile == null || - success.matrixFile?.readStream == null) { + if (success.matrixFile?.readStream == null) { return child!; } return ClipOval( diff --git a/lib/widgets/stream_image_view.dart b/lib/widgets/stream_image_view.dart index a8b03e5857..7b7a19b03f 100644 --- a/lib/widgets/stream_image_view.dart +++ b/lib/widgets/stream_image_view.dart @@ -49,7 +49,7 @@ class StreamImageViewerState extends State { Widget build(BuildContext context) { return ValueListenableBuilder( valueListenable: imageBytes, - builder: (context, bytes, _) { + builder: (_, bytes, __) { if (bytes == null) { return const Center( child: CircularProgressIndicator(),