update iOS code to improve performance

This commit is contained in:
Wenqi Li 2023-07-26 22:56:30 +08:00
parent 8e6ac397a7
commit 977c2ca2c6

View File

@ -432,9 +432,10 @@ 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)
let filename = self.extractFilenameFromAsset(asset: asset) let filename = self.extractFilenameFromAsset(asset: asset)
let size = self.extractSizeFromAsset(asset: asset) let mimeType = self.extractMimeTypeFromAsset(asset: asset)
let resource = self.extractResourceFromAsset(asset: asset)
let size = self.extractSizeFromResource(resource: resource)
return [ return [
"id": asset.localIdentifier, "id": asset.localIdentifier,
"filename": filename, "filename": filename,
@ -463,9 +464,10 @@ public class SwiftPhotoGalleryPlugin: NSObject, FlutterPlugin {
} }
private func getMediumFromAssetAsync(asset: PHAsset, completion: @escaping ([String : Any?]?, Error?) -> Void) -> Void { 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 filename = self.extractFilenameFromAsset(asset: asset)
let size = self.extractSizeFromAsset(asset: asset) let mimeType = self.extractMimeTypeFromAsset(asset: asset)
let resource = self.extractResourceFromAsset(asset: asset)
let size = self.extractSizeFromResource(resource: resource)
let manager = PHImageManager.default() let manager = PHImageManager.default()
manager.requestImageData( manager.requestImageData(
for: asset, for: asset,
@ -568,46 +570,18 @@ public class SwiftPhotoGalleryPlugin: NSObject, FlutterPlugin {
return mimeType return mimeType
} }
private func extractUTIFromAsset(asset: PHAsset) -> String? {
if #available(iOS 9, *) {
let resourceList = PHAssetResource.assetResources(for: asset)
if let resource = resourceList.first {
return resource.uniformTypeIdentifier
}
}
return asset.value(forKey: "uniformTypeIdentifier") as? String
}
private func extractFileExtensionFromAsset(asset: PHAsset) -> String { private func extractFileExtensionFromAsset(asset: PHAsset) -> String {
let uti = self.extractUTIFromAsset(asset: asset) let uti = asset.value(forKey: "uniformTypeIdentifier") as? String
return self.extractFileExtensionFromUTI(uti: uti) return self.extractFileExtensionFromUTI(uti: uti)
} }
private func extractMimeTypeFromAsset(asset: PHAsset) -> String? { private func extractMimeTypeFromAsset(asset: PHAsset) -> String? {
let uti = self.extractUTIFromAsset(asset: asset) let uti = asset.value(forKey: "uniformTypeIdentifier") as? String
return self.extractMimeTypeFromUTI(uti: uti) return self.extractMimeTypeFromUTI(uti: uti)
} }
private func extractFilenameFromAsset(asset: PHAsset) -> String? { private func extractFilenameFromAsset(asset: PHAsset) -> String? {
if #available(iOS 9.0, *) { return asset.value(forKey: "originalFilename") as? String
let resources = PHAssetResource.assetResources(for: asset)
if let resource = resources.first {
return resource.originalFilename
}
}
return asset.value(forKey: "filename") as? String
}
private func extractSizeFromAsset(asset: PHAsset) -> Int64? {
if #available(iOS 9.0, *) {
let resources = PHAssetResource.assetResources(for: asset)
if let resource = resources.first{
if let unsignedInt64 = resource.value(forKey: "fileSize") as? CLong {
return Int64(unsignedInt64)
}
}
}
return nil;
} }
private func extractTitleFromFilename(filename: String?) -> String? { private func extractTitleFromFilename(filename: String?) -> String? {
@ -617,6 +591,23 @@ public class SwiftPhotoGalleryPlugin: NSObject, FlutterPlugin {
return nil return nil
} }
private func extractResourceFromAsset(asset: PHAsset) -> PHAssetResource? {
if #available(iOS 9, *) {
let resourceList = PHAssetResource.assetResources(for: asset)
if let resource = resourceList.first {
return resource
}
}
return nil
}
private func extractSizeFromResource(resource: PHAssetResource?) -> Int64? {
if let assetResource = resource {
return assetResource.value(forKey: "fileSize") as? Int64
}
return nil
}
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")