mirror of
https://github.com/immich-app/immich.git
synced 2025-07-31 15:08:44 -04:00
inline
This commit is contained in:
parent
4d4a5b6be4
commit
91a5989929
@ -25,45 +25,31 @@ class ThumbnailApiImpl: ThumbnailApi {
|
||||
guard let bufferPointer = UnsafeMutableRawPointer(bitPattern: Int(pointer))
|
||||
else { completion(.failure(PigeonError(code: "", message: "Could not get buffer pointer for \(assetId)", details: nil))); return }
|
||||
Self.processingQueue.async {
|
||||
do {
|
||||
let asset = try self.getAsset(assetId: assetId)
|
||||
Self.cacheManager.requestImage(
|
||||
for: asset,
|
||||
targetSize: CGSize(width: Double(width), height: Double(height)),
|
||||
contentMode: .aspectFill,
|
||||
options: Self.requestOptions,
|
||||
resultHandler: { (image, info) -> Void in
|
||||
guard let image = image,
|
||||
let cgImage = image.cgImage,
|
||||
let dataProvider = cgImage.dataProvider,
|
||||
let pixelData = dataProvider.data
|
||||
else { completion(.failure(PigeonError(code: "", message: "Could not get pixel data for \(assetId)", details: nil))); return }
|
||||
|
||||
guard let sourceBuffer = CFDataGetBytePtr(pixelData)
|
||||
else { completion(.failure(PigeonError(code: "", message: "Could not get pixel data buffer for \(assetId)", details: nil))); return }
|
||||
let dataLength = CFDataGetLength(pixelData)
|
||||
let bufferLength = width * height * 4
|
||||
guard dataLength <= bufferLength
|
||||
else { completion(.failure(PigeonError(code: "", message: "Buffer is not large enough (\(bufferLength) vs \(dataLength) for \(assetId)", details: nil))); return }
|
||||
|
||||
bufferPointer.copyMemory(from: sourceBuffer, byteCount: dataLength)
|
||||
completion(.success(()))
|
||||
}
|
||||
)
|
||||
} catch {
|
||||
completion(
|
||||
.failure(PigeonError(code: "", message: "Could not get asset data for \(assetId)", details: nil)))
|
||||
}
|
||||
guard let asset = PHAsset.fetchAssets(withLocalIdentifiers: [assetId], options: Self.fetchOptions).firstObject
|
||||
else { completion(.failure(PigeonError(code: "", message: "Could not get asset data for \(assetId)", details: nil))); return }
|
||||
Self.cacheManager.requestImage(
|
||||
for: asset,
|
||||
targetSize: CGSize(width: Double(width), height: Double(height)),
|
||||
contentMode: .aspectFill,
|
||||
options: Self.requestOptions,
|
||||
resultHandler: { (image, info) -> Void in
|
||||
guard let image = image,
|
||||
let cgImage = image.cgImage,
|
||||
let dataProvider = cgImage.dataProvider,
|
||||
let pixelData = dataProvider.data
|
||||
else { completion(.failure(PigeonError(code: "", message: "Could not get pixel data for \(assetId)", details: nil))); return }
|
||||
|
||||
guard let sourceBuffer = CFDataGetBytePtr(pixelData)
|
||||
else { completion(.failure(PigeonError(code: "", message: "Could not get pixel data buffer for \(assetId)", details: nil))); return }
|
||||
let dataLength = CFDataGetLength(pixelData)
|
||||
let bufferLength = width * height * 4
|
||||
guard dataLength <= bufferLength
|
||||
else { completion(.failure(PigeonError(code: "", message: "Buffer is not large enough (\(bufferLength) vs \(dataLength) for \(assetId)", details: nil))); return }
|
||||
|
||||
bufferPointer.copyMemory(from: sourceBuffer, byteCount: dataLength)
|
||||
completion(.success(()))
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private func getAsset(assetId: String) throws -> PHAsset {
|
||||
guard
|
||||
let asset = PHAsset.fetchAssets(withLocalIdentifiers: [assetId], options: Self.fetchOptions)
|
||||
.firstObject
|
||||
else {
|
||||
throw PigeonError(code: "", message: "Could not fetch asset", details: nil)
|
||||
}
|
||||
return asset
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user