From 15c64a68fa77c617218225b83bd3c1fc68550b73 Mon Sep 17 00:00:00 2001 From: ice-alcides <171546305+ice-alcides@users.noreply.github.com> Date: Wed, 12 Feb 2025 11:14:48 +0200 Subject: [PATCH] fix: remove double compression, proper handling of the image in the story preview page --- ios/Podfile.lock | 64 +++++++++---------- .../providers/create_post_notifier.c.dart | 19 +++--- .../views/pages/story_preview_page.dart | 26 ++++++-- .../image_proccessor_notifier.c.dart | 12 ++++ 4 files changed, 72 insertions(+), 49 deletions(-) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index feee380977..22271a2e25 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -374,7 +374,7 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/video_player_avfoundation/darwin" SPEC CHECKSUMS: - audio_waveforms: cd736909ebc6b6a164eb74701d8c705ce3241e1c + audio_waveforms: a6dde7fe7c0ea05f06ffbdb0f7c1b2b2ba6cedcf BanubaARCloudSDK: 40da62afeea642301ca8092600c9bb9cf67fe30e BanubaAudioBrowserSDK: 3a92807e60daa70dcaa1e76920abab97e7a73bf4 BanubaLicenseServicingSDK: f2b51a4288d6b9796063855f5db6dc227819de22 @@ -385,7 +385,7 @@ SPEC CHECKSUMS: BanubaUtilities: 4ca45fcd7a6b5d246b75f02fd3f36b43d2dbebd3 BanubaVideoEditorGallerySDK: 6d775728f14ab78e210d86058166e3deb3fc3814 BanubaVideoEditorSDK: 1b8d56004f147c0ed96077f8171247efbc0511e7 - bdk_flutter: 86c9ba59ee282dee08c3a29599abe867d10a8b10 + bdk_flutter: cef9180019b4c6b67a3e3dfb74611683fe140107 BNBAcneEyebagsRemoval: 9ad2c2351d57231add905c5bff6117faff87b712 BNBBackground: 1e88cbaa9c447c1aa46506b0d74b1bd833494c72 BNBEffectPlayer: 05f74da227a9ece5dd52bcdd8aa996e076793e6b @@ -398,50 +398,50 @@ SPEC CHECKSUMS: BNBSdkApi: f773621958cf0f7776e18f90b96ace13b29d84e2 BNBSdkCore: cc7711127dbcaf392d0a25f4a858d98ffc5c9213 BNBSkin: 3a741bbba57a2a860fe4a69dbd597d7d9aea5793 - camera_avfoundation: dd002b0330f4981e1bbcb46ae9b62829237459a4 - device_info_plus: 97af1d7e84681a90d0693e63169a5d50e0839a0d + camera_avfoundation: 04b44aeb14070126c6529e5ab82cc7c9fca107cf + device_info_plus: 71ffc6ab7634ade6267c7a93088ed7e4f74e5896 DKImagePickerController: 946cec48c7873164274ecc4624d19e3da4c1ef3c DKPhotoGallery: b3834fecb755ee09a593d7c9e389d8b5d6deed60 - external_app_launcher: ad55ac844aa21f2d2197d7cec58ff0d0dc40bbc0 + external_app_launcher: 3411245965270a74040a3de17e27bd02b8abb905 ffmpeg-kit-ios-full-gpl: 80adc341962e55ef709e36baa8ed9a70cf4ea62b - ffmpeg_kit_flutter_full_gpl: 8d15c14c0c3aba616fac04fe44b3d27d02e3c330 - file_picker: 09aa5ec1ab24135ccd7a1621c46c84134bfd6655 - file_saver: 503e386464dbe118f630e17b4c2e1190fa0cf808 + ffmpeg_kit_flutter_full_gpl: ce18b888487c05c46ed252cd2e7956812f2e3bd1 + file_picker: 9b3292d7c8bc68c8a7bf8eb78f730e49c8efc517 + file_saver: 6cdbcddd690cb02b0c1a0c225b37cd805c2bf8b6 Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 - flutter_inappwebview_ios: 6f63631e2c62a7c350263b13fa5427aedefe81d4 - flutter_keyboard_visibility: 0339d06371254c3eb25eeb90ba8d17dca8f9c069 - flutter_secure_storage: d33dac7ae2ea08509be337e775f6b59f1ff45f12 - image_cropper: 37d40f62177c101ff4c164906d259ea2c3aa70cf - image_picker_ios: c560581cceedb403a6ff17f2f816d7fea1421fc1 - ion_screenshot_detector: bd85296e1347b5bf5acf71407a6d9b7933bfe604 - local_auth_crypto: 3ee858ca5d40c9da56dcd1fe8d814e92438a9371 - local_auth_darwin: 66e40372f1c29f383a314c738c7446e2f7fdadc3 + flutter_inappwebview_ios: b89ba3482b96fb25e00c967aae065701b66e9b99 + flutter_keyboard_visibility: 4625131e43015dbbe759d9b20daaf77e0e3f6619 + flutter_secure_storage: 1ed9476fba7e7a782b22888f956cce43e2c62f13 + image_cropper: 5f162dcf988100dc1513f9c6b7eb42cd6fbf9156 + image_picker_ios: 7fe1ff8e34c1790d6fff70a32484959f563a928a + ion_screenshot_detector: 6981b7ec0add023ce57337882e28dc4b80caad4b + local_auth_crypto: 0f489ce05f51504fc091a53ce357e98313696085 + local_auth_darwin: 553ce4f9b16d3fdfeafce9cf042e7c9f77c1c391 MTBBarcodeScanner: f453b33c4b7dfe545d8c6484ed744d55671788cb OrderedSet: e539b66b644ff081c73a262d24ad552a69be3a94 - package_info_plus: 115f4ad11e0698c8c1c5d8a689390df880f47e85 - passkeys_ios: fdae8c06e2178a9fcb9261a6cb21fb9a06a81d53 - path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 - permission_handler_apple: 9878588469a2b0d0fc1e048d9f43605f92e6cec2 - photo_manager: ff695c7a1dd5bc379974953a2b5c0a293f7c4c8a - qr_code_scanner: bb67d64904c3b9658ada8c402e8b4d406d5d796e - quill_native_bridge: e5afa7d49c08cf68c52a5e23bc272eba6925c622 + package_info_plus: 566e1b7a2f3900e4b0020914ad3fc051dcc95596 + passkeys_ios: 939d7d44f825048c8dffd4644f52444164c80ecd + path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564 + permission_handler_apple: 4ed2196e43d0651e8ff7ca3483a069d469701f2d + photo_manager: d2fbcc0f2d82458700ee6256a15018210a81d413 + qr_code_scanner: d77f94ecc9abf96d9b9b8fc04ef13f611e5a147a + quill_native_bridge: fd2819cf6da02fb6cbf9de37835f96e798e145eb SDWebImage: 73c6079366fea25fa4bb9640d5fb58f0893facd8 SecureBiometricSwift: f8a373c07fb46c9ca1b2b53be51a485d2828a3d8 - shake_gesture_ios: 64f1f579f314c58445761992a123111b3d7b3492 - share_plus: 8b6f8b3447e494cca5317c8c3073de39b3600d1f - shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78 - sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec + shake_gesture_ios: 85dce5e26785da11cf73e0234a5f4028f69afeef + share_plus: 50da8cb520a8f0f65671c6c6a99b3617ed10a58a + shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7 + sqflite: c35dad70033b8862124f8337cc994a809fcd9fa3 sqlite3: 7559e33dae4c78538df563795af3a86fc887ee71 - sqlite3_flutter_libs: 1b4e98da20ebd4e9b1240269b78cdcf492dbe9f3 + sqlite3_flutter_libs: f0b59f6bb2a18597d0796558725007e5a7428397 SwiftyGif: 706c60cf65fa2bc5ee0313beece843c8eb8194d4 TOCropViewController: 80b8985ad794298fb69d3341de183f33d1853654 - ua_client_hints: 3b617011e47bea4b1ea65647efa12860b7280ad5 - url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe - ve_sdk_flutter: c90ec3fc424953a7b82cd1edd5143bc756899e92 + ua_client_hints: ef4ddde0e2b2be5f0731a31721c4cbbb889b1aa4 + url_launcher_ios: 694010445543906933d732453a59da0a173ae33d + ve_sdk_flutter: e23c4a6f1b84eeacee1daf2a81ba0f0694ed76f1 VEEffectsSDK: 40dca6a76aeff8630ce1b49ef7643d2a2655dd0f VEExportSDK: 32e97cf98ecbf86aed563fbd4c9131d7bbddbe92 VEPlaybackSDK: 65bb7377c9c8524557d7b5d6723e321fc16fc4a1 - video_player_avfoundation: 7c6c11d8470e1675df7397027218274b6d2360b3 + video_player_avfoundation: 2cef49524dd1f16c5300b9cd6efd9611ce03639b VideoEditor: b3e55fe6a6589e715365da822172f54b6fea8169 PODFILE CHECKSUM: f19afb20048b05a04dbc809ad7d199f1df053e9a diff --git a/lib/app/features/feed/create_post/providers/create_post_notifier.c.dart b/lib/app/features/feed/create_post/providers/create_post_notifier.c.dart index fcf13bd254..bd6f2ad584 100644 --- a/lib/app/features/feed/create_post/providers/create_post_notifier.c.dart +++ b/lib/app/features/feed/create_post/providers/create_post_notifier.c.dart @@ -31,6 +31,7 @@ import 'package:ion/app/features/ion_connect/providers/ion_connect_entity_provid import 'package:ion/app/features/ion_connect/providers/ion_connect_notifier.c.dart'; import 'package:ion/app/features/ion_connect/providers/ion_connect_upload_notifier.c.dart'; import 'package:ion/app/services/compressor/compress_service.c.dart'; +import 'package:ion/app/services/logger/logger.dart'; import 'package:ion/app/services/media_service/media_service.c.dart'; import 'package:ion/app/services/text_parser/model/text_match.c.dart'; import 'package:ion/app/services/text_parser/model/text_matcher.dart'; @@ -292,20 +293,18 @@ class CreatePostNotifier extends _$CreatePostNotifier { Future<({List fileMetadatas, MediaAttachment mediaAttachment})> _uploadImage( MediaFile file, ) async { - const maxDimension = 1024; - final (:width, :height) = - await ref.read(compressServiceProvider).getImageDimension(path: file.path); + Logger.info( + 'Uploading image: width=${file.width}, height=${file.height}, path=${file.path}', + ); - final compressedImage = await ref.read(compressServiceProvider).compressImage( + final uploadResult = await ref.read(ionConnectUploadNotifierProvider.notifier).upload( file, - width: width > height ? maxDimension : null, - height: height > width ? maxDimension : null, - quality: 70, + alt: _getFileAlt(), ); - final uploadResult = await ref - .read(ionConnectUploadNotifierProvider.notifier) - .upload(compressedImage, alt: _getFileAlt()); + Logger.info( + 'Image uploaded successfully: fileUrl=${uploadResult.fileMetadata.url}', + ); return ( fileMetadatas: [uploadResult.fileMetadata], diff --git a/lib/app/features/feed/stories/views/pages/story_preview_page.dart b/lib/app/features/feed/stories/views/pages/story_preview_page.dart index 3e950ccd62..b23b2b517c 100644 --- a/lib/app/features/feed/stories/views/pages/story_preview_page.dart +++ b/lib/app/features/feed/stories/views/pages/story_preview_page.dart @@ -14,10 +14,11 @@ import 'package:ion/app/features/feed/stories/views/components/story_preview/act import 'package:ion/app/features/feed/stories/views/components/story_preview/media/story_image_preview.dart'; import 'package:ion/app/features/feed/stories/views/components/story_preview/media/story_video_preview.dart'; import 'package:ion/app/features/feed/views/pages/who_can_reply_settings_modal/who_can_reply_settings_modal.dart'; +import 'package:ion/app/features/user/providers/image_proccessor_notifier.c.dart'; import 'package:ion/app/router/app_routes.c.dart'; import 'package:ion/app/router/components/navigation_app_bar/navigation_app_bar.dart'; import 'package:ion/app/router/utils/show_simple_bottom_sheet.dart'; -import 'package:ion/app/services/media_service/media_service.c.dart'; +import 'package:ion/app/services/media_service/image_proccessing_config.dart'; import 'package:ion/generated/assets.gen.dart'; class StoryPreviewPage extends ConsumerWidget { @@ -89,12 +90,23 @@ class StoryPreviewPage extends ConsumerWidget { children: [ SizedBox(height: 16.0.s), StoryShareButton( - onPressed: () { - final file = MediaFile(path: path, mimeType: mimeType); - ref - .read(createPostNotifierProvider(CreatePostOption.story).notifier) - .create(content: '', mediaFiles: [file], whoCanReply: whoCanReply); - FeedRoute().go(context); + onPressed: () async { + final processedState = + ref.read(imageProcessorNotifierProvider(ImageProcessingType.story)); + + if (processedState case ImageProcessorStateProcessed(:final file)) { + await ref + .read(createPostNotifierProvider(CreatePostOption.story).notifier) + .create( + content: '', + mediaFiles: [file], + whoCanReply: whoCanReply, + ); + + if (context.mounted) { + FeedRoute().go(context); + } + } }, ), ScreenBottomOffset(margin: 36.0.s), diff --git a/lib/app/features/user/providers/image_proccessor_notifier.c.dart b/lib/app/features/user/providers/image_proccessor_notifier.c.dart index fbd5cbcae6..42cf6a9b5f 100644 --- a/lib/app/features/user/providers/image_proccessor_notifier.c.dart +++ b/lib/app/features/user/providers/image_proccessor_notifier.c.dart @@ -4,6 +4,7 @@ import 'package:freezed_annotation/freezed_annotation.dart'; import 'package:ion/app/exceptions/exceptions.dart'; import 'package:ion/app/features/gallery/providers/gallery_provider.c.dart'; import 'package:ion/app/services/compressor/compress_service.c.dart'; +import 'package:ion/app/services/logger/logger.dart'; import 'package:ion/app/services/media_service/image_proccessing_config.dart'; import 'package:ion/app/services/media_service/media_service.c.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; @@ -54,6 +55,10 @@ class ImageProcessorNotifier extends _$ImageProcessorNotifier { ); state = ImageProcessorState.picked(file: pickedFile); + Logger.info( + 'Original image dimensions: width=${assetEntity.width}, height=${assetEntity.height}', + ); + final croppedImage = await mediaService.cropImage( uiSettings: cropUiSettings, path: file.path, @@ -73,6 +78,13 @@ class ImageProcessorNotifier extends _$ImageProcessorNotifier { quality: config.quality, ); state = ImageProcessorState.processed(file: compressedImage); + + Logger.info( + 'Compressed image dimensions: ' + 'width=${compressedImage.width}, ' + 'height=${compressedImage.height}, ' + 'quality=${config.quality}', + ); } catch (error) { state = ImageProcessorState.error(message: error.toString()); }