Use wechat_assets_picker for add from device (#1330)

This commit is contained in:
Neeraj Gupta 2023-08-21 12:55:07 +05:30 committed by GitHub
commit d76b537afd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 45 additions and 186 deletions

View file

@ -94,8 +94,6 @@ PODS:
- GoogleUtilities/Logger - GoogleUtilities/Logger
- image_editor_common (1.0.0): - image_editor_common (1.0.0):
- Flutter - Flutter
- image_picker_ios (0.0.1):
- Flutter
- in_app_purchase_storekit (0.0.1): - in_app_purchase_storekit (0.0.1):
- Flutter - Flutter
- FlutterMacOS - FlutterMacOS
@ -200,7 +198,6 @@ DEPENDENCIES:
- flutter_sodium (from `.symlinks/plugins/flutter_sodium/ios`) - flutter_sodium (from `.symlinks/plugins/flutter_sodium/ios`)
- fluttertoast (from `.symlinks/plugins/fluttertoast/ios`) - fluttertoast (from `.symlinks/plugins/fluttertoast/ios`)
- image_editor_common (from `.symlinks/plugins/image_editor_common/ios`) - image_editor_common (from `.symlinks/plugins/image_editor_common/ios`)
- image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`)
- in_app_purchase_storekit (from `.symlinks/plugins/in_app_purchase_storekit/darwin`) - in_app_purchase_storekit (from `.symlinks/plugins/in_app_purchase_storekit/darwin`)
- integration_test (from `.symlinks/plugins/integration_test/ios`) - integration_test (from `.symlinks/plugins/integration_test/ios`)
- local_auth_ios (from `.symlinks/plugins/local_auth_ios/ios`) - local_auth_ios (from `.symlinks/plugins/local_auth_ios/ios`)
@ -281,8 +278,6 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/fluttertoast/ios" :path: ".symlinks/plugins/fluttertoast/ios"
image_editor_common: image_editor_common:
:path: ".symlinks/plugins/image_editor_common/ios" :path: ".symlinks/plugins/image_editor_common/ios"
image_picker_ios:
:path: ".symlinks/plugins/image_picker_ios/ios"
in_app_purchase_storekit: in_app_purchase_storekit:
:path: ".symlinks/plugins/in_app_purchase_storekit/darwin" :path: ".symlinks/plugins/in_app_purchase_storekit/darwin"
integration_test: integration_test:
@ -354,7 +349,6 @@ SPEC CHECKSUMS:
GoogleDataTransport: 54dee9d48d14580407f8f5fbf2f496e92437a2f2 GoogleDataTransport: 54dee9d48d14580407f8f5fbf2f496e92437a2f2
GoogleUtilities: 13e2c67ede716b8741c7989e26893d151b2b2084 GoogleUtilities: 13e2c67ede716b8741c7989e26893d151b2b2084
image_editor_common: d6f6644ae4a6de80481e89fe6d0a8c49e30b4b43 image_editor_common: d6f6644ae4a6de80481e89fe6d0a8c49e30b4b43
image_picker_ios: 4a8aadfbb6dc30ad5141a2ce3832af9214a705b5
in_app_purchase_storekit: 4fb7ee9e824b1f09107fbfbbce8c4b276366dc43 in_app_purchase_storekit: 4fb7ee9e824b1f09107fbfbbce8c4b276366dc43
integration_test: 13825b8a9334a850581300559b8839134b124670 integration_test: 13825b8a9334a850581300559b8839134b124670
libwebp: 33dc822fbbf4503668d09f7885bbfedc76c45e96 libwebp: 33dc822fbbf4503668d09f7885bbfedc76c45e96

View file

@ -289,7 +289,6 @@
"${BUILT_PRODUCTS_DIR}/flutter_sodium/flutter_sodium.framework", "${BUILT_PRODUCTS_DIR}/flutter_sodium/flutter_sodium.framework",
"${BUILT_PRODUCTS_DIR}/fluttertoast/fluttertoast.framework", "${BUILT_PRODUCTS_DIR}/fluttertoast/fluttertoast.framework",
"${BUILT_PRODUCTS_DIR}/image_editor_common/image_editor_common.framework", "${BUILT_PRODUCTS_DIR}/image_editor_common/image_editor_common.framework",
"${BUILT_PRODUCTS_DIR}/image_picker_ios/image_picker_ios.framework",
"${BUILT_PRODUCTS_DIR}/in_app_purchase_storekit/in_app_purchase_storekit.framework", "${BUILT_PRODUCTS_DIR}/in_app_purchase_storekit/in_app_purchase_storekit.framework",
"${BUILT_PRODUCTS_DIR}/integration_test/integration_test.framework", "${BUILT_PRODUCTS_DIR}/integration_test/integration_test.framework",
"${BUILT_PRODUCTS_DIR}/libwebp/libwebp.framework", "${BUILT_PRODUCTS_DIR}/libwebp/libwebp.framework",
@ -347,7 +346,6 @@
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_sodium.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_sodium.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/fluttertoast.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/fluttertoast.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/image_editor_common.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/image_editor_common.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/image_picker_ios.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/in_app_purchase_storekit.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/in_app_purchase_storekit.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/integration_test.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/integration_test.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/libwebp.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/libwebp.framework",

View file

@ -1241,7 +1241,8 @@ class FilesDB {
final order = sortAsc ? 'ASC' : 'DESC'; final order = sortAsc ? 'ASC' : 'DESC';
final rows = await db.query( final rows = await db.query(
filesTable, filesTable,
where: '$columnCollectionID = ? AND $columnUploadedFileID IS NOT NULL', where: '$columnCollectionID = ? AND ($columnUploadedFileID IS NOT NULL '
'AND $columnUploadedFileID IS NOT -1)',
whereArgs: [collectionID], whereArgs: [collectionID],
orderBy: orderBy:
'$columnCreationTime ' + order + ', $columnModificationTime ' + order, '$columnCreationTime ' + order + ', $columnModificationTime ' + order,

View file

@ -221,7 +221,7 @@
"after1Month": "Après 1 mois", "after1Month": "Après 1 mois",
"after1Year": "Après 1 an", "after1Year": "Après 1 an",
"manageParticipants": "Gérer", "manageParticipants": "Gérer",
"albumParticipantsCount": "{count, plural, one {}=0 {Aucun Participant} =1 {1 Participant} other {{count} Participants}}", "albumParticipantsCount": "{count, plural, =0 {Aucun Participant} =1 {1 Participant} other {{count} Participants}}",
"@albumParticipantsCount": { "@albumParticipantsCount": {
"placeholders": { "placeholders": {
"count": { "count": {

View file

@ -1,5 +1,5 @@
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import "package:image_picker/image_picker.dart"; import "package:photo_manager/photo_manager.dart";
import "package:photos/core/configuration.dart"; import "package:photos/core/configuration.dart";
import "package:photos/core/event_bus.dart"; import "package:photos/core/event_bus.dart";
import "package:photos/db/files_db.dart"; import "package:photos/db/files_db.dart";
@ -83,7 +83,7 @@ extension CollectionFileActions on CollectionActions {
bool showProgressDialog, { bool showProgressDialog, {
List<File>? selectedFiles, List<File>? selectedFiles,
List<SharedMediaFile>? sharedFiles, List<SharedMediaFile>? sharedFiles,
List<XFile>? pickedFiles, List<AssetEntity>? picketAssets,
}) async { }) async {
ProgressDialog? dialog = showProgressDialog ProgressDialog? dialog = showProgressDialog
? createProgressDialog( ? createProgressDialog(
@ -104,10 +104,10 @@ extension CollectionFileActions on CollectionActions {
collectionID, collectionID,
), ),
); );
} else if (pickedFiles != null) { } else if (picketAssets != null) {
filesPendingUpload.addAll( filesPendingUpload.addAll(
await convertPickedFiles( await convertPicketAssets(
pickedFiles, picketAssets,
collectionID, collectionID,
), ),
); );
@ -159,6 +159,9 @@ extension CollectionFileActions on CollectionActions {
files.add(uploadedFile); files.add(uploadedFile);
} }
} else { } else {
for(final file in filesPendingUpload) {
file.collectionID = collectionID;
}
// filesPendingUpload might be getting ignored during auto-upload // filesPendingUpload might be getting ignored during auto-upload
// because the user deleted these files from ente in the past. // because the user deleted these files from ente in the past.
await IgnoredFilesService.instance await IgnoredFilesService.instance

View file

@ -252,7 +252,9 @@ class _ResetIgnoredFilesWidgetState extends State<ResetIgnoredFilesWidget> {
widget.filesInDeviceCollection, widget.filesInDeviceCollection,
); );
RemoteSyncService.instance.sync(silently: true).then((value) { RemoteSyncService.instance.sync(silently: true).then((value) {
widget.parentSetState.call(); if(mounted) {
widget.parentSetState.call();
}
}); });
}, },
), ),

View file

@ -1,7 +1,6 @@
import "dart:math"; import "dart:math";
import "package:flutter/material.dart"; import "package:flutter/material.dart";
import "package:image_picker/image_picker.dart";
import "package:modal_bottom_sheet/modal_bottom_sheet.dart"; import "package:modal_bottom_sheet/modal_bottom_sheet.dart";
import "package:photos/core/configuration.dart"; import "package:photos/core/configuration.dart";
import "package:photos/db/files_db.dart"; import "package:photos/db/files_db.dart";
@ -19,6 +18,7 @@ import "package:photos/ui/components/buttons/button_widget.dart";
import "package:photos/ui/components/models/button_type.dart"; import "package:photos/ui/components/models/button_type.dart";
import "package:photos/ui/components/title_bar_title_widget.dart"; import "package:photos/ui/components/title_bar_title_widget.dart";
import "package:photos/ui/viewer/gallery/gallery.dart"; import "package:photos/ui/viewer/gallery/gallery.dart";
import 'package:wechat_assets_picker/wechat_assets_picker.dart';
Future<dynamic> showAddPhotosSheet( Future<dynamic> showAddPhotosSheet(
BuildContext context, BuildContext context,
@ -167,16 +167,8 @@ class AddPhotosPhotoWidget extends StatelessWidget {
buttonAction: ButtonAction.second, buttonAction: ButtonAction.second,
labelText: S.of(context).addFromDevice, labelText: S.of(context).addFromDevice,
onTap: () async { onTap: () async {
final ImagePicker picker = ImagePicker(); final List<AssetEntity>? result = await AssetPicker.pickAssets(context);
final pickedFiles = if(result != null && result.isNotEmpty) {
await picker.pickMultipleMedia();
if (pickedFiles.isNotEmpty) {
for (XFile f in pickedFiles) {
// print XFile f details
debugPrint(f.name);
debugPrint(f.path);
debugPrint(f.mimeType);
}
final ca = CollectionActions( final ca = CollectionActions(
CollectionsService.instance, CollectionsService.instance,
); );
@ -184,7 +176,7 @@ class AddPhotosPhotoWidget extends StatelessWidget {
context, context,
collection.id, collection.id,
false, false,
pickedFiles: pickedFiles, picketAssets: result,
); );
} }
Navigator.of(context).pop(); Navigator.of(context).pop();

View file

@ -34,6 +34,7 @@ class MediaUploadData {
final FileHashData? hashData; final FileHashData? hashData;
final int? height; final int? height;
final int? width; final int? width;
// For android motion photos, the startIndex is the index of the first frame // For android motion photos, the startIndex is the index of the first frame
// For iOS, this value will be always null. // For iOS, this value will be always null.
final int? motionPhotoStartIndex; final int? motionPhotoStartIndex;

View file

@ -2,9 +2,9 @@ import 'dart:async';
import 'dart:io' as dartio; import 'dart:io' as dartio;
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import "package:image_picker/image_picker.dart";
import 'package:logging/logging.dart'; import 'package:logging/logging.dart';
import 'package:path/path.dart'; import 'package:path/path.dart';
import "package:photo_manager/photo_manager.dart";
import 'package:photos/core/configuration.dart'; import 'package:photos/core/configuration.dart';
import 'package:photos/core/constants.dart'; import 'package:photos/core/constants.dart';
import 'package:photos/models/file.dart'; import 'package:photos/models/file.dart';
@ -149,62 +149,13 @@ Future<List<File>> convertIncomingSharedMediaToFile(
return localFiles; return localFiles;
} }
Future<List<File>> convertPickedFiles( Future<List<File>> convertPicketAssets(
List<XFile> pickedFiles, List<AssetEntity> pickedAssets,
int collectionID, int collectionID,
) async { ) async {
final List<File> localFiles = []; final List<File> localFiles = [];
for (var media in pickedFiles) { for (var asset in pickedAssets) {
FileType? enteTypeType; final enteFile = await File.fromAsset('', asset);
final String mimeType = (media.mimeType ?? '').toLowerCase();
if (mimeType.contains('image')) {
enteTypeType = FileType.image;
} else if (mimeType.contains('video')) {
enteTypeType = FileType.video;
} else {
final extenName = extension(media.path ?? '').toLowerCase().replaceFirst(
'.',
'',
);
if (_imageExtension.contains(extenName)) {
enteTypeType = FileType.image;
} else if (_videoExtension.contains(extenName)) {
enteTypeType = FileType.video;
} else {
_logger.warning(
"ignore file type ${media.mimeType}, extn $extenName path: ${media.path}",
);
continue;
}
}
final enteFile = File();
// fileName: img_x.jpg
enteFile.title = basename(media.path);
var ioFile = dartio.File(media.path);
ioFile = ioFile.renameSync(
Configuration.instance.getSharedMediaDirectory() + "/" + enteFile.title!,
);
enteFile.localID = sharedMediaIdentifier + enteFile.title!;
enteFile.collectionID = collectionID;
enteFile.fileType = enteTypeType;
if (enteFile.fileType == FileType.image) {
final exifTime = await getCreationTimeFromEXIF(ioFile, null);
if (exifTime != null) {
enteFile.creationTime = exifTime.microsecondsSinceEpoch;
}
} else if (enteFile.fileType == FileType.video) {
// enteFile.duration = (media.duration ?? 0) ~/ 1000;
}
if (enteFile.creationTime == null || enteFile.creationTime == 0) {
final parsedDateTime =
parseDateTimeFromFileNameV2(basenameWithoutExtension(media.path));
if (parsedDateTime != null) {
enteFile.creationTime = parsedDateTime.microsecondsSinceEpoch;
} else {
enteFile.creationTime = DateTime.now().microsecondsSinceEpoch;
}
}
enteFile.modificationTime = enteFile.creationTime;
localFiles.add(enteFile); localFiles.add(enteFile);
} }
return localFiles; return localFiles;

View file

@ -523,38 +523,6 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.1.4" version: "6.1.4"
file_selector_linux:
dependency: transitive
description:
name: file_selector_linux
sha256: "770eb1ab057b5ae4326d1c24cc57710758b9a46026349d021d6311bd27580046"
url: "https://pub.dev"
source: hosted
version: "0.9.2"
file_selector_macos:
dependency: transitive
description:
name: file_selector_macos
sha256: "7a6f1ae6107265664f3f7f89a66074882c4d506aef1441c9af313c1f7e6f41ce"
url: "https://pub.dev"
source: hosted
version: "0.9.3"
file_selector_platform_interface:
dependency: transitive
description:
name: file_selector_platform_interface
sha256: "412705a646a0ae90f33f37acfae6a0f7cbc02222d6cd34e479421c3e74d3853c"
url: "https://pub.dev"
source: hosted
version: "2.6.0"
file_selector_windows:
dependency: transitive
description:
name: file_selector_windows
sha256: "1372760c6b389842b77156203308940558a2817360154084368608413835fc26"
url: "https://pub.dev"
source: hosted
version: "0.9.3"
firebase_core: firebase_core:
dependency: "direct main" dependency: "direct main"
description: description:
@ -1009,70 +977,6 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.0.1" version: "1.0.1"
image_picker:
dependency: "direct main"
description:
name: image_picker
sha256: b9603755b35253ccfad4be0762bb74d5e8bf9ff75edebf0ac3beec24fac1c5b5
url: "https://pub.dev"
source: hosted
version: "1.0.0"
image_picker_android:
dependency: transitive
description:
name: image_picker_android
sha256: d2bab152deb2547ea6f53d82ebca9b7e77386bb706e5789e815d37e08ea475bb
url: "https://pub.dev"
source: hosted
version: "0.8.7+3"
image_picker_for_web:
dependency: transitive
description:
name: image_picker_for_web
sha256: "869fe8a64771b7afbc99fc433a5f7be2fea4d1cb3d7c11a48b6b579eb9c797f0"
url: "https://pub.dev"
source: hosted
version: "2.2.0"
image_picker_ios:
dependency: transitive
description:
name: image_picker_ios
sha256: b3e2f21feb28b24dd73a35d7ad6e83f568337c70afab5eabac876e23803f264b
url: "https://pub.dev"
source: hosted
version: "0.8.8"
image_picker_linux:
dependency: transitive
description:
name: image_picker_linux
sha256: "02cbc21fe1706b97942b575966e5fbbeaac535e76deef70d3a242e4afb857831"
url: "https://pub.dev"
source: hosted
version: "0.2.1"
image_picker_macos:
dependency: transitive
description:
name: image_picker_macos
sha256: cee2aa86c56780c13af2c77b5f2f72973464db204569e1ba2dd744459a065af4
url: "https://pub.dev"
source: hosted
version: "0.2.1"
image_picker_platform_interface:
dependency: transitive
description:
name: image_picker_platform_interface
sha256: "7c7b96bb9413a9c28229e717e6fd1e3edd1cc5569c1778fcca060ecf729b65ee"
url: "https://pub.dev"
source: hosted
version: "2.8.0"
image_picker_windows:
dependency: transitive
description:
name: image_picker_windows
sha256: c3066601ea42113922232c7b7b3330a2d86f029f685bba99d82c30e799914952
url: "https://pub.dev"
source: hosted
version: "0.2.1"
in_app_purchase: in_app_purchase:
dependency: "direct main" dependency: "direct main"
description: description:
@ -2147,10 +2051,10 @@ packages:
description: description:
path: "packages/video_player/video_player" path: "packages/video_player/video_player"
ref: android_video_roation_fix ref: android_video_roation_fix
resolved-ref: a9be78ffe97b9335bcf865c72dae1ba361dad77f resolved-ref: "0acef25ca43206e02a0758b51d5fd176e3d8c6b8"
url: "https://github.com/ente-io/packages.git" url: "https://github.com/ente-io/packages.git"
source: git source: git
version: "2.6.1" version: "2.7.0"
video_player_android: video_player_android:
dependency: transitive dependency: transitive
description: description:
@ -2163,18 +2067,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: video_player_avfoundation name: video_player_avfoundation
sha256: "4c274e439f349a0ee5cb3c42978393ede173a443b98f50de6ffe6900eaa19216" sha256: f5f5b7fe8c865be8a57fe80c2dca130772e1db775b7af4e5c5aa1905069cfc6c
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.4.6" version: "2.4.9"
video_player_platform_interface: video_player_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: video_player_platform_interface name: video_player_platform_interface
sha256: a8c4dcae2a7a6e7cc1d7f9808294d968eca1993af34a98e95b9bdfa959bec684 sha256: "1ca9acd7a0fb15fb1a990cb554e6f004465c6f37c99d2285766f08a4b2802988"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.1.0" version: "6.2.0"
video_player_web: video_player_web:
dependency: transitive dependency: transitive
description: description:
@ -2263,6 +2167,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.2.0" version: "1.2.0"
wechat_assets_picker:
dependency: "direct main"
description:
name: wechat_assets_picker
sha256: "18a9ac99281ed033fc3bfd2cf7d39f2ef4b76a7601eafcf4c9de09392c65c713"
url: "https://pub.dev"
source: hosted
version: "8.6.3"
widgets_to_image: widgets_to_image:
dependency: "direct main" dependency: "direct main"
description: description:

View file

@ -78,7 +78,6 @@ dependencies:
http: ^0.13.4 http: ^0.13.4
image: ^3.0.2 image: ^3.0.2
image_editor: ^1.3.0 image_editor: ^1.3.0
image_picker: ^1.0.0
in_app_purchase: ^3.0.7 in_app_purchase: ^3.0.7
intl: ^0.18.0 intl: ^0.18.0
json_annotation: ^4.8.0 json_annotation: ^4.8.0
@ -137,11 +136,12 @@ dependencies:
git: git:
url: https://github.com/ente-io/packages.git url: https://github.com/ente-io/packages.git
ref: android_video_roation_fix ref: android_video_roation_fix
path: packages/video_player/video_player/ path: packages/video_player/video_player/p
video_thumbnail: ^0.5.3 video_thumbnail: ^0.5.3
visibility_detector: ^0.3.3 visibility_detector: ^0.3.3
wakelock_plus: ^1.1.1 wakelock_plus: ^1.1.1
wallpaper_manager_flutter: ^0.0.2 wallpaper_manager_flutter: ^0.0.2
wechat_assets_picker: ^8.6.3
widgets_to_image: ^0.0.2 widgets_to_image: ^0.0.2
dependency_overrides: dependency_overrides:
@ -149,6 +149,11 @@ dependency_overrides:
# but we need ffi: ^2.0.1 for newer packages. The original tfite_flutter_helper # but we need ffi: ^2.0.1 for newer packages. The original tfite_flutter_helper
# #
ffi: ^2.0.1 ffi: ^2.0.1
video_player:
git:
url: https://github.com/ente-io/packages.git
ref: android_video_roation_fix
path: packages/video_player/video_player/
flutter_intl: flutter_intl:
enabled: true enabled: true