From 4e73411b3b07190366203327bd9257e9189e71e4 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Tue, 1 Apr 2025 20:08:19 +1100 Subject: [PATCH 1/6] Move code `localIconImage` to app targets / Keystone This way, when `PublicizeService` moves to WordPressData, it won't need the dependency used in that code. --- WordPress/Classes/Models/PublicizeService.swift | 5 ----- .../ViewRelated/Blog/Sharing/PublicizeServiceCell.swift | 8 ++++++++ 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/WordPress/Classes/Models/PublicizeService.swift b/WordPress/Classes/Models/PublicizeService.swift index ea51b70e2746..a103e0bcc993 100644 --- a/WordPress/Classes/Models/PublicizeService.swift +++ b/WordPress/Classes/Models/PublicizeService.swift @@ -41,11 +41,6 @@ public extension PublicizeService { case threads case unknown - /// Returns the local image for the icon representing the social network. - var localIconImage: UIImage { - WPStyleGuide.socialIcon(for: rawValue as NSString) - } - /// A string describing the service in a human-readable format. public var description: String { rawValue.split(separator: "-").joined(separator: " ").localizedCapitalized diff --git a/WordPress/Classes/ViewRelated/Blog/Sharing/PublicizeServiceCell.swift b/WordPress/Classes/ViewRelated/Blog/Sharing/PublicizeServiceCell.swift index f4e91cd1b705..c5ed31f6f5fb 100644 --- a/WordPress/Classes/ViewRelated/Blog/Sharing/PublicizeServiceCell.swift +++ b/WordPress/Classes/ViewRelated/Blog/Sharing/PublicizeServiceCell.swift @@ -89,3 +89,11 @@ private extension PublicizeService.ServiceName { private enum Strings { static let numberOfAccounts = NSLocalizedString("socialSharing.connectionDetails.nAccount", value: "%d accounts", comment: "The number of connected accounts on a third party sharing service connected to the user's blog. The '%d' is a placeholder for the number of accounts.") } + +extension PublicizeService.ServiceName { + + /// Returns the local image for the icon representing the social network. + var localIconImage: UIImage { + WPStyleGuide.socialIcon(for: rawValue as NSString) + } +} From 8a5e249f851363b66f7a0833d5904e2d5a2b6f0a Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Tue, 1 Apr 2025 20:24:34 +1100 Subject: [PATCH 2/6] Use `BuildSettings` over `AppConfiguration` in `SharedDataIssueSolver` --- WordPress/Classes/Jetpack/Utility/SharedDataIssueSolver.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/Classes/Jetpack/Utility/SharedDataIssueSolver.swift b/WordPress/Classes/Jetpack/Utility/SharedDataIssueSolver.swift index b0dc0c8c28db..247373f25bf4 100644 --- a/WordPress/Classes/Jetpack/Utility/SharedDataIssueSolver.swift +++ b/WordPress/Classes/Jetpack/Utility/SharedDataIssueSolver.swift @@ -41,7 +41,7 @@ public final class SharedDataIssueSolver: NSObject { /// both apps are logged in with the same account. /// public func migrateAuthKey(for username: String) { - guard AppConfiguration.isJetpack, + guard BuildSettings.current.brand == .jetpack, let token = try? keychainUtils.getPassword(for: username, serviceName: WPAccountConstants.authToken.rawValue) else { return } From 643db9a5093c60f1e28090fe1b61cbb7d0c45563 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Tue, 1 Apr 2025 20:25:29 +1100 Subject: [PATCH 3/6] Use `BuildSettings` over `AppConfiguration` in `WPAccount+Lookup` --- WordPress/Classes/Models/WPAccount+Lookup.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/WordPress/Classes/Models/WPAccount+Lookup.swift b/WordPress/Classes/Models/WPAccount+Lookup.swift index 468899f2aa97..7c39a57b4dde 100644 --- a/WordPress/Classes/Models/WPAccount+Lookup.swift +++ b/WordPress/Classes/Models/WPAccount+Lookup.swift @@ -1,3 +1,4 @@ +import BuildSettingsKit import CoreData public extension WPAccount { @@ -19,7 +20,7 @@ public extension WPAccount { // Decoupling allows moving the type to WordPressData, see https://github.com/wordpress-mobile/WordPress-iOS/issues/24165. @objc static func tokenForUsername(_ username: String) -> String? { - token(forUsername: username, isJetpack: AppConfiguration.isJetpack) + token(forUsername: username, isJetpack: BuildSettings.current.brand == .jetpack) } /// Does this `WPAccount` object have any associated blogs? From 9f7359046db30aa8259f63a20ed6102bf67669fe Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Tue, 1 Apr 2025 21:11:17 +1100 Subject: [PATCH 4/6] Use `_private_wordPressComRestApi` in `Blog.m` to work around deps --- WordPress/Classes/Models/Blog/Blog.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/Classes/Models/Blog/Blog.m b/WordPress/Classes/Models/Blog/Blog.m index 3ef422aca0c0..9763aa2d315d 100644 --- a/WordPress/Classes/Models/Blog/Blog.m +++ b/WordPress/Classes/Models/Blog/Blog.m @@ -908,7 +908,7 @@ - (WordPressOrgRestApi *)selfHostedSiteRestApi - (WordPressComRestApi *)wordPressComRestApi { if (self.account) { - return self.account.wordPressComRestApi; + return self.account._private_wordPressComRestApi; } return nil; } From 6bc1aed3dbcd43ad127136f3aed76deb46fcbe91 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Tue, 1 Apr 2025 21:13:23 +1100 Subject: [PATCH 5/6] Properly call `alloc` in `PostService.m` --- WordPress/Classes/Services/PostService.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/Classes/Services/PostService.m b/WordPress/Classes/Services/PostService.m index 1f263ceda34b..d2ec2ff016b2 100644 --- a/WordPress/Classes/Services/PostService.m +++ b/WordPress/Classes/Services/PostService.m @@ -29,7 +29,7 @@ @implementation PostService - (instancetype)initWithManagedObjectContext:(NSManagedObjectContext *)context { return [self initWithManagedObjectContext:context - postServiceRemoteFactory:[PostServiceRemoteFactory.alloc init]]; + postServiceRemoteFactory:[[PostServiceRemoteFactory alloc] init]]; } - (instancetype)initWithManagedObjectContext:(NSManagedObjectContext *)context From 75f416c94ee32610cce5e6adf200108e27498cd7 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Tue, 1 Apr 2025 22:42:33 +1100 Subject: [PATCH 6/6] Move `Blog` `wordPressComRestApi` and consumers from ObjC to Swift Apologies for the annoying diff due to the change from methods to computed vars. I suppose I could have left the implementations as method, but it felt cleaner to move them to more Swift-idiomatic computed vars. --- .../Models/Blog/Blog+SupportDescription.swift | 74 +++++++++++++++++++ .../Blog/Blog+WordPressComRestAPI.swift | 22 ++++++ WordPress/Classes/Models/Blog/Blog.h | 30 -------- WordPress/Classes/Models/Blog/Blog.m | 71 ------------------ .../Services/BlogJetpackSettingsService.swift | 12 +-- .../CommentServiceRemoteFactory.swift | 2 +- .../Services/EditorSettingsService.swift | 2 +- .../Services/HomepageSettingsService.swift | 2 +- .../Classes/Services/MediaRepository.swift | 2 +- .../Classes/Services/PeopleService.swift | 2 +- WordPress/Classes/Services/PlanService.swift | 2 +- .../Services/PostService+Revisions.swift | 2 +- .../Services/PostServiceRemoteFactory.swift | 2 +- WordPress/Classes/Services/RoleService.swift | 2 +- .../Classes/Services/SharingService.swift | 2 +- .../Classes/Services/SharingSyncService.swift | 2 +- .../Services/SiteManagementService.swift | 2 +- WordPress/Classes/Utility/ZendeskUtils.swift | 4 +- .../Gutenberg/GutenbergNetworking.swift | 4 +- .../Menu/MediaPickerMenu+External.swift | 2 +- .../NewGutenbergViewController.swift | 2 +- .../Voice/VoiceToContentViewModel.swift | 4 +- 22 files changed, 122 insertions(+), 127 deletions(-) create mode 100644 WordPress/Classes/Models/Blog/Blog+SupportDescription.swift create mode 100644 WordPress/Classes/Models/Blog/Blog+WordPressComRestAPI.swift diff --git a/WordPress/Classes/Models/Blog/Blog+SupportDescription.swift b/WordPress/Classes/Models/Blog/Blog+SupportDescription.swift new file mode 100644 index 000000000000..4352bad2998a --- /dev/null +++ b/WordPress/Classes/Models/Blog/Blog+SupportDescription.swift @@ -0,0 +1,74 @@ +import WordPressData + +extension Blog { + + /// Formatted information to send to Support when user creates a new ticket. + var supportDescription: String { + let blogType = "Type: \(stateDescription)" + let urlType = wordPressComRestApi != nil ? "REST" : "Self-hosted" + let urlString = "URL: \(url ?? "'no url!'")" + + let username: String? + let planDescription: String? + if account == nil { + if let jetpackConnectedUsername = jetpack?.connectedUsername { + username = jetpackConnectedUsername + } else { + username = nil + } + planDescription = nil + } else { + let planIDString: String + if let planID { + planIDString = "\(planID)" + } else { + planIDString = "'no id'" + } + planDescription = "Plan: \(planTitle ?? "'no title'") (\(planIDString))" + username = nil + } + + var blogInformation: [String] = [] + + // Add information to array in the order we want to display it. + blogInformation.append(blogType) + + if let username { + blogInformation.append(username) + } + + blogInformation.append(urlType) + blogInformation.append(urlString) + + if let planDescription { + blogInformation.append(planDescription) + } + + if let jetpack, jetpack.isInstalled, let version = jetpack.version { + blogInformation.append("Jetpack-version: \(version)") + } + + return blogInformation.joined(separator: " ") + } + + var stateDescription: String { + guard account == nil else { + return "wpcom" + } + + guard let jetpack else { + return "self_hosted" + } + + if jetpack.isConnected { + let apiType = wordPressComRestApi != nil ? "REST" : "XML-RPC" + return "jetpack_connected - \(apiType)" + } + + if jetpack.isInstalled { + return "self-hosted - jetpack_installed" + } + + return "self_hosted" + } +} diff --git a/WordPress/Classes/Models/Blog/Blog+WordPressComRestAPI.swift b/WordPress/Classes/Models/Blog/Blog+WordPressComRestAPI.swift new file mode 100644 index 000000000000..fb1d0b9774bf --- /dev/null +++ b/WordPress/Classes/Models/Blog/Blog+WordPressComRestAPI.swift @@ -0,0 +1,22 @@ +import WordPressData +import WordPressKit + +public extension Blog { + + /// Returns a REST API client, if available + /// + /// If the blog is a WordPress.com one or it has Jetpack it will return a REST API client. + /// Otherwise, the XML-RPC API should be used. + /// + /// - Warning: this method doesn't know if a Jetpack blog has the JSON API disabled. + @objc + var wordPressComRestApi: WordPressComRestApi? { + account?.wordPressComRestApi + } + + /// Whether the blog is hosted on WordPress.com or connected through Jetpack. + @objc + func isAccessibleThroughWPCom() -> Bool { + wordPressComRestApi != nil + } +} diff --git a/WordPress/Classes/Models/Blog/Blog.h b/WordPress/Classes/Models/Blog/Blog.h index a82a4225b10c..3ae8b3154e31 100644 --- a/WordPress/Classes/Models/Blog/Blog.h +++ b/WordPress/Classes/Models/Blog/Blog.h @@ -272,36 +272,6 @@ typedef NS_ENUM(NSInteger, SiteVisibility) { */ - (NSString *)logDescription; -/** - Returns formatted Blog information to send to Support when user creates a new ticket. - */ -- (NSString *)supportDescription; - -/** - Returns formatted Blog State information to send to Support when user creates a new ticket. - */ -- (NSString *)stateDescription; - -/** - Returns a REST API client if available - - If the blog is a WordPress.com one or it has Jetpack it will return a REST API - client. Otherwise, the XML-RPC API should be used. - - @warning this method doesn't know if a Jetpack blog has the JSON API disabled - - @return a WordPressComRestApi object if available - */ -- (nullable WordPressComRestApi *)wordPressComRestApi; - -/** - Call this method to know if the blog is hosted at WPcom or accessed through Jetpack. - - @return YES if the blog is hosted at WPcom or if it's connected through Jetpack. - NO otherwise. - */ -- (BOOL)isAccessibleThroughWPCom; - /** Check if there is already a basic auth credential stored for this blog/site. diff --git a/WordPress/Classes/Models/Blog/Blog.m b/WordPress/Classes/Models/Blog/Blog.m index 9763aa2d315d..b71b6e2a5183 100644 --- a/WordPress/Classes/Models/Blog/Blog.m +++ b/WordPress/Classes/Models/Blog/Blog.m @@ -824,65 +824,6 @@ - (NSString *)logDescription return [NSString stringWithFormat:@"", self.settings.name, self.url, self.xmlrpc, extra, self.objectID.URIRepresentation]; } -- (NSString *)supportDescription -{ - // Gather information - - NSString *blogType = [NSString stringWithFormat:@"Type: (%@)", [self stateDescription]]; - NSString *urlType = [self wordPressComRestApi] ? @"REST" : @"Self-hosted"; - NSString *url = [NSString stringWithFormat:@"URL: %@", self.url]; - - NSString *username; - NSString *planDescription; - if (self.account) { - planDescription = [NSString stringWithFormat:@"Plan: %@ (%@)", self.planTitle, self.planID]; - } else { - username = [self.jetpack connectedUsername]; - } - - NSString *jetpackVersion; - if ([self.jetpack isInstalled]) { - jetpackVersion = [NSString stringWithFormat:@"Jetpack-version: %@", [self.jetpack version]]; - } - - // Add information to array in the order we want to display it. - - NSMutableArray *blogInformation = [[NSMutableArray alloc] init]; - [blogInformation addObject:blogType]; - if (username) { - [blogInformation addObject:username]; - } - [blogInformation addObject:urlType]; - [blogInformation addObject:url]; - if (planDescription) { - [blogInformation addObject:planDescription]; - } - if (jetpackVersion) { - [blogInformation addObject:jetpackVersion]; - } - - // Combine and return. - return [NSString stringWithFormat:@"<%@>", [blogInformation componentsJoinedByString:@" "]]; -} - -- (NSString *)stateDescription -{ - if (self.account) { - return @"wpcom"; - } - - if ([self.jetpack isConnected]) { - NSString *apiType = [self wordPressComRestApi] ? @"REST" : @"XML-RPC"; - return [NSString stringWithFormat:@"jetpack_connected - %@", apiType]; - } - - if ([self.jetpack isInstalled]) { - return @"self-hosted - jetpack_installed"; - } - - return @"self_hosted"; -} - #pragma mark - api accessor - (WordPressOrgXMLRPCApi *)xmlrpcApi @@ -905,18 +846,6 @@ - (WordPressOrgRestApi *)selfHostedSiteRestApi return _selfHostedSiteRestApi; } -- (WordPressComRestApi *)wordPressComRestApi -{ - if (self.account) { - return self.account._private_wordPressComRestApi; - } - return nil; -} - -- (BOOL)isAccessibleThroughWPCom { - return self.wordPressComRestApi != nil; -} - - (BOOL)supportsRestApi { // We don't want to check for `restApi` as it can be `nil` when the token // is missing from the keychain. diff --git a/WordPress/Classes/Services/BlogJetpackSettingsService.swift b/WordPress/Classes/Services/BlogJetpackSettingsService.swift index f300c8aae2ef..897c9df13e18 100644 --- a/WordPress/Classes/Services/BlogJetpackSettingsService.swift +++ b/WordPress/Classes/Services/BlogJetpackSettingsService.swift @@ -16,7 +16,7 @@ struct BlogJetpackSettingsService { success() return } - guard let remoteAPI = blog.wordPressComRestApi(), + guard let remoteAPI = blog.wordPressComRestApi, let blogDotComId = blog.dotComID as? Int else { failure(nil) @@ -78,7 +78,7 @@ struct BlogJetpackSettingsService { success() return } - guard let remoteAPI = blog.wordPressComRestApi(), + guard let remoteAPI = blog.wordPressComRestApi, let blogDotComId = blog.dotComID as? Int else { failure(nil) @@ -101,7 +101,7 @@ struct BlogJetpackSettingsService { } func updateJetpackSettingsForBlog(_ blog: Blog, success: @escaping () -> Void, failure: @escaping (Error?) -> Void) { - guard let remoteAPI = blog.wordPressComRestApi(), + guard let remoteAPI = blog.wordPressComRestApi, let blogDotComId = blog.dotComID as? Int, let blogSettings = blog.settings else { @@ -122,7 +122,7 @@ struct BlogJetpackSettingsService { } func updateJetpackMonitorSettingsForBlog(_ blog: Blog, success: @escaping () -> Void, failure: @escaping (Error?) -> Void) { - guard let remoteAPI = blog.wordPressComRestApi(), + guard let remoteAPI = blog.wordPressComRestApi, let blogDotComId = blog.dotComID as? Int, let blogSettings = blog.settings else { @@ -166,7 +166,7 @@ struct BlogJetpackSettingsService { } func updateJetpackModuleActiveSettingForBlog(_ blog: Blog, module: String, active: Bool, success: @escaping () -> Void, failure: @escaping (Error?) -> Void) { - guard let remoteAPI = blog.wordPressComRestApi(), + guard let remoteAPI = blog.wordPressComRestApi, let blogDotComId = blog.dotComID as? Int else { failure(nil) return @@ -183,7 +183,7 @@ struct BlogJetpackSettingsService { } func disconnectJetpackFromBlog(_ blog: Blog, success: @escaping () -> Void, failure: @escaping (Error?) -> Void) { - guard let remoteAPI = blog.wordPressComRestApi(), + guard let remoteAPI = blog.wordPressComRestApi, let blogDotComId = blog.dotComID as? Int else { failure(nil) return diff --git a/WordPress/Classes/Services/CommentServiceRemoteFactory.swift b/WordPress/Classes/Services/CommentServiceRemoteFactory.swift index 495ba406b609..ed43e8406e64 100644 --- a/WordPress/Classes/Services/CommentServiceRemoteFactory.swift +++ b/WordPress/Classes/Services/CommentServiceRemoteFactory.swift @@ -10,7 +10,7 @@ import WordPressKit /// - Returns: A CommentServiceRemote instance @objc func remote(blog: Blog) -> CommentServiceRemote? { if blog.supports(.wpComRESTAPI), - let api = blog.wordPressComRestApi(), + let api = blog.wordPressComRestApi, let dotComID = blog.dotComID { return CommentServiceRemoteREST(wordPressComRestApi: api, siteID: dotComID) } diff --git a/WordPress/Classes/Services/EditorSettingsService.swift b/WordPress/Classes/Services/EditorSettingsService.swift index 0b194a8105ea..c94452469415 100644 --- a/WordPress/Classes/Services/EditorSettingsService.swift +++ b/WordPress/Classes/Services/EditorSettingsService.swift @@ -86,7 +86,7 @@ import WordPressKit } func api(for blog: Blog) -> WordPressComRestApi? { - return blog.wordPressComRestApi() + return blog.wordPressComRestApi } var apiForDefaultAccount: WordPressComRestApi? { diff --git a/WordPress/Classes/Services/HomepageSettingsService.swift b/WordPress/Classes/Services/HomepageSettingsService.swift index c79966b3b353..d5a093dbb1e2 100644 --- a/WordPress/Classes/Services/HomepageSettingsService.swift +++ b/WordPress/Classes/Services/HomepageSettingsService.swift @@ -11,7 +11,7 @@ struct HomepageSettingsService { fileprivate let siteID: Int init?(blog: Blog, coreDataStack: CoreDataStack) { - guard let api = blog.wordPressComRestApi(), let dotComID = blog.dotComID as? Int else { + guard let api = blog.wordPressComRestApi, let dotComID = blog.dotComID as? Int else { return nil } diff --git a/WordPress/Classes/Services/MediaRepository.swift b/WordPress/Classes/Services/MediaRepository.swift index e9e139b6b272..93ddb3407a4e 100644 --- a/WordPress/Classes/Services/MediaRepository.swift +++ b/WordPress/Classes/Services/MediaRepository.swift @@ -90,7 +90,7 @@ private extension MediaRepository { @objc(remoteForBlog:error:) func remote(for blog: Blog) throws -> MediaServiceRemote { - if blog.supports(.wpComRESTAPI), let dotComID = blog.dotComID, let api = blog.wordPressComRestApi() { + if blog.supports(.wpComRESTAPI), let dotComID = blog.dotComID, let api = blog.wordPressComRestApi { return MediaServiceRemoteREST(wordPressComRestApi: api, siteID: dotComID) } diff --git a/WordPress/Classes/Services/PeopleService.swift b/WordPress/Classes/Services/PeopleService.swift index cd8d45ee71c0..ddc1d48eab4a 100644 --- a/WordPress/Classes/Services/PeopleService.swift +++ b/WordPress/Classes/Services/PeopleService.swift @@ -25,7 +25,7 @@ struct PeopleService { /// - context: CoreData context to be used. /// init?(blog: Blog, coreDataStack: CoreDataStackSwift) { - guard let api = blog.wordPressComRestApi(), let dotComID = blog.dotComID as? Int else { + guard let api = blog.wordPressComRestApi, let dotComID = blog.dotComID as? Int else { return nil } diff --git a/WordPress/Classes/Services/PlanService.swift b/WordPress/Classes/Services/PlanService.swift index c3e6c7349f66..8bab242c6416 100644 --- a/WordPress/Classes/Services/PlanService.swift +++ b/WordPress/Classes/Services/PlanService.swift @@ -195,7 +195,7 @@ open class PlanService: NSObject { extension PlanService { @objc public func plansWithPricesForBlog(_ blog: Blog, success: @escaping () -> Void, failure: @escaping (Error) -> Void) { - guard let restAPI = blog.wordPressComRestApi(), + guard let restAPI = blog.wordPressComRestApi, let siteID = blog.dotComID?.intValue else { let description = NSLocalizedString("Unable to update plan prices. There is a problem with the supplied blog.", comment: "This is an error message that could be shown when updating Plans in the app.") diff --git a/WordPress/Classes/Services/PostService+Revisions.swift b/WordPress/Classes/Services/PostService+Revisions.swift index 2e52bb3efc7a..911478e89d22 100644 --- a/WordPress/Classes/Services/PostService+Revisions.swift +++ b/WordPress/Classes/Services/PostService+Revisions.swift @@ -8,7 +8,7 @@ extension PostService { failure: @escaping (Error?) -> Void) { guard let blogId = post.blog.dotComID, let postId = post.postID, - let api = post.blog.wordPressComRestApi() else { + let api = post.blog.wordPressComRestApi else { failure(nil) return } diff --git a/WordPress/Classes/Services/PostServiceRemoteFactory.swift b/WordPress/Classes/Services/PostServiceRemoteFactory.swift index b1ec4e316298..9372c8690003 100644 --- a/WordPress/Classes/Services/PostServiceRemoteFactory.swift +++ b/WordPress/Classes/Services/PostServiceRemoteFactory.swift @@ -5,7 +5,7 @@ import WordPressShared @objc public class PostServiceRemoteFactory: NSObject { @objc public func forBlog(_ blog: Blog) -> PostServiceRemote? { if blog.supports(.wpComRESTAPI), - let api = blog.wordPressComRestApi(), + let api = blog.wordPressComRestApi, let dotComID = blog.dotComID { return PostServiceRemoteREST(wordPressComRestApi: api, siteID: dotComID) } diff --git a/WordPress/Classes/Services/RoleService.swift b/WordPress/Classes/Services/RoleService.swift index 78d610bb6d4e..0bbb3ac43702 100644 --- a/WordPress/Classes/Services/RoleService.swift +++ b/WordPress/Classes/Services/RoleService.swift @@ -11,7 +11,7 @@ struct RoleService { fileprivate let siteID: Int init?(blog: Blog, coreDataStack: CoreDataStack) { - guard let api = blog.wordPressComRestApi(), let dotComID = blog.dotComID as? Int else { + guard let api = blog.wordPressComRestApi, let dotComID = blog.dotComID as? Int else { return nil } diff --git a/WordPress/Classes/Services/SharingService.swift b/WordPress/Classes/Services/SharingService.swift index 9329da25a5c4..65abedf942e3 100644 --- a/WordPress/Classes/Services/SharingService.swift +++ b/WordPress/Classes/Services/SharingService.swift @@ -495,7 +495,7 @@ import WordPressKit /// - Parameter blog: The blog to use for the rest api. /// private func remoteForBlog(_ blog: Blog) -> SharingServiceRemote? { - guard let api = blog.wordPressComRestApi() else { + guard let api = blog.wordPressComRestApi else { return nil } diff --git a/WordPress/Classes/Services/SharingSyncService.swift b/WordPress/Classes/Services/SharingSyncService.swift index 4e269f3aefc8..4ceb0700af0c 100644 --- a/WordPress/Classes/Services/SharingSyncService.swift +++ b/WordPress/Classes/Services/SharingSyncService.swift @@ -18,7 +18,7 @@ import WordPressKit /// - Parameter blog: The blog to use for the rest api. /// private func remoteForBlog(_ blog: Blog) -> SharingServiceRemote? { - guard let api = blog.wordPressComRestApi() else { + guard let api = blog.wordPressComRestApi else { return nil } diff --git a/WordPress/Classes/Services/SiteManagementService.swift b/WordPress/Classes/Services/SiteManagementService.swift index 0daa5e916c7d..4168c4b16eaf 100644 --- a/WordPress/Classes/Services/SiteManagementService.swift +++ b/WordPress/Classes/Services/SiteManagementService.swift @@ -93,7 +93,7 @@ open class SiteManagementService: NSObject { /// - Returns: Remote service for site management /// @objc func siteManagementServiceRemoteForBlog(_ blog: Blog) -> SiteManagementServiceRemote? { - guard let api = blog.wordPressComRestApi() else { + guard let api = blog.wordPressComRestApi else { return nil } diff --git a/WordPress/Classes/Utility/ZendeskUtils.swift b/WordPress/Classes/Utility/ZendeskUtils.swift index 74b44482ffb6..f3bf215bc17b 100644 --- a/WordPress/Classes/Utility/ZendeskUtils.swift +++ b/WordPress/Classes/Utility/ZendeskUtils.swift @@ -759,7 +759,7 @@ private extension ZendeskUtils { } let url = blog.url ?? Constants.unknownValue - return "\(url) (\(blog.stateDescription()))" + return "\(url) (\(blog.stateDescription)" } static func getBlogInformation() -> String { @@ -769,7 +769,7 @@ private extension ZendeskUtils { } let blogInfo: [String] = allBlogs.map { - var desc = $0.supportDescription() + var desc = $0.supportDescription if let blogID = $0.dotComID, let plan = ZendeskUtils.sharedInstance.sitePlansCache[blogID.intValue] { desc = desc + "" // Do not localize this. :) } diff --git a/WordPress/Classes/ViewRelated/Gutenberg/GutenbergNetworking.swift b/WordPress/Classes/ViewRelated/Gutenberg/GutenbergNetworking.swift index 58b6bc1f205d..5ccf7375e8ca 100644 --- a/WordPress/Classes/ViewRelated/Gutenberg/GutenbergNetworking.swift +++ b/WordPress/Classes/ViewRelated/Gutenberg/GutenbergNetworking.swift @@ -42,7 +42,7 @@ struct GutenbergNetworkRequest { // MARK: - dotCom private func dotComGetRequest(with dotComID: NSNumber, completion: @escaping CompletionHandler) { - blog.wordPressComRestApi()?.GET(dotComPath(with: dotComID), parameters: nil, success: { (response, httpResponse) in + blog.wordPressComRestApi?.GET(dotComPath(with: dotComID), parameters: nil, success: { (response, httpResponse) in completion(.success(response)) }, failure: { (error, httpResponse) in completion(.failure(error.nsError(with: httpResponse))) @@ -50,7 +50,7 @@ struct GutenbergNetworkRequest { } private func dotComPostRequest(with dotComID: NSNumber, data: [String: AnyObject]?, completion: @escaping CompletionHandler) { - blog.wordPressComRestApi()?.POST(dotComPath(with: dotComID), parameters: data, success: { (response, httpResponse) in + blog.wordPressComRestApi?.POST(dotComPath(with: dotComID), parameters: data, success: { (response, httpResponse) in completion(.success(response)) }, failure: { (error, httpResponse) in completion(.failure(error.nsError(with: httpResponse))) diff --git a/WordPress/Classes/ViewRelated/Media/MediaPicker/Menu/MediaPickerMenu+External.swift b/WordPress/Classes/ViewRelated/Media/MediaPicker/Menu/MediaPickerMenu+External.swift index 98b0d17c1223..f87025679611 100644 --- a/WordPress/Classes/ViewRelated/Media/MediaPicker/Menu/MediaPickerMenu+External.swift +++ b/WordPress/Classes/ViewRelated/Media/MediaPicker/Menu/MediaPickerMenu+External.swift @@ -17,7 +17,7 @@ extension MediaPickerMenu { func showStockPhotosPicker(blog: Blog, delegate: ExternalMediaPickerViewDelegate) { guard let presentingViewController, - let api = blog.wordPressComRestApi() else { + let api = blog.wordPressComRestApi else { return } diff --git a/WordPress/Classes/ViewRelated/NewGutenberg/NewGutenbergViewController.swift b/WordPress/Classes/ViewRelated/NewGutenberg/NewGutenbergViewController.swift index ffd08b3e4321..0254e9f67d2d 100644 --- a/WordPress/Classes/ViewRelated/NewGutenberg/NewGutenbergViewController.swift +++ b/WordPress/Classes/ViewRelated/NewGutenberg/NewGutenbergViewController.swift @@ -124,7 +124,7 @@ class NewGutenbergViewController: UIViewController, PostEditor, PublishingEditor let selfHostedApiUrl = post.blog.url(withPath: "wp-json/") let isSelfHosted = !post.blog.isHostedAtWPcom && !post.blog.isAtomic() - let siteApiRoot = post.blog.isAccessibleThroughWPCom() && !isSelfHosted ? post.blog.wordPressComRestApi()?.baseURL.absoluteString : selfHostedApiUrl + let siteApiRoot = post.blog.isAccessibleThroughWPCom() && !isSelfHosted ? post.blog.wordPressComRestApi?.baseURL.absoluteString : selfHostedApiUrl let siteId = post.blog.dotComID?.stringValue let authToken = post.blog.authToken ?? "" var authHeader = "Bearer \(authToken)" diff --git a/WordPress/Classes/ViewRelated/Voice/VoiceToContentViewModel.swift b/WordPress/Classes/ViewRelated/Voice/VoiceToContentViewModel.swift index 814f9855e510..cdfb0285c408 100644 --- a/WordPress/Classes/ViewRelated/Voice/VoiceToContentViewModel.swift +++ b/WordPress/Classes/ViewRelated/Voice/VoiceToContentViewModel.swift @@ -87,7 +87,7 @@ final class VoiceToContentViewModel: NSObject, ObservableObject, AVAudioRecorder self.loadingState = .loading self.subtitle = Strings.subtitleRequestsAvailable // Showing spinner instead of a number - guard let api = blog.wordPressComRestApi() else { + guard let api = blog.wordPressComRestApi else { wpAssertionFailure("API not available") return } @@ -227,7 +227,7 @@ final class VoiceToContentViewModel: NSObject, ObservableObject, AVAudioRecorder private func process(fileURL: URL) async { loadingState = .loading - guard let api = blog.wordPressComRestApi() else { + guard let api = blog.wordPressComRestApi else { wpAssertionFailure("only available for .com sites") return }