mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-02 12:07:55 +00:00
Implement the save action when previewing media. (#3630)
* Implement the save action on the media preview. * Update Compound and use the correct icon. Also fixes an icon that has been renamed. * Update the add to photo library usage description to match the designs. * PR comments.
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
//
|
||||
// Copyright 2024 New Vector Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
// Please see LICENSE in the repository root for full details.
|
||||
//
|
||||
|
||||
import Photos
|
||||
|
||||
enum PhotoLibraryManagerError: Error {
|
||||
case notAuthorized
|
||||
case unknown(Error)
|
||||
}
|
||||
|
||||
// sourcery: AutoMockable
|
||||
protocol PhotoLibraryManagerProtocol {
|
||||
func addResource(_ type: PHAssetResourceType, at url: URL) async -> Result<Void, PhotoLibraryManagerError>
|
||||
}
|
||||
|
||||
struct PhotoLibraryManager: PhotoLibraryManagerProtocol {
|
||||
func addResource(_ type: PHAssetResourceType, at url: URL) async -> Result<Void, PhotoLibraryManagerError> {
|
||||
do {
|
||||
try await PHPhotoLibrary.shared().performChanges {
|
||||
let request = PHAssetCreationRequest.forAsset()
|
||||
let options = PHAssetResourceCreationOptions()
|
||||
request.addResource(with: type, fileURL: url, options: options)
|
||||
}
|
||||
return .success(())
|
||||
} catch {
|
||||
if (error as NSError).code == PHPhotosError.accessUserDenied.rawValue {
|
||||
return .failure(.notAuthorized)
|
||||
} else {
|
||||
return .failure(.unknown(error))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user