From ab0f81607bb3fdd007ee0820582112a6eff5e872 Mon Sep 17 00:00:00 2001 From: Wenqi Li Date: Sat, 6 May 2023 00:06:55 +0800 Subject: [PATCH] add size property of medium --- .../com/morbit/photogallery/PhotoGalleryPlugin.kt | 8 ++++++++ ios/Classes/SwiftPhotoGalleryPlugin.swift | 13 +++++++++++++ lib/src/models/medium.dart | 5 +++++ 3 files changed, 26 insertions(+) diff --git a/android/src/main/kotlin/com/morbit/photogallery/PhotoGalleryPlugin.kt b/android/src/main/kotlin/com/morbit/photogallery/PhotoGalleryPlugin.kt index 98d2042..b9916b4 100644 --- a/android/src/main/kotlin/com/morbit/photogallery/PhotoGalleryPlugin.kt +++ b/android/src/main/kotlin/com/morbit/photogallery/PhotoGalleryPlugin.kt @@ -60,6 +60,7 @@ class PhotoGalleryPlugin : FlutterPlugin, MethodCallHandler { MediaStore.Images.Media.TITLE, MediaStore.Images.Media.WIDTH, MediaStore.Images.Media.HEIGHT, + MediaStore.Images.Media.SIZE, MediaStore.Images.Media.ORIENTATION, MediaStore.Images.Media.MIME_TYPE, MediaStore.Images.Media.DATE_TAKEN, @@ -72,6 +73,7 @@ class PhotoGalleryPlugin : FlutterPlugin, MethodCallHandler { MediaStore.Video.Media.TITLE, MediaStore.Video.Media.WIDTH, MediaStore.Video.Media.HEIGHT, + MediaStore.Video.Media.SIZE, MediaStore.Video.Media.MIME_TYPE, MediaStore.Video.Media.DURATION, MediaStore.Video.Media.DATE_TAKEN, @@ -804,6 +806,7 @@ class PhotoGalleryPlugin : FlutterPlugin, MethodCallHandler { val titleColumn = cursor.getColumnIndex(MediaStore.Images.Media.TITLE) val widthColumn = cursor.getColumnIndex(MediaStore.Images.Media.WIDTH) val heightColumn = cursor.getColumnIndex(MediaStore.Images.Media.HEIGHT) + val sizeColumn = cursor.getColumnIndex(MediaStore.Images.Media.SIZE) val orientationColumn = cursor.getColumnIndex(MediaStore.Images.Media.ORIENTATION) val mimeColumn = cursor.getColumnIndex(MediaStore.Images.Media.MIME_TYPE) val dateTakenColumn = cursor.getColumnIndex(MediaStore.Images.Media.DATE_TAKEN) @@ -814,6 +817,7 @@ class PhotoGalleryPlugin : FlutterPlugin, MethodCallHandler { val title = cursor.getString(titleColumn) val width = cursor.getLong(widthColumn) val height = cursor.getLong(heightColumn) + val size = cursor.getLong(sizeColumn) val orientation = cursor.getLong(orientationColumn) val mimeType = cursor.getString(mimeColumn) var dateTaken: Long? = null @@ -832,6 +836,7 @@ class PhotoGalleryPlugin : FlutterPlugin, MethodCallHandler { "mediumType" to imageType, "width" to width, "height" to height, + "size" to size, "orientation" to orientationDegree2Value(orientation), "mimeType" to mimeType, "creationDate" to dateTaken, @@ -845,6 +850,7 @@ class PhotoGalleryPlugin : FlutterPlugin, MethodCallHandler { val titleColumn = cursor.getColumnIndex(MediaStore.Video.Media.TITLE) val widthColumn = cursor.getColumnIndex(MediaStore.Video.Media.WIDTH) val heightColumn = cursor.getColumnIndex(MediaStore.Video.Media.HEIGHT) + val sizeColumn = cursor.getColumnIndex(MediaStore.Video.Media.SIZE) val mimeColumn = cursor.getColumnIndex(MediaStore.Video.Media.MIME_TYPE) val durationColumn = cursor.getColumnIndex(MediaStore.Video.Media.DURATION) val dateTakenColumn = cursor.getColumnIndex(MediaStore.Video.Media.DATE_TAKEN) @@ -855,6 +861,7 @@ class PhotoGalleryPlugin : FlutterPlugin, MethodCallHandler { val title = cursor.getString(titleColumn) val width = cursor.getLong(widthColumn) val height = cursor.getLong(heightColumn) + val size = cursor.getLong(sizeColumn) val mimeType = cursor.getString(mimeColumn) val duration = cursor.getLong(durationColumn) var dateTaken: Long? = null @@ -873,6 +880,7 @@ class PhotoGalleryPlugin : FlutterPlugin, MethodCallHandler { "mediumType" to videoType, "width" to width, "height" to height, + "size" to size, "mimeType" to mimeType, "duration" to duration, "creationDate" to dateTaken, diff --git a/ios/Classes/SwiftPhotoGalleryPlugin.swift b/ios/Classes/SwiftPhotoGalleryPlugin.swift index 1df7e58..623fca6 100644 --- a/ios/Classes/SwiftPhotoGalleryPlugin.swift +++ b/ios/Classes/SwiftPhotoGalleryPlugin.swift @@ -417,6 +417,7 @@ public class SwiftPhotoGalleryPlugin: NSObject, FlutterPlugin { private func getMediumFromAsset(asset: PHAsset) -> [String: Any?] { let mimeType = self.extractMimeTypeFromAsset(asset: asset) let filename = self.extractFilenameFromAsset(asset: asset) + let size = self.extractSizeFromAsset(asset: asset) return [ "id": asset.localIdentifier, "filename": filename, @@ -425,6 +426,7 @@ public class SwiftPhotoGalleryPlugin: NSObject, FlutterPlugin { "mimeType": mimeType, "height": asset.pixelHeight, "width": asset.pixelWidth, + "size": size, "duration": NSInteger(asset.duration * 1000), "creationDate": (asset.creationDate != nil) ? NSInteger(asset.creationDate!.timeIntervalSince1970 * 1000) : nil, "modifiedDate": (asset.modificationDate != nil) ? NSInteger(asset.modificationDate!.timeIntervalSince1970 * 1000) : nil @@ -434,6 +436,7 @@ public class SwiftPhotoGalleryPlugin: NSObject, FlutterPlugin { private func getMediumFromAssetAsync(asset: PHAsset, completion: @escaping ([String : Any?]?, Error?) -> Void) -> Void { let mimeType = self.extractMimeTypeFromAsset(asset: asset) let filename = self.extractFilenameFromAsset(asset: asset) + let size = self.extractSizeFromAsset(asset: asset) let manager = PHImageManager.default() manager.requestImageData( for: asset, @@ -447,6 +450,7 @@ public class SwiftPhotoGalleryPlugin: NSObject, FlutterPlugin { "mimeType": mimeType, "height": asset.pixelHeight, "width": asset.pixelWidth, + "size": size, "orientation": self.toOrientationValue(orientation: orientation), "duration": NSInteger(asset.duration * 1000), "creationDate": (asset.creationDate != nil) ? NSInteger(asset.creationDate!.timeIntervalSince1970 * 1000) : nil, @@ -566,6 +570,15 @@ public class SwiftPhotoGalleryPlugin: NSObject, FlutterPlugin { } return asset.value(forKey: "filename") as? String } + + private func extractSizeFromAsset(asset: PHAsset) -> Int64? { + let resources = PHAssetResource.assetResources(for: asset) + guard let resource = resources.first, + let unsignedInt64 = resource.value(forKey: "fileSize") as? CLong else { + return nil + } + return Int64(bitPattern: UInt64(unsignedInt64)) + } private func extractTitleFromFilename(filename: String?) -> String? { if let name = filename { diff --git a/lib/src/models/medium.dart b/lib/src/models/medium.dart index d1951cc..d226bf3 100644 --- a/lib/src/models/medium.dart +++ b/lib/src/models/medium.dart @@ -23,6 +23,9 @@ class Medium { /// The medium height. final int? height; + /// The medium size. + final int? size; + /// The medium orientation. final int? orientation; @@ -45,6 +48,7 @@ class Medium { this.mediumType, this.width, this.height, + this.size, this.orientation = 0, this.mimeType, this.duration = 0, @@ -60,6 +64,7 @@ class Medium { mediumType = jsonToMediumType(json["mediumType"]), width = json["width"], height = json["height"], + size = json["size"], orientation = json["orientation"], mimeType = json["mimeType"], duration = json['duration'] ?? 0,