From 0b76f709b885364f9f9cc194de9dfac08562c1a6 Mon Sep 17 00:00:00 2001 From: Carlos Garcia Date: Tue, 28 Feb 2023 16:03:07 +0100 Subject: [PATCH 01/17] Update WordPressKit ref to branch --- Podfile | 4 ++-- Podfile.lock | 15 ++++++++++----- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/Podfile b/Podfile index 7d049abd44bd..c4d1b51463d1 100644 --- a/Podfile +++ b/Podfile @@ -47,8 +47,8 @@ def wordpress_ui end def wordpress_kit - pod 'WordPressKit', '~> 6.2.0-beta' - # pod 'WordPressKit', git: 'https://github.com/wordpress-mobile/WordPressKit-iOS.git', branch: 'trunk' + # pod 'WordPressKit', '~> 6.2.0-beta' + pod 'WordPressKit', git: 'https://github.com/wordpress-mobile/WordPressKit-iOS.git', branch: 'add/media-videopress-token' # pod 'WordPressKit', git: 'https://github.com/wordpress-mobile/WordPressKit-iOS.git', tag: '' # pod 'WordPressKit', git: 'https://github.com/wordpress-mobile/WordPressKit-iOS.git', commit: '' # pod 'WordPressKit', path: '../WordPressKit-iOS' diff --git a/Podfile.lock b/Podfile.lock index e71ac6f591df..0d5d3d0fdea1 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -511,7 +511,7 @@ PODS: - WordPressKit (~> 6.0-beta) - WordPressShared (~> 2.0-beta) - WordPressUI (~> 1.7-beta) - - WordPressKit (6.2.0): + - WordPressKit (6.2.0-beta.1): - Alamofire (~> 4.8.0) - NSObject-SafeExpectations (~> 0.0.4) - UIDeviceIdentifier (~> 2.0) @@ -612,7 +612,7 @@ DEPENDENCIES: - SwiftLint (~> 0.50) - WordPress-Editor-iOS (~> 1.19.8) - WordPressAuthenticator (~> 5.1-beta) - - WordPressKit (~> 6.2.0-beta) + - WordPressKit (from `https://github.com/wordpress-mobile/WordPressKit-iOS.git`, branch `add/media-videopress-token`) - WordPressShared (~> 2.0-beta) - WordPressUI (~> 1.12.5) - WPMediaPicker (~> 1.8.7) @@ -661,7 +661,6 @@ SPEC REPOS: - UIDeviceIdentifier - WordPress-Aztec-iOS - WordPress-Editor-iOS - - WordPressKit - WordPressUI - WPMediaPicker - wpxmlrpc @@ -778,6 +777,9 @@ EXTERNAL SOURCES: :git: https://github.com/wordpress-mobile/gutenberg-mobile.git :submodules: true :tag: v1.90.0 + WordPressKit: + :branch: add/media-videopress-token + :git: https://github.com/wordpress-mobile/WordPressKit-iOS.git Yoga: :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.90.0/third-party-podspecs/Yoga.podspec.json @@ -793,6 +795,9 @@ CHECKOUT OPTIONS: :git: https://github.com/wordpress-mobile/gutenberg-mobile.git :submodules: true :tag: v1.90.0 + WordPressKit: + :commit: c175285f2d7c8cd0bddf546c3589401d2c58fb69 + :git: https://github.com/wordpress-mobile/WordPressKit-iOS.git SPEC CHECKSUMS: Alamofire: 3ec537f71edc9804815215393ae2b1a8ea33a844 @@ -881,7 +886,7 @@ SPEC CHECKSUMS: WordPress-Aztec-iOS: 7d11d598f14c82c727c08b56bd35fbeb7dafb504 WordPress-Editor-iOS: 9eb9f12f21a5209cb837908d81ffe1e31cb27345 WordPressAuthenticator: 60611898815b218622f98d2c024d4eeae53dec1c - WordPressKit: 7fb291f67b4f2651f09ed3dd9c6010776d652165 + WordPressKit: 07672470785459a27f4d44d99ff96870d586a07c WordPressShared: 8e59bc8cec256f54a7c4cc6c94911adc2a9a65d2 WordPressUI: c5be816f6c7b3392224ac21de9e521e89fa108ac WPMediaPicker: 0d45dfd7b3c5651c5236ffd48c1b0b2f60a2d5d2 @@ -896,6 +901,6 @@ SPEC CHECKSUMS: ZendeskSupportSDK: 3a8e508ab1d9dd22dc038df6c694466414e037ba ZIPFoundation: ae5b4b813d216d3bf0a148773267fff14bd51d37 -PODFILE CHECKSUM: 2a9f225351fe51b80ac50f751fbe3d42bbc4174c +PODFILE CHECKSUM: 9c351036cdc97233aeec93236e2fe27109b390db COCOAPODS: 1.11.3 From e3f7878c2f36b699d36ba375ce78de515fc1f572 Mon Sep 17 00:00:00 2001 From: Carlos Garcia Date: Wed, 1 Mar 2023 18:20:14 +0100 Subject: [PATCH 02/17] Add `getMetadataFromVideoPressID` to `MediaService` --- WordPress/Classes/Services/MediaService.h | 16 ++++++++++++++++ WordPress/Classes/Services/MediaService.m | 17 +++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/WordPress/Classes/Services/MediaService.h b/WordPress/Classes/Services/MediaService.h index 3314792e9753..ed9e8d63270c 100644 --- a/WordPress/Classes/Services/MediaService.h +++ b/WordPress/Classes/Services/MediaService.h @@ -5,6 +5,7 @@ @class Media; +@class RemoteVideoPressVideo; @class Blog; @class AbstractPost; @protocol ExportableAsset; @@ -131,6 +132,21 @@ typedef NS_ERROR_ENUM(MediaServiceErrorDomain, MediaServiceError) { inBlog:(nonnull Blog *)blog success:(nullable void (^)(NSString * _Nonnull videoURL, NSString * _Nullable posterURL))success failure:(nullable void (^)(NSError * _Nonnull error))failure; +/** + * Retrieves the metadata of a VideoPress video. + * + * The metadata parameters can be found in the API reference: + * https://developer.wordpress.com/docs/api/1.1/get/videos/%24guid/ + * + * @param videoPressID ID of the video in VideoPress. + * @param success a block to be executed when the metadata is fetched successfully. + * @param failure a block to be executed when the metadata can't be fetched. + */ +- (void)getMetadataFromVideoPressID:(nonnull NSString *)videoPressID + inBlog:(nonnull Blog *)blog + success:(nullable void (^)(RemoteVideoPressVideo * _Nonnull metadata))success + failure:(nullable void (^)(NSError * _Nonnull error))failure; + /** * Sync all Media objects from the server to local database diff --git a/WordPress/Classes/Services/MediaService.m b/WordPress/Classes/Services/MediaService.m index ed2c5f6ef89f..0851e2833b15 100644 --- a/WordPress/Classes/Services/MediaService.m +++ b/WordPress/Classes/Services/MediaService.m @@ -585,6 +585,23 @@ - (void)getMediaURLFromVideoPressID:(NSString *)videoPressID }]; } +- (void)getMetadataFromVideoPressID:(NSString *)videoPressID + inBlog:(Blog *)blog + success:(void (^)(RemoteVideoPressVideo *metadata))success + failure:(void (^)(NSError *error))failure +{ + id remote = [self remoteForBlog:blog]; + [remote getMetadataFromVideoPressID:videoPressID success:^(RemoteVideoPressVideo *metadata) { + if (success) { + success(metadata); + } + } failure:^(NSError * error) { + if (failure) { + failure(error); + } + }]; +} + - (void)syncMediaLibraryForBlog:(Blog *)blog success:(void (^)(void))success failure:(void (^)(NSError *error))failure From 92b43e7589f428788e16a404be394502f25a7c4e Mon Sep 17 00:00:00 2001 From: Carlos Garcia Date: Wed, 1 Mar 2023 18:23:16 +0100 Subject: [PATCH 03/17] Replace `fetchRemoteVideoURL` with `fetchVideoPressMetadata` The new function retrieves all VideoPress metadata, including the token. --- .../Classes/Categories/Media+WPMediaAsset.m | 4 +-- .../Classes/Services/PostCoordinator.swift | 6 ++--- .../Services/Stories/StoryMediaLoader.swift | 8 ++++-- .../AztecPostViewController.swift | 12 ++++----- .../Gutenberg/EditorMediaUtility.swift | 27 +++++-------------- .../GutenbergMediaInserterHelper.swift | 8 ++---- 6 files changed, 26 insertions(+), 39 deletions(-) diff --git a/WordPress/Classes/Categories/Media+WPMediaAsset.m b/WordPress/Classes/Categories/Media+WPMediaAsset.m index cf8b06fc6c5f..5305edabaf3b 100644 --- a/WordPress/Classes/Categories/Media+WPMediaAsset.m +++ b/WordPress/Classes/Categories/Media+WPMediaAsset.m @@ -47,9 +47,9 @@ - (WPMediaRequestID)videoAssetWithCompletionHandler:(WPMediaAssetBlock)completio if (!url && self.videopressGUID.length > 0 ){ NSManagedObjectContext *mainContext = [[ContextManager sharedInstance] mainContext]; MediaService *mediaService = [[MediaService alloc] initWithManagedObjectContext:mainContext]; - [mediaService getMediaURLFromVideoPressID:self.videopressGUID inBlog:self.blog success:^(NSString *videoURL, NSString *posterURL) { + [mediaService getMetadataFromVideoPressID: self.videopressGUID inBlog:self.blog success:^(RemoteVideoPressVideo *metadata) { // Let see if can create an asset with this url - AVURLAsset *asset = [AVURLAsset assetWithURL:[NSURL URLWithString:videoURL]]; + AVURLAsset *asset = [AVURLAsset assetWithURL:[metadata getPlayURL]]; if (!asset) { NSString *errorMessage = NSLocalizedString(@"Selected media is unavailable.", @"Error message when user tries a no longer existent video media object."); completionHandler(nil, [self errorWithMessage:errorMessage]); diff --git a/WordPress/Classes/Services/PostCoordinator.swift b/WordPress/Classes/Services/PostCoordinator.swift index 034efcd2b194..a24bad399e1b 100644 --- a/WordPress/Classes/Services/PostCoordinator.swift +++ b/WordPress/Classes/Services/PostCoordinator.swift @@ -298,12 +298,12 @@ class PostCoordinator: NSObject { } switch media.mediaType { case .video: - EditorMediaUtility.fetchRemoteVideoURL(for: media, in: post) { (result) in + EditorMediaUtility.fetchVideoPressMetadata(for: media, in: post) { (result) in switch result { case .failure: handleSingleMediaFailure() - case .success(let value): - media.remoteURL = value.videoURL.absoluteString + case .success(let metadata): + media.remoteURL = metadata.originalURL?.absoluteString successHandler() } } diff --git a/WordPress/Classes/Services/Stories/StoryMediaLoader.swift b/WordPress/Classes/Services/Stories/StoryMediaLoader.swift index bf686aa09aff..591879e6df88 100644 --- a/WordPress/Classes/Services/Stories/StoryMediaLoader.swift +++ b/WordPress/Classes/Services/Stories/StoryMediaLoader.swift @@ -69,9 +69,13 @@ class StoryMediaLoader { self.downloadTasks.append(task) } case .video: - EditorMediaUtility.fetchRemoteVideoURL(for: media, in: post) { [weak self] result in + EditorMediaUtility.fetchVideoPressMetadata(for: media, in: post) { [weak self] result in switch result { - case .success((let videoURL, _)): + case .success((let metadata)): + guard let videoURL = metadata.getPlayURL() else { + DDLogWarn("Failed getting video play URL for media with upload ID: \(media.uploadID)") + return + } self?.queue.async { self?.results[idx] = (CameraSegment.video(videoURL, nil), nil) } diff --git a/WordPress/Classes/ViewRelated/Aztec/ViewControllers/AztecPostViewController.swift b/WordPress/Classes/ViewRelated/Aztec/ViewControllers/AztecPostViewController.swift index 74a5db4809da..ddd09ea6e370 100644 --- a/WordPress/Classes/ViewRelated/Aztec/ViewControllers/AztecPostViewController.swift +++ b/WordPress/Classes/ViewRelated/Aztec/ViewControllers/AztecPostViewController.swift @@ -2845,9 +2845,9 @@ extension AztecPostViewController { let videoPressID = videoSrcURL.host { // It's videoPress video so let's fetch the information for the video let mediaService = MediaService(managedObjectContext: ContextManager.sharedInstance().mainContext) - mediaService.getMediaURL(fromVideoPressID: videoPressID, in: self.post.blog, success: { (videoURLString, posterURLString) in - videoAttachment.updateURL(URL(string: videoURLString)) - if let validPosterURLString = posterURLString, let posterURL = URL(string: validPosterURLString) { + mediaService.getMetadataFromVideoPressID(videoPressID, in: self.post.blog, success: { (metadata) in + videoAttachment.updateURL(metadata.getPlayURL()) + if let posterURL = metadata.posterURL { videoAttachment.posterURL = posterURL } self.richTextView.refresh(videoAttachment) @@ -3021,16 +3021,16 @@ extension AztecPostViewController { } // It's videoPress video so let's fetch the information for the video let mediaService = MediaService(managedObjectContext: ContextManager.sharedInstance().mainContext) - mediaService.getMediaURL(fromVideoPressID: videoPressID, in: self.post.blog, success: { [weak self] (videoURLString, posterURLString) in + mediaService.getMetadataFromVideoPressID(videoPressID, in: self.post.blog, success: { [weak self] (metadata) in guard let `self` = self else { return } - guard let videoURL = URL(string: videoURLString) else { + guard let videoURL = metadata.getPlayURL() else { self.displayUnableToPlayVideoAlert() return } videoAttachment.updateURL(videoURL) - if let validPosterURLString = posterURLString, let posterURL = URL(string: validPosterURLString) { + if let posterURL = metadata.posterURL { videoAttachment.posterURL = posterURL } self.richTextView.refresh(videoAttachment) diff --git a/WordPress/Classes/ViewRelated/Gutenberg/EditorMediaUtility.swift b/WordPress/Classes/ViewRelated/Gutenberg/EditorMediaUtility.swift index 8ceca707da0e..2fb3bdbc0c14 100644 --- a/WordPress/Classes/ViewRelated/Gutenberg/EditorMediaUtility.swift +++ b/WordPress/Classes/ViewRelated/Gutenberg/EditorMediaUtility.swift @@ -147,31 +147,18 @@ class EditorMediaUtility { return imageDownload } - static func fetchRemoteVideoURL(for media: Media, in post: AbstractPost, completion: @escaping ( Result<(videoURL: URL, posterURL: URL?), Error> ) -> Void) { + static func fetchVideoPressMetadata(for media: Media, in post: AbstractPost, completion: @escaping ( Result<(RemoteVideoPressVideo), Error> ) -> Void) { guard let videoPressID = media.videopressGUID else { - //the site can be a self-hosted site if there's no videopressGUID - if let videoURLString = media.remoteURL, - let videoURL = URL(string: videoURLString) { - completion(Result.success((videoURL: videoURL, posterURL: nil))) - } else { - DDLogError("Unable to find remote video URL for video with upload ID = \(media.uploadID).") - completion(Result.failure(NSError())) - } + DDLogError("Unable to find metadata for video with upload ID = \(media.uploadID).") + completion(Result.failure(NSError())) return } + let mediaService = MediaService(managedObjectContext: ContextManager.sharedInstance().mainContext) - mediaService.getMediaURL(fromVideoPressID: videoPressID, in: post.blog, success: { (videoURLString, posterURLString) in - guard let videoURL = URL(string: videoURLString) else { - completion(Result.failure(NSError())) - return - } - var posterURL: URL? - if let validPosterURLString = posterURLString, let url = URL(string: validPosterURLString) { - posterURL = url - } - completion(Result.success((videoURL: videoURL, posterURL: posterURL))) + mediaService.getMetadataFromVideoPressID(videoPressID, in: post.blog, success: { (metadata) in + completion(Result.success(metadata)) }, failure: { (error) in - DDLogError("Unable to find information for VideoPress video with ID = \(videoPressID). Details: \(error.localizedDescription)") + DDLogError("Unable to find metadata for VideoPress video with ID = \(videoPressID). Details: \(error.localizedDescription)") completion(Result.failure(error)) }) } diff --git a/WordPress/Classes/ViewRelated/Gutenberg/GutenbergMediaInserterHelper.swift b/WordPress/Classes/ViewRelated/Gutenberg/GutenbergMediaInserterHelper.swift index 525f8a04c815..5ae1aa04fefe 100644 --- a/WordPress/Classes/ViewRelated/Gutenberg/GutenbergMediaInserterHelper.swift +++ b/WordPress/Classes/ViewRelated/Gutenberg/GutenbergMediaInserterHelper.swift @@ -259,7 +259,7 @@ class GutenbergMediaInserterHelper: NSObject { } switch media.mediaType { case .video: - EditorMediaUtility.fetchRemoteVideoURL(for: media, in: post) { [weak self] (result) in + EditorMediaUtility.fetchVideoPressMetadata(for: media, in: post) { [weak self] (result) in guard let strongSelf = self else { return } @@ -267,11 +267,7 @@ class GutenbergMediaInserterHelper: NSObject { case .failure: strongSelf.gutenberg.mediaUploadUpdate(id: mediaUploadID, state: .failed, progress: 0, url: nil, serverID: nil) case .success(let value): - var metadata: [String: Any] = [:] - if let videopressGUID = media.videopressGUID { - metadata["videopressGUID"] = videopressGUID - } - strongSelf.gutenberg.mediaUploadUpdate(id: mediaUploadID, state: .succeeded, progress: 1, url: value.videoURL, serverID: mediaServerID, metadata: metadata) + strongSelf.gutenberg.mediaUploadUpdate(id: mediaUploadID, state: .succeeded, progress: 1, url: value.originalURL, serverID: mediaServerID, metadata: value.toDict()) } } default: From 3b1a671d836517683453e6e6e5a6e71f7e18d71f Mon Sep 17 00:00:00 2001 From: Carlos Garcia Date: Wed, 1 Mar 2023 18:51:10 +0100 Subject: [PATCH 04/17] Remove `getMediaURLFromVideoPressID` in favor of `getMetadataFromVideoPressID` --- WordPress/Classes/Services/MediaService.h | 12 ------------ WordPress/Classes/Services/MediaService.m | 17 ----------------- 2 files changed, 29 deletions(-) diff --git a/WordPress/Classes/Services/MediaService.h b/WordPress/Classes/Services/MediaService.h index ed9e8d63270c..666472aea719 100644 --- a/WordPress/Classes/Services/MediaService.h +++ b/WordPress/Classes/Services/MediaService.h @@ -120,18 +120,6 @@ typedef NS_ERROR_ENUM(MediaServiceErrorDomain, MediaServiceError) { success:(nullable void (^)(void))success failure:(nullable void (^)(void))failure; -/** - * Obtains the video url and poster image url for the video with the videoPressID - * - * @param videoPressID ID of video in VideoPress - * @param blog blog to use to access video references - * @param success return block if videopress info is found - * @param failure return block if not information found. - */ -- (void)getMediaURLFromVideoPressID:(nonnull NSString *)videoPressID - inBlog:(nonnull Blog *)blog - success:(nullable void (^)(NSString * _Nonnull videoURL, NSString * _Nullable posterURL))success - failure:(nullable void (^)(NSError * _Nonnull error))failure; /** * Retrieves the metadata of a VideoPress video. * diff --git a/WordPress/Classes/Services/MediaService.m b/WordPress/Classes/Services/MediaService.m index 0851e2833b15..5c8412f11d07 100644 --- a/WordPress/Classes/Services/MediaService.m +++ b/WordPress/Classes/Services/MediaService.m @@ -568,23 +568,6 @@ - (void) getMediaWithID:(NSNumber *) mediaID inBlog:(Blog *) blog }]; } -- (void)getMediaURLFromVideoPressID:(NSString *)videoPressID - inBlog:(Blog *)blog - success:(void (^)(NSString *videoURL, NSString *posterURL))success - failure:(void (^)(NSError *error))failure -{ - id remote = [self remoteForBlog:blog]; - [remote getVideoURLFromVideoPressID:videoPressID success:^(NSURL *videoURL, NSURL *posterURL) { - if (success) { - success(videoURL.absoluteString, posterURL.absoluteString); - } - } failure:^(NSError * error) { - if (failure) { - failure(error); - } - }]; -} - - (void)getMetadataFromVideoPressID:(NSString *)videoPressID inBlog:(Blog *)blog success:(void (^)(RemoteVideoPressVideo *metadata))success From 2a1f1b84e41374c4d0ad5571aa2492cff1c0b1fa Mon Sep 17 00:00:00 2001 From: Carlos Garcia Date: Thu, 2 Mar 2023 17:53:28 +0100 Subject: [PATCH 05/17] Pass `isSitePrivate` for fetching VideoPress metadata --- WordPress/Classes/Services/MediaService.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/Classes/Services/MediaService.m b/WordPress/Classes/Services/MediaService.m index 5c8412f11d07..ce1a430189a2 100644 --- a/WordPress/Classes/Services/MediaService.m +++ b/WordPress/Classes/Services/MediaService.m @@ -574,7 +574,7 @@ - (void)getMetadataFromVideoPressID:(NSString *)videoPressID failure:(void (^)(NSError *error))failure { id remote = [self remoteForBlog:blog]; - [remote getMetadataFromVideoPressID:videoPressID success:^(RemoteVideoPressVideo *metadata) { + [remote getMetadataFromVideoPressID:videoPressID isSitePrivate:blog.isPrivate success:^(RemoteVideoPressVideo *metadata) { if (success) { success(metadata); } From 14224a412ed373fbd15256f7eed095b0707418d9 Mon Sep 17 00:00:00 2001 From: Carlos Garcia Date: Fri, 3 Mar 2023 12:08:18 +0100 Subject: [PATCH 06/17] Update metadata conversion to dictionary --- .../ViewRelated/Gutenberg/GutenbergMediaInserterHelper.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/WordPress/Classes/ViewRelated/Gutenberg/GutenbergMediaInserterHelper.swift b/WordPress/Classes/ViewRelated/Gutenberg/GutenbergMediaInserterHelper.swift index 5ae1aa04fefe..dbeb5342fdae 100644 --- a/WordPress/Classes/ViewRelated/Gutenberg/GutenbergMediaInserterHelper.swift +++ b/WordPress/Classes/ViewRelated/Gutenberg/GutenbergMediaInserterHelper.swift @@ -266,8 +266,8 @@ class GutenbergMediaInserterHelper: NSObject { switch result { case .failure: strongSelf.gutenberg.mediaUploadUpdate(id: mediaUploadID, state: .failed, progress: 0, url: nil, serverID: nil) - case .success(let value): - strongSelf.gutenberg.mediaUploadUpdate(id: mediaUploadID, state: .succeeded, progress: 1, url: value.originalURL, serverID: mediaServerID, metadata: value.toDict()) + case .success(let metadata): + strongSelf.gutenberg.mediaUploadUpdate(id: mediaUploadID, state: .succeeded, progress: 1, url: metadata.originalURL, serverID: mediaServerID, metadata: metadata.asDictionary()) } } default: From 9d78e1b0b072778ddc0777ea28a27680b64b4c5f Mon Sep 17 00:00:00 2001 From: Carlos Garcia Date: Wed, 8 Mar 2023 13:55:02 +0100 Subject: [PATCH 07/17] Update calls to `getPlayURL` with `getURLWithToken` --- WordPress/Classes/Categories/Media+WPMediaAsset.m | 2 +- WordPress/Classes/Services/Stories/StoryMediaLoader.swift | 2 +- .../Aztec/ViewControllers/AztecPostViewController.swift | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/WordPress/Classes/Categories/Media+WPMediaAsset.m b/WordPress/Classes/Categories/Media+WPMediaAsset.m index 5305edabaf3b..da903af81c1c 100644 --- a/WordPress/Classes/Categories/Media+WPMediaAsset.m +++ b/WordPress/Classes/Categories/Media+WPMediaAsset.m @@ -49,7 +49,7 @@ - (WPMediaRequestID)videoAssetWithCompletionHandler:(WPMediaAssetBlock)completio MediaService *mediaService = [[MediaService alloc] initWithManagedObjectContext:mainContext]; [mediaService getMetadataFromVideoPressID: self.videopressGUID inBlog:self.blog success:^(RemoteVideoPressVideo *metadata) { // Let see if can create an asset with this url - AVURLAsset *asset = [AVURLAsset assetWithURL:[metadata getPlayURL]]; + AVURLAsset *asset = [AVURLAsset assetWithURL:[metadata getURLWithToken:metadata.originalURL]]; if (!asset) { NSString *errorMessage = NSLocalizedString(@"Selected media is unavailable.", @"Error message when user tries a no longer existent video media object."); completionHandler(nil, [self errorWithMessage:errorMessage]); diff --git a/WordPress/Classes/Services/Stories/StoryMediaLoader.swift b/WordPress/Classes/Services/Stories/StoryMediaLoader.swift index 591879e6df88..3bc75fdcabaa 100644 --- a/WordPress/Classes/Services/Stories/StoryMediaLoader.swift +++ b/WordPress/Classes/Services/Stories/StoryMediaLoader.swift @@ -72,7 +72,7 @@ class StoryMediaLoader { EditorMediaUtility.fetchVideoPressMetadata(for: media, in: post) { [weak self] result in switch result { case .success((let metadata)): - guard let videoURL = metadata.getPlayURL() else { + guard let videoURL = metadata.getURLWithToken(url: metadata.originalURL) else { DDLogWarn("Failed getting video play URL for media with upload ID: \(media.uploadID)") return } diff --git a/WordPress/Classes/ViewRelated/Aztec/ViewControllers/AztecPostViewController.swift b/WordPress/Classes/ViewRelated/Aztec/ViewControllers/AztecPostViewController.swift index ddd09ea6e370..91ac613639b9 100644 --- a/WordPress/Classes/ViewRelated/Aztec/ViewControllers/AztecPostViewController.swift +++ b/WordPress/Classes/ViewRelated/Aztec/ViewControllers/AztecPostViewController.swift @@ -2846,8 +2846,8 @@ extension AztecPostViewController { // It's videoPress video so let's fetch the information for the video let mediaService = MediaService(managedObjectContext: ContextManager.sharedInstance().mainContext) mediaService.getMetadataFromVideoPressID(videoPressID, in: self.post.blog, success: { (metadata) in - videoAttachment.updateURL(metadata.getPlayURL()) - if let posterURL = metadata.posterURL { + videoAttachment.updateURL(metadata.getURLWithToken(url: metadata.originalURL)) + if let posterURL = metadata.getURLWithToken(url: metadata.posterURL) { videoAttachment.posterURL = posterURL } self.richTextView.refresh(videoAttachment) @@ -3025,12 +3025,12 @@ extension AztecPostViewController { guard let `self` = self else { return } - guard let videoURL = metadata.getPlayURL() else { + guard let videoURL = metadata.getURLWithToken(url: metadata.originalURL) else { self.displayUnableToPlayVideoAlert() return } videoAttachment.updateURL(videoURL) - if let posterURL = metadata.posterURL { + if let posterURL = metadata.getURLWithToken(url: metadata.posterURL) { videoAttachment.posterURL = posterURL } self.richTextView.refresh(videoAttachment) From 5fd2d4645bc8ab82e1d6185629d7fd787dea8ccf Mon Sep 17 00:00:00 2001 From: Carlos Garcia Date: Wed, 8 Mar 2023 14:25:54 +0100 Subject: [PATCH 08/17] Update Podfile.lock with last version of WordPressKit --- Podfile.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Podfile.lock b/Podfile.lock index 0d5d3d0fdea1..4976f4a8bbe2 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -511,7 +511,7 @@ PODS: - WordPressKit (~> 6.0-beta) - WordPressShared (~> 2.0-beta) - WordPressUI (~> 1.7-beta) - - WordPressKit (6.2.0-beta.1): + - WordPressKit (6.3.0-beta.1): - Alamofire (~> 4.8.0) - NSObject-SafeExpectations (~> 0.0.4) - UIDeviceIdentifier (~> 2.0) @@ -796,7 +796,7 @@ CHECKOUT OPTIONS: :submodules: true :tag: v1.90.0 WordPressKit: - :commit: c175285f2d7c8cd0bddf546c3589401d2c58fb69 + :commit: d3a49a14b63445dd5cbf990686676f5efa33b810 :git: https://github.com/wordpress-mobile/WordPressKit-iOS.git SPEC CHECKSUMS: @@ -886,7 +886,7 @@ SPEC CHECKSUMS: WordPress-Aztec-iOS: 7d11d598f14c82c727c08b56bd35fbeb7dafb504 WordPress-Editor-iOS: 9eb9f12f21a5209cb837908d81ffe1e31cb27345 WordPressAuthenticator: 60611898815b218622f98d2c024d4eeae53dec1c - WordPressKit: 07672470785459a27f4d44d99ff96870d586a07c + WordPressKit: d9707b6a9d91cb96f6de4411411ea2b0852b004c WordPressShared: 8e59bc8cec256f54a7c4cc6c94911adc2a9a65d2 WordPressUI: c5be816f6c7b3392224ac21de9e521e89fa108ac WPMediaPicker: 0d45dfd7b3c5651c5236ffd48c1b0b2f60a2d5d2 From a4da397a019e9937a0f05c2b9eaba2b273df3b11 Mon Sep 17 00:00:00 2001 From: Carlos Garcia Date: Wed, 8 Mar 2023 18:53:55 +0100 Subject: [PATCH 09/17] Add fetch remote video URL helper --- .../Gutenberg/EditorMediaUtility.swift | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/WordPress/Classes/ViewRelated/Gutenberg/EditorMediaUtility.swift b/WordPress/Classes/ViewRelated/Gutenberg/EditorMediaUtility.swift index 2fb3bdbc0c14..34e03a0fdecb 100644 --- a/WordPress/Classes/ViewRelated/Gutenberg/EditorMediaUtility.swift +++ b/WordPress/Classes/ViewRelated/Gutenberg/EditorMediaUtility.swift @@ -147,6 +147,41 @@ class EditorMediaUtility { return imageDownload } + static func fetchRemoteVideoURL(for media: Media, in post: AbstractPost, withToken: Bool = false, completion: @escaping ( Result<(URL), Error> ) -> Void) { + // Return the attachment url it it's not a VideoPress video + if media.videopressGUID == nil { + guard let videoURLString = media.remoteURL, let videoURL = URL(string: videoURLString) else { + DDLogError("Unable to find remote video URL for video with upload ID = \(media.uploadID).") + completion(Result.failure(NSError())) + return + } + completion(Result.success(videoURL)) + } + else { + fetchVideoPressMetadata(for: media, in: post) { result in + switch result { + case .success((let metadata)): + if withToken { + guard let videoURL = metadata.getURLWithToken(url: metadata.originalURL) else { + DDLogWarn("Failed getting video play URL for media with upload ID: \(media.uploadID)") + return + } + completion(Result.success(videoURL)) + } + else { + guard let videoURL = metadata.originalURL else { + DDLogWarn("Failed getting original URL for media with upload ID: \(media.uploadID)") + return + } + completion(Result.success(videoURL)) + } + case .failure(let error): + completion(Result.failure(error)) + } + } + } + } + static func fetchVideoPressMetadata(for media: Media, in post: AbstractPost, completion: @escaping ( Result<(RemoteVideoPressVideo), Error> ) -> Void) { guard let videoPressID = media.videopressGUID else { DDLogError("Unable to find metadata for video with upload ID = \(media.uploadID).") From 2ca032d65df4ecc3af42e67d1e7e7ad1d428c140 Mon Sep 17 00:00:00 2001 From: Carlos Garcia Date: Wed, 8 Mar 2023 18:55:08 +0100 Subject: [PATCH 10/17] Use `fetchRemoteVideoURL` in Story and Post coordinator --- WordPress/Classes/Services/PostCoordinator.swift | 6 +++--- WordPress/Classes/Services/Stories/StoryMediaLoader.swift | 8 ++------ 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/WordPress/Classes/Services/PostCoordinator.swift b/WordPress/Classes/Services/PostCoordinator.swift index a24bad399e1b..98996cdd8f83 100644 --- a/WordPress/Classes/Services/PostCoordinator.swift +++ b/WordPress/Classes/Services/PostCoordinator.swift @@ -298,12 +298,12 @@ class PostCoordinator: NSObject { } switch media.mediaType { case .video: - EditorMediaUtility.fetchVideoPressMetadata(for: media, in: post) { (result) in + EditorMediaUtility.fetchRemoteVideoURL(for: media, in: post) { (result) in switch result { case .failure: handleSingleMediaFailure() - case .success(let metadata): - media.remoteURL = metadata.originalURL?.absoluteString + case .success(let videoURL): + media.remoteURL = videoURL.absoluteString successHandler() } } diff --git a/WordPress/Classes/Services/Stories/StoryMediaLoader.swift b/WordPress/Classes/Services/Stories/StoryMediaLoader.swift index 3bc75fdcabaa..fed8ab4fb7f8 100644 --- a/WordPress/Classes/Services/Stories/StoryMediaLoader.swift +++ b/WordPress/Classes/Services/Stories/StoryMediaLoader.swift @@ -69,13 +69,9 @@ class StoryMediaLoader { self.downloadTasks.append(task) } case .video: - EditorMediaUtility.fetchVideoPressMetadata(for: media, in: post) { [weak self] result in + EditorMediaUtility.fetchRemoteVideoURL(for: media, in: post, withToken: true) { [weak self] result in switch result { - case .success((let metadata)): - guard let videoURL = metadata.getURLWithToken(url: metadata.originalURL) else { - DDLogWarn("Failed getting video play URL for media with upload ID: \(media.uploadID)") - return - } + case .success((let videoURL)): self?.queue.async { self?.results[idx] = (CameraSegment.video(videoURL, nil), nil) } From e5c0d2fc89f691b3dab9ef5b516f2113852df71d Mon Sep 17 00:00:00 2001 From: Carlos Garcia Date: Wed, 8 Mar 2023 19:00:13 +0100 Subject: [PATCH 11/17] Update Gutenberg media observer to handle non-VideoPress videos --- .../GutenbergMediaInserterHelper.swift | 25 +++++++++++++------ 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/WordPress/Classes/ViewRelated/Gutenberg/GutenbergMediaInserterHelper.swift b/WordPress/Classes/ViewRelated/Gutenberg/GutenbergMediaInserterHelper.swift index dbeb5342fdae..339b9d329cd5 100644 --- a/WordPress/Classes/ViewRelated/Gutenberg/GutenbergMediaInserterHelper.swift +++ b/WordPress/Classes/ViewRelated/Gutenberg/GutenbergMediaInserterHelper.swift @@ -259,16 +259,25 @@ class GutenbergMediaInserterHelper: NSObject { } switch media.mediaType { case .video: - EditorMediaUtility.fetchVideoPressMetadata(for: media, in: post) { [weak self] (result) in - guard let strongSelf = self else { - return + // Fetch metadata when is a VideoPress video + if media.videopressGUID != nil { + EditorMediaUtility.fetchVideoPressMetadata(for: media, in: post) { [weak self] (result) in + guard let strongSelf = self else { + return + } + switch result { + case .failure: + strongSelf.gutenberg.mediaUploadUpdate(id: mediaUploadID, state: .failed, progress: 0, url: nil, serverID: nil) + case .success(let metadata): + strongSelf.gutenberg.mediaUploadUpdate(id: mediaUploadID, state: .succeeded, progress: 1, url: metadata.originalURL, serverID: mediaServerID, metadata: metadata.asDictionary()) + } } - switch result { - case .failure: - strongSelf.gutenberg.mediaUploadUpdate(id: mediaUploadID, state: .failed, progress: 0, url: nil, serverID: nil) - case .success(let metadata): - strongSelf.gutenberg.mediaUploadUpdate(id: mediaUploadID, state: .succeeded, progress: 1, url: metadata.originalURL, serverID: mediaServerID, metadata: metadata.asDictionary()) + } else { + guard let remoteURLString = media.remoteURL, let remoteURL = URL(string: remoteURLString) else { + gutenberg.mediaUploadUpdate(id: mediaUploadID, state: .failed, progress: 0, url: nil, serverID: nil) + return } + gutenberg.mediaUploadUpdate(id: mediaUploadID, state: .succeeded, progress: 1, url: remoteURL, serverID: mediaServerID) } default: gutenberg.mediaUploadUpdate(id: mediaUploadID, state: .succeeded, progress: 1, url: url, serverID: mediaServerID) From 2a0533a87628aa5244de109cc5286e3be95b6a0e Mon Sep 17 00:00:00 2001 From: Carlos Garcia Date: Thu, 9 Mar 2023 14:00:02 +0100 Subject: [PATCH 12/17] Update Podfile.lock with last version of WordPressKit --- Podfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Podfile.lock b/Podfile.lock index 4976f4a8bbe2..3678f6781b8f 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -796,7 +796,7 @@ CHECKOUT OPTIONS: :submodules: true :tag: v1.90.0 WordPressKit: - :commit: d3a49a14b63445dd5cbf990686676f5efa33b810 + :commit: 4ccbf10b82f5f7dc5e63d51c5cacafaf8198821b :git: https://github.com/wordpress-mobile/WordPressKit-iOS.git SPEC CHECKSUMS: From 5dce1f569c3c9ab5733e36859ffb5cbd5d5f5eed Mon Sep 17 00:00:00 2001 From: Carlos Garcia Date: Mon, 13 Mar 2023 12:48:17 +0100 Subject: [PATCH 13/17] Handle no token case when using `getURLWithToken` --- .../Classes/Categories/Media+WPMediaAsset.m | 9 ++++++++- .../AztecPostViewController.swift | 19 +++++++++++-------- .../Gutenberg/EditorMediaUtility.swift | 16 ++++++---------- 3 files changed, 25 insertions(+), 19 deletions(-) diff --git a/WordPress/Classes/Categories/Media+WPMediaAsset.m b/WordPress/Classes/Categories/Media+WPMediaAsset.m index da903af81c1c..18e89d8c33a2 100644 --- a/WordPress/Classes/Categories/Media+WPMediaAsset.m +++ b/WordPress/Classes/Categories/Media+WPMediaAsset.m @@ -49,7 +49,14 @@ - (WPMediaRequestID)videoAssetWithCompletionHandler:(WPMediaAssetBlock)completio MediaService *mediaService = [[MediaService alloc] initWithManagedObjectContext:mainContext]; [mediaService getMetadataFromVideoPressID: self.videopressGUID inBlog:self.blog success:^(RemoteVideoPressVideo *metadata) { // Let see if can create an asset with this url - AVURLAsset *asset = [AVURLAsset assetWithURL:[metadata getURLWithToken:metadata.originalURL]]; + NSURL *originalURL = metadata.originalURL; + if (!originalURL) { + NSString *errorMessage = NSLocalizedString(@"Selected media is unavailable.", @"Error message when user tries a no longer existent video media object."); + completionHandler(nil, [self errorWithMessage:errorMessage]); + return; + } + NSURL *videoURL = [metadata getURLWithToken:originalURL] ?: originalURL; + AVURLAsset *asset = [AVURLAsset assetWithURL:videoURL]; if (!asset) { NSString *errorMessage = NSLocalizedString(@"Selected media is unavailable.", @"Error message when user tries a no longer existent video media object."); completionHandler(nil, [self errorWithMessage:errorMessage]); diff --git a/WordPress/Classes/ViewRelated/Aztec/ViewControllers/AztecPostViewController.swift b/WordPress/Classes/ViewRelated/Aztec/ViewControllers/AztecPostViewController.swift index 91ac613639b9..5138c8f9d976 100644 --- a/WordPress/Classes/ViewRelated/Aztec/ViewControllers/AztecPostViewController.swift +++ b/WordPress/Classes/ViewRelated/Aztec/ViewControllers/AztecPostViewController.swift @@ -2846,9 +2846,11 @@ extension AztecPostViewController { // It's videoPress video so let's fetch the information for the video let mediaService = MediaService(managedObjectContext: ContextManager.sharedInstance().mainContext) mediaService.getMetadataFromVideoPressID(videoPressID, in: self.post.blog, success: { (metadata) in - videoAttachment.updateURL(metadata.getURLWithToken(url: metadata.originalURL)) - if let posterURL = metadata.getURLWithToken(url: metadata.posterURL) { - videoAttachment.posterURL = posterURL + if let originalURL = metadata.originalURL { + videoAttachment.updateURL(metadata.getURLWithToken(url: originalURL) ?? originalURL) + } + if let posterURL = metadata.posterURL { + videoAttachment.posterURL = metadata.getURLWithToken(url: posterURL) ?? posterURL } self.richTextView.refresh(videoAttachment) }, failure: { (error) in @@ -3025,16 +3027,17 @@ extension AztecPostViewController { guard let `self` = self else { return } - guard let videoURL = metadata.getURLWithToken(url: metadata.originalURL) else { + guard let originalURL = metadata.originalURL else { self.displayUnableToPlayVideoAlert() return } - videoAttachment.updateURL(videoURL) - if let posterURL = metadata.getURLWithToken(url: metadata.posterURL) { - videoAttachment.posterURL = posterURL + let newVideoURL = metadata.getURLWithToken(url: originalURL) ?? originalURL + videoAttachment.updateURL(newVideoURL) + if let posterURL = metadata.posterURL { + videoAttachment.posterURL = metadata.getURLWithToken(url: posterURL) ?? posterURL } self.richTextView.refresh(videoAttachment) - self.displayVideoPlayer(for: videoURL) + self.displayVideoPlayer(for: newVideoURL) }, failure: { [weak self] (error) in self?.displayUnableToPlayVideoAlert() DDLogError("Unable to find information for VideoPress video with ID = \(videoPressID). Details: \(error.localizedDescription)") diff --git a/WordPress/Classes/ViewRelated/Gutenberg/EditorMediaUtility.swift b/WordPress/Classes/ViewRelated/Gutenberg/EditorMediaUtility.swift index 34e03a0fdecb..44010493dfbb 100644 --- a/WordPress/Classes/ViewRelated/Gutenberg/EditorMediaUtility.swift +++ b/WordPress/Classes/ViewRelated/Gutenberg/EditorMediaUtility.swift @@ -161,19 +161,15 @@ class EditorMediaUtility { fetchVideoPressMetadata(for: media, in: post) { result in switch result { case .success((let metadata)): + guard let originalURL = metadata.originalURL else { + DDLogWarn("Failed getting original URL for media with upload ID: \(media.uploadID)") + return + } if withToken { - guard let videoURL = metadata.getURLWithToken(url: metadata.originalURL) else { - DDLogWarn("Failed getting video play URL for media with upload ID: \(media.uploadID)") - return - } - completion(Result.success(videoURL)) + completion(Result.success(metadata.getURLWithToken(url: originalURL) ?? originalURL)) } else { - guard let videoURL = metadata.originalURL else { - DDLogWarn("Failed getting original URL for media with upload ID: \(media.uploadID)") - return - } - completion(Result.success(videoURL)) + completion(Result.success(originalURL)) } case .failure(let error): completion(Result.failure(error)) From e8204d6360e4446c4fad25458522ff0d9dc3e437 Mon Sep 17 00:00:00 2001 From: Carlos Garcia Date: Mon, 13 Mar 2023 13:17:10 +0100 Subject: [PATCH 14/17] Point `WordPressAuthenticator` to branch --- Podfile | 4 ++-- Podfile.lock | 25 +++++++++++++++---------- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/Podfile b/Podfile index c4d1b51463d1..714867e611b4 100644 --- a/Podfile +++ b/Podfile @@ -232,8 +232,8 @@ abstract_target 'Apps' do pod 'Gridicons', '~> 1.1.0' - pod 'WordPressAuthenticator', '~> 5.1-beta' - # pod 'WordPressAuthenticator', git: 'https://github.com/wordpress-mobile/WordPressAuthenticator-iOS.git', branch: 'trunk' + # pod 'WordPressAuthenticator', '~> 5.1-beta' + pod 'WordPressAuthenticator', git: 'https://github.com/wordpress-mobile/WordPressAuthenticator-iOS.git', branch: 'bump-wpkit-dependency-7.0' # pod 'WordPressAuthenticator', git: 'https://github.com/wordpress-mobile/WordPressAuthenticator-iOS.git', commit: '' # pod 'WordPressAuthenticator', path: '../WordPressAuthenticator-iOS' diff --git a/Podfile.lock b/Podfile.lock index 3678f6781b8f..38fb4b4f94de 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -503,15 +503,15 @@ PODS: - WordPress-Aztec-iOS (1.19.8) - WordPress-Editor-iOS (1.19.8): - WordPress-Aztec-iOS (= 1.19.8) - - WordPressAuthenticator (5.5.0): + - WordPressAuthenticator (5.6.0): - GoogleSignIn (~> 6.0.1) - Gridicons (~> 1.0) - "NSURL+IDN (= 0.4)" - SVProgressHUD (~> 2.2.5) - - WordPressKit (~> 6.0-beta) - - WordPressShared (~> 2.0-beta) + - WordPressKit (~> 7.0-beta) + - WordPressShared (~> 2.1-beta) - WordPressUI (~> 1.7-beta) - - WordPressKit (6.3.0-beta.1): + - WordPressKit (7.0.0-beta.1): - Alamofire (~> 4.8.0) - NSObject-SafeExpectations (~> 0.0.4) - UIDeviceIdentifier (~> 2.0) @@ -611,7 +611,7 @@ DEPENDENCIES: - SVProgressHUD (= 2.2.5) - SwiftLint (~> 0.50) - WordPress-Editor-iOS (~> 1.19.8) - - WordPressAuthenticator (~> 5.1-beta) + - WordPressAuthenticator (from `https://github.com/wordpress-mobile/WordPressAuthenticator-iOS.git`, branch `bump-wpkit-dependency-7.0`) - WordPressKit (from `https://github.com/wordpress-mobile/WordPressKit-iOS.git`, branch `add/media-videopress-token`) - WordPressShared (~> 2.0-beta) - WordPressUI (~> 1.12.5) @@ -622,7 +622,6 @@ DEPENDENCIES: SPEC REPOS: https://github.com/wordpress-mobile/cocoapods-specs.git: - - WordPressAuthenticator - WordPressShared trunk: - Alamofire @@ -777,6 +776,9 @@ EXTERNAL SOURCES: :git: https://github.com/wordpress-mobile/gutenberg-mobile.git :submodules: true :tag: v1.90.0 + WordPressAuthenticator: + :branch: bump-wpkit-dependency-7.0 + :git: https://github.com/wordpress-mobile/WordPressAuthenticator-iOS.git WordPressKit: :branch: add/media-videopress-token :git: https://github.com/wordpress-mobile/WordPressKit-iOS.git @@ -795,8 +797,11 @@ CHECKOUT OPTIONS: :git: https://github.com/wordpress-mobile/gutenberg-mobile.git :submodules: true :tag: v1.90.0 + WordPressAuthenticator: + :commit: e98a2d3c4eff3472dd18b29b8dc49e4a92698681 + :git: https://github.com/wordpress-mobile/WordPressAuthenticator-iOS.git WordPressKit: - :commit: 4ccbf10b82f5f7dc5e63d51c5cacafaf8198821b + :commit: 7946aa5616737c2fac6be14d843419a2f01afba8 :git: https://github.com/wordpress-mobile/WordPressKit-iOS.git SPEC CHECKSUMS: @@ -885,8 +890,8 @@ SPEC CHECKSUMS: UIDeviceIdentifier: e6a801d25f4f178de5bdf475ffe29050d0148176 WordPress-Aztec-iOS: 7d11d598f14c82c727c08b56bd35fbeb7dafb504 WordPress-Editor-iOS: 9eb9f12f21a5209cb837908d81ffe1e31cb27345 - WordPressAuthenticator: 60611898815b218622f98d2c024d4eeae53dec1c - WordPressKit: d9707b6a9d91cb96f6de4411411ea2b0852b004c + WordPressAuthenticator: 345994ee66093283ccca7e2c279c87957d9a1ec8 + WordPressKit: d5bff8713aa7c0092ff6e2a58623e46a99fc897c WordPressShared: 8e59bc8cec256f54a7c4cc6c94911adc2a9a65d2 WordPressUI: c5be816f6c7b3392224ac21de9e521e89fa108ac WPMediaPicker: 0d45dfd7b3c5651c5236ffd48c1b0b2f60a2d5d2 @@ -901,6 +906,6 @@ SPEC CHECKSUMS: ZendeskSupportSDK: 3a8e508ab1d9dd22dc038df6c694466414e037ba ZIPFoundation: ae5b4b813d216d3bf0a148773267fff14bd51d37 -PODFILE CHECKSUM: 9c351036cdc97233aeec93236e2fe27109b390db +PODFILE CHECKSUM: 4b4887e6483a3725cb44c605ca6939a644715e50 COCOAPODS: 1.11.3 From e8d43dcff862a469d8ffb34d3364a72cb4bea765 Mon Sep 17 00:00:00 2001 From: Carlos Garcia Date: Thu, 16 Mar 2023 11:12:48 +0100 Subject: [PATCH 15/17] Call completion handler if `originalURL` is not defined after fetching metadata --- .../Classes/ViewRelated/Gutenberg/EditorMediaUtility.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/WordPress/Classes/ViewRelated/Gutenberg/EditorMediaUtility.swift b/WordPress/Classes/ViewRelated/Gutenberg/EditorMediaUtility.swift index 44010493dfbb..857407e77de5 100644 --- a/WordPress/Classes/ViewRelated/Gutenberg/EditorMediaUtility.swift +++ b/WordPress/Classes/ViewRelated/Gutenberg/EditorMediaUtility.swift @@ -162,7 +162,8 @@ class EditorMediaUtility { switch result { case .success((let metadata)): guard let originalURL = metadata.originalURL else { - DDLogWarn("Failed getting original URL for media with upload ID: \(media.uploadID)") + DDLogError("Failed getting original URL for media with upload ID: \(media.uploadID)") + completion(Result.failure(NSError())) return } if withToken { From cb453304a4d8d6c680a5a1b91a05edc807d08a1d Mon Sep 17 00:00:00 2001 From: Carlos Garcia Date: Thu, 16 Mar 2023 11:14:35 +0100 Subject: [PATCH 16/17] Use generic error on failure result --- .../Classes/ViewRelated/Gutenberg/EditorMediaUtility.swift | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/WordPress/Classes/ViewRelated/Gutenberg/EditorMediaUtility.swift b/WordPress/Classes/ViewRelated/Gutenberg/EditorMediaUtility.swift index 857407e77de5..f3614f79f700 100644 --- a/WordPress/Classes/ViewRelated/Gutenberg/EditorMediaUtility.swift +++ b/WordPress/Classes/ViewRelated/Gutenberg/EditorMediaUtility.swift @@ -53,6 +53,7 @@ final class AuthenticatedImageDownload: AsyncOperation { } class EditorMediaUtility { + private static let InternalInconsistencyError = NSError(domain: NSExceptionName.internalInconsistencyException.rawValue, code: 0) private struct Constants { static let placeholderDocumentLink = URL(string: "documentUploading://")! @@ -152,7 +153,7 @@ class EditorMediaUtility { if media.videopressGUID == nil { guard let videoURLString = media.remoteURL, let videoURL = URL(string: videoURLString) else { DDLogError("Unable to find remote video URL for video with upload ID = \(media.uploadID).") - completion(Result.failure(NSError())) + completion(Result.failure(InternalInconsistencyError)) return } completion(Result.success(videoURL)) @@ -163,7 +164,7 @@ class EditorMediaUtility { case .success((let metadata)): guard let originalURL = metadata.originalURL else { DDLogError("Failed getting original URL for media with upload ID: \(media.uploadID)") - completion(Result.failure(NSError())) + completion(Result.failure(InternalInconsistencyError)) return } if withToken { @@ -182,7 +183,7 @@ class EditorMediaUtility { static func fetchVideoPressMetadata(for media: Media, in post: AbstractPost, completion: @escaping ( Result<(RemoteVideoPressVideo), Error> ) -> Void) { guard let videoPressID = media.videopressGUID else { DDLogError("Unable to find metadata for video with upload ID = \(media.uploadID).") - completion(Result.failure(NSError())) + completion(Result.failure(InternalInconsistencyError)) return } From fc6ff81c44b442e4b1a90ddc50be7c3a4159f973 Mon Sep 17 00:00:00 2001 From: Carlos Garcia Date: Fri, 17 Mar 2023 20:32:47 +0100 Subject: [PATCH 17/17] Update `WordPressKit` and `WordPressAuthenticator` pods to beta version --- Podfile | 8 ++++---- Podfile.lock | 24 +++++++----------------- 2 files changed, 11 insertions(+), 21 deletions(-) diff --git a/Podfile b/Podfile index 714867e611b4..24107ce907b8 100644 --- a/Podfile +++ b/Podfile @@ -47,8 +47,8 @@ def wordpress_ui end def wordpress_kit - # pod 'WordPressKit', '~> 6.2.0-beta' - pod 'WordPressKit', git: 'https://github.com/wordpress-mobile/WordPressKit-iOS.git', branch: 'add/media-videopress-token' + pod 'WordPressKit', '~> 7.0.0-beta' + # pod 'WordPressKit', git: 'https://github.com/wordpress-mobile/WordPressKit-iOS.git', branch: 'trunk' # pod 'WordPressKit', git: 'https://github.com/wordpress-mobile/WordPressKit-iOS.git', tag: '' # pod 'WordPressKit', git: 'https://github.com/wordpress-mobile/WordPressKit-iOS.git', commit: '' # pod 'WordPressKit', path: '../WordPressKit-iOS' @@ -232,8 +232,8 @@ abstract_target 'Apps' do pod 'Gridicons', '~> 1.1.0' - # pod 'WordPressAuthenticator', '~> 5.1-beta' - pod 'WordPressAuthenticator', git: 'https://github.com/wordpress-mobile/WordPressAuthenticator-iOS.git', branch: 'bump-wpkit-dependency-7.0' + pod 'WordPressAuthenticator', '~> 5.6-beta' + # pod 'WordPressAuthenticator', git: 'https://github.com/wordpress-mobile/WordPressAuthenticator-iOS.git', branch: 'trunk' # pod 'WordPressAuthenticator', git: 'https://github.com/wordpress-mobile/WordPressAuthenticator-iOS.git', commit: '' # pod 'WordPressAuthenticator', path: '../WordPressAuthenticator-iOS' diff --git a/Podfile.lock b/Podfile.lock index 38fb4b4f94de..0be5695c36ec 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -503,7 +503,7 @@ PODS: - WordPress-Aztec-iOS (1.19.8) - WordPress-Editor-iOS (1.19.8): - WordPress-Aztec-iOS (= 1.19.8) - - WordPressAuthenticator (5.6.0): + - WordPressAuthenticator (5.6.0-beta.1): - GoogleSignIn (~> 6.0.1) - Gridicons (~> 1.0) - "NSURL+IDN (= 0.4)" @@ -611,8 +611,8 @@ DEPENDENCIES: - SVProgressHUD (= 2.2.5) - SwiftLint (~> 0.50) - WordPress-Editor-iOS (~> 1.19.8) - - WordPressAuthenticator (from `https://github.com/wordpress-mobile/WordPressAuthenticator-iOS.git`, branch `bump-wpkit-dependency-7.0`) - - WordPressKit (from `https://github.com/wordpress-mobile/WordPressKit-iOS.git`, branch `add/media-videopress-token`) + - WordPressAuthenticator (~> 5.6-beta) + - WordPressKit (~> 7.0.0-beta) - WordPressShared (~> 2.0-beta) - WordPressUI (~> 1.12.5) - WPMediaPicker (~> 1.8.7) @@ -622,6 +622,7 @@ DEPENDENCIES: SPEC REPOS: https://github.com/wordpress-mobile/cocoapods-specs.git: + - WordPressAuthenticator - WordPressShared trunk: - Alamofire @@ -660,6 +661,7 @@ SPEC REPOS: - UIDeviceIdentifier - WordPress-Aztec-iOS - WordPress-Editor-iOS + - WordPressKit - WordPressUI - WPMediaPicker - wpxmlrpc @@ -776,12 +778,6 @@ EXTERNAL SOURCES: :git: https://github.com/wordpress-mobile/gutenberg-mobile.git :submodules: true :tag: v1.90.0 - WordPressAuthenticator: - :branch: bump-wpkit-dependency-7.0 - :git: https://github.com/wordpress-mobile/WordPressAuthenticator-iOS.git - WordPressKit: - :branch: add/media-videopress-token - :git: https://github.com/wordpress-mobile/WordPressKit-iOS.git Yoga: :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.90.0/third-party-podspecs/Yoga.podspec.json @@ -797,12 +793,6 @@ CHECKOUT OPTIONS: :git: https://github.com/wordpress-mobile/gutenberg-mobile.git :submodules: true :tag: v1.90.0 - WordPressAuthenticator: - :commit: e98a2d3c4eff3472dd18b29b8dc49e4a92698681 - :git: https://github.com/wordpress-mobile/WordPressAuthenticator-iOS.git - WordPressKit: - :commit: 7946aa5616737c2fac6be14d843419a2f01afba8 - :git: https://github.com/wordpress-mobile/WordPressKit-iOS.git SPEC CHECKSUMS: Alamofire: 3ec537f71edc9804815215393ae2b1a8ea33a844 @@ -890,7 +880,7 @@ SPEC CHECKSUMS: UIDeviceIdentifier: e6a801d25f4f178de5bdf475ffe29050d0148176 WordPress-Aztec-iOS: 7d11d598f14c82c727c08b56bd35fbeb7dafb504 WordPress-Editor-iOS: 9eb9f12f21a5209cb837908d81ffe1e31cb27345 - WordPressAuthenticator: 345994ee66093283ccca7e2c279c87957d9a1ec8 + WordPressAuthenticator: de6f43d5fb654dadbd0456434088c47b6f6e4e48 WordPressKit: d5bff8713aa7c0092ff6e2a58623e46a99fc897c WordPressShared: 8e59bc8cec256f54a7c4cc6c94911adc2a9a65d2 WordPressUI: c5be816f6c7b3392224ac21de9e521e89fa108ac @@ -906,6 +896,6 @@ SPEC CHECKSUMS: ZendeskSupportSDK: 3a8e508ab1d9dd22dc038df6c694466414e037ba ZIPFoundation: ae5b4b813d216d3bf0a148773267fff14bd51d37 -PODFILE CHECKSUM: 4b4887e6483a3725cb44c605ca6939a644715e50 +PODFILE CHECKSUM: fc0fbf045d06de8b641750e49d549f460d566c9a COCOAPODS: 1.11.3