add mimeType attribute in Medium
This commit is contained in:
parent
5ddd31fed9
commit
a44d9da2ea
@ -56,6 +56,7 @@ class PhotoGalleryPlugin : FlutterPlugin, MethodCallHandler {
|
|||||||
MediaStore.Images.Media._ID,
|
MediaStore.Images.Media._ID,
|
||||||
MediaStore.Images.Media.WIDTH,
|
MediaStore.Images.Media.WIDTH,
|
||||||
MediaStore.Images.Media.HEIGHT,
|
MediaStore.Images.Media.HEIGHT,
|
||||||
|
MediaStore.Images.Media.MIME_TYPE,
|
||||||
MediaStore.Images.Media.DATE_TAKEN,
|
MediaStore.Images.Media.DATE_TAKEN,
|
||||||
MediaStore.Images.Media.DATE_MODIFIED
|
MediaStore.Images.Media.DATE_MODIFIED
|
||||||
)
|
)
|
||||||
@ -64,6 +65,7 @@ class PhotoGalleryPlugin : FlutterPlugin, MethodCallHandler {
|
|||||||
MediaStore.Video.Media._ID,
|
MediaStore.Video.Media._ID,
|
||||||
MediaStore.Video.Media.WIDTH,
|
MediaStore.Video.Media.WIDTH,
|
||||||
MediaStore.Video.Media.HEIGHT,
|
MediaStore.Video.Media.HEIGHT,
|
||||||
|
MediaStore.Video.Media.MIME_TYPE,
|
||||||
MediaStore.Video.Media.DURATION,
|
MediaStore.Video.Media.DURATION,
|
||||||
MediaStore.Video.Media.DATE_TAKEN,
|
MediaStore.Video.Media.DATE_TAKEN,
|
||||||
MediaStore.Video.Media.DATE_MODIFIED
|
MediaStore.Video.Media.DATE_MODIFIED
|
||||||
@ -587,12 +589,14 @@ class PhotoGalleryPlugin : FlutterPlugin, MethodCallHandler {
|
|||||||
val idColumn = cursor.getColumnIndex(MediaStore.Images.Media._ID)
|
val idColumn = cursor.getColumnIndex(MediaStore.Images.Media._ID)
|
||||||
val widthColumn = cursor.getColumnIndex(MediaStore.Images.Media.WIDTH)
|
val widthColumn = cursor.getColumnIndex(MediaStore.Images.Media.WIDTH)
|
||||||
val heightColumn = cursor.getColumnIndex(MediaStore.Images.Media.HEIGHT)
|
val heightColumn = cursor.getColumnIndex(MediaStore.Images.Media.HEIGHT)
|
||||||
|
val mimeColumn = cursor.getColumnIndex(MediaStore.Images.Media.MIME_TYPE)
|
||||||
val dateTakenColumn = cursor.getColumnIndex(MediaStore.Images.Media.DATE_TAKEN)
|
val dateTakenColumn = cursor.getColumnIndex(MediaStore.Images.Media.DATE_TAKEN)
|
||||||
val dateModifiedColumn = cursor.getColumnIndex(MediaStore.Images.Media.DATE_MODIFIED)
|
val dateModifiedColumn = cursor.getColumnIndex(MediaStore.Images.Media.DATE_MODIFIED)
|
||||||
|
|
||||||
val id = cursor.getLong(idColumn)
|
val id = cursor.getLong(idColumn)
|
||||||
val width = cursor.getLong(widthColumn)
|
val width = cursor.getLong(widthColumn)
|
||||||
val height = cursor.getLong(heightColumn)
|
val height = cursor.getLong(heightColumn)
|
||||||
|
val mimeType = cursor.getString(mimeColumn)
|
||||||
var dateTaken: Long? = null
|
var dateTaken: Long? = null
|
||||||
if (cursor.getType(dateTakenColumn) == FIELD_TYPE_INTEGER) {
|
if (cursor.getType(dateTakenColumn) == FIELD_TYPE_INTEGER) {
|
||||||
dateTaken = cursor.getLong(dateTakenColumn)
|
dateTaken = cursor.getLong(dateTakenColumn)
|
||||||
@ -607,6 +611,7 @@ class PhotoGalleryPlugin : FlutterPlugin, MethodCallHandler {
|
|||||||
"mediumType" to imageType,
|
"mediumType" to imageType,
|
||||||
"width" to width,
|
"width" to width,
|
||||||
"height" to height,
|
"height" to height,
|
||||||
|
"mimeType" to mimeType,
|
||||||
"creationDate" to dateTaken,
|
"creationDate" to dateTaken,
|
||||||
"modifiedDate" to dateModified
|
"modifiedDate" to dateModified
|
||||||
)
|
)
|
||||||
@ -616,6 +621,7 @@ class PhotoGalleryPlugin : FlutterPlugin, MethodCallHandler {
|
|||||||
val idColumn = cursor.getColumnIndex(MediaStore.Video.Media._ID)
|
val idColumn = cursor.getColumnIndex(MediaStore.Video.Media._ID)
|
||||||
val widthColumn = cursor.getColumnIndex(MediaStore.Video.Media.WIDTH)
|
val widthColumn = cursor.getColumnIndex(MediaStore.Video.Media.WIDTH)
|
||||||
val heightColumn = cursor.getColumnIndex(MediaStore.Video.Media.HEIGHT)
|
val heightColumn = cursor.getColumnIndex(MediaStore.Video.Media.HEIGHT)
|
||||||
|
val mimeColumn = cursor.getColumnIndex(MediaStore.Video.Media.MIME_TYPE)
|
||||||
val durationColumn = cursor.getColumnIndex(MediaStore.Video.Media.DURATION)
|
val durationColumn = cursor.getColumnIndex(MediaStore.Video.Media.DURATION)
|
||||||
val dateTakenColumn = cursor.getColumnIndex(MediaStore.Video.Media.DATE_TAKEN)
|
val dateTakenColumn = cursor.getColumnIndex(MediaStore.Video.Media.DATE_TAKEN)
|
||||||
val dateModifiedColumn = cursor.getColumnIndex(MediaStore.Video.Media.DATE_MODIFIED)
|
val dateModifiedColumn = cursor.getColumnIndex(MediaStore.Video.Media.DATE_MODIFIED)
|
||||||
@ -623,6 +629,7 @@ class PhotoGalleryPlugin : FlutterPlugin, MethodCallHandler {
|
|||||||
val id = cursor.getLong(idColumn)
|
val id = cursor.getLong(idColumn)
|
||||||
val width = cursor.getLong(widthColumn)
|
val width = cursor.getLong(widthColumn)
|
||||||
val height = cursor.getLong(heightColumn)
|
val height = cursor.getLong(heightColumn)
|
||||||
|
val mimeType = cursor.getString(mimeColumn)
|
||||||
val duration = cursor.getLong(durationColumn)
|
val duration = cursor.getLong(durationColumn)
|
||||||
var dateTaken: Long? = null
|
var dateTaken: Long? = null
|
||||||
if (cursor.getType(dateTakenColumn) == FIELD_TYPE_INTEGER) {
|
if (cursor.getType(dateTakenColumn) == FIELD_TYPE_INTEGER) {
|
||||||
@ -638,6 +645,7 @@ class PhotoGalleryPlugin : FlutterPlugin, MethodCallHandler {
|
|||||||
"mediumType" to videoType,
|
"mediumType" to videoType,
|
||||||
"width" to width,
|
"width" to width,
|
||||||
"height" to height,
|
"height" to height,
|
||||||
|
"mimeType" to mimeType,
|
||||||
"duration" to duration,
|
"duration" to duration,
|
||||||
"creationDate" to dateTaken,
|
"creationDate" to dateTaken,
|
||||||
"modifiedDate" to dateModified
|
"modifiedDate" to dateModified
|
||||||
|
@ -376,9 +376,11 @@ public class SwiftPhotoGalleryPlugin: NSObject, FlutterPlugin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private func getMediumFromAsset(asset: PHAsset) -> [String: Any?] {
|
private func getMediumFromAsset(asset: PHAsset) -> [String: Any?] {
|
||||||
|
let mimeType = self.extractMimeTypeFromAsset(asset: asset)
|
||||||
return [
|
return [
|
||||||
"id": asset.localIdentifier,
|
"id": asset.localIdentifier,
|
||||||
"mediumType": toDartMediumType(value: asset.mediaType),
|
"mediumType": toDartMediumType(value: asset.mediaType),
|
||||||
|
"mimeType": mimeType,
|
||||||
"height": asset.pixelHeight,
|
"height": asset.pixelHeight,
|
||||||
"width": asset.pixelWidth,
|
"width": asset.pixelWidth,
|
||||||
"duration": NSInteger(asset.duration * 1000),
|
"duration": NSInteger(asset.duration * 1000),
|
||||||
@ -435,6 +437,16 @@ public class SwiftPhotoGalleryPlugin: NSObject, FlutterPlugin {
|
|||||||
return "." + ext
|
return "." + ext
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private func extractMimeTypeFromUTI(uti: String?) -> String? {
|
||||||
|
guard let assetUTI = uti else {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
guard let mimeType = UTTypeCopyPreferredTagWithClass(assetUTI as CFString, kUTTagClassMIMEType as CFString)?.takeRetainedValue() as String? else {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return mimeType
|
||||||
|
}
|
||||||
|
|
||||||
private func extractUTIFromAsset(asset: PHAsset) -> String? {
|
private func extractUTIFromAsset(asset: PHAsset) -> String? {
|
||||||
if #available(iOS 9, *) {
|
if #available(iOS 9, *) {
|
||||||
let resourceList = PHAssetResource.assetResources(for: asset)
|
let resourceList = PHAssetResource.assetResources(for: asset)
|
||||||
@ -450,6 +462,11 @@ public class SwiftPhotoGalleryPlugin: NSObject, FlutterPlugin {
|
|||||||
return self.extractFileExtensionFromUTI(uti: uti)
|
return self.extractFileExtensionFromUTI(uti: uti)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private func extractMimeTypeFromAsset(asset: PHAsset) -> String? {
|
||||||
|
let uti = self.extractUTIFromAsset(asset: asset)
|
||||||
|
return self.extractMimeTypeFromUTI(uti: uti)
|
||||||
|
}
|
||||||
|
|
||||||
private func cachePath() -> URL {
|
private func cachePath() -> URL {
|
||||||
let paths = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask)
|
let paths = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask)
|
||||||
let cacheFolder = paths[0].appendingPathComponent("photo_gallery")
|
let cacheFolder = paths[0].appendingPathComponent("photo_gallery")
|
||||||
|
@ -17,6 +17,9 @@ class Medium {
|
|||||||
/// The medium height.
|
/// The medium height.
|
||||||
final int height;
|
final int height;
|
||||||
|
|
||||||
|
/// The medium mimeType.
|
||||||
|
final String mimeType;
|
||||||
|
|
||||||
/// The duration of video
|
/// The duration of video
|
||||||
final int duration;
|
final int duration;
|
||||||
|
|
||||||
@ -31,6 +34,7 @@ class Medium {
|
|||||||
this.mediumType,
|
this.mediumType,
|
||||||
this.width,
|
this.width,
|
||||||
this.height,
|
this.height,
|
||||||
|
this.mimeType,
|
||||||
this.duration,
|
this.duration,
|
||||||
this.creationDate,
|
this.creationDate,
|
||||||
this.modifiedDate,
|
this.modifiedDate,
|
||||||
@ -42,6 +46,7 @@ class Medium {
|
|||||||
mediumType = jsonToMediumType(json["mediumType"]),
|
mediumType = jsonToMediumType(json["mediumType"]),
|
||||||
width = json["width"],
|
width = json["width"],
|
||||||
height = json["height"],
|
height = json["height"],
|
||||||
|
mimeType = json["mimeType"],
|
||||||
duration = json['duration'] ?? 0,
|
duration = json['duration'] ?? 0,
|
||||||
creationDate = json['creationDate'] != null
|
creationDate = json['creationDate'] != null
|
||||||
? DateTime.fromMillisecondsSinceEpoch(json['creationDate'])
|
? DateTime.fromMillisecondsSinceEpoch(json['creationDate'])
|
||||||
@ -56,6 +61,7 @@ class Medium {
|
|||||||
mediumType: jsonToMediumType(map['mediumType']),
|
mediumType: jsonToMediumType(map['mediumType']),
|
||||||
width: map['width'],
|
width: map['width'],
|
||||||
height: map['height'],
|
height: map['height'],
|
||||||
|
mimeType: map["mimeType"],
|
||||||
creationDate: map['creationDate'],
|
creationDate: map['creationDate'],
|
||||||
modifiedDate: map['modifiedDate'],
|
modifiedDate: map['modifiedDate'],
|
||||||
);
|
);
|
||||||
@ -66,6 +72,7 @@ class Medium {
|
|||||||
"id": this.id,
|
"id": this.id,
|
||||||
"mediumType": mediumTypeToJson(this.mediumType),
|
"mediumType": mediumTypeToJson(this.mediumType),
|
||||||
"height": this.height,
|
"height": this.height,
|
||||||
|
"mimeType": this.mimeType,
|
||||||
"width": this.width,
|
"width": this.width,
|
||||||
"creationDate": this.creationDate,
|
"creationDate": this.creationDate,
|
||||||
"modifiedDate": this.modifiedDate,
|
"modifiedDate": this.modifiedDate,
|
||||||
@ -104,6 +111,7 @@ class Medium {
|
|||||||
mediumType == other.mediumType &&
|
mediumType == other.mediumType &&
|
||||||
width == other.width &&
|
width == other.width &&
|
||||||
height == other.height &&
|
height == other.height &&
|
||||||
|
mimeType == other.mimeType &&
|
||||||
creationDate == other.creationDate &&
|
creationDate == other.creationDate &&
|
||||||
modifiedDate == other.modifiedDate;
|
modifiedDate == other.modifiedDate;
|
||||||
|
|
||||||
@ -113,6 +121,7 @@ class Medium {
|
|||||||
mediumType.hashCode ^
|
mediumType.hashCode ^
|
||||||
width.hashCode ^
|
width.hashCode ^
|
||||||
height.hashCode ^
|
height.hashCode ^
|
||||||
|
mimeType.hashCode ^
|
||||||
creationDate.hashCode ^
|
creationDate.hashCode ^
|
||||||
modifiedDate.hashCode;
|
modifiedDate.hashCode;
|
||||||
|
|
||||||
@ -122,6 +131,7 @@ class Medium {
|
|||||||
'mediumType: $mediumType, '
|
'mediumType: $mediumType, '
|
||||||
'width: $width, '
|
'width: $width, '
|
||||||
'height: $height, '
|
'height: $height, '
|
||||||
|
'mimeType: $mimeType, '
|
||||||
'creationDate: $creationDate, '
|
'creationDate: $creationDate, '
|
||||||
'modifiedDate: $modifiedDate}';
|
'modifiedDate: $modifiedDate}';
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user