Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Integrate Gravatar SDK #22921

Merged
merged 61 commits into from
Apr 2, 2024
Merged
Show file tree
Hide file tree
Changes from 57 commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
f1281ef
Add Gravatar and point it to local
pinarol Jan 23, 2024
875a946
Point WordPressUI to local folder
pinarol Jan 23, 2024
5d8f368
Merge branch 'trunk' into task/gravatar-integration
pinarol Feb 12, 2024
a2cc105
Use GravatarURL instead of Gravatar (#22600)
pinarol Feb 14, 2024
a061bb7
Merge branch 'trunk' into task/gravatar-integration
pinarol Feb 16, 2024
74fdffc
Use GravatarURL in more places (#22624)
pinarol Feb 16, 2024
d72bcfd
Using Gravatar.fetchProfile from Gravatar SDK
etoledom Feb 19, 2024
4035beb
Replace the download avatar via email with the SDK implementation (#2…
pinarol Feb 21, 2024
109e40d
Merge branch 'task/gravatar-integration' into gravatar/etoledom/using…
pinarol Feb 21, 2024
1b4744c
[gravatar] Using Gravatar.fetchProfile from Gravatar SDK (#22635)
etoledom Feb 21, 2024
7d6854a
Replacing Gravatar upload image with Gravatar SDK `ImageService`
etoledom Feb 21, 2024
94f9cca
Update `gravatarImageService ` related unit tests
etoledom Feb 21, 2024
7da3c42
[Gravatar] Image upload using Gravatar SDK (#22657)
etoledom Feb 22, 2024
da2f87d
Implementing Gravatar changes regarding ImageServing protocol naming
etoledom Feb 22, 2024
96cad59
[Gravatar] Implementing Gravatar changes regarding ImageServing proto…
etoledom Feb 28, 2024
5ccc6b4
Fix build error after errors PR merge in Gravatar SDK
etoledom Feb 28, 2024
83825be
Gravatar: Fix build error after errors PR merge in Gravatar SDK (#22718)
andrewdmontgomery Feb 29, 2024
28d06d7
Update GravatarProfile to UserProfile
etoledom Mar 19, 2024
4e15f39
[Gravatar] Update UserProfile name (#22856)
etoledom Mar 20, 2024
930dc08
Update GravatarService to use the new AvatarService (#22878)
pinarol Mar 21, 2024
5396304
Update podfile: Gravatar testspecs (#22889)
pinarol Mar 25, 2024
989cf60
Fetch gravatar profile using async fetch method
etoledom Mar 25, 2024
f325403
Remove noninsolated from fetchGravatarProfile
etoledom Mar 25, 2024
f5bc025
[Gravatar] Fetch Gravatar profile using async fetch method (#22894)
etoledom Mar 26, 2024
76f07c4
Roll back usage of fetch Gravatar profile
etoledom Mar 26, 2024
7d32180
Use new Identifier types
andrewdmontgomery Mar 26, 2024
0b16099
Implement URL name changes
etoledom Mar 27, 2024
8820499
[Gravatar] Rollback usage of fetch Gravatar profile (#22904)
etoledom Mar 27, 2024
9eb7ede
Implement URL name changes (#22911)
etoledom Mar 27, 2024
edb514f
Merge branch 'task/gravatar-integration' into gravatar/andrewdmontgom…
andrewdmontgomery Mar 28, 2024
6703837
[Gravatar] Use new Identifier types (#22907)
andrewdmontgomery Mar 28, 2024
44c1cec
Add UIImageView extension
pinarol Mar 28, 2024
e3b60cf
Make WordPressUI.ImageCache conform to Gravatar.ImageCaching
pinarol Mar 28, 2024
4963747
Use AvatarURL everywhere
pinarol Mar 28, 2024
e1649f3
One more AvatarURL update
pinarol Mar 28, 2024
74c5536
Add GravatarImageCaching
pinarol Mar 28, 2024
09348d0
Update podfile
pinarol Mar 28, 2024
61121e8
Merge branch 'trunk' into wppinar/move-gravatar
pinarol Mar 28, 2024
cf50b03
bundle exec pod install
pinarol Mar 28, 2024
07ca897
Merge branch 'trunk' into task/gravatar-integration
pinarol Mar 28, 2024
e857f7d
Update Podfile.lock
pinarol Mar 28, 2024
d9d0cb6
Merge branch 'task/gravatar-integration' into wppinar/move-gravatar
pinarol Mar 28, 2024
7680912
Adding gravatar UIImageView extension to Jetpack target
etoledom Mar 28, 2024
21a1324
Update podfile
pinarol Mar 29, 2024
1d116d6
Use AvatarURL
pinarol Mar 29, 2024
000e6da
Fix deprecated warnings
pinarol Mar 29, 2024
539b0de
Small update
pinarol Mar 29, 2024
afa30ee
Put space after #
pinarol Mar 29, 2024
2bc7723
Remove unnecessary method
pinarol Mar 29, 2024
7a6df64
Update tests
pinarol Mar 29, 2024
ad5833f
Run pod install
pinarol Mar 29, 2024
49d78a0
Fallback to internal cache
pinarol Mar 29, 2024
abed54a
Use explicit type
pinarol Mar 29, 2024
b8f9b6a
Revert
pinarol Mar 29, 2024
0b56439
Use AvatarURL
pinarol Mar 29, 2024
4662f8a
Merge branch 'trunk' into wppinar/move-gravatar
pinarol Apr 1, 2024
e101f36
pod install
pinarol Apr 1, 2024
6762d7d
Update WordPressUI as 1.16
pinarol Apr 2, 2024
ae93312
Merge branch 'trunk' into wppinar/move-gravatar
pinarol Apr 2, 2024
e421b1f
Bump Gravatar-SDK-iOS to 1.0.0
pinarol Apr 2, 2024
50e5dbb
Update Gravatar as 1.0.0
pinarol Apr 2, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 8 additions & 2 deletions Podfile
Original file line number Diff line number Diff line change
Expand Up @@ -41,13 +41,18 @@ 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', git: 'https://github.com/wordpress-mobile/WordPressUI-iOS', commit: '7f7606eefceaaab9982cf3417093a45d78bf284d'
# pod 'WordPressUI', path: '../WordPressUI-iOS'
end

def gravatar
# pod 'Gravatar', path: '../Gravatar-SDK-iOS'
pod 'Gravatar', git: 'https://github.com/Automattic/Gravatar-SDK-iOS', commit: '03160554be8b9b7f97055453f25d398dda2ec218'
end

def wordpress_kit
# pod 'WordPressKit', '~> 15.0'
pod 'WordPressKit', git: 'https://github.com/wordpress-mobile/WordPressKit-iOS.git', commit: '6a3b5c873069ec9c3efc336f5dd22dddd582a246'
Expand Down Expand Up @@ -128,6 +133,7 @@ abstract_target 'Apps' do
wordpress_kit
wordpress_shared
kanvas
gravatar

# Production

Expand Down
24 changes: 19 additions & 5 deletions Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand All @@ -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)

Expand Down Expand Up @@ -157,7 +159,6 @@ SPEC REPOS:
- SwiftLint
- UIDeviceIdentifier
- WordPressShared
- WordPressUI
- wpxmlrpc
- ZendeskCommonUISDK
- ZendeskCoreSDK
Expand All @@ -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
Expand All @@ -197,6 +210,7 @@ SPEC CHECKSUMS:
Down: 71bf4af3c04fa093e65dffa25c4b64fa61287373
FSInteractiveMap: a396f610f48b76cb540baa87139d056429abda86
Gifu: 416d4e38c4c2fed012f019e0a1d3ffcb58e5b842
Gravatar: bdd3950c5128304b51a9e655e4145334f23201d1
Gridicons: 4455b9f366960121430e45997e32112ae49ffe1d
Gutenberg: fda9c1f9d8d5ec0b565d0efb32757a39b046f538
JTAppleCalendar: 16c6501b22cb27520372c28b0a2e0b12c8d0cd73
Expand All @@ -219,7 +233,7 @@ SPEC CHECKSUMS:
WordPressAuthenticator: 47ac66428c0a712ced8eb0ab481f64e2f4e80f47
WordPressKit: d4db2fa5861380bd6b71d5574f2bc63cdeee47ba
WordPressShared: 04c6d51441bb8fa29651075b3a5536c90ae89c76
WordPressUI: 700e3ec5a9f77b6920c8104c338c85788036ab3c
WordPressUI: ec5ebcf7e63e797ba51d07513e340c1b14cf45a4
wpxmlrpc: 68db063041e85d186db21f674adf08d9c70627fd
ZendeskCommonUISDK: ba160fe413b491af9e7bfcb9808afcd494dc83a5
ZendeskCoreSDK: 19a18e5ef2edcb18f4dbc0ea0d12bd31f515712a
Expand All @@ -230,6 +244,6 @@ SPEC CHECKSUMS:
ZendeskSupportSDK: 3a8e508ab1d9dd22dc038df6c694466414e037ba
ZIPFoundation: fa9ae5af13b7cf168245f24d1c672a4fb972e37f

PODFILE CHECKSUM: b7cab86f4b24a5c0fb443ceb9cece8b48ffad2f6
PODFILE CHECKSUM: 66adbf6295e17915326455241641fab07bc66bf9

COCOAPODS: 1.15.2
3 changes: 2 additions & 1 deletion WordPress/Classes/Models/ManagedPerson.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import Foundation
import CoreData
import WordPressKit
import WordPressUI
import Gravatar

public typealias Person = RemotePerson

Expand All @@ -10,7 +11,7 @@ public typealias Person = RemotePerson
class ManagedPerson: NSManagedObject {

func updateWith<T: Person>(_ person: T) {
let canonicalAvatarURL = person.avatarURL.flatMap { Gravatar($0)?.canonicalURL }
let canonicalAvatarURL = person.avatarURL.flatMap { AvatarURL(url: $0)?.canonicalURL }

avatarURL = canonicalAvatarURL?.absoluteString
displayName = person.displayName
Expand Down
42 changes: 25 additions & 17 deletions WordPress/Classes/Services/GravatarService.swift
Original file line number Diff line number Diff line change
@@ -1,14 +1,28 @@
import Foundation
import CocoaLumberjack
import WordPressKit
import Gravatar

@objc public enum GravatarServiceError: Int, Error {
case invalidAccountInfo
}

public protocol GravatarImageUploader {
@discardableResult
func upload(_ image: UIImage, email: Email, 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.
///
Expand All @@ -17,7 +31,7 @@ open 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
Expand All @@ -43,31 +57,25 @@ 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
}

let email = accountEmail.trimmingCharacters(in: CharacterSet.whitespaces).lowercased()

let remote = gravatarServiceRemote()
remote.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(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 gravatarServiceRemote() -> GravatarServiceRemote {
return GravatarServiceRemote()
}
}
Original file line number Diff line number Diff line change
@@ -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 = AvatarURL.url(for: email) else {
completion(nil)
return
}
Expand Down
5 changes: 4 additions & 1 deletion WordPress/Classes/Utility/Media/MemoryCache.swift
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import Foundation
import AlamofireImage
import WordPressUI
import protocol Gravatar.ImageCaching

protocol MemoryCacheProtocol: AnyObject {
subscript(key: String) -> UIImage? { get set }
Expand Down Expand Up @@ -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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import Foundation
import WordPressUI
import Gravatar

extension BlogDetailsViewController {

Expand Down Expand Up @@ -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 = AvatarURL.url(for: email),
let gravatarIcon = image.gravatarIcon(size: Metrics.iconSize) else {
return
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import Foundation
import WordPressUI
import Gravatar

struct NoSitesViewModel {

Expand All @@ -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 = AvatarURL.url(for: email)
} else {
self.gravatarURL = nil
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import UIKit
import WordPressUI
import Gravatar

class CommentContentTableViewCell: UITableViewCell, NibReusable {

Expand Down Expand Up @@ -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 = AvatarURL(url: someURL) {
avatarImageView.downloadGravatar(gravatar, placeholder: Style.placeholderImage, animate: true)
return
}
Expand All @@ -374,7 +375,7 @@ private extension CommentContentTableViewCell {
return
}

avatarImageView.downloadGravatarWithEmail(someEmail, placeholderImage: Style.placeholderImage)
avatarImageView.downloadGravatar(for: someEmail, placeholderImage: Style.placeholderImage)
}

func updateContainerLeadingConstraint() {
Expand Down
Loading