From d9a826a39a898640ad358378fd81db958e11cd70 Mon Sep 17 00:00:00 2001 From: adimiz1 <95848801+adimiz1@users.noreply.github.com> Date: Thu, 12 Sep 2024 12:22:06 +0300 Subject: [PATCH] Add `auto_chaptering` and `auto_transcription` to Upload API --- .../Results/Helpers/CommonResultKeys.swift | 3 +- .../CLDUploadRequestParams.swift | 40 +++++++++++++- .../Uploader/Results/CLDUploadResult.swift | 6 ++- .../UploaderTests/UploaderTests.swift | 54 +++++++++++++++++++ 4 files changed, 99 insertions(+), 4 deletions(-) diff --git a/Cloudinary/Classes/Core/Features/Helpers/Results/Helpers/CommonResultKeys.swift b/Cloudinary/Classes/Core/Features/Helpers/Results/Helpers/CommonResultKeys.swift index ad361f19..f7cdbe7d 100644 --- a/Cloudinary/Classes/Core/Features/Helpers/Results/Helpers/CommonResultKeys.swift +++ b/Cloudinary/Classes/Core/Features/Helpers/Results/Helpers/CommonResultKeys.swift @@ -25,7 +25,7 @@ import Foundation internal enum CommonResultKeys: CustomStringConvertible { - case publicId, format, version, resourceType, urlType, createdAt, length, width, height, x, y, url, secureUrl, exif, metadata, faces, colors, tags, moderation, context, phash, info, accessControl, eager, qualityAnalysis, coordinates, accessibilityAnalysis, originalFilename, assetFolder, displayName + case publicId, format, version, resourceType, urlType, createdAt, length, width, height, x, y, url, secureUrl, exif, metadata, faces, colors, tags, moderation, context, phash, info, accessControl, eager, qualityAnalysis, coordinates, accessibilityAnalysis, originalFilename, assetFolder, displayName, playbackUrl var description: String { switch self { @@ -59,6 +59,7 @@ internal enum CommonResultKeys: CustomStringConvertible { case .originalFilename: return "original_filename" case .assetFolder: return "asset_folder" case .displayName: return "display_name" + case .playbackUrl: return "playback_url" } } } diff --git a/Cloudinary/Classes/Core/Features/Uploader/RequestParams/CLDUploadRequestParams.swift b/Cloudinary/Classes/Core/Features/Uploader/RequestParams/CLDUploadRequestParams.swift index e16fdfd5..99aba6bf 100644 --- a/Cloudinary/Classes/Core/Features/Uploader/RequestParams/CLDUploadRequestParams.swift +++ b/Cloudinary/Classes/Core/Features/Uploader/RequestParams/CLDUploadRequestParams.swift @@ -242,7 +242,15 @@ import Foundation open var displayName: String? { return getParam(.DisplayName) as? String } - + + open var autoChaptering: Bool? { + return getParam(.AutoChaptering) as? Bool + } + + open var autoTranscription: Bool? { + return getParam(.AutoTranscription) as? Bool + } + fileprivate func getParam(_ param: UploadRequestParams) -> AnyObject? { return params[param.rawValue] as AnyObject } @@ -352,7 +360,33 @@ import Foundation setParam(UploadRequestParams.FilenameOverride.rawValue, value: filenameOverride) return self } - + + /** + Setting this will generate chapters file. + + - parameter autoChaptering: The boolean paramter + + - returns: The same instance of CLDUploadRequestParams. + */ + @discardableResult + open func setAutoChpatering(_ autoChaptering: Bool) -> Self { + setParam(UploadRequestParams.AutoChaptering.rawValue, value: autoChaptering) + return self + } + + /** + Setting this will generate transcription file. + + - parameter autoChaptering: The boolean paramter + + - returns: The same instance of CLDUploadRequestParams. + */ + @discardableResult + open func setAutoTranscription(_ autoTranscription: Bool) -> Self { + setParam(UploadRequestParams.AutoTranscription.rawValue, value: autoTranscription) + return self + } + /** Set an HTTP URL to send notification to (a webhook) when the generation of eager transformations is completed. @@ -1232,5 +1266,7 @@ import Foundation case Ocr = "ocr" case BackgroundRemoval = "background_removal" case FilenameOverride = "filename_override" + case AutoChaptering = "auto_chaptering" + case AutoTranscription = "auto_transcription" } } diff --git a/Cloudinary/Classes/Core/Features/Uploader/Results/CLDUploadResult.swift b/Cloudinary/Classes/Core/Features/Uploader/Results/CLDUploadResult.swift index 4813c5fb..3d7b9b9e 100644 --- a/Cloudinary/Classes/Core/Features/Uploader/Results/CLDUploadResult.swift +++ b/Cloudinary/Classes/Core/Features/Uploader/Results/CLDUploadResult.swift @@ -161,7 +161,11 @@ import Foundation open var originalFilename: String? { return getParam(.originalFilename) as? String } - + + open var playbackUrl: String? { + return getParam(.playbackUrl) as? String + } + open var info: CLDInfo? { guard let info = getParam(.info) as? [String : AnyObject] else { return nil diff --git a/Example/Tests/NetworkTests/UploaderTests/UploaderTests.swift b/Example/Tests/NetworkTests/UploaderTests/UploaderTests.swift index 98daa8b4..73341072 100644 --- a/Example/Tests/NetworkTests/UploaderTests/UploaderTests.swift +++ b/Example/Tests/NetworkTests/UploaderTests/UploaderTests.swift @@ -1457,6 +1457,60 @@ class UploaderTests: NetworkBaseTest { XCTAssertTrue(isUsedFilename(filename: filename, publicId: requestResult?.publicId)) } + func testAutoChaptering() { + XCTAssertNotNil(cloudinary!.config.apiSecret, "Must set api secret for this test") + + let expectation = self.expectation(description: "Upload should succeed and return playback url") + let file = TestResourceType.dog.url + + var result: CLDUploadResult? + var error: NSError? + + let params = CLDUploadRequestParams() + params.setColors(true) + params.setResourceType(.video) + params.setAutoChpatering(true) + cloudinary!.createUploader().signedUpload(url: file, params: params).response({ (resultRes, errorRes) in + result = resultRes + error = errorRes + + expectation.fulfill() + }) + + waitForExpectations(timeout: timeout, handler: nil) + + XCTAssertNotNil(result, "result should not be nil") + XCTAssertNotNil(result?.playbackUrl, "playback url should not be nil") + XCTAssertNil(error, "error should be nil") + } + + func testAutoTranscription() { + XCTAssertNotNil(cloudinary!.config.apiSecret, "Must set api secret for this test") + + let expectation = self.expectation(description: "Upload should succeed and return playback url") + let file = TestResourceType.dog.url + + var result: CLDUploadResult? + var error: NSError? + + let params = CLDUploadRequestParams() + params.setColors(true) + params.setResourceType(.video) + params.setAutoTranscription(true) + cloudinary!.createUploader().signedUpload(url: file, params: params).response({ (resultRes, errorRes) in + result = resultRes + error = errorRes + + expectation.fulfill() + }) + + waitForExpectations(timeout: timeout, handler: nil) + + XCTAssertNotNil(result, "result should not be nil") + XCTAssertNotNil(result?.playbackUrl, "playback url should not be nil") + XCTAssertNil(error, "error should be nil") + } + func validateQualityOverride(publicId: String, quality: String, shouldSucceed: Bool){