From f1281effe9390b0a5a78ab956c8be5318971b465 Mon Sep 17 00:00:00 2001 From: Pinar Olguc Date: Tue, 23 Jan 2024 12:57:37 +0300 Subject: [PATCH 01/43] Add Gravatar and point it to local --- Podfile | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Podfile b/Podfile index 69844148055c..75190c4e8844 100644 --- a/Podfile +++ b/Podfile @@ -49,6 +49,10 @@ def wordpress_ui # pod 'WordPressUI', path: '../WordPressUI-iOS' end +def gravatar + pod 'Gravatar', path: '../Gravatar-SDK-iOS', :testspecs => ['Tests'] +end + def wordpress_kit pod 'WordPressKit', '~> 11.0' # pod 'WordPressKit', git: 'https://github.com/wordpress-mobile/WordPressKit-iOS.git', commit: '' @@ -129,6 +133,7 @@ abstract_target 'Apps' do wordpress_kit wordpress_shared kanvas + gravatar # Production From 875a946d26b44002fc68b0848e0e33804318dc73 Mon Sep 17 00:00:00 2001 From: Pinar Olguc Date: Tue, 23 Jan 2024 12:58:11 +0300 Subject: [PATCH 02/43] Point WordPressUI to local folder --- Podfile | 4 ++-- Podfile.lock | 19 ++++++++++++++----- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/Podfile b/Podfile index 75190c4e8844..5181bc7c0849 100644 --- a/Podfile +++ b/Podfile @@ -42,11 +42,11 @@ def aztec end def wordpress_ui - pod 'WordPressUI', '~> 1.15' + # pod 'WordPressUI', '~> 1.15' # pod 'WordPressUI', git: 'https://github.com/wordpress-mobile/WordPressUI-iOS', tag: '' # pod 'WordPressUI', git: 'https://github.com/wordpress-mobile/WordPressUI-iOS', branch: '' # pod 'WordPressUI', git: 'https://github.com/wordpress-mobile/WordPressUI-iOS', commit: '' - # pod 'WordPressUI', path: '../WordPressUI-iOS' + pod 'WordPressUI', path: '../WordPressUI-iOS' end def gravatar diff --git a/Podfile.lock b/Podfile.lock index df5509caf529..67db5bd4ab00 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -25,6 +25,8 @@ PODS: - Down (0.6.6) - FSInteractiveMap (0.1.0) - Gifu (3.3.1) + - Gravatar (0.1.0) + - Gravatar/Tests (0.1.0) - Gridicons (1.2.0) - Gutenberg (1.111.0) - JTAppleCalendar (8.0.5) @@ -77,7 +79,8 @@ PODS: - WordPressShared (~> 2.0-beta) - wpxmlrpc (~> 0.10) - WordPressShared (2.3.0) - - WordPressUI (1.15.0) + - WordPressUI (1.15.0): + - Gravatar (~> 0.1.0) - wpxmlrpc (0.10.0) - ZendeskCommonUISDK (6.1.2) - ZendeskCoreSDK (2.5.1) @@ -105,6 +108,8 @@ DEPENDENCIES: - Down (~> 0.6.6) - FSInteractiveMap (from `https://github.com/wordpress-mobile/FSInteractiveMap.git`, tag `0.2.0`) - Gifu (= 3.3.1) + - Gravatar (from `../Gravatar-SDK-iOS`) + - Gravatar/Tests (from `../Gravatar-SDK-iOS`) - Gridicons (~> 1.2) - Gutenberg (from `https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-v1.111.0.podspec`) - JTAppleCalendar (~> 8.0.5) @@ -122,7 +127,7 @@ DEPENDENCIES: - WordPressAuthenticator (~> 9.0) - WordPressKit (~> 11.0) - WordPressShared (~> 2.3) - - WordPressUI (~> 1.15) + - WordPressUI (from `../WordPressUI-iOS`) - ZendeskSupportSDK (= 5.3.0) - ZIPFoundation (~> 0.9.8) @@ -159,7 +164,6 @@ SPEC REPOS: - UIDeviceIdentifier - WordPress-Aztec-iOS - WordPress-Editor-iOS - - WordPressUI - wpxmlrpc - ZendeskCommonUISDK - ZendeskCoreSDK @@ -174,8 +178,12 @@ EXTERNAL SOURCES: FSInteractiveMap: :git: https://github.com/wordpress-mobile/FSInteractiveMap.git :tag: 0.2.0 + Gravatar: + :path: "../Gravatar-SDK-iOS" Gutenberg: :podspec: https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-v1.111.0.podspec + WordPressUI: + :path: "../WordPressUI-iOS" CHECKOUT OPTIONS: FSInteractiveMap: @@ -193,6 +201,7 @@ SPEC CHECKSUMS: Down: 71bf4af3c04fa093e65dffa25c4b64fa61287373 FSInteractiveMap: a396f610f48b76cb540baa87139d056429abda86 Gifu: 416d4e38c4c2fed012f019e0a1d3ffcb58e5b842 + Gravatar: f640ab5703eb4496304d2a767629876bf8c03091 Gridicons: 4455b9f366960121430e45997e32112ae49ffe1d Gutenberg: c222e0a909a508ecb1cc130278c17c0193cb64fc JTAppleCalendar: 16c6501b22cb27520372c28b0a2e0b12c8d0cd73 @@ -215,7 +224,7 @@ SPEC CHECKSUMS: WordPressAuthenticator: e3c18f1b63222742a565fea3faf1a55a144ce8c4 WordPressKit: 57712035a44595cf49b0c9f0ad5b8b899a8cbe6a WordPressShared: cad7777b283d3ce2752f283df587342a581cd49b - WordPressUI: a491454affda3b0fb812812e637dc5e8f8f6bd06 + WordPressUI: 01b8d3169ecc7ed240c17555dd4d9a28f0dd04ee wpxmlrpc: 68db063041e85d186db21f674adf08d9c70627fd ZendeskCommonUISDK: 5f0a83f412e07ae23701f18c412fe783b3249ef5 ZendeskCoreSDK: 19a18e5ef2edcb18f4dbc0ea0d12bd31f515712a @@ -226,6 +235,6 @@ SPEC CHECKSUMS: ZendeskSupportSDK: 3a8e508ab1d9dd22dc038df6c694466414e037ba ZIPFoundation: d170fa8e270b2a32bef9dcdcabff5b8f1a5deced -PODFILE CHECKSUM: 9331d9b30992bbe14cbb7d537bbad3042f3ff457 +PODFILE CHECKSUM: 46f264fb566b65e488403ea3e738ed6fbac04d95 COCOAPODS: 1.14.2 From a2cc105b011a8e49db5a0b75d8a2cec2c3b9c6d8 Mon Sep 17 00:00:00 2001 From: Pinar Olguc Date: Wed, 14 Feb 2024 16:29:57 +0300 Subject: [PATCH 03/43] Use GravatarURL instead of Gravatar (#22600) * Use GravatarURL instead of Gravatar * Use GravatarURL in ListTableViewCell --------- Co-authored-by: Pinar Olguc --- Podfile.lock | 4 ++-- WordPress/Classes/Models/ManagedPerson.swift | 3 ++- .../Classes/Utility/Media/ImageDownloader+Gravatar.swift | 3 ++- .../Blog/Blog Details/BlogDetailsViewController+Me.swift | 3 ++- .../Classes/ViewRelated/Blog/My Site/NoSitesViewModel.swift | 3 ++- .../Classes/ViewRelated/System/WPTabBarController+MeTab.swift | 3 ++- .../Classes/ViewRelated/Views/List/ListTableViewCell.swift | 3 ++- 7 files changed, 14 insertions(+), 8 deletions(-) diff --git a/Podfile.lock b/Podfile.lock index 1664e6b0a061..b9a9e052cc8f 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -79,7 +79,7 @@ PODS: - WordPressShared (~> 2.0-beta) - wpxmlrpc (~> 0.10) - WordPressShared (2.3.0) - - WordPressUI (1.15.0): + - WordPressUI (1.15.1): - Gravatar (~> 0.1.0) - wpxmlrpc (0.10.0) - ZendeskCommonUISDK (6.1.2) @@ -234,7 +234,7 @@ SPEC CHECKSUMS: WordPressAuthenticator: ba69878bfa1368636e92d29fcfb5bd1e0a11a3ef WordPressKit: 7e5250e9e28fcdca787f8d313a7dc89a8571d774 WordPressShared: cad7777b283d3ce2752f283df587342a581cd49b - WordPressUI: 01b8d3169ecc7ed240c17555dd4d9a28f0dd04ee + WordPressUI: 88c808b8a6ed7002fea945a3af9147a9e093a413 wpxmlrpc: 68db063041e85d186db21f674adf08d9c70627fd ZendeskCommonUISDK: 5f0a83f412e07ae23701f18c412fe783b3249ef5 ZendeskCoreSDK: 19a18e5ef2edcb18f4dbc0ea0d12bd31f515712a diff --git a/WordPress/Classes/Models/ManagedPerson.swift b/WordPress/Classes/Models/ManagedPerson.swift index 549c7410eee0..e65461ea2654 100644 --- a/WordPress/Classes/Models/ManagedPerson.swift +++ b/WordPress/Classes/Models/ManagedPerson.swift @@ -2,6 +2,7 @@ import Foundation import CoreData import WordPressKit import WordPressUI +import Gravatar public typealias Person = RemotePerson @@ -10,7 +11,7 @@ public typealias Person = RemotePerson class ManagedPerson: NSManagedObject { func updateWith(_ person: T) { - let canonicalAvatarURL = person.avatarURL.flatMap { Gravatar($0)?.canonicalURL } + let canonicalAvatarURL = person.avatarURL.flatMap { GravatarURL($0)?.canonicalURL } avatarURL = canonicalAvatarURL?.absoluteString displayName = person.displayName diff --git a/WordPress/Classes/Utility/Media/ImageDownloader+Gravatar.swift b/WordPress/Classes/Utility/Media/ImageDownloader+Gravatar.swift index f750fc743d70..424c4eb5aa8c 100644 --- a/WordPress/Classes/Utility/Media/ImageDownloader+Gravatar.swift +++ b/WordPress/Classes/Utility/Media/ImageDownloader+Gravatar.swift @@ -1,11 +1,12 @@ import Foundation import WordPressUI +import Gravatar extension ImageDownloader { nonisolated func downloadGravatarImage(with email: String, completion: @escaping (UIImage?) -> Void) { - guard let url = Gravatar.gravatarUrl(for: email) else { + guard let url = GravatarURL.url(for: email) else { completion(nil) return } diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Details/BlogDetailsViewController+Me.swift b/WordPress/Classes/ViewRelated/Blog/Blog Details/BlogDetailsViewController+Me.swift index ee689b239a1e..b69dbc475941 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog Details/BlogDetailsViewController+Me.swift +++ b/WordPress/Classes/ViewRelated/Blog/Blog Details/BlogDetailsViewController+Me.swift @@ -1,5 +1,6 @@ import Foundation import WordPressUI +import Gravatar extension BlogDetailsViewController { @@ -27,7 +28,7 @@ extension BlogDetailsViewController { guard let userInfo = notification.userInfo, let email = userInfo["email"] as? String, let image = userInfo["image"] as? UIImage, - let url = Gravatar.gravatarUrl(for: email), + let url = GravatarURL.url(for: email), let gravatarIcon = image.gravatarIcon(size: Metrics.iconSize) else { return } diff --git a/WordPress/Classes/ViewRelated/Blog/My Site/NoSitesViewModel.swift b/WordPress/Classes/ViewRelated/Blog/My Site/NoSitesViewModel.swift index 303a7a828237..895bc356f7f7 100644 --- a/WordPress/Classes/ViewRelated/Blog/My Site/NoSitesViewModel.swift +++ b/WordPress/Classes/ViewRelated/Blog/My Site/NoSitesViewModel.swift @@ -1,5 +1,6 @@ import Foundation import WordPressUI +import Gravatar struct NoSitesViewModel { @@ -16,7 +17,7 @@ struct NoSitesViewModel { self.appUIType = appUIType self.displayName = account?.displayName ?? "-" if let email = account?.email { - self.gravatarURL = Gravatar.gravatarUrl(for: email) + self.gravatarURL = GravatarURL.url(for: email) } else { self.gravatarURL = nil } diff --git a/WordPress/Classes/ViewRelated/System/WPTabBarController+MeTab.swift b/WordPress/Classes/ViewRelated/System/WPTabBarController+MeTab.swift index 13d10c3aae1a..8775a65d91c1 100644 --- a/WordPress/Classes/ViewRelated/System/WPTabBarController+MeTab.swift +++ b/WordPress/Classes/ViewRelated/System/WPTabBarController+MeTab.swift @@ -1,5 +1,6 @@ import Foundation import WordPressUI +import Gravatar extension WPTabBarController { @@ -41,7 +42,7 @@ extension WPTabBarController { guard let userInfo = notification.userInfo, let email = userInfo["email"] as? String, let image = userInfo["image"] as? UIImage, - let url = Gravatar.gravatarUrl(for: email) else { + let url = GravatarURL.url(for: email) else { return } diff --git a/WordPress/Classes/ViewRelated/Views/List/ListTableViewCell.swift b/WordPress/Classes/ViewRelated/Views/List/ListTableViewCell.swift index 526fc31acb43..0fca0b6ab46a 100644 --- a/WordPress/Classes/ViewRelated/Views/List/ListTableViewCell.swift +++ b/WordPress/Classes/ViewRelated/Views/List/ListTableViewCell.swift @@ -1,4 +1,5 @@ import WordPressUI +import Gravatar /// Table view cell for the List component. /// @@ -84,7 +85,7 @@ class ListTableViewCell: UITableViewCell, NibReusable { /// If the URL does not contain any image, the default placeholder image will be displayed. /// - Parameter url: The URL containing the image. func configureImage(with url: URL?) { - if let someURL = url, let gravatar = Gravatar(someURL) { + if let someURL = url, let gravatar = GravatarURL(someURL) { avatarView.downloadGravatar(gravatar, placeholder: placeholderImage, animate: true) return } From 74fdffc789fcb8191bf5042ce4ae3c734b36941a Mon Sep 17 00:00:00 2001 From: Pinar Olguc Date: Fri, 16 Feb 2024 15:50:49 +0300 Subject: [PATCH 04/43] Use GravatarURL in more places (#22624) Co-authored-by: Pinar Olguc --- .../ViewRelated/Comments/CommentContentTableViewCell.swift | 3 ++- .../Notifications/Views/NoteBlockCommentTableViewCell.swift | 3 ++- .../Notifications/Views/NoteBlockHeaderTableViewCell.swift | 3 ++- .../Notifications/Views/NoteBlockUserTableViewCell.swift | 3 ++- WordPress/Classes/ViewRelated/People/PeopleCell.swift | 3 ++- .../Classes/ViewRelated/People/PersonViewController.swift | 3 ++- .../Post/Revisions/Views/Cell/RevisionsTableViewCell.swift | 3 ++- .../Sources/Views/NotificationContentView.swift | 3 ++- 8 files changed, 16 insertions(+), 8 deletions(-) diff --git a/WordPress/Classes/ViewRelated/Comments/CommentContentTableViewCell.swift b/WordPress/Classes/ViewRelated/Comments/CommentContentTableViewCell.swift index 481190555ecf..0dc0d0ceca3b 100644 --- a/WordPress/Classes/ViewRelated/Comments/CommentContentTableViewCell.swift +++ b/WordPress/Classes/ViewRelated/Comments/CommentContentTableViewCell.swift @@ -1,5 +1,6 @@ import UIKit import WordPressUI +import Gravatar class CommentContentTableViewCell: UITableViewCell, NibReusable { @@ -357,7 +358,7 @@ private extension CommentContentTableViewCell { /// If the URL does not contain any image, the default placeholder image will be displayed. /// - Parameter url: The URL containing the image. func configureImage(with url: URL?) { - if let someURL = url, let gravatar = Gravatar(someURL) { + if let someURL = url, let gravatar = GravatarURL(someURL) { avatarImageView.downloadGravatar(gravatar, placeholder: Style.placeholderImage, animate: true) return } diff --git a/WordPress/Classes/ViewRelated/Notifications/Views/NoteBlockCommentTableViewCell.swift b/WordPress/Classes/ViewRelated/Notifications/Views/NoteBlockCommentTableViewCell.swift index d2840dff708b..8f1201c14304 100644 --- a/WordPress/Classes/ViewRelated/Notifications/Views/NoteBlockCommentTableViewCell.swift +++ b/WordPress/Classes/ViewRelated/Notifications/Views/NoteBlockCommentTableViewCell.swift @@ -1,6 +1,7 @@ import Foundation import WordPressShared.WPStyleGuide import WordPressUI +import Gravatar // MARK: - NoteBlockCommentTableViewCell Renders a Comment Block Onscreen // @@ -99,7 +100,7 @@ class NoteBlockCommentTableViewCell: NoteBlockTextTableViewCell { // MARK: - Public Methods @objc func downloadGravatarWithURL(_ url: URL?) { - let gravatar = url.flatMap { Gravatar($0) } + let gravatar = url.flatMap { GravatarURL($0) } gravatarImageView.downloadGravatar(gravatar, placeholder: placeholderImage, animate: true) } diff --git a/WordPress/Classes/ViewRelated/Notifications/Views/NoteBlockHeaderTableViewCell.swift b/WordPress/Classes/ViewRelated/Notifications/Views/NoteBlockHeaderTableViewCell.swift index 9e2c7c0d18ed..12ceca15d5e4 100644 --- a/WordPress/Classes/ViewRelated/Notifications/Views/NoteBlockHeaderTableViewCell.swift +++ b/WordPress/Classes/ViewRelated/Notifications/Views/NoteBlockHeaderTableViewCell.swift @@ -1,6 +1,7 @@ import Foundation import WordPressShared.WPStyleGuide import WordPressUI +import Gravatar // MARK: - NoteBlockHeaderTableViewCell // @@ -67,7 +68,7 @@ class NoteBlockHeaderTableViewCell: NoteBlockTableViewCell { return } - if let gravatar = Gravatar(url) { + if let gravatar = GravatarURL(url) { authorAvatarImageView.downloadGravatar(gravatar, placeholder: .gravatarPlaceholderImage, animate: true) } else { authorAvatarImageView.downloadSiteIcon(at: url.absoluteString) diff --git a/WordPress/Classes/ViewRelated/Notifications/Views/NoteBlockUserTableViewCell.swift b/WordPress/Classes/ViewRelated/Notifications/Views/NoteBlockUserTableViewCell.swift index e561f225ddd4..517af85ef373 100644 --- a/WordPress/Classes/ViewRelated/Notifications/Views/NoteBlockUserTableViewCell.swift +++ b/WordPress/Classes/ViewRelated/Notifications/Views/NoteBlockUserTableViewCell.swift @@ -1,6 +1,7 @@ import Foundation import WordPressShared import WordPressUI +import Gravatar class NoteBlockUserTableViewCell: NoteBlockTableViewCell { typealias EventHandler = (() -> Void) @@ -54,7 +55,7 @@ class NoteBlockUserTableViewCell: NoteBlockTableViewCell { return } - let gravatar = url.flatMap { Gravatar($0) } + let gravatar = url.flatMap { GravatarURL($0) } gravatarImageView.downloadGravatar(gravatar, placeholder: .gravatarPlaceholderImage, animate: true) gravatarURL = url diff --git a/WordPress/Classes/ViewRelated/People/PeopleCell.swift b/WordPress/Classes/ViewRelated/People/PeopleCell.swift index e4d00163b137..d80078b6c156 100644 --- a/WordPress/Classes/ViewRelated/People/PeopleCell.swift +++ b/WordPress/Classes/ViewRelated/People/PeopleCell.swift @@ -1,6 +1,7 @@ import UIKit import WordPressShared import WordPressUI +import Gravatar class PeopleCell: WPTableViewCell { @IBOutlet private weak var avatarImageView: CircularImageView! @@ -36,7 +37,7 @@ class PeopleCell: WPTableViewCell { } @objc func setAvatarURL(_ avatarURL: URL?) { - let gravatar = avatarURL.flatMap { Gravatar($0) } + let gravatar = avatarURL.flatMap { GravatarURL($0) } let placeholder = UIImage(named: "gravatar")! avatarImageView.downloadGravatar(gravatar, placeholder: placeholder, animate: false) } diff --git a/WordPress/Classes/ViewRelated/People/PersonViewController.swift b/WordPress/Classes/ViewRelated/People/PersonViewController.swift index 59d56700dabf..e452688b1752 100644 --- a/WordPress/Classes/ViewRelated/People/PersonViewController.swift +++ b/WordPress/Classes/ViewRelated/People/PersonViewController.swift @@ -3,6 +3,7 @@ import UIKit import CocoaLumberjack import WordPressShared import WordPressUI +import Gravatar /// Displays a Blog's User Details /// @@ -507,7 +508,7 @@ private extension PersonViewController { } func refreshGravatarImage(in imageView: UIImageView) { - let gravatar = person.avatarURL.flatMap { Gravatar($0) } + let gravatar = person.avatarURL.flatMap { GravatarURL($0) } let placeholder = UIImage(named: "gravatar")! imageView.downloadGravatar(gravatar, placeholder: placeholder, animate: false) } diff --git a/WordPress/Classes/ViewRelated/Post/Revisions/Views/Cell/RevisionsTableViewCell.swift b/WordPress/Classes/ViewRelated/Post/Revisions/Views/Cell/RevisionsTableViewCell.swift index e414a6417fb7..01f9198c6912 100644 --- a/WordPress/Classes/ViewRelated/Post/Revisions/Views/Cell/RevisionsTableViewCell.swift +++ b/WordPress/Classes/ViewRelated/Post/Revisions/Views/Cell/RevisionsTableViewCell.swift @@ -1,5 +1,6 @@ import Gridicons import WordPressUI +import Gravatar class RevisionsTableViewCell: UITableViewCell { static let reuseIdentifier = "RevisionsTableViewCellIdentifier" @@ -43,7 +44,7 @@ class RevisionsTableViewCell: UITableViewCell { if let avatarURL = avatarURL, let placeholder = UIImage(named: "gravatar") { let url = URL(string: avatarURL) - avatarImageView.downloadGravatar(url.flatMap { Gravatar($0) }, + avatarImageView.downloadGravatar(url.flatMap { GravatarURL($0) }, placeholder: placeholder, animate: false) } diff --git a/WordPress/WordPressNotificationContentExtension/Sources/Views/NotificationContentView.swift b/WordPress/WordPressNotificationContentExtension/Sources/Views/NotificationContentView.swift index 11586b65d884..949a36ce0980 100644 --- a/WordPress/WordPressNotificationContentExtension/Sources/Views/NotificationContentView.swift +++ b/WordPress/WordPressNotificationContentExtension/Sources/Views/NotificationContentView.swift @@ -2,6 +2,7 @@ import UIKit import WordPressShared import WordPressUI +import Gravatar // MARK: - NotificationContentView @@ -186,7 +187,7 @@ extension NotificationContentView { func downloadGravatar() { guard let specifiedGravatar = viewModel.gravatarURLString, let validURL = URL(string: specifiedGravatar), - let gravatar = Gravatar(validURL) else { + let gravatar = GravatarURL(validURL) else { return } From d72bcfdcb6851989dc57382d83c752982798c7cb Mon Sep 17 00:00:00 2001 From: Eduardo Toledo Date: Mon, 19 Feb 2024 19:14:45 +0100 Subject: [PATCH 05/43] Using Gravatar.fetchProfile from Gravatar SDK --- .../NUX/LoginEpilogueTableViewController.swift | 18 +++++++++++++----- .../NUX/LoginEpilogueUserInfo.swift | 3 ++- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/WordPress/Classes/ViewRelated/NUX/LoginEpilogueTableViewController.swift b/WordPress/Classes/ViewRelated/NUX/LoginEpilogueTableViewController.swift index 661656dae767..6fdfda0a9077 100644 --- a/WordPress/Classes/ViewRelated/NUX/LoginEpilogueTableViewController.swift +++ b/WordPress/Classes/ViewRelated/NUX/LoginEpilogueTableViewController.swift @@ -1,6 +1,7 @@ import UIKit import WordPressShared import WordPressAuthenticator +import Gravatar // MARK: - LoginEpilogueTableViewController // @@ -299,13 +300,20 @@ private extension LoginEpilogueTableViewController { /// Load: Gravatar's Metadata /// - let service = GravatarService() - service.fetchProfile(email: userProfile.email) { gravatarProfile in - if let gravatarProfile = gravatarProfile { + let service = ProfileService() + service.fetchProfile(with: userProfile.email) { response in + switch response { + case .success(let gravatarProfile): epilogueInfo.update(with: gravatarProfile) + DispatchQueue.main.async { + completion(epilogueInfo) + } + case .failure(let error): + print("Error: \(error)") + DispatchQueue.main.async { + completion(nil) + } } - - completion(epilogueInfo) } } } diff --git a/WordPress/Classes/ViewRelated/NUX/LoginEpilogueUserInfo.swift b/WordPress/Classes/ViewRelated/NUX/LoginEpilogueUserInfo.swift index 244ed0681481..862b40b570c3 100644 --- a/WordPress/Classes/ViewRelated/NUX/LoginEpilogueUserInfo.swift +++ b/WordPress/Classes/ViewRelated/NUX/LoginEpilogueUserInfo.swift @@ -1,5 +1,6 @@ import Foundation import WordPressAuthenticator +import Gravatar /// A simple container for the user info shown on the login epilogue screen. /// @@ -39,7 +40,7 @@ extension LoginEpilogueUserInfo { /// Updates the Epilogue properties, given a GravatarProfile instance. /// - mutating func update(with profile: GravatarProfile) { + mutating func update(with profile: Gravatar.GravatarProfile) { gravatarUrl = profile.thumbnailUrl fullName = profile.displayName } From 4035beb0e7b58aa721770eaf2003082fd6e077ba Mon Sep 17 00:00:00 2001 From: Pinar Olguc Date: Wed, 21 Feb 2024 11:48:59 +0300 Subject: [PATCH 06/43] Replace the download avatar via email with the SDK implementation (#22641) Co-authored-by: Pinar Olguc --- .../Blog/Blog + Me/UIBarButtonItem+MeBarButton.swift | 2 +- .../ViewRelated/Comments/CommentContentTableViewCell.swift | 2 +- .../ViewRelated/Me/My Profile/MyProfileHeaderView.swift | 2 +- WordPress/Classes/ViewRelated/Me/Views/Header/MeHeaderView.m | 3 ++- WordPress/Classes/ViewRelated/NUX/EpilogueUserInfoCell.swift | 2 +- .../Notifications/Views/NoteBlockCommentTableViewCell.swift | 2 +- WordPress/Classes/ViewRelated/Post/AuthorFilterButton.swift | 2 +- .../Classes/ViewRelated/Post/AuthorFilterViewController.swift | 2 +- .../Classes/ViewRelated/Views/List/ListTableViewCell.swift | 2 +- 9 files changed, 10 insertions(+), 9 deletions(-) diff --git a/WordPress/Classes/ViewRelated/Blog/Blog + Me/UIBarButtonItem+MeBarButton.swift b/WordPress/Classes/ViewRelated/Blog/Blog + Me/UIBarButtonItem+MeBarButton.swift index 2cfab9b8c8b7..3f0b9968b74f 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog + Me/UIBarButtonItem+MeBarButton.swift +++ b/WordPress/Classes/ViewRelated/Blog/Blog + Me/UIBarButtonItem+MeBarButton.swift @@ -68,7 +68,7 @@ fileprivate extension UIBarButtonItem { gravatarImageView.contentMode = .scaleAspectFill if let email = email { - gravatarImageView.downloadGravatarWithEmail(email, placeholderImage: GravatarConfiguration.fallBackImage) + gravatarImageView.downloadGravatar(for: email, placeholderImage: GravatarConfiguration.fallBackImage) } else { gravatarImageView.image = GravatarConfiguration.fallBackImage } diff --git a/WordPress/Classes/ViewRelated/Comments/CommentContentTableViewCell.swift b/WordPress/Classes/ViewRelated/Comments/CommentContentTableViewCell.swift index 0dc0d0ceca3b..755508322046 100644 --- a/WordPress/Classes/ViewRelated/Comments/CommentContentTableViewCell.swift +++ b/WordPress/Classes/ViewRelated/Comments/CommentContentTableViewCell.swift @@ -375,7 +375,7 @@ private extension CommentContentTableViewCell { return } - avatarImageView.downloadGravatarWithEmail(someEmail, placeholderImage: Style.placeholderImage) + avatarImageView.downloadGravatar(for: someEmail, placeholderImage: Style.placeholderImage) } func updateContainerLeadingConstraint() { diff --git a/WordPress/Classes/ViewRelated/Me/My Profile/MyProfileHeaderView.swift b/WordPress/Classes/ViewRelated/Me/My Profile/MyProfileHeaderView.swift index f3c651c56bf9..1133df4f4310 100644 --- a/WordPress/Classes/ViewRelated/Me/My Profile/MyProfileHeaderView.swift +++ b/WordPress/Classes/ViewRelated/Me/My Profile/MyProfileHeaderView.swift @@ -25,7 +25,7 @@ class MyProfileHeaderView: UITableViewHeaderFooterView { var gravatarEmail: String? = nil { didSet { if let email = gravatarEmail { - gravatarImageView.downloadGravatarWithEmail(email, rating: GravatarRatings.x) + gravatarImageView.downloadGravatar(for: email, gravatarRating: .x) } } } diff --git a/WordPress/Classes/ViewRelated/Me/Views/Header/MeHeaderView.m b/WordPress/Classes/ViewRelated/Me/Views/Header/MeHeaderView.m index b3ba0f2ace3c..17673c4f418a 100644 --- a/WordPress/Classes/ViewRelated/Me/Views/Header/MeHeaderView.m +++ b/WordPress/Classes/ViewRelated/Me/Views/Header/MeHeaderView.m @@ -1,6 +1,7 @@ #import "MeHeaderView.h" #import "Blog.h" #import "WordPress-Swift.h" +#import "Gravatar-Swift.h" const CGFloat MeHeaderViewHeight = 154; const CGFloat MeHeaderViewGravatarSize = 64.0; @@ -67,7 +68,7 @@ - (NSString *)username - (void)setGravatarEmail:(NSString *)gravatarEmail { // Since this view is only visible to the current user, we should show all ratings - [self.gravatarImageView downloadGravatarWithEmail:gravatarEmail rating:GravatarRatingsX]; + [self.gravatarImageView downloadGravatarFor:gravatarEmail gravatarRating:GravatarRatingX]; _gravatarEmail = gravatarEmail; } diff --git a/WordPress/Classes/ViewRelated/NUX/EpilogueUserInfoCell.swift b/WordPress/Classes/ViewRelated/NUX/EpilogueUserInfoCell.swift index 42f154108c7f..d15c42cfe5e4 100644 --- a/WordPress/Classes/ViewRelated/NUX/EpilogueUserInfoCell.swift +++ b/WordPress/Classes/ViewRelated/NUX/EpilogueUserInfoCell.swift @@ -60,7 +60,7 @@ class EpilogueUserInfoCell: UITableViewCell { gravatarView.downloadImage(from: url) } else { let placeholder: UIImage = allowGravatarUploads ? .gravatarUploadablePlaceholderImage : .gravatarPlaceholderImage - gravatarView.downloadGravatarWithEmail(userInfo.email, rating: .x, placeholderImage: placeholder) + gravatarView.downloadGravatar(for: userInfo.email, gravatarRating: .x, placeholderImage: placeholder) } } } diff --git a/WordPress/Classes/ViewRelated/Notifications/Views/NoteBlockCommentTableViewCell.swift b/WordPress/Classes/ViewRelated/Notifications/Views/NoteBlockCommentTableViewCell.swift index 8f1201c14304..09cbf57f3c7d 100644 --- a/WordPress/Classes/ViewRelated/Notifications/Views/NoteBlockCommentTableViewCell.swift +++ b/WordPress/Classes/ViewRelated/Notifications/Views/NoteBlockCommentTableViewCell.swift @@ -111,7 +111,7 @@ class NoteBlockCommentTableViewCell: NoteBlockTextTableViewCell { return } - gravatarImageView.downloadGravatarWithEmail(unwrappedEmail, placeholderImage: placeholderImage) + gravatarImageView.downloadGravatar(for: unwrappedEmail, placeholderImage: placeholderImage) } // MARK: - View Methods diff --git a/WordPress/Classes/ViewRelated/Post/AuthorFilterButton.swift b/WordPress/Classes/ViewRelated/Post/AuthorFilterButton.swift index e8b07987998e..caf4ec690bf8 100644 --- a/WordPress/Classes/ViewRelated/Post/AuthorFilterButton.swift +++ b/WordPress/Classes/ViewRelated/Post/AuthorFilterButton.swift @@ -39,7 +39,7 @@ final class AuthorFilterButton: UIControl { case .user(let email): authorImageView.contentMode = .scaleAspectFill if let email = email { - authorImageView.downloadGravatarWithEmail(email, placeholderImage: gravatarPlaceholder) + authorImageView.downloadGravatar(for: email, placeholderImage: gravatarPlaceholder) } else { authorImageView.image = gravatarPlaceholder } diff --git a/WordPress/Classes/ViewRelated/Post/AuthorFilterViewController.swift b/WordPress/Classes/ViewRelated/Post/AuthorFilterViewController.swift index f352c20191c6..b60ebc26b7f2 100644 --- a/WordPress/Classes/ViewRelated/Post/AuthorFilterViewController.swift +++ b/WordPress/Classes/ViewRelated/Post/AuthorFilterViewController.swift @@ -253,7 +253,7 @@ private class AuthorFilterCell: UITableViewCell { let placeholder = UIImage(named: "comment-author-gravatar") if let email = email { - gravatarImageView.downloadGravatarWithEmail(email, placeholderImage: placeholder ?? UIImage()) + gravatarImageView.downloadGravatar(for: email, placeholderImage: placeholder ?? UIImage()) } else { gravatarImageView.image = placeholder } diff --git a/WordPress/Classes/ViewRelated/Views/List/ListTableViewCell.swift b/WordPress/Classes/ViewRelated/Views/List/ListTableViewCell.swift index 0fca0b6ab46a..b7b222a15cbb 100644 --- a/WordPress/Classes/ViewRelated/Views/List/ListTableViewCell.swift +++ b/WordPress/Classes/ViewRelated/Views/List/ListTableViewCell.swift @@ -102,7 +102,7 @@ class ListTableViewCell: UITableViewCell, NibReusable { return } - avatarView.downloadGravatarWithEmail(someEmail, placeholderImage: placeholderImage) + avatarView.downloadGravatar(for: someEmail, placeholderImage: placeholderImage) } // MARK: Overlay View Support From 7d6854abbf22852f104b832304aa27a0f9c2e9e7 Mon Sep 17 00:00:00 2001 From: Eduardo Toledo Date: Wed, 21 Feb 2024 14:07:01 +0100 Subject: [PATCH 07/43] Replacing Gravatar upload image with Gravatar SDK `ImageService` --- WordPress/Classes/Services/GravatarService.swift | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/WordPress/Classes/Services/GravatarService.swift b/WordPress/Classes/Services/GravatarService.swift index 516100ac42c0..5d724e925abb 100644 --- a/WordPress/Classes/Services/GravatarService.swift +++ b/WordPress/Classes/Services/GravatarService.swift @@ -1,6 +1,7 @@ import Foundation import CocoaLumberjack import WordPressKit +import Gravatar @objc public enum GravatarServiceError: Int, Error { case invalidAccountInfo @@ -53,8 +54,8 @@ open class GravatarService { let email = accountEmail.trimmingCharacters(in: CharacterSet.whitespaces).lowercased() - let remote = gravatarServiceRemote() - remote.uploadImage(image, accountEmail: email, accountToken: accountToken) { (error) in + let imageService = ImageService() + imageService.uploadImage(image, accountEmail: email, accountToken: accountToken) { (error) in if let theError = error { DDLogError("GravatarService.uploadImage Error: \(theError)") } else { From 94f9ccac956c3196c74129c74a118404092bea88 Mon Sep 17 00:00:00 2001 From: Eduardo Toledo Date: Wed, 21 Feb 2024 14:35:30 +0100 Subject: [PATCH 08/43] Update `gravatarImageService ` related unit tests --- .../Classes/Services/GravatarService.swift | 6 ++- .../WordPressTest/GravatarServiceTests.swift | 38 +++++++++++++++++-- 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/WordPress/Classes/Services/GravatarService.swift b/WordPress/Classes/Services/GravatarService.swift index 5d724e925abb..9aa050640bc1 100644 --- a/WordPress/Classes/Services/GravatarService.swift +++ b/WordPress/Classes/Services/GravatarService.swift @@ -54,7 +54,7 @@ open class GravatarService { let email = accountEmail.trimmingCharacters(in: CharacterSet.whitespaces).lowercased() - let imageService = ImageService() + let imageService = gravatarImageService() imageService.uploadImage(image, accountEmail: email, accountToken: accountToken) { (error) in if let theError = error { DDLogError("GravatarService.uploadImage Error: \(theError)") @@ -68,6 +68,10 @@ open class GravatarService { /// Overridden by tests for mocking. /// + func gravatarImageService() -> ImageServing { + return ImageService() + } + func gravatarServiceRemote() -> GravatarServiceRemote { return GravatarServiceRemote() } diff --git a/WordPress/WordPressTest/GravatarServiceTests.swift b/WordPress/WordPressTest/GravatarServiceTests.swift index 6a18d9e55ac7..1252525b1416 100644 --- a/WordPress/WordPressTest/GravatarServiceTests.swift +++ b/WordPress/WordPressTest/GravatarServiceTests.swift @@ -1,6 +1,7 @@ import Foundation import XCTest import WordPressKit +import Gravatar @testable import WordPress /// GravatarService Unit Tests @@ -18,14 +19,45 @@ class GravatarServiceTests: CoreDataTestCase { completion(nil) } } + } + + class ImageServiceMock: ImageServing { + var capturedAccountToken: String = "" + var capturedAccountEmail: String = "" + + func uploadImage(_ image: UIImage, accountEmail: String, accountToken: String) async throws -> URLResponse { + capturedAccountEmail = accountEmail + capturedAccountToken = accountToken + return URLResponse() + } + func uploadImage(_ image: UIImage, accountEmail: String, accountToken: String, completion: ((NSError?) -> Void)?) { + capturedAccountEmail = accountEmail + capturedAccountToken = accountToken + } + + func fetchImage(with email: String, options: Gravatar.GravatarImageDownloadOptions, completionHandler: Gravatar.ImageDownloadCompletion?) -> Gravatar.CancellableDataTask { + fatalError("Not implemented") + } + + func fetchImage(with url: URL, forceRefresh: Bool, processor: Gravatar.ImageProcessor, completionHandler: Gravatar.ImageDownloadCompletion?) -> Gravatar.CancellableDataTask? { + fatalError("Not implemented") + } + + func fetchImage(with email: String, options: Gravatar.GravatarImageDownloadOptions) async throws -> Gravatar.GravatarImageDownloadResult { + fatalError("Not implemented") + } + + func fetchImage(with url: URL, forceRefresh: Bool, processor: Gravatar.ImageProcessor) async throws -> Gravatar.GravatarImageDownloadResult { + fatalError("Not implemented") + } } class GravatarServiceTester: GravatarService { - var gravatarServiceRemoteMock: GravatarServiceRemoteMock? + var gravatarServiceRemoteMock: ImageServiceMock? - override func gravatarServiceRemote() -> GravatarServiceRemote { - gravatarServiceRemoteMock = GravatarServiceRemoteMock() + override func gravatarImageService() -> ImageServing { + gravatarServiceRemoteMock = ImageServiceMock() return gravatarServiceRemoteMock! } } From da2f87d277641e8c139a5b0a1edf31562171975d Mon Sep 17 00:00:00 2001 From: Eduardo Toledo Date: Thu, 22 Feb 2024 19:21:22 +0100 Subject: [PATCH 09/43] Implementing Gravatar changes regarding ImageServing protocol naming --- .../Classes/Services/GravatarService.swift | 2 +- .../WordPressTest/GravatarServiceTests.swift | 20 ++----------------- 2 files changed, 3 insertions(+), 19 deletions(-) diff --git a/WordPress/Classes/Services/GravatarService.swift b/WordPress/Classes/Services/GravatarService.swift index 9aa050640bc1..f03ec9e75a27 100644 --- a/WordPress/Classes/Services/GravatarService.swift +++ b/WordPress/Classes/Services/GravatarService.swift @@ -68,7 +68,7 @@ open class GravatarService { /// Overridden by tests for mocking. /// - func gravatarImageService() -> ImageServing { + func gravatarImageService() -> ImageUploader { return ImageService() } diff --git a/WordPress/WordPressTest/GravatarServiceTests.swift b/WordPress/WordPressTest/GravatarServiceTests.swift index 1252525b1416..f5e5cf4a4008 100644 --- a/WordPress/WordPressTest/GravatarServiceTests.swift +++ b/WordPress/WordPressTest/GravatarServiceTests.swift @@ -21,7 +21,7 @@ class GravatarServiceTests: CoreDataTestCase { } } - class ImageServiceMock: ImageServing { + class ImageServiceMock: ImageUploader { var capturedAccountToken: String = "" var capturedAccountEmail: String = "" @@ -35,28 +35,12 @@ class GravatarServiceTests: CoreDataTestCase { capturedAccountEmail = accountEmail capturedAccountToken = accountToken } - - func fetchImage(with email: String, options: Gravatar.GravatarImageDownloadOptions, completionHandler: Gravatar.ImageDownloadCompletion?) -> Gravatar.CancellableDataTask { - fatalError("Not implemented") - } - - func fetchImage(with url: URL, forceRefresh: Bool, processor: Gravatar.ImageProcessor, completionHandler: Gravatar.ImageDownloadCompletion?) -> Gravatar.CancellableDataTask? { - fatalError("Not implemented") - } - - func fetchImage(with email: String, options: Gravatar.GravatarImageDownloadOptions) async throws -> Gravatar.GravatarImageDownloadResult { - fatalError("Not implemented") - } - - func fetchImage(with url: URL, forceRefresh: Bool, processor: Gravatar.ImageProcessor) async throws -> Gravatar.GravatarImageDownloadResult { - fatalError("Not implemented") - } } class GravatarServiceTester: GravatarService { var gravatarServiceRemoteMock: ImageServiceMock? - override func gravatarImageService() -> ImageServing { + override func gravatarImageService() -> ImageUploader { gravatarServiceRemoteMock = ImageServiceMock() return gravatarServiceRemoteMock! } From 5ccc6b4ed01eb2c07d1f35b4834953ffcbbe8fe3 Mon Sep 17 00:00:00 2001 From: Eduardo Toledo Date: Wed, 28 Feb 2024 13:46:19 +0100 Subject: [PATCH 10/43] Fix build error after errors PR merge in Gravatar SDK --- Podfile.lock | 2 +- WordPress/Classes/Services/GravatarService.swift | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Podfile.lock b/Podfile.lock index d5fc8fa55b40..2cdc4d54165d 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -211,7 +211,7 @@ SPEC CHECKSUMS: Down: 71bf4af3c04fa093e65dffa25c4b64fa61287373 FSInteractiveMap: a396f610f48b76cb540baa87139d056429abda86 Gifu: 416d4e38c4c2fed012f019e0a1d3ffcb58e5b842 - Gravatar: a6fd9561e1514861508f543bc6c5150e71d11605 + Gravatar: 00f17dc2771f23771def3aa513991c9b50816a0f Gridicons: 4455b9f366960121430e45997e32112ae49ffe1d Gutenberg: ba97dd36571958f64108233a692e6057f5010dc2 JTAppleCalendar: 16c6501b22cb27520372c28b0a2e0b12c8d0cd73 diff --git a/WordPress/Classes/Services/GravatarService.swift b/WordPress/Classes/Services/GravatarService.swift index f03ec9e75a27..a40e3d1c9f47 100644 --- a/WordPress/Classes/Services/GravatarService.swift +++ b/WordPress/Classes/Services/GravatarService.swift @@ -44,11 +44,11 @@ open class GravatarService { /// - account: The WPAccount instance for which to upload a new image. /// - completion: An optional closure to be executed on completion. /// - open func uploadImage(_ image: UIImage, forAccount account: WPAccount, completion: ((_ error: NSError?) -> ())? = nil) { + open func uploadImage(_ image: UIImage, forAccount account: WPAccount, completion: ((_ error: Error?) -> ())? = nil) { guard let accountToken = account.authToken, !accountToken.isEmpty, let accountEmail = account.email, !accountEmail.isEmpty else { - completion?(GravatarServiceError.invalidAccountInfo as NSError) + completion?(GravatarServiceError.invalidAccountInfo) return } From 28d06d747381843d808efe4f9b4f2234b2865a55 Mon Sep 17 00:00:00 2001 From: Eduardo Toledo Date: Tue, 19 Mar 2024 10:15:06 +0100 Subject: [PATCH 11/43] Update GravatarProfile to UserProfile --- Podfile.lock | 2 +- WordPress/Classes/ViewRelated/NUX/LoginEpilogueUserInfo.swift | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Podfile.lock b/Podfile.lock index 2cdc4d54165d..aace7e6802eb 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -211,7 +211,7 @@ SPEC CHECKSUMS: Down: 71bf4af3c04fa093e65dffa25c4b64fa61287373 FSInteractiveMap: a396f610f48b76cb540baa87139d056429abda86 Gifu: 416d4e38c4c2fed012f019e0a1d3ffcb58e5b842 - Gravatar: 00f17dc2771f23771def3aa513991c9b50816a0f + Gravatar: c1f9a90f226f4afbb66d0993b9cb7a8d30443cff Gridicons: 4455b9f366960121430e45997e32112ae49ffe1d Gutenberg: ba97dd36571958f64108233a692e6057f5010dc2 JTAppleCalendar: 16c6501b22cb27520372c28b0a2e0b12c8d0cd73 diff --git a/WordPress/Classes/ViewRelated/NUX/LoginEpilogueUserInfo.swift b/WordPress/Classes/ViewRelated/NUX/LoginEpilogueUserInfo.swift index 862b40b570c3..8f0bdffc8f01 100644 --- a/WordPress/Classes/ViewRelated/NUX/LoginEpilogueUserInfo.swift +++ b/WordPress/Classes/ViewRelated/NUX/LoginEpilogueUserInfo.swift @@ -40,9 +40,9 @@ extension LoginEpilogueUserInfo { /// Updates the Epilogue properties, given a GravatarProfile instance. /// - mutating func update(with profile: Gravatar.GravatarProfile) { + mutating func update(with profile: Gravatar.UserProfile) { gravatarUrl = profile.thumbnailUrl - fullName = profile.displayName + fullName = profile.displayName ?? "" } mutating func update(with socialUser: SocialUser) { From 930dc08d218052d53006bd7edece0a1bab92bc2b Mon Sep 17 00:00:00 2001 From: Pinar Olguc Date: Thu, 21 Mar 2024 15:34:32 +0300 Subject: [PATCH 12/43] Update GravatarService to use the new AvatarService (#22878) Co-authored-by: Pinar Olguc --- .../Classes/Services/GravatarService.swift | 35 +++++++++------ .../WordPressTest/GravatarServiceTests.swift | 44 ++++++++----------- 2 files changed, 39 insertions(+), 40 deletions(-) diff --git a/WordPress/Classes/Services/GravatarService.swift b/WordPress/Classes/Services/GravatarService.swift index a40e3d1c9f47..a0116cf28d3d 100644 --- a/WordPress/Classes/Services/GravatarService.swift +++ b/WordPress/Classes/Services/GravatarService.swift @@ -7,9 +7,22 @@ import Gravatar case invalidAccountInfo } +public protocol GravatarImageUploader { + @discardableResult + func upload(_ image: UIImage, email: String, accessToken: String) async throws -> URLResponse +} + +extension AvatarService: GravatarImageUploader { } + /// This Service exposes all of the valid operations we can execute, to interact with the Gravatar Service. /// -open class GravatarService { +public class GravatarService { + + let imageUploader: GravatarImageUploader + + init(imageUploader: GravatarImageUploader? = nil) { + self.imageUploader = imageUploader ?? AvatarService() + } /// This method fetches the Gravatar profile for the specified email address. /// @@ -54,24 +67,18 @@ open class GravatarService { let email = accountEmail.trimmingCharacters(in: CharacterSet.whitespaces).lowercased() - let imageService = gravatarImageService() - imageService.uploadImage(image, accountEmail: email, accountToken: accountToken) { (error) in - if let theError = error { - DDLogError("GravatarService.uploadImage Error: \(theError)") - } else { + Task { + do { + try await imageUploader.upload(image, email: email, accessToken: accountToken) DDLogInfo("GravatarService.uploadImage Success!") + completion?(nil) + } catch { + DDLogError("GravatarService.uploadImage Error: \(error)") + completion?(error) } - - completion?(error) } } - /// Overridden by tests for mocking. - /// - func gravatarImageService() -> ImageUploader { - return ImageService() - } - func gravatarServiceRemote() -> GravatarServiceRemote { return GravatarServiceRemote() } diff --git a/WordPress/WordPressTest/GravatarServiceTests.swift b/WordPress/WordPressTest/GravatarServiceTests.swift index f5e5cf4a4008..83a0a1782ade 100644 --- a/WordPress/WordPressTest/GravatarServiceTests.swift +++ b/WordPress/WordPressTest/GravatarServiceTests.swift @@ -21,47 +21,39 @@ class GravatarServiceTests: CoreDataTestCase { } } - class ImageServiceMock: ImageUploader { + class ImageServiceMock: GravatarImageUploader { var capturedAccountToken: String = "" var capturedAccountEmail: String = "" - func uploadImage(_ image: UIImage, accountEmail: String, accountToken: String) async throws -> URLResponse { - capturedAccountEmail = accountEmail - capturedAccountToken = accountToken + func upload(_ image: UIImage, email: String, accessToken: String) async throws -> URLResponse { + capturedAccountEmail = email + capturedAccountToken = accessToken return URLResponse() } - - func uploadImage(_ image: UIImage, accountEmail: String, accountToken: String, completion: ((NSError?) -> Void)?) { - capturedAccountEmail = accountEmail - capturedAccountToken = accountToken - } - } - - class GravatarServiceTester: GravatarService { - var gravatarServiceRemoteMock: ImageServiceMock? - - override func gravatarImageService() -> ImageUploader { - gravatarServiceRemoteMock = ImageServiceMock() - return gravatarServiceRemoteMock! - } } func testServiceSanitizesEmailAddressCapitals() { + let expectation = expectation(description: "uploadImage must invoke completion") let account = createTestAccount(username: "some", token: "1234", emailAddress: "emAil@wordpress.com") - let gravatarService = GravatarServiceTester() - gravatarService.uploadImage(UIImage(), forAccount: account) - - XCTAssertEqual("email@wordpress.com", gravatarService.gravatarServiceRemoteMock!.capturedAccountEmail) + let gravatarService = GravatarService(imageUploader: ImageServiceMock()) + gravatarService.uploadImage(UIImage(), forAccount: account) { _ in + XCTAssertEqual("email@wordpress.com", (gravatarService.imageUploader as? ImageServiceMock)?.capturedAccountEmail) + expectation.fulfill() + } + wait(for: [expectation], timeout: 1) } func testServiceSanitizesEmailAddressTrimsSpaces() { + let expectation = expectation(description: "uploadImage must invoke completion") let account = createTestAccount(username: "some", token: "1234", emailAddress: " email@wordpress.com ") - let gravatarService = GravatarServiceTester() - gravatarService.uploadImage(UIImage(), forAccount: account) - - XCTAssertEqual("email@wordpress.com", gravatarService.gravatarServiceRemoteMock!.capturedAccountEmail) + let gravatarService = GravatarService(imageUploader: ImageServiceMock()) + gravatarService.uploadImage(UIImage(), forAccount: account) { _ in + XCTAssertEqual("email@wordpress.com", (gravatarService.imageUploader as? ImageServiceMock)?.capturedAccountEmail) + expectation.fulfill() + } + wait(for: [expectation], timeout: 1) } private func createTestAccount(username: String, token: String, emailAddress: String) -> WPAccount { From 53963044bcbf3aa1b47d9ec6abab01f83eb9667a Mon Sep 17 00:00:00 2001 From: Pinar Olguc Date: Mon, 25 Mar 2024 11:40:32 +0300 Subject: [PATCH 13/43] Update podfile: Gravatar testspecs (#22889) * Update podfile Gravatar testspecs * bundle exec pod install --------- Co-authored-by: Pinar Olguc --- Podfile | 2 +- Podfile.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Podfile b/Podfile index 96bbe8a1e7f2..87aef843a2ac 100644 --- a/Podfile +++ b/Podfile @@ -50,7 +50,7 @@ def wordpress_ui end def gravatar - pod 'Gravatar', path: '../Gravatar-SDK-iOS', :testspecs => ['Tests'] + pod 'Gravatar', path: '../Gravatar-SDK-iOS', :testspecs => ['GravatarTests'] end def wordpress_kit diff --git a/Podfile.lock b/Podfile.lock index aace7e6802eb..074a24376641 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -25,8 +25,8 @@ PODS: - Down (0.6.6) - FSInteractiveMap (0.1.0) - Gifu (3.3.1) - - Gravatar (0.1.0) - - Gravatar/Tests (0.1.0) + - Gravatar (0.1.1) + - Gravatar/GravatarTests (0.1.1) - Gridicons (1.2.0) - Gutenberg (1.112.0) - JTAppleCalendar (8.0.5) @@ -109,7 +109,7 @@ DEPENDENCIES: - FSInteractiveMap (from `https://github.com/wordpress-mobile/FSInteractiveMap.git`, tag `0.2.0`) - Gifu (= 3.3.1) - Gravatar (from `../Gravatar-SDK-iOS`) - - Gravatar/Tests (from `../Gravatar-SDK-iOS`) + - Gravatar/GravatarTests (from `../Gravatar-SDK-iOS`) - Gridicons (~> 1.2) - Gutenberg (from `https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-v1.112.0.podspec`) - JTAppleCalendar (~> 8.0.5) @@ -211,7 +211,7 @@ SPEC CHECKSUMS: Down: 71bf4af3c04fa093e65dffa25c4b64fa61287373 FSInteractiveMap: a396f610f48b76cb540baa87139d056429abda86 Gifu: 416d4e38c4c2fed012f019e0a1d3ffcb58e5b842 - Gravatar: c1f9a90f226f4afbb66d0993b9cb7a8d30443cff + Gravatar: 2bab855f4d344c2fe3e8982ebaa22b5f42051674 Gridicons: 4455b9f366960121430e45997e32112ae49ffe1d Gutenberg: ba97dd36571958f64108233a692e6057f5010dc2 JTAppleCalendar: 16c6501b22cb27520372c28b0a2e0b12c8d0cd73 @@ -245,6 +245,6 @@ SPEC CHECKSUMS: ZendeskSupportSDK: 3a8e508ab1d9dd22dc038df6c694466414e037ba ZIPFoundation: d170fa8e270b2a32bef9dcdcabff5b8f1a5deced -PODFILE CHECKSUM: e59dbf3750a02c7a3e9cc0b2180a656815a0eaac +PODFILE CHECKSUM: b9231d5f4652f478e79897eb92e356c7d1e31617 COCOAPODS: 1.14.2 From 989cf60c2c94f78f715dd9bab8fb5465ec4a5743 Mon Sep 17 00:00:00 2001 From: Eduardo Toledo Date: Mon, 25 Mar 2024 11:15:52 +0100 Subject: [PATCH 14/43] Fetch gravatar profile using async fetch method --- .../LoginEpilogueTableViewController.swift | 38 ++++++++++--------- .../NUX/LoginEpilogueUserInfo.swift | 8 ++-- 2 files changed, 25 insertions(+), 21 deletions(-) diff --git a/WordPress/Classes/ViewRelated/NUX/LoginEpilogueTableViewController.swift b/WordPress/Classes/ViewRelated/NUX/LoginEpilogueTableViewController.swift index 6fdfda0a9077..9d89e91b9e14 100644 --- a/WordPress/Classes/ViewRelated/NUX/LoginEpilogueTableViewController.swift +++ b/WordPress/Classes/ViewRelated/NUX/LoginEpilogueTableViewController.swift @@ -296,24 +296,26 @@ private extension LoginEpilogueTableViewController { return } - var epilogueInfo = LoginEpilogueUserInfo(profile: userProfile) - - /// Load: Gravatar's Metadata - /// - let service = ProfileService() - service.fetchProfile(with: userProfile.email) { response in - switch response { - case .success(let gravatarProfile): - epilogueInfo.update(with: gravatarProfile) - DispatchQueue.main.async { - completion(epilogueInfo) - } - case .failure(let error): - print("Error: \(error)") - DispatchQueue.main.async { - completion(nil) - } - } + Task { [weak self] in + await self?.fetchGravatarProfile(with: userProfile, completion: completion) + } + } + } + + nonisolated + func fetchGravatarProfile(with profile: UserProfile, completion: @escaping (LoginEpilogueUserInfo?) -> ()) async { + let service = ProfileService() + let epilogueInfo = LoginEpilogueUserInfo(profile: profile) + do { + let gravatarProfile = try await service.fetch(withEmail: profile.email) + let updatedInfo = epilogueInfo.updating(with: gravatarProfile) + await MainActor.run { + completion(updatedInfo) + } + } catch { + print("Error: \(error)") + await MainActor.run { + completion(nil) } } } diff --git a/WordPress/Classes/ViewRelated/NUX/LoginEpilogueUserInfo.swift b/WordPress/Classes/ViewRelated/NUX/LoginEpilogueUserInfo.swift index 8f0bdffc8f01..9067853ccf93 100644 --- a/WordPress/Classes/ViewRelated/NUX/LoginEpilogueUserInfo.swift +++ b/WordPress/Classes/ViewRelated/NUX/LoginEpilogueUserInfo.swift @@ -40,9 +40,11 @@ extension LoginEpilogueUserInfo { /// Updates the Epilogue properties, given a GravatarProfile instance. /// - mutating func update(with profile: Gravatar.UserProfile) { - gravatarUrl = profile.thumbnailUrl - fullName = profile.displayName ?? "" + func updating(with profile: Gravatar.UserProfile) -> LoginEpilogueUserInfo { + var copy = self + copy.gravatarUrl = profile.thumbnailUrl + copy.fullName = profile.displayName ?? "" + return copy } mutating func update(with socialUser: SocialUser) { From f325403ef5b5b72a441331abfb77ce0576eae1a0 Mon Sep 17 00:00:00 2001 From: Eduardo Toledo Date: Mon, 25 Mar 2024 17:13:36 +0100 Subject: [PATCH 15/43] Remove noninsolated from fetchGravatarProfile --- .../NUX/LoginEpilogueTableViewController.swift | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/WordPress/Classes/ViewRelated/NUX/LoginEpilogueTableViewController.swift b/WordPress/Classes/ViewRelated/NUX/LoginEpilogueTableViewController.swift index 9d89e91b9e14..5ed213b5389b 100644 --- a/WordPress/Classes/ViewRelated/NUX/LoginEpilogueTableViewController.swift +++ b/WordPress/Classes/ViewRelated/NUX/LoginEpilogueTableViewController.swift @@ -302,21 +302,16 @@ private extension LoginEpilogueTableViewController { } } - nonisolated func fetchGravatarProfile(with profile: UserProfile, completion: @escaping (LoginEpilogueUserInfo?) -> ()) async { let service = ProfileService() let epilogueInfo = LoginEpilogueUserInfo(profile: profile) do { let gravatarProfile = try await service.fetch(withEmail: profile.email) let updatedInfo = epilogueInfo.updating(with: gravatarProfile) - await MainActor.run { - completion(updatedInfo) - } + completion(updatedInfo) } catch { print("Error: \(error)") - await MainActor.run { - completion(nil) - } + completion(nil) } } } From 76f07c43b26aae2d6db67bdabd1eb3f03a79b9c9 Mon Sep 17 00:00:00 2001 From: Eduardo Toledo Date: Tue, 26 Mar 2024 17:39:08 +0100 Subject: [PATCH 16/43] Roll back usage of fetch Gravatar profile We won't use the SDK until we have an open api-based endpoint for it --- .../LoginEpilogueTableViewController.swift | 26 ++++++++----------- .../NUX/LoginEpilogueUserInfo.swift | 5 ++++ 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/WordPress/Classes/ViewRelated/NUX/LoginEpilogueTableViewController.swift b/WordPress/Classes/ViewRelated/NUX/LoginEpilogueTableViewController.swift index 5ed213b5389b..123ccb31b276 100644 --- a/WordPress/Classes/ViewRelated/NUX/LoginEpilogueTableViewController.swift +++ b/WordPress/Classes/ViewRelated/NUX/LoginEpilogueTableViewController.swift @@ -296,22 +296,18 @@ private extension LoginEpilogueTableViewController { return } - Task { [weak self] in - await self?.fetchGravatarProfile(with: userProfile, completion: completion) - } - } - } + var epilogueInfo = LoginEpilogueUserInfo(profile: userProfile) + + /// Load: Gravatar's Metadata + /// + let service = GravatarService() + service.fetchProfile(email: userProfile.email) { gravatarProfile in + if let gravatarProfile = gravatarProfile { + epilogueInfo.update(with: gravatarProfile) + } - func fetchGravatarProfile(with profile: UserProfile, completion: @escaping (LoginEpilogueUserInfo?) -> ()) async { - let service = ProfileService() - let epilogueInfo = LoginEpilogueUserInfo(profile: profile) - do { - let gravatarProfile = try await service.fetch(withEmail: profile.email) - let updatedInfo = epilogueInfo.updating(with: gravatarProfile) - completion(updatedInfo) - } catch { - print("Error: \(error)") - completion(nil) + completion(epilogueInfo) + } } } } diff --git a/WordPress/Classes/ViewRelated/NUX/LoginEpilogueUserInfo.swift b/WordPress/Classes/ViewRelated/NUX/LoginEpilogueUserInfo.swift index 9067853ccf93..6dc7a44fe4ed 100644 --- a/WordPress/Classes/ViewRelated/NUX/LoginEpilogueUserInfo.swift +++ b/WordPress/Classes/ViewRelated/NUX/LoginEpilogueUserInfo.swift @@ -47,6 +47,11 @@ extension LoginEpilogueUserInfo { return copy } + mutating func update(with profile: GravatarProfile) { + self.gravatarUrl = profile.thumbnailUrl + self.fullName = profile.displayName + } + mutating func update(with socialUser: SocialUser) { fullName = socialUser.fullName email = socialUser.email From 7d32180507b3707132074ffd9df09d2a14d72a05 Mon Sep 17 00:00:00 2001 From: Andrew Montgomery Date: Tue, 26 Mar 2024 16:45:08 -0500 Subject: [PATCH 17/43] Use new Identifier types --- WordPress/Classes/Services/GravatarService.swift | 4 ++-- .../ViewRelated/NUX/LoginEpilogueTableViewController.swift | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/WordPress/Classes/Services/GravatarService.swift b/WordPress/Classes/Services/GravatarService.swift index a0116cf28d3d..b974e16e0e3e 100644 --- a/WordPress/Classes/Services/GravatarService.swift +++ b/WordPress/Classes/Services/GravatarService.swift @@ -9,7 +9,7 @@ import Gravatar public protocol GravatarImageUploader { @discardableResult - func upload(_ image: UIImage, email: String, accessToken: String) async throws -> URLResponse + func upload(_ image: UIImage, email: Email, accessToken: String) async throws -> URLResponse } extension AvatarService: GravatarImageUploader { } @@ -69,7 +69,7 @@ public class GravatarService { Task { do { - try await imageUploader.upload(image, email: email, accessToken: accountToken) + try await imageUploader.upload(image, email: Email(email), accessToken: accountToken) DDLogInfo("GravatarService.uploadImage Success!") completion?(nil) } catch { diff --git a/WordPress/Classes/ViewRelated/NUX/LoginEpilogueTableViewController.swift b/WordPress/Classes/ViewRelated/NUX/LoginEpilogueTableViewController.swift index 5ed213b5389b..dd18d2e38dae 100644 --- a/WordPress/Classes/ViewRelated/NUX/LoginEpilogueTableViewController.swift +++ b/WordPress/Classes/ViewRelated/NUX/LoginEpilogueTableViewController.swift @@ -306,7 +306,7 @@ private extension LoginEpilogueTableViewController { let service = ProfileService() let epilogueInfo = LoginEpilogueUserInfo(profile: profile) do { - let gravatarProfile = try await service.fetch(withEmail: profile.email) + let gravatarProfile = try await service.fetch(with: .email(profile.email)) let updatedInfo = epilogueInfo.updating(with: gravatarProfile) completion(updatedInfo) } catch { From 0b1609909baaf9a103def94df5580cbc05b7ec07 Mon Sep 17 00:00:00 2001 From: Eduardo Toledo Date: Wed, 27 Mar 2024 10:59:06 +0100 Subject: [PATCH 18/43] Implement URL name changes --- WordPress/Classes/ViewRelated/NUX/LoginEpilogueUserInfo.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/Classes/ViewRelated/NUX/LoginEpilogueUserInfo.swift b/WordPress/Classes/ViewRelated/NUX/LoginEpilogueUserInfo.swift index 9067853ccf93..6d660ef2f26d 100644 --- a/WordPress/Classes/ViewRelated/NUX/LoginEpilogueUserInfo.swift +++ b/WordPress/Classes/ViewRelated/NUX/LoginEpilogueUserInfo.swift @@ -42,7 +42,7 @@ extension LoginEpilogueUserInfo { /// func updating(with profile: Gravatar.UserProfile) -> LoginEpilogueUserInfo { var copy = self - copy.gravatarUrl = profile.thumbnailUrl + copy.gravatarUrl = profile.thumbnailURLString copy.fullName = profile.displayName ?? "" return copy } From 44c1cecaf0cccbbb869c8515d27f355c46391b9f Mon Sep 17 00:00:00 2001 From: Pinar Olguc Date: Thu, 28 Mar 2024 12:48:14 +0300 Subject: [PATCH 19/43] Add UIImageView extension --- Podfile | 4 +- Podfile.lock | 12 +- .../Gravatar/ImageCache+Gravatar.swift | 4 + .../Gravatar/UIImageView+Gravatar.swift | 108 ++++++++++++++++++ WordPress/WordPress.xcodeproj/project.pbxproj | 16 +++ 5 files changed, 135 insertions(+), 9 deletions(-) create mode 100644 WordPress/Classes/ViewRelated/Gravatar/ImageCache+Gravatar.swift create mode 100644 WordPress/Classes/ViewRelated/Gravatar/UIImageView+Gravatar.swift diff --git a/Podfile b/Podfile index 87aef843a2ac..81a693c513f8 100644 --- a/Podfile +++ b/Podfile @@ -42,11 +42,11 @@ def aztec end def wordpress_ui - # pod 'WordPressUI', '~> 1.15' + pod 'WordPressUI', '~> 1.15' # pod 'WordPressUI', git: 'https://github.com/wordpress-mobile/WordPressUI-iOS', tag: '' # pod 'WordPressUI', git: 'https://github.com/wordpress-mobile/WordPressUI-iOS', branch: '' # pod 'WordPressUI', git: 'https://github.com/wordpress-mobile/WordPressUI-iOS', commit: '' - pod 'WordPressUI', path: '../WordPressUI-iOS' + # pod 'WordPressUI', path: '../WordPressUI-iOS' end def gravatar diff --git a/Podfile.lock b/Podfile.lock index 074a24376641..0cfe59a2f65a 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -79,8 +79,7 @@ PODS: - WordPressShared (~> 2.0-beta) - wpxmlrpc (~> 0.10) - WordPressShared (2.3.0) - - WordPressUI (1.15.1): - - Gravatar (~> 0.1.0) + - WordPressUI (1.15.1) - wpxmlrpc (0.10.0) - ZendeskCommonUISDK (6.1.2) - ZendeskCoreSDK (2.5.1) @@ -127,7 +126,7 @@ DEPENDENCIES: - WordPressAuthenticator (from `https://github.com/wordpress-mobile/WordPressAuthenticator-iOS.git`, commit `fa06fca7178b268d382d91861752b3be0729e8a8`) - WordPressKit (from `https://github.com/wordpress-mobile/WordPressKit-iOS.git`, commit `92c1536724af8bb57ee677996919c2a9e37434e8`) - WordPressShared (~> 2.3) - - WordPressUI (from `../WordPressUI-iOS`) + - WordPressUI (~> 1.15) - ZendeskSupportSDK (= 5.3.0) - ZIPFoundation (~> 0.9.8) @@ -162,6 +161,7 @@ SPEC REPOS: - UIDeviceIdentifier - WordPress-Aztec-iOS - WordPress-Editor-iOS + - WordPressUI - wpxmlrpc - ZendeskCommonUISDK - ZendeskCoreSDK @@ -186,8 +186,6 @@ EXTERNAL SOURCES: WordPressKit: :commit: 92c1536724af8bb57ee677996919c2a9e37434e8 :git: https://github.com/wordpress-mobile/WordPressKit-iOS.git - WordPressUI: - :path: "../WordPressUI-iOS" CHECKOUT OPTIONS: FSInteractiveMap: @@ -234,7 +232,7 @@ SPEC CHECKSUMS: WordPressAuthenticator: ba69878bfa1368636e92d29fcfb5bd1e0a11a3ef WordPressKit: 7e5250e9e28fcdca787f8d313a7dc89a8571d774 WordPressShared: cad7777b283d3ce2752f283df587342a581cd49b - WordPressUI: 88c808b8a6ed7002fea945a3af9147a9e093a413 + WordPressUI: 700e3ec5a9f77b6920c8104c338c85788036ab3c wpxmlrpc: 68db063041e85d186db21f674adf08d9c70627fd ZendeskCommonUISDK: 5f0a83f412e07ae23701f18c412fe783b3249ef5 ZendeskCoreSDK: 19a18e5ef2edcb18f4dbc0ea0d12bd31f515712a @@ -245,6 +243,6 @@ SPEC CHECKSUMS: ZendeskSupportSDK: 3a8e508ab1d9dd22dc038df6c694466414e037ba ZIPFoundation: d170fa8e270b2a32bef9dcdcabff5b8f1a5deced -PODFILE CHECKSUM: b9231d5f4652f478e79897eb92e356c7d1e31617 +PODFILE CHECKSUM: 050c35cfdc0e86886579eb435fcb84e70f6864e3 COCOAPODS: 1.14.2 diff --git a/WordPress/Classes/ViewRelated/Gravatar/ImageCache+Gravatar.swift b/WordPress/Classes/ViewRelated/Gravatar/ImageCache+Gravatar.swift new file mode 100644 index 000000000000..e4793356a3d4 --- /dev/null +++ b/WordPress/Classes/ViewRelated/Gravatar/ImageCache+Gravatar.swift @@ -0,0 +1,4 @@ +import WordPressUI +import protocol Gravatar.ImageCaching + +extension ImageCache: ImageCaching { } diff --git a/WordPress/Classes/ViewRelated/Gravatar/UIImageView+Gravatar.swift b/WordPress/Classes/ViewRelated/Gravatar/UIImageView+Gravatar.swift new file mode 100644 index 000000000000..cd301c908bf9 --- /dev/null +++ b/WordPress/Classes/ViewRelated/Gravatar/UIImageView+Gravatar.swift @@ -0,0 +1,108 @@ +import Foundation +import Gravatar +import WordPressUI + +// Convenience intermediate enum for Objc compatibility. +@objc(GravatarRating) +/// Gravatar Image Ratings for Objc compatibility. +public enum ObjcGravatarRating: Int { + case g + case pg + case r + case x + + fileprivate func map() -> Rating { + switch self { + case .g: .general + case .pg: .parentalGuidance + case .r: .restricted + case .x: .x + } + } +} + +extension UIImageView { + + /// Re-declaration for Objc compatibility + @objc(downloadGravatarFor:gravatarRating:) + public func objc_downloadGravatar(for email: String, gravatarRating: ObjcGravatarRating) { + downloadGravatar(for: email, gravatarRating: gravatarRating.map(), placeholderImage: .gravatarPlaceholderImage) + } + + /// Downloads and sets the User's Gravatar, given his email. + /// - Parameters: + /// - email: The user's email + /// - gravatarRating: Expected image rating + /// - placeholderImage: Image to be used as Placeholder + public func downloadGravatar(for email: String, gravatarRating: Rating = .general, placeholderImage: UIImage = .gravatarPlaceholderImage) { + let avatarURL = AvatarURL.url(for: email, preferredSize: .pixels(gravatarDefaultSize()), gravatarRating: gravatarRating) + listenForGravatarChanges(forEmail: email) + downloadGravatar(fullURL: avatarURL, placeholder: placeholderImage, animate: false, failure: nil) + } + + public func downloadGravatar(_ gravatar: AvatarURL?, placeholder: UIImage, animate: Bool, failure: ((Error?) -> ())? = nil) { + guard let gravatar = gravatar else { + self.image = placeholder + return + } + + // Starting with iOS 10, it seems `initWithCoder` uses a default size + // of 1000x1000, which was messing with our size calculations for gravatars + // on newly created table cells. + // Calling `layoutIfNeeded()` forces UIKit to calculate the actual size. + layoutIfNeeded() + + let size = Int(ceil(frame.width * UIScreen.main.scale)) + let url = gravatar.replacing(options: .init(preferredSize: .pixels(size)))?.url + downloadGravatar(fullURL: url, placeholder: placeholder, animate: animate, failure: failure) + } + + private func downloadGravatar(fullURL: URL?, placeholder: UIImage, animate: Bool, failure: ((Error?) -> ())? = nil) { + self.gravatar.cancelImageDownload() + let options: [ImageSettingOption] = [.imageCache(ImageCache.shared)] + self.gravatar.setImage(with: fullURL, + placeholder: placeholder, + options: options) { [weak self] result in + switch result { + case .success: + if animate { + self?.fadeInAnimation() + } + case .failure(let error): + failure?(error) + } + } + } + + private func gravatarDefaultSize() -> Int { + guard bounds.size.equalTo(.zero) == false else { + return GravatarDefaults.imageSize + } + + let targetSize = max(bounds.width, bounds.height) * UIScreen.main.scale + return Int(targetSize) + } +} + +fileprivate struct GravatarDefaults { + static let imageSize = 80 +} + +extension AvatarURL { + + public static func url(for email: String, + preferredSize: ImageSize? = nil, + gravatarRating: Rating? = nil, + defaultAvatarOption: DefaultAvatarOption? = .status404) -> URL? { + AvatarURL( + with: .email(email), + // Passing GravatarDefaults.imageSize to keep the previous default. + // But ideally this should be passed explicitly. + options: .init( + preferredSize: preferredSize ?? .pixels(GravatarDefaults.imageSize), + rating: gravatarRating, + defaultAvatarOption: defaultAvatarOption + ) + )?.url + } +} diff --git a/WordPress/WordPress.xcodeproj/project.pbxproj b/WordPress/WordPress.xcodeproj/project.pbxproj index 7d9bcfa61109..19144644ac8c 100644 --- a/WordPress/WordPress.xcodeproj/project.pbxproj +++ b/WordPress/WordPress.xcodeproj/project.pbxproj @@ -2377,6 +2377,8 @@ 91D8364121946EFB008340B2 /* GutenbergMediaPickerHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91D8364021946EFB008340B2 /* GutenbergMediaPickerHelper.swift */; }; 91DCE84621A6A7F50062F134 /* PostEditor+MoreOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91DCE84521A6A7F50062F134 /* PostEditor+MoreOptions.swift */; }; 91DCE84821A6C58C0062F134 /* PostEditor+Publish.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91DCE84721A6C58C0062F134 /* PostEditor+Publish.swift */; }; + 91EABC452BB56EE10098D330 /* UIImageView+Gravatar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91EABC442BB56EE10098D330 /* UIImageView+Gravatar.swift */; }; + 91EABC472BB5731E0098D330 /* ImageCache+Gravatar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91EABC462BB5731D0098D330 /* ImageCache+Gravatar.swift */; }; 930F09171C7D110E00995926 /* ShareExtensionService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 930F09161C7D110E00995926 /* ShareExtensionService.swift */; }; 930F09191C7E1C1E00995926 /* ShareExtensionService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 930F09161C7D110E00995926 /* ShareExtensionService.swift */; }; 931215E1267DE1C0008C3B69 /* StatsTotalRowDataTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 931215E0267DE1C0008C3B69 /* StatsTotalRowDataTests.swift */; }; @@ -7688,6 +7690,8 @@ 91D8364021946EFB008340B2 /* GutenbergMediaPickerHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GutenbergMediaPickerHelper.swift; sourceTree = ""; }; 91DCE84521A6A7F50062F134 /* PostEditor+MoreOptions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PostEditor+MoreOptions.swift"; sourceTree = ""; }; 91DCE84721A6C58C0062F134 /* PostEditor+Publish.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "PostEditor+Publish.swift"; sourceTree = ""; }; + 91EABC442BB56EE10098D330 /* UIImageView+Gravatar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIImageView+Gravatar.swift"; sourceTree = ""; }; + 91EABC462BB5731D0098D330 /* ImageCache+Gravatar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ImageCache+Gravatar.swift"; sourceTree = ""; }; 92B40A77F0765C1E93B11727 /* Pods_WordPressDraftActionExtension.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_WordPressDraftActionExtension.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 930284B618EAF7B600CB0BF4 /* LocalCoreDataService.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LocalCoreDataService.h; sourceTree = ""; }; 93069F54176237A4000C966D /* ActivityLogViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ActivityLogViewController.h; sourceTree = ""; }; @@ -13731,6 +13735,7 @@ 8584FDB31923EF4F0019C02E /* ViewRelated */ = { isa = PBXGroup; children = ( + 91EABC432BB56ECE0098D330 /* Gravatar */, D80EE638203DBB7E0094C34C /* Accessibility */, 82FC61181FA8ADAC00A1757E /* Activity */, B50C0C441EF429D500372C65 /* Aztec */, @@ -14197,6 +14202,15 @@ path = Views; sourceTree = ""; }; + 91EABC432BB56ECE0098D330 /* Gravatar */ = { + isa = PBXGroup; + children = ( + 91EABC442BB56EE10098D330 /* UIImageView+Gravatar.swift */, + 91EABC462BB5731D0098D330 /* ImageCache+Gravatar.swift */, + ); + path = Gravatar; + sourceTree = ""; + }; 931215E2267F4F92008C3B69 /* Referrer Details */ = { isa = PBXGroup; children = ( @@ -21294,6 +21308,7 @@ C737553E27C80DD500C6E9A1 /* String+CondenseWhitespace.swift in Sources */, 74FA4BE51FBFA0660031EAAD /* Extensions.xcdatamodeld in Sources */, 986CC4D220E1B2F6004F300E /* CustomLogFormatter.swift in Sources */, + 91EABC472BB5731E0098D330 /* ImageCache+Gravatar.swift in Sources */, 3236F77524ABB7770088E8F3 /* ReaderInterestsCollectionViewCell.swift in Sources */, 0C7E09202A4286A00052324C /* PostMetaButton.m in Sources */, 9826AE8221B5C6A700C851FA /* LatestPostSummaryCell.swift in Sources */, @@ -22021,6 +22036,7 @@ FE9CC71A26D7A2A40026AEF3 /* CommentDetailViewController.swift in Sources */, C3B5545329661F2C00A04753 /* ThemeBrowserViewController+JetpackBannerViewController.swift in Sources */, 3FCCAA1523F4A1A3004064C0 /* UIBarButtonItem+MeBarButton.swift in Sources */, + 91EABC452BB56EE10098D330 /* UIImageView+Gravatar.swift in Sources */, FFEECFFC2084DE2B009B8CDB /* PostSettingsViewController+FeaturedImageUpload.swift in Sources */, D8212CB120AA64E1008E8AE8 /* ReaderLikeAction.swift in Sources */, D8212CC920AA87E5008E8AE8 /* ReaderMenuAction.swift in Sources */, From e3b60cf04f1fb40a26abadd2ae93c2659440de8d Mon Sep 17 00:00:00 2001 From: Pinar Olguc Date: Thu, 28 Mar 2024 13:35:56 +0300 Subject: [PATCH 20/43] Make WordPressUI.ImageCache conform to Gravatar.ImageCaching --- .../ViewRelated/Gravatar/ImageCache+Gravatar.swift | 2 +- .../ViewRelated/Gravatar/UIImageView+Gravatar.swift | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/WordPress/Classes/ViewRelated/Gravatar/ImageCache+Gravatar.swift b/WordPress/Classes/ViewRelated/Gravatar/ImageCache+Gravatar.swift index e4793356a3d4..ae0d05c67076 100644 --- a/WordPress/Classes/ViewRelated/Gravatar/ImageCache+Gravatar.swift +++ b/WordPress/Classes/ViewRelated/Gravatar/ImageCache+Gravatar.swift @@ -1,4 +1,4 @@ import WordPressUI import protocol Gravatar.ImageCaching -extension ImageCache: ImageCaching { } +extension WordPressUI.ImageCache: ImageCaching { } diff --git a/WordPress/Classes/ViewRelated/Gravatar/UIImageView+Gravatar.swift b/WordPress/Classes/ViewRelated/Gravatar/UIImageView+Gravatar.swift index cd301c908bf9..d2e5c0baea5a 100644 --- a/WordPress/Classes/ViewRelated/Gravatar/UIImageView+Gravatar.swift +++ b/WordPress/Classes/ViewRelated/Gravatar/UIImageView+Gravatar.swift @@ -22,7 +22,7 @@ public enum ObjcGravatarRating: Int { } extension UIImageView { - + /// Re-declaration for Objc compatibility @objc(downloadGravatarFor:gravatarRating:) public func objc_downloadGravatar(for email: String, gravatarRating: ObjcGravatarRating) { @@ -59,7 +59,11 @@ extension UIImageView { private func downloadGravatar(fullURL: URL?, placeholder: UIImage, animate: Bool, failure: ((Error?) -> ())? = nil) { self.gravatar.cancelImageDownload() - let options: [ImageSettingOption] = [.imageCache(ImageCache.shared)] + guard let cache = ImageCache.shared as? WordPressUI.ImageCache else { + assertionFailure("ImageCache.shared should be of type WordPressUI.ImageCache") + return + } + let options: [ImageSettingOption] = [.imageCache(cache)] self.gravatar.setImage(with: fullURL, placeholder: placeholder, options: options) { [weak self] result in @@ -89,7 +93,7 @@ fileprivate struct GravatarDefaults { } extension AvatarURL { - + public static func url(for email: String, preferredSize: ImageSize? = nil, gravatarRating: Rating? = nil, From 4963747dbf1536e870c5ee1656140a478f6d81a3 Mon Sep 17 00:00:00 2001 From: Pinar Olguc Date: Thu, 28 Mar 2024 13:36:12 +0300 Subject: [PATCH 21/43] Use AvatarURL everywhere --- WordPress/Classes/Models/ManagedPerson.swift | 2 +- WordPress/Classes/Utility/Media/ImageDownloader+Gravatar.swift | 2 +- .../Blog/Blog Details/BlogDetailsViewController+Me.swift | 2 +- .../Classes/ViewRelated/Blog/My Site/NoSitesViewModel.swift | 2 +- .../Notifications/Views/NoteBlockCommentTableViewCell.swift | 2 +- .../Notifications/Views/NoteBlockHeaderTableViewCell.swift | 2 +- .../Notifications/Views/NoteBlockUserTableViewCell.swift | 2 +- WordPress/Classes/ViewRelated/People/PeopleCell.swift | 2 +- WordPress/Classes/ViewRelated/People/PersonViewController.swift | 2 +- .../Post/Revisions/Views/Cell/RevisionsTableViewCell.swift | 2 +- .../Classes/ViewRelated/System/WPTabBarController+MeTab.swift | 2 +- .../Classes/ViewRelated/Views/List/ListTableViewCell.swift | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/WordPress/Classes/Models/ManagedPerson.swift b/WordPress/Classes/Models/ManagedPerson.swift index e65461ea2654..745ae1b6c9cb 100644 --- a/WordPress/Classes/Models/ManagedPerson.swift +++ b/WordPress/Classes/Models/ManagedPerson.swift @@ -11,7 +11,7 @@ public typealias Person = RemotePerson class ManagedPerson: NSManagedObject { func updateWith(_ person: T) { - let canonicalAvatarURL = person.avatarURL.flatMap { GravatarURL($0)?.canonicalURL } + let canonicalAvatarURL = person.avatarURL.flatMap { AvatarURL(url: $0)?.canonicalURL } avatarURL = canonicalAvatarURL?.absoluteString displayName = person.displayName diff --git a/WordPress/Classes/Utility/Media/ImageDownloader+Gravatar.swift b/WordPress/Classes/Utility/Media/ImageDownloader+Gravatar.swift index 424c4eb5aa8c..a4eb3ef71596 100644 --- a/WordPress/Classes/Utility/Media/ImageDownloader+Gravatar.swift +++ b/WordPress/Classes/Utility/Media/ImageDownloader+Gravatar.swift @@ -6,7 +6,7 @@ extension ImageDownloader { nonisolated func downloadGravatarImage(with email: String, completion: @escaping (UIImage?) -> Void) { - guard let url = GravatarURL.url(for: email) else { + guard let url = AvatarURL.url(for: email) else { completion(nil) return } diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Details/BlogDetailsViewController+Me.swift b/WordPress/Classes/ViewRelated/Blog/Blog Details/BlogDetailsViewController+Me.swift index b69dbc475941..40b98d2cc756 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog Details/BlogDetailsViewController+Me.swift +++ b/WordPress/Classes/ViewRelated/Blog/Blog Details/BlogDetailsViewController+Me.swift @@ -28,7 +28,7 @@ extension BlogDetailsViewController { guard let userInfo = notification.userInfo, let email = userInfo["email"] as? String, let image = userInfo["image"] as? UIImage, - let url = GravatarURL.url(for: email), + let url = AvatarURL.url(for: email), let gravatarIcon = image.gravatarIcon(size: Metrics.iconSize) else { return } diff --git a/WordPress/Classes/ViewRelated/Blog/My Site/NoSitesViewModel.swift b/WordPress/Classes/ViewRelated/Blog/My Site/NoSitesViewModel.swift index 895bc356f7f7..30a79d27d041 100644 --- a/WordPress/Classes/ViewRelated/Blog/My Site/NoSitesViewModel.swift +++ b/WordPress/Classes/ViewRelated/Blog/My Site/NoSitesViewModel.swift @@ -17,7 +17,7 @@ struct NoSitesViewModel { self.appUIType = appUIType self.displayName = account?.displayName ?? "-" if let email = account?.email { - self.gravatarURL = GravatarURL.url(for: email) + self.gravatarURL = AvatarURL.url(for: email) } else { self.gravatarURL = nil } diff --git a/WordPress/Classes/ViewRelated/Notifications/Views/NoteBlockCommentTableViewCell.swift b/WordPress/Classes/ViewRelated/Notifications/Views/NoteBlockCommentTableViewCell.swift index 09cbf57f3c7d..2e9b1fc8b92a 100644 --- a/WordPress/Classes/ViewRelated/Notifications/Views/NoteBlockCommentTableViewCell.swift +++ b/WordPress/Classes/ViewRelated/Notifications/Views/NoteBlockCommentTableViewCell.swift @@ -100,7 +100,7 @@ class NoteBlockCommentTableViewCell: NoteBlockTextTableViewCell { // MARK: - Public Methods @objc func downloadGravatarWithURL(_ url: URL?) { - let gravatar = url.flatMap { GravatarURL($0) } + let gravatar = url.flatMap { AvatarURL(url: $0) } gravatarImageView.downloadGravatar(gravatar, placeholder: placeholderImage, animate: true) } diff --git a/WordPress/Classes/ViewRelated/Notifications/Views/NoteBlockHeaderTableViewCell.swift b/WordPress/Classes/ViewRelated/Notifications/Views/NoteBlockHeaderTableViewCell.swift index 12ceca15d5e4..499384e8266f 100644 --- a/WordPress/Classes/ViewRelated/Notifications/Views/NoteBlockHeaderTableViewCell.swift +++ b/WordPress/Classes/ViewRelated/Notifications/Views/NoteBlockHeaderTableViewCell.swift @@ -68,7 +68,7 @@ class NoteBlockHeaderTableViewCell: NoteBlockTableViewCell { return } - if let gravatar = GravatarURL(url) { + if let gravatar = AvatarURL(url: url) { authorAvatarImageView.downloadGravatar(gravatar, placeholder: .gravatarPlaceholderImage, animate: true) } else { authorAvatarImageView.downloadSiteIcon(at: url.absoluteString) diff --git a/WordPress/Classes/ViewRelated/Notifications/Views/NoteBlockUserTableViewCell.swift b/WordPress/Classes/ViewRelated/Notifications/Views/NoteBlockUserTableViewCell.swift index 517af85ef373..78e76ed288e3 100644 --- a/WordPress/Classes/ViewRelated/Notifications/Views/NoteBlockUserTableViewCell.swift +++ b/WordPress/Classes/ViewRelated/Notifications/Views/NoteBlockUserTableViewCell.swift @@ -55,7 +55,7 @@ class NoteBlockUserTableViewCell: NoteBlockTableViewCell { return } - let gravatar = url.flatMap { GravatarURL($0) } + let gravatar = url.flatMap { AvatarURL(url: $0) } gravatarImageView.downloadGravatar(gravatar, placeholder: .gravatarPlaceholderImage, animate: true) gravatarURL = url diff --git a/WordPress/Classes/ViewRelated/People/PeopleCell.swift b/WordPress/Classes/ViewRelated/People/PeopleCell.swift index d80078b6c156..2de2ada0857b 100644 --- a/WordPress/Classes/ViewRelated/People/PeopleCell.swift +++ b/WordPress/Classes/ViewRelated/People/PeopleCell.swift @@ -37,7 +37,7 @@ class PeopleCell: WPTableViewCell { } @objc func setAvatarURL(_ avatarURL: URL?) { - let gravatar = avatarURL.flatMap { GravatarURL($0) } + let gravatar = avatarURL.flatMap { AvatarURL(url: $0) } let placeholder = UIImage(named: "gravatar")! avatarImageView.downloadGravatar(gravatar, placeholder: placeholder, animate: false) } diff --git a/WordPress/Classes/ViewRelated/People/PersonViewController.swift b/WordPress/Classes/ViewRelated/People/PersonViewController.swift index e452688b1752..680f9f6c19b2 100644 --- a/WordPress/Classes/ViewRelated/People/PersonViewController.swift +++ b/WordPress/Classes/ViewRelated/People/PersonViewController.swift @@ -508,7 +508,7 @@ private extension PersonViewController { } func refreshGravatarImage(in imageView: UIImageView) { - let gravatar = person.avatarURL.flatMap { GravatarURL($0) } + let gravatar = person.avatarURL.flatMap { AvatarURL(url: $0) } let placeholder = UIImage(named: "gravatar")! imageView.downloadGravatar(gravatar, placeholder: placeholder, animate: false) } diff --git a/WordPress/Classes/ViewRelated/Post/Revisions/Views/Cell/RevisionsTableViewCell.swift b/WordPress/Classes/ViewRelated/Post/Revisions/Views/Cell/RevisionsTableViewCell.swift index 01f9198c6912..b474e8cb2851 100644 --- a/WordPress/Classes/ViewRelated/Post/Revisions/Views/Cell/RevisionsTableViewCell.swift +++ b/WordPress/Classes/ViewRelated/Post/Revisions/Views/Cell/RevisionsTableViewCell.swift @@ -44,7 +44,7 @@ class RevisionsTableViewCell: UITableViewCell { if let avatarURL = avatarURL, let placeholder = UIImage(named: "gravatar") { let url = URL(string: avatarURL) - avatarImageView.downloadGravatar(url.flatMap { GravatarURL($0) }, + avatarImageView.downloadGravatar(url.flatMap { AvatarURL(url: $0) }, placeholder: placeholder, animate: false) } diff --git a/WordPress/Classes/ViewRelated/System/WPTabBarController+MeTab.swift b/WordPress/Classes/ViewRelated/System/WPTabBarController+MeTab.swift index 8775a65d91c1..cdfb0d52de68 100644 --- a/WordPress/Classes/ViewRelated/System/WPTabBarController+MeTab.swift +++ b/WordPress/Classes/ViewRelated/System/WPTabBarController+MeTab.swift @@ -42,7 +42,7 @@ extension WPTabBarController { guard let userInfo = notification.userInfo, let email = userInfo["email"] as? String, let image = userInfo["image"] as? UIImage, - let url = GravatarURL.url(for: email) else { + let url = AvatarURL.url(for: email) else { return } diff --git a/WordPress/Classes/ViewRelated/Views/List/ListTableViewCell.swift b/WordPress/Classes/ViewRelated/Views/List/ListTableViewCell.swift index b7b222a15cbb..ddbfc36d82ac 100644 --- a/WordPress/Classes/ViewRelated/Views/List/ListTableViewCell.swift +++ b/WordPress/Classes/ViewRelated/Views/List/ListTableViewCell.swift @@ -85,7 +85,7 @@ class ListTableViewCell: UITableViewCell, NibReusable { /// If the URL does not contain any image, the default placeholder image will be displayed. /// - Parameter url: The URL containing the image. func configureImage(with url: URL?) { - if let someURL = url, let gravatar = GravatarURL(someURL) { + if let someURL = url, let gravatar = AvatarURL(url: someURL) { avatarView.downloadGravatar(gravatar, placeholder: placeholderImage, animate: true) return } From e1649f3865f09d2a566259da1d8ac55745169eb0 Mon Sep 17 00:00:00 2001 From: Pinar Olguc Date: Thu, 28 Mar 2024 14:11:03 +0300 Subject: [PATCH 22/43] One more AvatarURL update --- .../ViewRelated/Comments/CommentContentTableViewCell.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/Classes/ViewRelated/Comments/CommentContentTableViewCell.swift b/WordPress/Classes/ViewRelated/Comments/CommentContentTableViewCell.swift index 755508322046..42894f383c00 100644 --- a/WordPress/Classes/ViewRelated/Comments/CommentContentTableViewCell.swift +++ b/WordPress/Classes/ViewRelated/Comments/CommentContentTableViewCell.swift @@ -358,7 +358,7 @@ private extension CommentContentTableViewCell { /// If the URL does not contain any image, the default placeholder image will be displayed. /// - Parameter url: The URL containing the image. func configureImage(with url: URL?) { - if let someURL = url, let gravatar = GravatarURL(someURL) { + if let someURL = url, let gravatar = AvatarURL(url: someURL) { avatarImageView.downloadGravatar(gravatar, placeholder: Style.placeholderImage, animate: true) return } From 74c55369d2b773a7bf76a45007dfb972dc308a4c Mon Sep 17 00:00:00 2001 From: Pinar Olguc Date: Thu, 28 Mar 2024 14:12:19 +0300 Subject: [PATCH 23/43] Add GravatarImageCaching --- WordPress/Classes/Utility/Media/MemoryCache.swift | 5 ++++- .../Classes/ViewRelated/Gravatar/ImageCache+Gravatar.swift | 4 ---- .../Classes/ViewRelated/Gravatar/UIImageView+Gravatar.swift | 4 ++-- WordPress/WordPress.xcodeproj/project.pbxproj | 4 ---- 4 files changed, 6 insertions(+), 11 deletions(-) delete mode 100644 WordPress/Classes/ViewRelated/Gravatar/ImageCache+Gravatar.swift diff --git a/WordPress/Classes/Utility/Media/MemoryCache.swift b/WordPress/Classes/Utility/Media/MemoryCache.swift index b5f87074b93b..8760bd51400d 100644 --- a/WordPress/Classes/Utility/Media/MemoryCache.swift +++ b/WordPress/Classes/Utility/Media/MemoryCache.swift @@ -1,6 +1,7 @@ import Foundation import AlamofireImage import WordPressUI +import protocol Gravatar.ImageCaching protocol MemoryCacheProtocol: AnyObject { subscript(key: String) -> UIImage? { get set } @@ -88,7 +89,9 @@ extension MemoryCache { } } -private struct WordpressUICacheAdapter: WordPressUI.ImageCaching { +public protocol GravatarImageCaching: WordPressUI.ImageCaching, ImageCaching { } + +private struct WordpressUICacheAdapter: GravatarImageCaching { let cache: MemoryCache func setImage(_ image: UIImage, forKey key: String) { diff --git a/WordPress/Classes/ViewRelated/Gravatar/ImageCache+Gravatar.swift b/WordPress/Classes/ViewRelated/Gravatar/ImageCache+Gravatar.swift deleted file mode 100644 index ae0d05c67076..000000000000 --- a/WordPress/Classes/ViewRelated/Gravatar/ImageCache+Gravatar.swift +++ /dev/null @@ -1,4 +0,0 @@ -import WordPressUI -import protocol Gravatar.ImageCaching - -extension WordPressUI.ImageCache: ImageCaching { } diff --git a/WordPress/Classes/ViewRelated/Gravatar/UIImageView+Gravatar.swift b/WordPress/Classes/ViewRelated/Gravatar/UIImageView+Gravatar.swift index d2e5c0baea5a..8fd5dfd96fdf 100644 --- a/WordPress/Classes/ViewRelated/Gravatar/UIImageView+Gravatar.swift +++ b/WordPress/Classes/ViewRelated/Gravatar/UIImageView+Gravatar.swift @@ -59,8 +59,8 @@ extension UIImageView { private func downloadGravatar(fullURL: URL?, placeholder: UIImage, animate: Bool, failure: ((Error?) -> ())? = nil) { self.gravatar.cancelImageDownload() - guard let cache = ImageCache.shared as? WordPressUI.ImageCache else { - assertionFailure("ImageCache.shared should be of type WordPressUI.ImageCache") + guard let cache = WordPressUI.ImageCache.shared as? GravatarImageCaching else { + assertionFailure("WordPressUI.ImageCache.shared should conform to GravatarImageCaching.") return } let options: [ImageSettingOption] = [.imageCache(cache)] diff --git a/WordPress/WordPress.xcodeproj/project.pbxproj b/WordPress/WordPress.xcodeproj/project.pbxproj index 19144644ac8c..221ec443b20a 100644 --- a/WordPress/WordPress.xcodeproj/project.pbxproj +++ b/WordPress/WordPress.xcodeproj/project.pbxproj @@ -2378,7 +2378,6 @@ 91DCE84621A6A7F50062F134 /* PostEditor+MoreOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91DCE84521A6A7F50062F134 /* PostEditor+MoreOptions.swift */; }; 91DCE84821A6C58C0062F134 /* PostEditor+Publish.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91DCE84721A6C58C0062F134 /* PostEditor+Publish.swift */; }; 91EABC452BB56EE10098D330 /* UIImageView+Gravatar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91EABC442BB56EE10098D330 /* UIImageView+Gravatar.swift */; }; - 91EABC472BB5731E0098D330 /* ImageCache+Gravatar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91EABC462BB5731D0098D330 /* ImageCache+Gravatar.swift */; }; 930F09171C7D110E00995926 /* ShareExtensionService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 930F09161C7D110E00995926 /* ShareExtensionService.swift */; }; 930F09191C7E1C1E00995926 /* ShareExtensionService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 930F09161C7D110E00995926 /* ShareExtensionService.swift */; }; 931215E1267DE1C0008C3B69 /* StatsTotalRowDataTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 931215E0267DE1C0008C3B69 /* StatsTotalRowDataTests.swift */; }; @@ -7691,7 +7690,6 @@ 91DCE84521A6A7F50062F134 /* PostEditor+MoreOptions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PostEditor+MoreOptions.swift"; sourceTree = ""; }; 91DCE84721A6C58C0062F134 /* PostEditor+Publish.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "PostEditor+Publish.swift"; sourceTree = ""; }; 91EABC442BB56EE10098D330 /* UIImageView+Gravatar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIImageView+Gravatar.swift"; sourceTree = ""; }; - 91EABC462BB5731D0098D330 /* ImageCache+Gravatar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ImageCache+Gravatar.swift"; sourceTree = ""; }; 92B40A77F0765C1E93B11727 /* Pods_WordPressDraftActionExtension.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_WordPressDraftActionExtension.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 930284B618EAF7B600CB0BF4 /* LocalCoreDataService.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LocalCoreDataService.h; sourceTree = ""; }; 93069F54176237A4000C966D /* ActivityLogViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ActivityLogViewController.h; sourceTree = ""; }; @@ -14206,7 +14204,6 @@ isa = PBXGroup; children = ( 91EABC442BB56EE10098D330 /* UIImageView+Gravatar.swift */, - 91EABC462BB5731D0098D330 /* ImageCache+Gravatar.swift */, ); path = Gravatar; sourceTree = ""; @@ -21308,7 +21305,6 @@ C737553E27C80DD500C6E9A1 /* String+CondenseWhitespace.swift in Sources */, 74FA4BE51FBFA0660031EAAD /* Extensions.xcdatamodeld in Sources */, 986CC4D220E1B2F6004F300E /* CustomLogFormatter.swift in Sources */, - 91EABC472BB5731E0098D330 /* ImageCache+Gravatar.swift in Sources */, 3236F77524ABB7770088E8F3 /* ReaderInterestsCollectionViewCell.swift in Sources */, 0C7E09202A4286A00052324C /* PostMetaButton.m in Sources */, 9826AE8221B5C6A700C851FA /* LatestPostSummaryCell.swift in Sources */, From 09348d0fdcbf1494c5258c5df1355e0900ac8ab6 Mon Sep 17 00:00:00 2001 From: Pinar Olguc Date: Thu, 28 Mar 2024 14:52:06 +0300 Subject: [PATCH 24/43] Update podfile --- Podfile | 4 ++-- Podfile.lock | 7 ++++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/Podfile b/Podfile index 81a693c513f8..87aef843a2ac 100644 --- a/Podfile +++ b/Podfile @@ -42,11 +42,11 @@ def aztec end def wordpress_ui - pod 'WordPressUI', '~> 1.15' + # pod 'WordPressUI', '~> 1.15' # pod 'WordPressUI', git: 'https://github.com/wordpress-mobile/WordPressUI-iOS', tag: '' # pod 'WordPressUI', git: 'https://github.com/wordpress-mobile/WordPressUI-iOS', branch: '' # pod 'WordPressUI', git: 'https://github.com/wordpress-mobile/WordPressUI-iOS', commit: '' - # pod 'WordPressUI', path: '../WordPressUI-iOS' + pod 'WordPressUI', path: '../WordPressUI-iOS' end def gravatar diff --git a/Podfile.lock b/Podfile.lock index 0cfe59a2f65a..b45bda915584 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -126,7 +126,7 @@ DEPENDENCIES: - WordPressAuthenticator (from `https://github.com/wordpress-mobile/WordPressAuthenticator-iOS.git`, commit `fa06fca7178b268d382d91861752b3be0729e8a8`) - WordPressKit (from `https://github.com/wordpress-mobile/WordPressKit-iOS.git`, commit `92c1536724af8bb57ee677996919c2a9e37434e8`) - WordPressShared (~> 2.3) - - WordPressUI (~> 1.15) + - WordPressUI (from `../WordPressUI-iOS`) - ZendeskSupportSDK (= 5.3.0) - ZIPFoundation (~> 0.9.8) @@ -161,7 +161,6 @@ SPEC REPOS: - UIDeviceIdentifier - WordPress-Aztec-iOS - WordPress-Editor-iOS - - WordPressUI - wpxmlrpc - ZendeskCommonUISDK - ZendeskCoreSDK @@ -186,6 +185,8 @@ EXTERNAL SOURCES: WordPressKit: :commit: 92c1536724af8bb57ee677996919c2a9e37434e8 :git: https://github.com/wordpress-mobile/WordPressKit-iOS.git + WordPressUI: + :path: "../WordPressUI-iOS" CHECKOUT OPTIONS: FSInteractiveMap: @@ -243,6 +244,6 @@ SPEC CHECKSUMS: ZendeskSupportSDK: 3a8e508ab1d9dd22dc038df6c694466414e037ba ZIPFoundation: d170fa8e270b2a32bef9dcdcabff5b8f1a5deced -PODFILE CHECKSUM: 050c35cfdc0e86886579eb435fcb84e70f6864e3 +PODFILE CHECKSUM: b9231d5f4652f478e79897eb92e356c7d1e31617 COCOAPODS: 1.14.2 From cf50b03a26f356f156ceb971532ee0a45bd7934d Mon Sep 17 00:00:00 2001 From: Pinar Olguc Date: Thu, 28 Mar 2024 14:58:51 +0300 Subject: [PATCH 25/43] bundle exec pod install --- Podfile.lock | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/Podfile.lock b/Podfile.lock index 426d9fb43335..2e8a1e04a436 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -25,6 +25,8 @@ PODS: - Down (0.6.6) - FSInteractiveMap (0.1.0) - Gifu (3.3.1) + - Gravatar (0.1.1) + - Gravatar/GravatarTests (0.1.1) - Gridicons (1.2.0) - Gutenberg (1.116.0) - JTAppleCalendar (8.0.5) @@ -104,6 +106,8 @@ DEPENDENCIES: - Down (~> 0.6.6) - FSInteractiveMap (from `https://github.com/wordpress-mobile/FSInteractiveMap.git`, tag `0.2.0`) - Gifu (= 3.3.1) + - Gravatar (from `../Gravatar-SDK-iOS`) + - Gravatar/GravatarTests (from `../Gravatar-SDK-iOS`) - Gridicons (~> 1.2) - Gutenberg (from `https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-v1.116.0.podspec`) - JTAppleCalendar (~> 8.0.5) @@ -121,7 +125,7 @@ DEPENDENCIES: - WordPressAuthenticator (>= 9.0.2, ~> 9.0) - WordPressKit (~> 14.1) - WordPressShared (>= 2.3.1, ~> 2.3) - - WordPressUI (~> 1.15) + - WordPressUI (from `../WordPressUI-iOS`) - ZendeskSupportSDK (= 5.3.0) - ZIPFoundation (~> 0.9.8) @@ -158,7 +162,6 @@ SPEC REPOS: - UIDeviceIdentifier - WordPressKit - WordPressShared - - WordPressUI - wpxmlrpc - ZendeskCommonUISDK - ZendeskCoreSDK @@ -173,8 +176,12 @@ EXTERNAL SOURCES: FSInteractiveMap: :git: https://github.com/wordpress-mobile/FSInteractiveMap.git :tag: 0.2.0 + Gravatar: + :path: "../Gravatar-SDK-iOS" Gutenberg: :podspec: https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-v1.116.0.podspec + WordPressUI: + :path: "../WordPressUI-iOS" CHECKOUT OPTIONS: FSInteractiveMap: @@ -192,6 +199,7 @@ SPEC CHECKSUMS: Down: 71bf4af3c04fa093e65dffa25c4b64fa61287373 FSInteractiveMap: a396f610f48b76cb540baa87139d056429abda86 Gifu: 416d4e38c4c2fed012f019e0a1d3ffcb58e5b842 + Gravatar: 2bab855f4d344c2fe3e8982ebaa22b5f42051674 Gridicons: 4455b9f366960121430e45997e32112ae49ffe1d Gutenberg: fda9c1f9d8d5ec0b565d0efb32757a39b046f538 JTAppleCalendar: 16c6501b22cb27520372c28b0a2e0b12c8d0cd73 @@ -225,6 +233,6 @@ SPEC CHECKSUMS: ZendeskSupportSDK: 3a8e508ab1d9dd22dc038df6c694466414e037ba ZIPFoundation: fa9ae5af13b7cf168245f24d1c672a4fb972e37f -PODFILE CHECKSUM: fe40f3befb57201c814b956688187e9595f34f20 +PODFILE CHECKSUM: 5ef0dad81f35142449c2237feae06cd1d335daa8 COCOAPODS: 1.15.2 From e857f7d5475fd951ca9d9491347c6a109849c782 Mon Sep 17 00:00:00 2001 From: Pinar Olguc Date: Thu, 28 Mar 2024 15:02:05 +0300 Subject: [PATCH 26/43] Update Podfile.lock --- Podfile.lock | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/Podfile.lock b/Podfile.lock index 426d9fb43335..2e8a1e04a436 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -25,6 +25,8 @@ PODS: - Down (0.6.6) - FSInteractiveMap (0.1.0) - Gifu (3.3.1) + - Gravatar (0.1.1) + - Gravatar/GravatarTests (0.1.1) - Gridicons (1.2.0) - Gutenberg (1.116.0) - JTAppleCalendar (8.0.5) @@ -104,6 +106,8 @@ DEPENDENCIES: - Down (~> 0.6.6) - FSInteractiveMap (from `https://github.com/wordpress-mobile/FSInteractiveMap.git`, tag `0.2.0`) - Gifu (= 3.3.1) + - Gravatar (from `../Gravatar-SDK-iOS`) + - Gravatar/GravatarTests (from `../Gravatar-SDK-iOS`) - Gridicons (~> 1.2) - Gutenberg (from `https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-v1.116.0.podspec`) - JTAppleCalendar (~> 8.0.5) @@ -121,7 +125,7 @@ DEPENDENCIES: - WordPressAuthenticator (>= 9.0.2, ~> 9.0) - WordPressKit (~> 14.1) - WordPressShared (>= 2.3.1, ~> 2.3) - - WordPressUI (~> 1.15) + - WordPressUI (from `../WordPressUI-iOS`) - ZendeskSupportSDK (= 5.3.0) - ZIPFoundation (~> 0.9.8) @@ -158,7 +162,6 @@ SPEC REPOS: - UIDeviceIdentifier - WordPressKit - WordPressShared - - WordPressUI - wpxmlrpc - ZendeskCommonUISDK - ZendeskCoreSDK @@ -173,8 +176,12 @@ EXTERNAL SOURCES: FSInteractiveMap: :git: https://github.com/wordpress-mobile/FSInteractiveMap.git :tag: 0.2.0 + Gravatar: + :path: "../Gravatar-SDK-iOS" Gutenberg: :podspec: https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-v1.116.0.podspec + WordPressUI: + :path: "../WordPressUI-iOS" CHECKOUT OPTIONS: FSInteractiveMap: @@ -192,6 +199,7 @@ SPEC CHECKSUMS: Down: 71bf4af3c04fa093e65dffa25c4b64fa61287373 FSInteractiveMap: a396f610f48b76cb540baa87139d056429abda86 Gifu: 416d4e38c4c2fed012f019e0a1d3ffcb58e5b842 + Gravatar: 2bab855f4d344c2fe3e8982ebaa22b5f42051674 Gridicons: 4455b9f366960121430e45997e32112ae49ffe1d Gutenberg: fda9c1f9d8d5ec0b565d0efb32757a39b046f538 JTAppleCalendar: 16c6501b22cb27520372c28b0a2e0b12c8d0cd73 @@ -225,6 +233,6 @@ SPEC CHECKSUMS: ZendeskSupportSDK: 3a8e508ab1d9dd22dc038df6c694466414e037ba ZIPFoundation: fa9ae5af13b7cf168245f24d1c672a4fb972e37f -PODFILE CHECKSUM: fe40f3befb57201c814b956688187e9595f34f20 +PODFILE CHECKSUM: 5ef0dad81f35142449c2237feae06cd1d335daa8 COCOAPODS: 1.15.2 From 76809122c047a4ba389b3e780cc65a29ef1aba64 Mon Sep 17 00:00:00 2001 From: Eduardo Toledo Date: Thu, 28 Mar 2024 13:31:50 +0100 Subject: [PATCH 27/43] Adding gravatar UIImageView extension to Jetpack target --- WordPress/WordPress.xcodeproj/project.pbxproj | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/WordPress/WordPress.xcodeproj/project.pbxproj b/WordPress/WordPress.xcodeproj/project.pbxproj index 7f60a7b58ea6..5380fc39bb2c 100644 --- a/WordPress/WordPress.xcodeproj/project.pbxproj +++ b/WordPress/WordPress.xcodeproj/project.pbxproj @@ -847,6 +847,7 @@ 1E5D00102493CE240004B708 /* GutenGhostView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E5D000F2493CE240004B708 /* GutenGhostView.swift */; }; 1E5D00142493E8C90004B708 /* GutenGhostView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1E5D00132493E8C90004B708 /* GutenGhostView.xib */; }; 1E672D95257663CE00421F13 /* GutenbergAudioUploadProcessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E672D94257663CE00421F13 /* GutenbergAudioUploadProcessor.swift */; }; + 1E732A7D2BB59AA1001103D4 /* UIImageView+Gravatar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91EABC442BB56EE10098D330 /* UIImageView+Gravatar.swift */; }; 1E9D544D23C4C56300F6A9E0 /* GutenbergRollout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E9D544C23C4C56300F6A9E0 /* GutenbergRollout.swift */; }; 223EA61E212A7C26A456C32C /* Pods_JetpackDraftActionExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 430F7B409FE22699ADB1A724 /* Pods_JetpackDraftActionExtension.framework */; }; 241E60B325CA0D2900912CEB /* UserSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 241E60B225CA0D2900912CEB /* UserSettings.swift */; }; @@ -10972,7 +10973,7 @@ path = Classes; sourceTree = ""; }; - 29B97314FDCFA39411CA2CEA = { + 29B97314FDCFA39411CA2CEA /* CustomTemplate */ = { isa = PBXGroup; children = ( 3F20FDF3276BF21000DA3CAD /* Packages */, @@ -19394,7 +19395,7 @@ bg, sk, ); - mainGroup = 29B97314FDCFA39411CA2CEA; + mainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */; packageReferences = ( 3FF1442E266F3C2400138163 /* XCRemoteSwiftPackageReference "ScreenObject" */, 3FC2C33B26C4CF0A00C6D98F /* XCRemoteSwiftPackageReference "XCUITestHelpers" */, @@ -20995,11 +20996,11 @@ files = ( ); inputPaths = ( - "$SRCROOT/../Scripts/BuildPhases/CopyGutenbergJS.inputs.xcfilelist", + $SRCROOT/../Scripts/BuildPhases/CopyGutenbergJS.inputs.xcfilelist, ); name = "Copy Gutenberg JS"; outputFileListPaths = ( - "$SRCROOT/../Scripts/BuildPhases/CopyGutenbergJS.outputs.xcfilelist", + $SRCROOT/../Scripts/BuildPhases/CopyGutenbergJS.outputs.xcfilelist, ); outputPaths = ( "", @@ -21194,13 +21195,13 @@ files = ( ); inputFileListPaths = ( - "$SRCROOT/../Scripts/BuildPhases/CopyGutenbergJS.inputs.xcfilelist", + $SRCROOT/../Scripts/BuildPhases/CopyGutenbergJS.inputs.xcfilelist, ); inputPaths = ( ); name = "Copy Gutenberg JS"; outputFileListPaths = ( - "$SRCROOT/../Scripts/BuildPhases/CopyGutenbergJS.outputs.xcfilelist", + $SRCROOT/../Scripts/BuildPhases/CopyGutenbergJS.outputs.xcfilelist, ); outputPaths = ( ); @@ -24480,6 +24481,7 @@ 0CD9FB7F2AF9C4DB009D9C7A /* UIBarButtonItem+Extensions.swift in Sources */, 3F8B45A029283D6C00730FA4 /* DashboardMigrationSuccessCell.swift in Sources */, 013A8CB72AB83B40004FF5D0 /* DashboardDomainsCardSearchView.swift in Sources */, + 1E732A7D2BB59AA1001103D4 /* UIImageView+Gravatar.swift in Sources */, FA98B61A29A3BF050071AAE8 /* DashboardBlazePromoCardView.swift in Sources */, FABB21942602FC2C00C8785C /* AztecPostViewController.swift in Sources */, F1585442267D3BF900A2E966 /* CalendarDayToggleButton.swift in Sources */, From 21a1324a4cf23f2a2b89574654bb04246f43e0b7 Mon Sep 17 00:00:00 2001 From: Pinar Olguc Date: Fri, 29 Mar 2024 13:44:10 +0300 Subject: [PATCH 28/43] Update podfile --- Podfile | 7 ++++--- Podfile.lock | 28 +++++++++++++++++----------- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/Podfile b/Podfile index fcacfa01888f..dbf4e055b7d6 100644 --- a/Podfile +++ b/Podfile @@ -44,12 +44,13 @@ def wordpress_ui # pod 'WordPressUI', '~> 1.15' # pod 'WordPressUI', git: 'https://github.com/wordpress-mobile/WordPressUI-iOS', tag: '' # pod 'WordPressUI', git: 'https://github.com/wordpress-mobile/WordPressUI-iOS', branch: '' - # pod 'WordPressUI', git: 'https://github.com/wordpress-mobile/WordPressUI-iOS', commit: '' - pod 'WordPressUI', path: '../WordPressUI-iOS' + pod 'WordPressUI', git: 'https://github.com/wordpress-mobile/WordPressUI-iOS', commit: '7f7606eefceaaab9982cf3417093a45d78bf284d' + # pod 'WordPressUI', path: '../WordPressUI-iOS' end def gravatar - pod 'Gravatar', path: '../Gravatar-SDK-iOS', :testspecs => ['GravatarTests'] + #pod 'Gravatar', path: '../Gravatar-SDK-iOS' + pod 'Gravatar', git: 'https://github.com/Automattic/Gravatar-SDK-iOS', commit: '03160554be8b9b7f97055453f25d398dda2ec218' end def wordpress_kit diff --git a/Podfile.lock b/Podfile.lock index 2e8a1e04a436..032bf922a4a0 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -25,8 +25,7 @@ PODS: - Down (0.6.6) - FSInteractiveMap (0.1.0) - Gifu (3.3.1) - - Gravatar (0.1.1) - - Gravatar/GravatarTests (0.1.1) + - Gravatar (1.0.0) - Gridicons (1.2.0) - Gutenberg (1.116.0) - JTAppleCalendar (8.0.5) @@ -78,7 +77,7 @@ PODS: - WordPressShared (~> 2.0-beta) - wpxmlrpc (~> 0.10) - WordPressShared (2.3.1) - - WordPressUI (1.15.1) + - WordPressUI (1.16.0) - wpxmlrpc (0.10.0) - ZendeskCommonUISDK (6.1.4) - ZendeskCoreSDK (2.5.1) @@ -106,8 +105,7 @@ DEPENDENCIES: - Down (~> 0.6.6) - FSInteractiveMap (from `https://github.com/wordpress-mobile/FSInteractiveMap.git`, tag `0.2.0`) - Gifu (= 3.3.1) - - Gravatar (from `../Gravatar-SDK-iOS`) - - Gravatar/GravatarTests (from `../Gravatar-SDK-iOS`) + - Gravatar (from `https://github.com/Automattic/Gravatar-SDK-iOS`, commit `03160554be8b9b7f97055453f25d398dda2ec218`) - Gridicons (~> 1.2) - Gutenberg (from `https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-v1.116.0.podspec`) - JTAppleCalendar (~> 8.0.5) @@ -125,7 +123,7 @@ DEPENDENCIES: - WordPressAuthenticator (>= 9.0.2, ~> 9.0) - WordPressKit (~> 14.1) - WordPressShared (>= 2.3.1, ~> 2.3) - - WordPressUI (from `../WordPressUI-iOS`) + - WordPressUI (from `https://github.com/wordpress-mobile/WordPressUI-iOS`, commit `7f7606eefceaaab9982cf3417093a45d78bf284d`) - ZendeskSupportSDK (= 5.3.0) - ZIPFoundation (~> 0.9.8) @@ -177,16 +175,24 @@ EXTERNAL SOURCES: :git: https://github.com/wordpress-mobile/FSInteractiveMap.git :tag: 0.2.0 Gravatar: - :path: "../Gravatar-SDK-iOS" + :commit: 03160554be8b9b7f97055453f25d398dda2ec218 + :git: https://github.com/Automattic/Gravatar-SDK-iOS Gutenberg: :podspec: https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-v1.116.0.podspec WordPressUI: - :path: "../WordPressUI-iOS" + :commit: 7f7606eefceaaab9982cf3417093a45d78bf284d + :git: https://github.com/wordpress-mobile/WordPressUI-iOS CHECKOUT OPTIONS: FSInteractiveMap: :git: https://github.com/wordpress-mobile/FSInteractiveMap.git :tag: 0.2.0 + Gravatar: + :commit: 03160554be8b9b7f97055453f25d398dda2ec218 + :git: https://github.com/Automattic/Gravatar-SDK-iOS + WordPressUI: + :commit: 7f7606eefceaaab9982cf3417093a45d78bf284d + :git: https://github.com/wordpress-mobile/WordPressUI-iOS SPEC CHECKSUMS: Alamofire: 02b772c9910e8eba1a079227c32fbd9e46c90a24 @@ -199,7 +205,7 @@ SPEC CHECKSUMS: Down: 71bf4af3c04fa093e65dffa25c4b64fa61287373 FSInteractiveMap: a396f610f48b76cb540baa87139d056429abda86 Gifu: 416d4e38c4c2fed012f019e0a1d3ffcb58e5b842 - Gravatar: 2bab855f4d344c2fe3e8982ebaa22b5f42051674 + Gravatar: bdd3950c5128304b51a9e655e4145334f23201d1 Gridicons: 4455b9f366960121430e45997e32112ae49ffe1d Gutenberg: fda9c1f9d8d5ec0b565d0efb32757a39b046f538 JTAppleCalendar: 16c6501b22cb27520372c28b0a2e0b12c8d0cd73 @@ -222,7 +228,7 @@ SPEC CHECKSUMS: WordPressAuthenticator: 20c962dc116473337be1a3825bd16c321ee865cb WordPressKit: 324ee6100ad74b72c0c37b81fab8937c437f0773 WordPressShared: 04c6d51441bb8fa29651075b3a5536c90ae89c76 - WordPressUI: 700e3ec5a9f77b6920c8104c338c85788036ab3c + WordPressUI: ec5ebcf7e63e797ba51d07513e340c1b14cf45a4 wpxmlrpc: 68db063041e85d186db21f674adf08d9c70627fd ZendeskCommonUISDK: ba160fe413b491af9e7bfcb9808afcd494dc83a5 ZendeskCoreSDK: 19a18e5ef2edcb18f4dbc0ea0d12bd31f515712a @@ -233,6 +239,6 @@ SPEC CHECKSUMS: ZendeskSupportSDK: 3a8e508ab1d9dd22dc038df6c694466414e037ba ZIPFoundation: fa9ae5af13b7cf168245f24d1c672a4fb972e37f -PODFILE CHECKSUM: 5ef0dad81f35142449c2237feae06cd1d335daa8 +PODFILE CHECKSUM: 9b1edc59671fcd1363fafad4a0b1b35a1337dcc1 COCOAPODS: 1.15.2 From 1d116d6c7e3789c5a61706a15e3f9d9a5da19ae4 Mon Sep 17 00:00:00 2001 From: Pinar Olguc Date: Fri, 29 Mar 2024 13:47:08 +0300 Subject: [PATCH 29/43] Use AvatarURL --- .../Views/List/NotificationsList/AvatarsView.swift | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/WordPress/Classes/ViewRelated/Views/List/NotificationsList/AvatarsView.swift b/WordPress/Classes/ViewRelated/Views/List/NotificationsList/AvatarsView.swift index c55fbd7274d6..f06e2ea76e04 100644 --- a/WordPress/Classes/ViewRelated/Views/List/NotificationsList/AvatarsView.swift +++ b/WordPress/Classes/ViewRelated/Views/List/NotificationsList/AvatarsView.swift @@ -1,4 +1,5 @@ import SwiftUI +import Gravatar import DesignSystem import WordPressUI @@ -64,9 +65,9 @@ struct AvatarsView: View { private func avatar(url: URL?) -> some View { let processedURL: URL? - if let url, let gravatar = Gravatar(url) { - let size = Int(ceil(style.diameter * UIScreen.main.scale)) - processedURL = gravatar.urlWithSize(size) + let size = Int(ceil(style.diameter * UIScreen.main.scale)) + if let url, let gravatar = AvatarURL(url: url, options: .init(preferredSize: .pixels(size))) { + processedURL = gravatar.url } else { processedURL = url } From 000e6da08db07b70f06233492283d1642cafd071 Mon Sep 17 00:00:00 2001 From: Pinar Olguc Date: Fri, 29 Mar 2024 14:10:24 +0300 Subject: [PATCH 30/43] Fix deprecated warnings --- .../ViewRelated/Gravatar/UIImageView+Gravatar.swift | 13 +++++++++++-- .../Me/My Profile/MyProfileHeaderView.swift | 2 +- .../ViewRelated/Me/Views/Header/MeHeaderView.m | 4 ++-- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/WordPress/Classes/ViewRelated/Gravatar/UIImageView+Gravatar.swift b/WordPress/Classes/ViewRelated/Gravatar/UIImageView+Gravatar.swift index 8fd5dfd96fdf..b6bc4e1bfe7b 100644 --- a/WordPress/Classes/ViewRelated/Gravatar/UIImageView+Gravatar.swift +++ b/WordPress/Classes/ViewRelated/Gravatar/UIImageView+Gravatar.swift @@ -2,9 +2,9 @@ import Foundation import Gravatar import WordPressUI -// Convenience intermediate enum for Objc compatibility. -@objc(GravatarRating) +/// Convenience intermediate enum for Objc compatibility. /// Gravatar Image Ratings for Objc compatibility. +@objc public enum ObjcGravatarRating: Int { case g case pg @@ -78,6 +78,15 @@ extension UIImageView { } } + @objc public func overrideGravatarImageCache(_ image: UIImage, gravatarRating: ObjcGravatarRating, email: String) { + guard let gravatarURL = AvatarURL.url(for: email, preferredSize: .pixels(gravatarDefaultSize()), gravatarRating: gravatarRating.map()) else { + return + } + + listenForGravatarChanges(forEmail: email) + overrideImageCache(for: gravatarURL, with: image) + } + private func gravatarDefaultSize() -> Int { guard bounds.size.equalTo(.zero) == false else { return GravatarDefaults.imageSize diff --git a/WordPress/Classes/ViewRelated/Me/My Profile/MyProfileHeaderView.swift b/WordPress/Classes/ViewRelated/Me/My Profile/MyProfileHeaderView.swift index 1133df4f4310..a996c4503a5d 100644 --- a/WordPress/Classes/ViewRelated/Me/My Profile/MyProfileHeaderView.swift +++ b/WordPress/Classes/ViewRelated/Me/My Profile/MyProfileHeaderView.swift @@ -62,7 +62,7 @@ class MyProfileHeaderView: UITableViewHeaderFooterView { // might return the cached (outdated) image, and the UI will end up in an inconsistent state. // if let email = gravatarEmail { - gravatarImageView.overrideGravatarImageCache(image, rating: GravatarRatings.x, email: email) + gravatarImageView.overrideGravatarImageCache(image, gravatarRating: ObjcGravatarRating.x, email: email) gravatarImageView.updateGravatar(image: image, email: email) } } diff --git a/WordPress/Classes/ViewRelated/Me/Views/Header/MeHeaderView.m b/WordPress/Classes/ViewRelated/Me/Views/Header/MeHeaderView.m index 17673c4f418a..1bfbf0bb5671 100644 --- a/WordPress/Classes/ViewRelated/Me/Views/Header/MeHeaderView.m +++ b/WordPress/Classes/ViewRelated/Me/Views/Header/MeHeaderView.m @@ -68,7 +68,7 @@ - (NSString *)username - (void)setGravatarEmail:(NSString *)gravatarEmail { // Since this view is only visible to the current user, we should show all ratings - [self.gravatarImageView downloadGravatarFor:gravatarEmail gravatarRating:GravatarRatingX]; + [self.gravatarImageView downloadGravatarFor:gravatarEmail gravatarRating:ObjcGravatarRatingX]; _gravatarEmail = gravatarEmail; } @@ -80,7 +80,7 @@ - (void)overrideGravatarImage:(UIImage *)gravatarImage // We need to update the internal cache. Otherwise, any upcoming query to refresh the gravatar // might return the cached (outdated) image, and the UI will end up in an inconsistent state. // - [self.gravatarImageView overrideGravatarImageCache:gravatarImage rating:GravatarRatingsX email:self.gravatarEmail]; + [self.gravatarImageView overrideGravatarImageCache:gravatarImage gravatarRating:ObjcGravatarRatingX email:self.gravatarEmail]; [self.gravatarImageView updateGravatarWithImage:gravatarImage email:self.gravatarEmail]; } From 539b0ded18e19f4aef29ba0c8e10aeae8e0fc988 Mon Sep 17 00:00:00 2001 From: Pinar Olguc Date: Fri, 29 Mar 2024 14:22:42 +0300 Subject: [PATCH 31/43] Small update --- .../Classes/ViewRelated/Me/My Profile/MyProfileHeaderView.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/Classes/ViewRelated/Me/My Profile/MyProfileHeaderView.swift b/WordPress/Classes/ViewRelated/Me/My Profile/MyProfileHeaderView.swift index a996c4503a5d..f063aaa8c326 100644 --- a/WordPress/Classes/ViewRelated/Me/My Profile/MyProfileHeaderView.swift +++ b/WordPress/Classes/ViewRelated/Me/My Profile/MyProfileHeaderView.swift @@ -62,7 +62,7 @@ class MyProfileHeaderView: UITableViewHeaderFooterView { // might return the cached (outdated) image, and the UI will end up in an inconsistent state. // if let email = gravatarEmail { - gravatarImageView.overrideGravatarImageCache(image, gravatarRating: ObjcGravatarRating.x, email: email) + gravatarImageView.overrideGravatarImageCache(image, gravatarRating: .x, email: email) gravatarImageView.updateGravatar(image: image, email: email) } } From afa30ee907790d811dc4f90f13023c0e5881bd7b Mon Sep 17 00:00:00 2001 From: Pinar Olguc Date: Fri, 29 Mar 2024 14:24:17 +0300 Subject: [PATCH 32/43] Put space after # --- Podfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Podfile b/Podfile index dbf4e055b7d6..2e3c23be5799 100644 --- a/Podfile +++ b/Podfile @@ -49,7 +49,7 @@ def wordpress_ui end def gravatar - #pod 'Gravatar', path: '../Gravatar-SDK-iOS' + # pod 'Gravatar', path: '../Gravatar-SDK-iOS' pod 'Gravatar', git: 'https://github.com/Automattic/Gravatar-SDK-iOS', commit: '03160554be8b9b7f97055453f25d398dda2ec218' end From 2bc7723bde371d02448d1d8d67744f90369cd8ae Mon Sep 17 00:00:00 2001 From: Pinar Olguc Date: Fri, 29 Mar 2024 14:33:54 +0300 Subject: [PATCH 33/43] Remove unnecessary method --- WordPress/Classes/Services/GravatarService.swift | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/WordPress/Classes/Services/GravatarService.swift b/WordPress/Classes/Services/GravatarService.swift index b974e16e0e3e..00df1a603b67 100644 --- a/WordPress/Classes/Services/GravatarService.swift +++ b/WordPress/Classes/Services/GravatarService.swift @@ -31,7 +31,7 @@ public class GravatarService { /// - completion: A completion block. /// open func fetchProfile(email: String, onCompletion: @escaping ((_ profile: GravatarProfile?) -> Void)) { - let remote = gravatarServiceRemote() + let remote = GravatarServiceRemote() remote.fetchProfile(email, success: { remoteProfile in var profile = GravatarProfile() profile.profileID = remoteProfile.profileID @@ -78,8 +78,4 @@ public class GravatarService { } } } - - func gravatarServiceRemote() -> GravatarServiceRemote { - return GravatarServiceRemote() - } } From 7a6df640077112e0711660544fc49d2c495afbff Mon Sep 17 00:00:00 2001 From: Pinar Olguc Date: Fri, 29 Mar 2024 14:34:06 +0300 Subject: [PATCH 34/43] Update tests --- WordPress/WordPressTest/GravatarServiceTests.swift | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/WordPress/WordPressTest/GravatarServiceTests.swift b/WordPress/WordPressTest/GravatarServiceTests.swift index 83a0a1782ade..1a4a21f97736 100644 --- a/WordPress/WordPressTest/GravatarServiceTests.swift +++ b/WordPress/WordPressTest/GravatarServiceTests.swift @@ -24,9 +24,8 @@ class GravatarServiceTests: CoreDataTestCase { class ImageServiceMock: GravatarImageUploader { var capturedAccountToken: String = "" var capturedAccountEmail: String = "" - - func upload(_ image: UIImage, email: String, accessToken: String) async throws -> URLResponse { - capturedAccountEmail = email + func upload(_ image: UIImage, email: Email, accessToken: String) async throws -> URLResponse { + capturedAccountEmail = email.rawValue capturedAccountToken = accessToken return URLResponse() } From ad5833f3a5cac5e12ffefb2a86a19a3cc873e319 Mon Sep 17 00:00:00 2001 From: Pinar Olguc Date: Fri, 29 Mar 2024 14:36:50 +0300 Subject: [PATCH 35/43] Run pod install --- Podfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Podfile.lock b/Podfile.lock index 032bf922a4a0..506dc78b7139 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -239,6 +239,6 @@ SPEC CHECKSUMS: ZendeskSupportSDK: 3a8e508ab1d9dd22dc038df6c694466414e037ba ZIPFoundation: fa9ae5af13b7cf168245f24d1c672a4fb972e37f -PODFILE CHECKSUM: 9b1edc59671fcd1363fafad4a0b1b35a1337dcc1 +PODFILE CHECKSUM: 895fc4f77cff98a8f5c419e96e30991020ea3225 COCOAPODS: 1.15.2 From 49d78a082eaa299a2835d70036bf7bfc9d4829eb Mon Sep 17 00:00:00 2001 From: Pinar Olguc Date: Fri, 29 Mar 2024 14:56:19 +0300 Subject: [PATCH 36/43] Fallback to internal cache --- .../ViewRelated/Gravatar/UIImageView+Gravatar.swift | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/WordPress/Classes/ViewRelated/Gravatar/UIImageView+Gravatar.swift b/WordPress/Classes/ViewRelated/Gravatar/UIImageView+Gravatar.swift index b6bc4e1bfe7b..9d45b078c427 100644 --- a/WordPress/Classes/ViewRelated/Gravatar/UIImageView+Gravatar.swift +++ b/WordPress/Classes/ViewRelated/Gravatar/UIImageView+Gravatar.swift @@ -59,11 +59,16 @@ extension UIImageView { private func downloadGravatar(fullURL: URL?, placeholder: UIImage, animate: Bool, failure: ((Error?) -> ())? = nil) { self.gravatar.cancelImageDownload() - guard let cache = WordPressUI.ImageCache.shared as? GravatarImageCaching else { + var options: [ImageSettingOption]? + if let cache = WordPressUI.ImageCache.shared as? GravatarImageCaching { + options = [.imageCache(cache)] + } + else { + // If we don't pass any cache to `gravatar.setImage(...)` it will use its internal in-memory cache. + // But in order to make things work consistently with the rest of the app, we should use `WordPressUI.ImageCache.shared` here. + // It needs to be fixed if we fail to do that. That's why we put an assertionFailure here. assertionFailure("WordPressUI.ImageCache.shared should conform to GravatarImageCaching.") - return } - let options: [ImageSettingOption] = [.imageCache(cache)] self.gravatar.setImage(with: fullURL, placeholder: placeholder, options: options) { [weak self] result in From abed54adbca6cfaaa8ffb56ee6b1b21ae65e2305 Mon Sep 17 00:00:00 2001 From: Pinar Olguc Date: Fri, 29 Mar 2024 14:57:25 +0300 Subject: [PATCH 37/43] Use explicit type --- .../Classes/ViewRelated/Me/My Profile/MyProfileHeaderView.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/Classes/ViewRelated/Me/My Profile/MyProfileHeaderView.swift b/WordPress/Classes/ViewRelated/Me/My Profile/MyProfileHeaderView.swift index f063aaa8c326..a996c4503a5d 100644 --- a/WordPress/Classes/ViewRelated/Me/My Profile/MyProfileHeaderView.swift +++ b/WordPress/Classes/ViewRelated/Me/My Profile/MyProfileHeaderView.swift @@ -62,7 +62,7 @@ class MyProfileHeaderView: UITableViewHeaderFooterView { // might return the cached (outdated) image, and the UI will end up in an inconsistent state. // if let email = gravatarEmail { - gravatarImageView.overrideGravatarImageCache(image, gravatarRating: .x, email: email) + gravatarImageView.overrideGravatarImageCache(image, gravatarRating: ObjcGravatarRating.x, email: email) gravatarImageView.updateGravatar(image: image, email: email) } } From b8f9b6a0b9096dec5e4633dd774897a1a900fe2e Mon Sep 17 00:00:00 2001 From: Pinar Olguc Date: Fri, 29 Mar 2024 15:12:49 +0300 Subject: [PATCH 38/43] Revert --- .../ViewRelated/NUX/LoginEpilogueUserInfo.swift | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/WordPress/Classes/ViewRelated/NUX/LoginEpilogueUserInfo.swift b/WordPress/Classes/ViewRelated/NUX/LoginEpilogueUserInfo.swift index a5fa7607f316..2a73b71d5b0d 100644 --- a/WordPress/Classes/ViewRelated/NUX/LoginEpilogueUserInfo.swift +++ b/WordPress/Classes/ViewRelated/NUX/LoginEpilogueUserInfo.swift @@ -38,18 +38,9 @@ public struct LoginEpilogueUserInfo { // extension LoginEpilogueUserInfo { - /// Updates the Epilogue properties, given a GravatarProfile instance. - /// - func updating(with profile: Gravatar.UserProfile) -> LoginEpilogueUserInfo { - var copy = self - copy.gravatarUrl = profile.thumbnailURLString - copy.fullName = profile.displayName ?? "" - return copy - } - mutating func update(with profile: GravatarProfile) { - self.gravatarUrl = profile.thumbnailUrl - self.fullName = profile.displayName + gravatarUrl = profile.thumbnailUrl + fullName = profile.displayName } mutating func update(with socialUser: SocialUser) { From 0b5643985e145780d6d137dbb562a1f083ef426b Mon Sep 17 00:00:00 2001 From: Pinar Olguc Date: Fri, 29 Mar 2024 17:39:42 +0300 Subject: [PATCH 39/43] Use AvatarURL --- .../Sources/Views/NotificationContentView.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/WordPressNotificationContentExtension/Sources/Views/NotificationContentView.swift b/WordPress/WordPressNotificationContentExtension/Sources/Views/NotificationContentView.swift index 949a36ce0980..a1b4de263804 100644 --- a/WordPress/WordPressNotificationContentExtension/Sources/Views/NotificationContentView.swift +++ b/WordPress/WordPressNotificationContentExtension/Sources/Views/NotificationContentView.swift @@ -187,7 +187,7 @@ extension NotificationContentView { func downloadGravatar() { guard let specifiedGravatar = viewModel.gravatarURLString, let validURL = URL(string: specifiedGravatar), - let gravatar = GravatarURL(validURL) else { + let gravatar = AvatarURL(validURL) else { return } From e101f368fb91799d5e9ebcad6cec089044759471 Mon Sep 17 00:00:00 2001 From: Pinar Olguc Date: Mon, 1 Apr 2024 17:23:38 +0300 Subject: [PATCH 40/43] pod install --- Podfile.lock | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/Podfile.lock b/Podfile.lock index 964b2cd421a5..b874a9333aad 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -25,6 +25,7 @@ PODS: - Down (0.6.6) - FSInteractiveMap (0.1.0) - Gifu (3.3.1) + - Gravatar (1.0.0) - Gridicons (1.2.0) - Gutenberg (1.116.0) - JTAppleCalendar (8.0.5) @@ -76,7 +77,7 @@ PODS: - WordPressShared (~> 2.0-beta) - wpxmlrpc (~> 0.10) - WordPressShared (2.3.1) - - WordPressUI (1.15.1) + - WordPressUI (1.16.0) - wpxmlrpc (0.10.0) - ZendeskCommonUISDK (6.1.4) - ZendeskCoreSDK (2.5.1) @@ -104,6 +105,7 @@ DEPENDENCIES: - Down (~> 0.6.6) - FSInteractiveMap (from `https://github.com/wordpress-mobile/FSInteractiveMap.git`, tag `0.2.0`) - Gifu (= 3.3.1) + - Gravatar (from `https://github.com/Automattic/Gravatar-SDK-iOS`, commit `03160554be8b9b7f97055453f25d398dda2ec218`) - Gridicons (~> 1.2) - Gutenberg (from `https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-v1.116.0.podspec`) - JTAppleCalendar (~> 8.0.5) @@ -121,7 +123,7 @@ DEPENDENCIES: - WordPressAuthenticator (>= 9.0.2, ~> 9.0) - WordPressKit (from `https://github.com/wordpress-mobile/WordPressKit-iOS.git`, commit `6a3b5c873069ec9c3efc336f5dd22dddd582a246`) - WordPressShared (>= 2.3.1, ~> 2.3) - - WordPressUI (~> 1.15) + - WordPressUI (from `https://github.com/wordpress-mobile/WordPressUI-iOS`, commit `7f7606eefceaaab9982cf3417093a45d78bf284d`) - ZendeskSupportSDK (= 5.3.0) - ZIPFoundation (~> 0.9.8) @@ -157,7 +159,6 @@ SPEC REPOS: - SwiftLint - UIDeviceIdentifier - WordPressShared - - WordPressUI - wpxmlrpc - ZendeskCommonUISDK - ZendeskCoreSDK @@ -172,19 +173,31 @@ EXTERNAL SOURCES: FSInteractiveMap: :git: https://github.com/wordpress-mobile/FSInteractiveMap.git :tag: 0.2.0 + Gravatar: + :commit: 03160554be8b9b7f97055453f25d398dda2ec218 + :git: https://github.com/Automattic/Gravatar-SDK-iOS Gutenberg: :podspec: https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-v1.116.0.podspec WordPressKit: :commit: 6a3b5c873069ec9c3efc336f5dd22dddd582a246 :git: https://github.com/wordpress-mobile/WordPressKit-iOS.git + WordPressUI: + :commit: 7f7606eefceaaab9982cf3417093a45d78bf284d + :git: https://github.com/wordpress-mobile/WordPressUI-iOS CHECKOUT OPTIONS: FSInteractiveMap: :git: https://github.com/wordpress-mobile/FSInteractiveMap.git :tag: 0.2.0 + Gravatar: + :commit: 03160554be8b9b7f97055453f25d398dda2ec218 + :git: https://github.com/Automattic/Gravatar-SDK-iOS WordPressKit: :commit: 6a3b5c873069ec9c3efc336f5dd22dddd582a246 :git: https://github.com/wordpress-mobile/WordPressKit-iOS.git + WordPressUI: + :commit: 7f7606eefceaaab9982cf3417093a45d78bf284d + :git: https://github.com/wordpress-mobile/WordPressUI-iOS SPEC CHECKSUMS: Alamofire: 02b772c9910e8eba1a079227c32fbd9e46c90a24 @@ -197,6 +210,7 @@ SPEC CHECKSUMS: Down: 71bf4af3c04fa093e65dffa25c4b64fa61287373 FSInteractiveMap: a396f610f48b76cb540baa87139d056429abda86 Gifu: 416d4e38c4c2fed012f019e0a1d3ffcb58e5b842 + Gravatar: bdd3950c5128304b51a9e655e4145334f23201d1 Gridicons: 4455b9f366960121430e45997e32112ae49ffe1d Gutenberg: fda9c1f9d8d5ec0b565d0efb32757a39b046f538 JTAppleCalendar: 16c6501b22cb27520372c28b0a2e0b12c8d0cd73 @@ -219,7 +233,7 @@ SPEC CHECKSUMS: WordPressAuthenticator: 47ac66428c0a712ced8eb0ab481f64e2f4e80f47 WordPressKit: d4db2fa5861380bd6b71d5574f2bc63cdeee47ba WordPressShared: 04c6d51441bb8fa29651075b3a5536c90ae89c76 - WordPressUI: 700e3ec5a9f77b6920c8104c338c85788036ab3c + WordPressUI: ec5ebcf7e63e797ba51d07513e340c1b14cf45a4 wpxmlrpc: 68db063041e85d186db21f674adf08d9c70627fd ZendeskCommonUISDK: ba160fe413b491af9e7bfcb9808afcd494dc83a5 ZendeskCoreSDK: 19a18e5ef2edcb18f4dbc0ea0d12bd31f515712a @@ -230,6 +244,6 @@ SPEC CHECKSUMS: ZendeskSupportSDK: 3a8e508ab1d9dd22dc038df6c694466414e037ba ZIPFoundation: fa9ae5af13b7cf168245f24d1c672a4fb972e37f -PODFILE CHECKSUM: b7cab86f4b24a5c0fb443ceb9cece8b48ffad2f6 +PODFILE CHECKSUM: 66adbf6295e17915326455241641fab07bc66bf9 COCOAPODS: 1.15.2 From 6762d7d2c9352fdfeb104e66155f39eba141cb4a Mon Sep 17 00:00:00 2001 From: Pinar Olguc Date: Tue, 2 Apr 2024 08:57:28 +0300 Subject: [PATCH 41/43] Update WordPressUI as 1.16 --- Podfile | 4 ++-- Podfile.lock | 11 +++-------- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/Podfile b/Podfile index 3ddd5c642470..5a4dd4c3661a 100644 --- a/Podfile +++ b/Podfile @@ -41,10 +41,10 @@ def aztec end def wordpress_ui - # pod 'WordPressUI', '~> 1.15' + pod 'WordPressUI', '~> 1.16' # pod 'WordPressUI', git: 'https://github.com/wordpress-mobile/WordPressUI-iOS', tag: '' # pod 'WordPressUI', git: 'https://github.com/wordpress-mobile/WordPressUI-iOS', branch: '' - pod 'WordPressUI', git: 'https://github.com/wordpress-mobile/WordPressUI-iOS', commit: '7f7606eefceaaab9982cf3417093a45d78bf284d' + # pod 'WordPressUI', git: 'https://github.com/wordpress-mobile/WordPressUI-iOS', commit: '' # pod 'WordPressUI', path: '../WordPressUI-iOS' end diff --git a/Podfile.lock b/Podfile.lock index b874a9333aad..c19b921b4729 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -123,7 +123,7 @@ DEPENDENCIES: - WordPressAuthenticator (>= 9.0.2, ~> 9.0) - WordPressKit (from `https://github.com/wordpress-mobile/WordPressKit-iOS.git`, commit `6a3b5c873069ec9c3efc336f5dd22dddd582a246`) - WordPressShared (>= 2.3.1, ~> 2.3) - - WordPressUI (from `https://github.com/wordpress-mobile/WordPressUI-iOS`, commit `7f7606eefceaaab9982cf3417093a45d78bf284d`) + - WordPressUI (~> 1.16) - ZendeskSupportSDK (= 5.3.0) - ZIPFoundation (~> 0.9.8) @@ -159,6 +159,7 @@ SPEC REPOS: - SwiftLint - UIDeviceIdentifier - WordPressShared + - WordPressUI - wpxmlrpc - ZendeskCommonUISDK - ZendeskCoreSDK @@ -181,9 +182,6 @@ EXTERNAL SOURCES: WordPressKit: :commit: 6a3b5c873069ec9c3efc336f5dd22dddd582a246 :git: https://github.com/wordpress-mobile/WordPressKit-iOS.git - WordPressUI: - :commit: 7f7606eefceaaab9982cf3417093a45d78bf284d - :git: https://github.com/wordpress-mobile/WordPressUI-iOS CHECKOUT OPTIONS: FSInteractiveMap: @@ -195,9 +193,6 @@ CHECKOUT OPTIONS: WordPressKit: :commit: 6a3b5c873069ec9c3efc336f5dd22dddd582a246 :git: https://github.com/wordpress-mobile/WordPressKit-iOS.git - WordPressUI: - :commit: 7f7606eefceaaab9982cf3417093a45d78bf284d - :git: https://github.com/wordpress-mobile/WordPressUI-iOS SPEC CHECKSUMS: Alamofire: 02b772c9910e8eba1a079227c32fbd9e46c90a24 @@ -244,6 +239,6 @@ SPEC CHECKSUMS: ZendeskSupportSDK: 3a8e508ab1d9dd22dc038df6c694466414e037ba ZIPFoundation: fa9ae5af13b7cf168245f24d1c672a4fb972e37f -PODFILE CHECKSUM: 66adbf6295e17915326455241641fab07bc66bf9 +PODFILE CHECKSUM: e7c6769a2b5f9d352e07edc9ca7f21469878a0e7 COCOAPODS: 1.15.2 From e421b1f32c896c789b4c786436c8d07b63a62165 Mon Sep 17 00:00:00 2001 From: Pinar Olguc Date: Tue, 2 Apr 2024 09:14:05 +0300 Subject: [PATCH 42/43] Bump Gravatar-SDK-iOS to 1.0.0 --- Podfile | 2 +- Podfile.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Podfile b/Podfile index 26813461e626..7505e294f71a 100644 --- a/Podfile +++ b/Podfile @@ -50,7 +50,7 @@ end def gravatar # pod 'Gravatar', path: '../Gravatar-SDK-iOS' - pod 'Gravatar', git: 'https://github.com/Automattic/Gravatar-SDK-iOS', commit: '03160554be8b9b7f97055453f25d398dda2ec218' + pod 'Gravatar', git: 'https://github.com/Automattic/Gravatar-SDK-iOS', tag: '1.0.0' end def wordpress_kit diff --git a/Podfile.lock b/Podfile.lock index 2e21f8284111..58467665836e 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -105,7 +105,7 @@ DEPENDENCIES: - Down (~> 0.6.6) - FSInteractiveMap (from `https://github.com/wordpress-mobile/FSInteractiveMap.git`, tag `0.2.0`) - Gifu (= 3.3.1) - - Gravatar (from `https://github.com/Automattic/Gravatar-SDK-iOS`, commit `03160554be8b9b7f97055453f25d398dda2ec218`) + - Gravatar (from `https://github.com/Automattic/Gravatar-SDK-iOS`, tag `1.0.0`) - Gridicons (~> 1.2) - Gutenberg (from `https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-v1.116.0.podspec`) - JTAppleCalendar (~> 8.0.5) @@ -176,8 +176,8 @@ EXTERNAL SOURCES: :git: https://github.com/wordpress-mobile/FSInteractiveMap.git :tag: 0.2.0 Gravatar: - :commit: 03160554be8b9b7f97055453f25d398dda2ec218 :git: https://github.com/Automattic/Gravatar-SDK-iOS + :tag: 1.0.0 Gutenberg: :podspec: https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-v1.116.0.podspec @@ -186,8 +186,8 @@ CHECKOUT OPTIONS: :git: https://github.com/wordpress-mobile/FSInteractiveMap.git :tag: 0.2.0 Gravatar: - :commit: 03160554be8b9b7f97055453f25d398dda2ec218 :git: https://github.com/Automattic/Gravatar-SDK-iOS + :tag: 1.0.0 SPEC CHECKSUMS: Alamofire: 02b772c9910e8eba1a079227c32fbd9e46c90a24 @@ -234,6 +234,6 @@ SPEC CHECKSUMS: ZendeskSupportSDK: 3a8e508ab1d9dd22dc038df6c694466414e037ba ZIPFoundation: fa9ae5af13b7cf168245f24d1c672a4fb972e37f -PODFILE CHECKSUM: 108f178528f8662e2392f634a9e795d28bc95a3f +PODFILE CHECKSUM: 0a74faefe96cbe15fd6c862b089f5b4699a287e2 COCOAPODS: 1.15.2 From 50e5dbb6839d8534ee0d617d79aceae046337bb0 Mon Sep 17 00:00:00 2001 From: Pinar Olguc Date: Tue, 2 Apr 2024 09:50:29 +0300 Subject: [PATCH 43/43] Update Gravatar as 1.0.0 --- Podfile | 2 +- Podfile.lock | 11 +++-------- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/Podfile b/Podfile index 7505e294f71a..bfc09932a80e 100644 --- a/Podfile +++ b/Podfile @@ -50,7 +50,7 @@ end def gravatar # pod 'Gravatar', path: '../Gravatar-SDK-iOS' - pod 'Gravatar', git: 'https://github.com/Automattic/Gravatar-SDK-iOS', tag: '1.0.0' + pod 'Gravatar', '1.0.0' end def wordpress_kit diff --git a/Podfile.lock b/Podfile.lock index 58467665836e..eaa52a707f65 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -105,7 +105,7 @@ DEPENDENCIES: - Down (~> 0.6.6) - FSInteractiveMap (from `https://github.com/wordpress-mobile/FSInteractiveMap.git`, tag `0.2.0`) - Gifu (= 3.3.1) - - Gravatar (from `https://github.com/Automattic/Gravatar-SDK-iOS`, tag `1.0.0`) + - Gravatar (= 1.0.0) - Gridicons (~> 1.2) - Gutenberg (from `https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-v1.116.0.podspec`) - JTAppleCalendar (~> 8.0.5) @@ -142,6 +142,7 @@ SPEC REPOS: - CropViewController - Down - Gifu + - Gravatar - Gridicons - JTAppleCalendar - Kanvas @@ -175,9 +176,6 @@ EXTERNAL SOURCES: FSInteractiveMap: :git: https://github.com/wordpress-mobile/FSInteractiveMap.git :tag: 0.2.0 - Gravatar: - :git: https://github.com/Automattic/Gravatar-SDK-iOS - :tag: 1.0.0 Gutenberg: :podspec: https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-v1.116.0.podspec @@ -185,9 +183,6 @@ CHECKOUT OPTIONS: FSInteractiveMap: :git: https://github.com/wordpress-mobile/FSInteractiveMap.git :tag: 0.2.0 - Gravatar: - :git: https://github.com/Automattic/Gravatar-SDK-iOS - :tag: 1.0.0 SPEC CHECKSUMS: Alamofire: 02b772c9910e8eba1a079227c32fbd9e46c90a24 @@ -234,6 +229,6 @@ SPEC CHECKSUMS: ZendeskSupportSDK: 3a8e508ab1d9dd22dc038df6c694466414e037ba ZIPFoundation: fa9ae5af13b7cf168245f24d1c672a4fb972e37f -PODFILE CHECKSUM: 0a74faefe96cbe15fd6c862b089f5b4699a287e2 +PODFILE CHECKSUM: 1b7cffff7fff31174523088dc11490db0a1769eb COCOAPODS: 1.15.2