From 330e8d18373d9bcdf9ead0a46484e3942a8780f0 Mon Sep 17 00:00:00 2001 From: Tony Li Date: Mon, 24 Nov 2025 15:03:02 +1300 Subject: [PATCH 01/12] Move AbstractPost.isScheduled to Swift --- Sources/WordPressData/Objective-C/AbstractPost.m | 6 ------ Sources/WordPressData/Objective-C/include/AbstractPost.h | 5 ----- Sources/WordPressData/Swift/AbstractPost.swift | 6 ++++++ 3 files changed, 6 insertions(+), 11 deletions(-) diff --git a/Sources/WordPressData/Objective-C/AbstractPost.m b/Sources/WordPressData/Objective-C/AbstractPost.m index fee78a210cb7..719defc66660 100644 --- a/Sources/WordPressData/Objective-C/AbstractPost.m +++ b/Sources/WordPressData/Objective-C/AbstractPost.m @@ -114,12 +114,6 @@ - (BOOL)hasRemote #pragma mark - Convenience methods -// If the post has a scheduled status. -- (BOOL)isScheduled -{ - return ([self.status isEqualToString:PostStatusScheduled]); -} - - (BOOL)isDraft { return [self.status isEqualToString:PostStatusDraft]; diff --git a/Sources/WordPressData/Objective-C/include/AbstractPost.h b/Sources/WordPressData/Objective-C/include/AbstractPost.h index 6d091cb2cc6b..396044ae7554 100644 --- a/Sources/WordPressData/Objective-C/include/AbstractPost.h +++ b/Sources/WordPressData/Objective-C/include/AbstractPost.h @@ -75,11 +75,6 @@ typedef NS_ENUM(NSUInteger, AbstractPostRemoteStatus) { #pragma mark - Unsaved Changes -/** - Returns YES if the post is has a `future` post status - */ -- (BOOL)isScheduled; - /** Returns YES if the post is a draft */ diff --git a/Sources/WordPressData/Swift/AbstractPost.swift b/Sources/WordPressData/Swift/AbstractPost.swift index 6945b54a3df9..8eb1f8c8d387 100644 --- a/Sources/WordPressData/Swift/AbstractPost.swift +++ b/Sources/WordPressData/Swift/AbstractPost.swift @@ -328,4 +328,10 @@ public extension AbstractPost { func hasRevision() -> Bool { revision != nil } + + /// Returns YES if the post is has a `future` post status + @objc + func isScheduled() -> Bool { + status == .scheduled + } } From f52edc98b101eaa6804f9bf533b166807724d682 Mon Sep 17 00:00:00 2001 From: Tony Li Date: Mon, 24 Nov 2025 15:03:35 +1300 Subject: [PATCH 02/12] Move AbstractPost.isDraft to Swift --- Sources/WordPressData/Objective-C/AbstractPost.m | 5 ----- Sources/WordPressData/Objective-C/include/AbstractPost.h | 5 ----- Sources/WordPressData/Swift/AbstractPost.swift | 6 ++++++ 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/Sources/WordPressData/Objective-C/AbstractPost.m b/Sources/WordPressData/Objective-C/AbstractPost.m index 719defc66660..0d5cd0bac725 100644 --- a/Sources/WordPressData/Objective-C/AbstractPost.m +++ b/Sources/WordPressData/Objective-C/AbstractPost.m @@ -114,11 +114,6 @@ - (BOOL)hasRemote #pragma mark - Convenience methods -- (BOOL)isDraft -{ - return [self.status isEqualToString:PostStatusDraft]; -} - - (BOOL)isPublished { return [self.status isEqualToString:PostStatusPublish]; diff --git a/Sources/WordPressData/Objective-C/include/AbstractPost.h b/Sources/WordPressData/Objective-C/include/AbstractPost.h index 396044ae7554..aaef7d1555cf 100644 --- a/Sources/WordPressData/Objective-C/include/AbstractPost.h +++ b/Sources/WordPressData/Objective-C/include/AbstractPost.h @@ -75,11 +75,6 @@ typedef NS_ENUM(NSUInteger, AbstractPostRemoteStatus) { #pragma mark - Unsaved Changes -/** - Returns YES if the post is a draft - */ -- (BOOL)isDraft; - /** Returns YES if the post is a published. */ diff --git a/Sources/WordPressData/Swift/AbstractPost.swift b/Sources/WordPressData/Swift/AbstractPost.swift index 8eb1f8c8d387..9c694e580c9a 100644 --- a/Sources/WordPressData/Swift/AbstractPost.swift +++ b/Sources/WordPressData/Swift/AbstractPost.swift @@ -334,4 +334,10 @@ public extension AbstractPost { func isScheduled() -> Bool { status == .scheduled } + + /// Returns YES if the post is a draft + @objc + func isDraft() -> Bool { + status == .draft + } } From 9ac6b9726399a9c34f1b9701a9faa75ed6c1da87 Mon Sep 17 00:00:00 2001 From: Tony Li Date: Mon, 24 Nov 2025 15:04:14 +1300 Subject: [PATCH 03/12] Move AbstractPost.isPublished to Swift --- Sources/WordPressData/Objective-C/AbstractPost.m | 5 ----- Sources/WordPressData/Objective-C/include/AbstractPost.h | 5 ----- Sources/WordPressData/Swift/AbstractPost.swift | 6 ++++++ 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/Sources/WordPressData/Objective-C/AbstractPost.m b/Sources/WordPressData/Objective-C/AbstractPost.m index 0d5cd0bac725..3855d8672e61 100644 --- a/Sources/WordPressData/Objective-C/AbstractPost.m +++ b/Sources/WordPressData/Objective-C/AbstractPost.m @@ -114,11 +114,6 @@ - (BOOL)hasRemote #pragma mark - Convenience methods -- (BOOL)isPublished -{ - return [self.status isEqualToString:PostStatusPublish]; -} - - (BOOL)originalIsDraft { if ([self.status isEqualToString:PostStatusDraft]) { diff --git a/Sources/WordPressData/Objective-C/include/AbstractPost.h b/Sources/WordPressData/Objective-C/include/AbstractPost.h index aaef7d1555cf..ac97f6f0028d 100644 --- a/Sources/WordPressData/Objective-C/include/AbstractPost.h +++ b/Sources/WordPressData/Objective-C/include/AbstractPost.h @@ -75,11 +75,6 @@ typedef NS_ENUM(NSUInteger, AbstractPostRemoteStatus) { #pragma mark - Unsaved Changes -/** - Returns YES if the post is a published. - */ -- (BOOL)isPublished; - /** Returns YES if the original post is a draft */ diff --git a/Sources/WordPressData/Swift/AbstractPost.swift b/Sources/WordPressData/Swift/AbstractPost.swift index 9c694e580c9a..de4b537603e5 100644 --- a/Sources/WordPressData/Swift/AbstractPost.swift +++ b/Sources/WordPressData/Swift/AbstractPost.swift @@ -340,4 +340,10 @@ public extension AbstractPost { func isDraft() -> Bool { status == .draft } + + /// Returns YES if the post is a published. + @objc + func isPublished() -> Bool { + status == .publish + } } From 1bc79750960d0cf2a89d651e01d469b34fb8b372 Mon Sep 17 00:00:00 2001 From: Tony Li Date: Mon, 24 Nov 2025 15:05:20 +1300 Subject: [PATCH 04/12] Move AbstractPost.originalIsDraft to Swift --- Sources/WordPressData/Objective-C/AbstractPost.m | 10 ---------- .../WordPressData/Objective-C/include/AbstractPost.h | 5 ----- Sources/WordPressData/Swift/AbstractPost.swift | 11 +++++++++++ 3 files changed, 11 insertions(+), 15 deletions(-) diff --git a/Sources/WordPressData/Objective-C/AbstractPost.m b/Sources/WordPressData/Objective-C/AbstractPost.m index 3855d8672e61..0cc8fbbea6a1 100644 --- a/Sources/WordPressData/Objective-C/AbstractPost.m +++ b/Sources/WordPressData/Objective-C/AbstractPost.m @@ -114,16 +114,6 @@ - (BOOL)hasRemote #pragma mark - Convenience methods -- (BOOL)originalIsDraft -{ - if ([self.status isEqualToString:PostStatusDraft]) { - return YES; - } else if (self.isRevision && [self.original.status isEqualToString:PostStatusDraft]) { - return YES; - } - return NO; -} - - (BOOL)shouldPublishImmediately { /// - warning: Yes, this is WordPress logic and it matches the behavior on diff --git a/Sources/WordPressData/Objective-C/include/AbstractPost.h b/Sources/WordPressData/Objective-C/include/AbstractPost.h index ac97f6f0028d..fbc9886edcf0 100644 --- a/Sources/WordPressData/Objective-C/include/AbstractPost.h +++ b/Sources/WordPressData/Objective-C/include/AbstractPost.h @@ -75,11 +75,6 @@ typedef NS_ENUM(NSUInteger, AbstractPostRemoteStatus) { #pragma mark - Unsaved Changes -/** - Returns YES if the original post is a draft - */ -- (BOOL)originalIsDraft; - // Does the post exist on the blog? - (BOOL)hasRemote; diff --git a/Sources/WordPressData/Swift/AbstractPost.swift b/Sources/WordPressData/Swift/AbstractPost.swift index de4b537603e5..b471ecccbf85 100644 --- a/Sources/WordPressData/Swift/AbstractPost.swift +++ b/Sources/WordPressData/Swift/AbstractPost.swift @@ -346,4 +346,15 @@ public extension AbstractPost { func isPublished() -> Bool { status == .publish } + + /// Returns YES if the original post is a draft + @objc + func originalIsDraft() -> Bool { + if status == .draft { + return true + } else if isRevision(), original?.status == .draft { + return true + } + return false + } } From 9ef889690f60a16e55aa9f54acf1fc63283f9c7c Mon Sep 17 00:00:00 2001 From: Tony Li Date: Mon, 24 Nov 2025 15:06:25 +1300 Subject: [PATCH 05/12] Move AbstractPost.shouldPublishImmediately to Swift --- Sources/WordPressData/Objective-C/AbstractPost.m | 13 ------------- .../Objective-C/include/AbstractPost.h | 1 - Sources/WordPressData/Swift/AbstractPost.swift | 8 ++++++++ 3 files changed, 8 insertions(+), 14 deletions(-) diff --git a/Sources/WordPressData/Objective-C/AbstractPost.m b/Sources/WordPressData/Objective-C/AbstractPost.m index 0cc8fbbea6a1..65445379b846 100644 --- a/Sources/WordPressData/Objective-C/AbstractPost.m +++ b/Sources/WordPressData/Objective-C/AbstractPost.m @@ -58,11 +58,6 @@ - (AbstractPost *)original #pragma mark - Helpers -- (BOOL)dateCreatedIsNilOrEqualToDateModified -{ - return self.date_created_gmt == nil || [self.date_created_gmt isEqualToDate:self.dateModified]; -} - - (BOOL)hasPhoto { if ([self.media count] == 0) { @@ -114,14 +109,6 @@ - (BOOL)hasRemote #pragma mark - Convenience methods -- (BOOL)shouldPublishImmediately -{ - /// - warning: Yes, this is WordPress logic and it matches the behavior on - /// the web. If `dateCreated` is the same as `dateModified`, the system - /// uses it to represent a "no publish date selected" scenario. - return [self originalIsDraft] && [self dateCreatedIsNilOrEqualToDateModified]; -} - - (NSURL *)blogURL { return [NSURL URLWithString:self.blog.url]; diff --git a/Sources/WordPressData/Objective-C/include/AbstractPost.h b/Sources/WordPressData/Objective-C/include/AbstractPost.h index fbc9886edcf0..d027350f30aa 100644 --- a/Sources/WordPressData/Objective-C/include/AbstractPost.h +++ b/Sources/WordPressData/Objective-C/include/AbstractPost.h @@ -69,7 +69,6 @@ typedef NS_ENUM(NSUInteger, AbstractPostRemoteStatus) { #pragma mark - Conveniece Methods -- (BOOL)shouldPublishImmediately; - (BOOL)isPrivateAtWPCom; diff --git a/Sources/WordPressData/Swift/AbstractPost.swift b/Sources/WordPressData/Swift/AbstractPost.swift index b471ecccbf85..a9ac854da1e5 100644 --- a/Sources/WordPressData/Swift/AbstractPost.swift +++ b/Sources/WordPressData/Swift/AbstractPost.swift @@ -357,4 +357,12 @@ public extension AbstractPost { } return false } + + @objc + func shouldPublishImmediately() -> Bool { + // - warning: Yes, this is WordPress logic and it matches the behavior on + // the web. If `dateCreated` is the same as `dateModified`, the system + // uses it to represent a "no publish date selected" scenario. + originalIsDraft() && (date_created_gmt == nil || date_created_gmt == dateModified) + } } From a21936ddad8be28698adde413d41785080fbd5a3 Mon Sep 17 00:00:00 2001 From: Tony Li Date: Mon, 24 Nov 2025 15:12:03 +1300 Subject: [PATCH 06/12] Move AbstractPost.hasPhoto and hasVideo to Swift --- .../WordPressData/Objective-C/AbstractPost.m | 34 ------------------- .../Objective-C/include/AbstractPost.h | 2 -- .../WordPressData/Swift/AbstractPost.swift | 22 ++++++++++++ 3 files changed, 22 insertions(+), 36 deletions(-) diff --git a/Sources/WordPressData/Objective-C/AbstractPost.m b/Sources/WordPressData/Objective-C/AbstractPost.m index 65445379b846..9b4b16d82540 100644 --- a/Sources/WordPressData/Objective-C/AbstractPost.m +++ b/Sources/WordPressData/Objective-C/AbstractPost.m @@ -58,40 +58,6 @@ - (AbstractPost *)original #pragma mark - Helpers -- (BOOL)hasPhoto -{ - if ([self.media count] == 0) { - return NO; - } - - if (self.featuredImage != nil) { - return YES; - } - - for (Media *media in self.media) { - if (media.mediaType == MediaTypeImage) { - return YES; - } - } - - return NO; -} - -- (BOOL)hasVideo -{ - if ([self.media count] == 0) { - return NO; - } - - for (Media *media in self.media) { - if (media.mediaType == MediaTypeVideo) { - return YES; - } - } - - return NO; -} - - (BOOL)hasCategories { return NO; diff --git a/Sources/WordPressData/Objective-C/include/AbstractPost.h b/Sources/WordPressData/Objective-C/include/AbstractPost.h index d027350f30aa..81a4b7891a9d 100644 --- a/Sources/WordPressData/Objective-C/include/AbstractPost.h +++ b/Sources/WordPressData/Objective-C/include/AbstractPost.h @@ -62,8 +62,6 @@ typedef NS_ENUM(NSUInteger, AbstractPostRemoteStatus) { @property (nonatomic, strong, nullable) NSString *voiceContent; -- (BOOL)hasPhoto; -- (BOOL)hasVideo; - (BOOL)hasCategories; - (BOOL)hasTags; diff --git a/Sources/WordPressData/Swift/AbstractPost.swift b/Sources/WordPressData/Swift/AbstractPost.swift index a9ac854da1e5..953e622c8e11 100644 --- a/Sources/WordPressData/Swift/AbstractPost.swift +++ b/Sources/WordPressData/Swift/AbstractPost.swift @@ -365,4 +365,26 @@ public extension AbstractPost { // uses it to represent a "no publish date selected" scenario. originalIsDraft() && (date_created_gmt == nil || date_created_gmt == dateModified) } + + @objc + func hasPhoto() -> Bool { + if media.isEmpty { + return false + } + + if featuredImage != nil { + return true + } + + return media.contains { $0.mediaType == .image } + } + + @objc + func hasVideo() -> Bool { + if media.isEmpty { + return false + } + + return media.contains { $0.mediaType == .video } + } } From 768909fbc30ba193e85922279dd13b4e0191baeb Mon Sep 17 00:00:00 2001 From: Tony Li Date: Mon, 24 Nov 2025 15:13:48 +1300 Subject: [PATCH 07/12] Move AbstractPost.hasRemote to Swift --- Sources/WordPressData/Objective-C/AbstractPost.m | 5 ----- Sources/WordPressData/Objective-C/include/AbstractPost.h | 3 --- Sources/WordPressData/Swift/AbstractPost.swift | 6 ++++++ 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/Sources/WordPressData/Objective-C/AbstractPost.m b/Sources/WordPressData/Objective-C/AbstractPost.m index 9b4b16d82540..dbc15f012d2b 100644 --- a/Sources/WordPressData/Objective-C/AbstractPost.m +++ b/Sources/WordPressData/Objective-C/AbstractPost.m @@ -68,11 +68,6 @@ - (BOOL)hasTags return NO; } -- (BOOL)hasRemote -{ - return ((self.postID != nil) && ([self.postID longLongValue] > 0)); -} - #pragma mark - Convenience methods - (NSURL *)blogURL diff --git a/Sources/WordPressData/Objective-C/include/AbstractPost.h b/Sources/WordPressData/Objective-C/include/AbstractPost.h index 81a4b7891a9d..331544304971 100644 --- a/Sources/WordPressData/Objective-C/include/AbstractPost.h +++ b/Sources/WordPressData/Objective-C/include/AbstractPost.h @@ -72,9 +72,6 @@ typedef NS_ENUM(NSUInteger, AbstractPostRemoteStatus) { #pragma mark - Unsaved Changes -// Does the post exist on the blog? -- (BOOL)hasRemote; - // Save changes to disk - (void)save; diff --git a/Sources/WordPressData/Swift/AbstractPost.swift b/Sources/WordPressData/Swift/AbstractPost.swift index 953e622c8e11..01e2bf0b49ea 100644 --- a/Sources/WordPressData/Swift/AbstractPost.swift +++ b/Sources/WordPressData/Swift/AbstractPost.swift @@ -387,4 +387,10 @@ public extension AbstractPost { return media.contains { $0.mediaType == .video } } + + /// Does the post exist on the blog? + @objc + func hasRemote() -> Bool { + (postID?.int64Value ?? 0) > 0 + } } From cc1f47680c5174e65a1fb74858947711035f9212 Mon Sep 17 00:00:00 2001 From: Tony Li Date: Mon, 24 Nov 2025 15:15:56 +1300 Subject: [PATCH 08/12] Remove unused function AbstractPost.blogURL --- Sources/WordPressData/Objective-C/AbstractPost.m | 5 ----- 1 file changed, 5 deletions(-) diff --git a/Sources/WordPressData/Objective-C/AbstractPost.m b/Sources/WordPressData/Objective-C/AbstractPost.m index dbc15f012d2b..7870a4405859 100644 --- a/Sources/WordPressData/Objective-C/AbstractPost.m +++ b/Sources/WordPressData/Objective-C/AbstractPost.m @@ -70,11 +70,6 @@ - (BOOL)hasTags #pragma mark - Convenience methods -- (NSURL *)blogURL -{ - return [NSURL URLWithString:self.blog.url]; -} - - (BOOL)isPrivateAtWPCom { return self.blog.isPrivateAtWPCom; From 2c073712e364c3fc322b2a9bd699320692c24bcf Mon Sep 17 00:00:00 2001 From: Tony Li Date: Mon, 24 Nov 2025 15:16:16 +1300 Subject: [PATCH 09/12] Remove AbstractPost.isPrivateAtWPCom --- Sources/WordPressData/Objective-C/AbstractPost.m | 7 ------- Sources/WordPressData/Objective-C/include/AbstractPost.h | 5 ----- .../Classes/ViewRelated/Gutenberg/EditorMediaUtility.swift | 2 +- 3 files changed, 1 insertion(+), 13 deletions(-) diff --git a/Sources/WordPressData/Objective-C/AbstractPost.m b/Sources/WordPressData/Objective-C/AbstractPost.m index 7870a4405859..7819a02b24e0 100644 --- a/Sources/WordPressData/Objective-C/AbstractPost.m +++ b/Sources/WordPressData/Objective-C/AbstractPost.m @@ -68,13 +68,6 @@ - (BOOL)hasTags return NO; } -#pragma mark - Convenience methods - -- (BOOL)isPrivateAtWPCom -{ - return self.blog.isPrivateAtWPCom; -} - #pragma mark - Post - (void)updatePathForDisplayImageBasedOnContent diff --git a/Sources/WordPressData/Objective-C/include/AbstractPost.h b/Sources/WordPressData/Objective-C/include/AbstractPost.h index 331544304971..a7ac5d01b6e7 100644 --- a/Sources/WordPressData/Objective-C/include/AbstractPost.h +++ b/Sources/WordPressData/Objective-C/include/AbstractPost.h @@ -65,11 +65,6 @@ typedef NS_ENUM(NSUInteger, AbstractPostRemoteStatus) { - (BOOL)hasCategories; - (BOOL)hasTags; - -#pragma mark - Conveniece Methods -- (BOOL)isPrivateAtWPCom; - - #pragma mark - Unsaved Changes // Save changes to disk diff --git a/WordPress/Classes/ViewRelated/Gutenberg/EditorMediaUtility.swift b/WordPress/Classes/ViewRelated/Gutenberg/EditorMediaUtility.swift index d269f5219993..f185fc957d65 100644 --- a/WordPress/Classes/ViewRelated/Gutenberg/EditorMediaUtility.swift +++ b/WordPress/Classes/ViewRelated/Gutenberg/EditorMediaUtility.swift @@ -139,7 +139,7 @@ class EditorMediaUtility { let requestURL: URL if url.isFileURL { requestURL = url - } else if post.isPrivateAtWPCom() && url.isHostedAtWPCom { + } else if post.blog.isPrivateAtWPCom() && url.isHostedAtWPCom { // private wpcom image needs special handling. // the size that WPImageHelper expects is pixel size size.width = size.width * scale From 18c339d4efc7c912a4925405ca8fbfb64be51460 Mon Sep 17 00:00:00 2001 From: Tony Li Date: Mon, 24 Nov 2025 16:14:39 +1300 Subject: [PATCH 10/12] Move AbstractPost.parsedOtherTerms to Swift --- .../WordPressData/Objective-C/AbstractPost.m | 18 ------------------ .../Objective-C/include/AbstractPost.h | 3 --- Sources/WordPressData/Swift/AbstractPost.swift | 14 ++++++++++++++ .../RemotePostCreateParameters+Helpers.swift | 2 +- .../Post/PostSettings/PostSettings.swift | 6 +++--- 5 files changed, 18 insertions(+), 25 deletions(-) diff --git a/Sources/WordPressData/Objective-C/AbstractPost.m b/Sources/WordPressData/Objective-C/AbstractPost.m index 7819a02b24e0..37894e0e83d3 100644 --- a/Sources/WordPressData/Objective-C/AbstractPost.m +++ b/Sources/WordPressData/Objective-C/AbstractPost.m @@ -88,22 +88,4 @@ - (void)updatePathForDisplayImageBasedOnContent self.pathForDisplayImage = result; } -- (void)setParsedOtherTerms:(NSDictionary *> *)data -{ - if (data == nil) { - self.rawOtherTerms = nil; - } else { - self.rawOtherTerms = [NSJSONSerialization dataWithJSONObject:data options:0 error:nil]; - } -} - -- (NSDictionary *> *)parseOtherTerms -{ - if (self.rawOtherTerms == nil) { - return [NSDictionary dictionary]; - } - - return [NSJSONSerialization JSONObjectWithData:self.rawOtherTerms options:0 error:nil] ?: [NSDictionary dictionary]; -} - @end diff --git a/Sources/WordPressData/Objective-C/include/AbstractPost.h b/Sources/WordPressData/Objective-C/include/AbstractPost.h index a7ac5d01b6e7..7a9cd3160bb8 100644 --- a/Sources/WordPressData/Objective-C/include/AbstractPost.h +++ b/Sources/WordPressData/Objective-C/include/AbstractPost.h @@ -76,9 +76,6 @@ typedef NS_ENUM(NSUInteger, AbstractPostRemoteStatus) { */ - (void)updatePathForDisplayImageBasedOnContent; -- (void)setParsedOtherTerms:(NSDictionary *> *)data; -- (NSDictionary *> *)parseOtherTerms; - @end @interface AbstractPost (CoreDataGeneratedAccessors) diff --git a/Sources/WordPressData/Swift/AbstractPost.swift b/Sources/WordPressData/Swift/AbstractPost.swift index 01e2bf0b49ea..2b366bbcce53 100644 --- a/Sources/WordPressData/Swift/AbstractPost.swift +++ b/Sources/WordPressData/Swift/AbstractPost.swift @@ -393,4 +393,18 @@ public extension AbstractPost { func hasRemote() -> Bool { (postID?.int64Value ?? 0) > 0 } + + @objc + var parsedOtherTerms: [String: [String]] { + get { + guard let rawOtherTerms else { + return [:] + } + + return (try? JSONSerialization.jsonObject(with: rawOtherTerms) as? [String: [String]]) ?? [:] + } + set { + rawOtherTerms = try? JSONSerialization.data(withJSONObject: newValue) + } + } } diff --git a/Sources/WordPressData/Swift/RemotePostCreateParameters+Helpers.swift b/Sources/WordPressData/Swift/RemotePostCreateParameters+Helpers.swift index b4465f326300..cbd0434a230d 100644 --- a/Sources/WordPressData/Swift/RemotePostCreateParameters+Helpers.swift +++ b/Sources/WordPressData/Swift/RemotePostCreateParameters+Helpers.swift @@ -20,7 +20,7 @@ extension RemotePostCreateParameters { excerpt = post.mt_excerpt slug = post.wp_slug featuredImageID = post.featuredImage?.mediaID?.intValue - otherTerms = post.parseOtherTerms() + otherTerms = post.parsedOtherTerms switch post { case let page as Page: parentPageID = page.parentID?.intValue diff --git a/WordPress/Classes/ViewRelated/Post/PostSettings/PostSettings.swift b/WordPress/Classes/ViewRelated/Post/PostSettings/PostSettings.swift index 6758d5f530b4..797c9a1519ad 100644 --- a/WordPress/Classes/ViewRelated/Post/PostSettings/PostSettings.swift +++ b/WordPress/Classes/ViewRelated/Post/PostSettings/PostSettings.swift @@ -54,7 +54,7 @@ struct PostSettings: Hashable { } featuredImageID = post.featuredImage?.mediaID?.intValue - otherTerms = post.parseOtherTerms() + otherTerms = post.parsedOtherTerms metadata = PostMetadata(post) @@ -112,8 +112,8 @@ struct PostSettings: Hashable { post.featuredImage = nil } - if !RemotePost.compare(otherTerms: post.parseOtherTerms(), withAnother: otherTerms) { - post.setParsedOtherTerms(otherTerms) + if !RemotePost.compare(otherTerms: post.parsedOtherTerms, withAnother: otherTerms) { + post.parsedOtherTerms = otherTerms } var postMetadataContainer = PostMetadataContainer(post) From 2ffffa696acf98eae485c2c9557cadff118d98d3 Mon Sep 17 00:00:00 2001 From: Tony Li Date: Mon, 24 Nov 2025 21:40:26 +1300 Subject: [PATCH 11/12] Move AbstractPost.updatePathForDisplayImageBasedOnContent to Swift --- .../WordPressData/Objective-C/AbstractPost.m | 20 ------------ .../Objective-C/include/AbstractPost.h | 6 ---- .../WordPressData/Swift/AbstractPost.swift | 31 +++++++++++++++++++ 3 files changed, 31 insertions(+), 26 deletions(-) diff --git a/Sources/WordPressData/Objective-C/AbstractPost.m b/Sources/WordPressData/Objective-C/AbstractPost.m index 37894e0e83d3..686e4089fca6 100644 --- a/Sources/WordPressData/Objective-C/AbstractPost.m +++ b/Sources/WordPressData/Objective-C/AbstractPost.m @@ -68,24 +68,4 @@ - (BOOL)hasTags return NO; } -#pragma mark - Post - -- (void)updatePathForDisplayImageBasedOnContent -{ - // First lets check the post content for a suitable image - NSString *result = [DisplayableImageHelper searchPostContentForImageToDisplay:self.content]; - if (result.length > 0) { - self.pathForDisplayImage = result; - } - // If none found let's see if some galleries are available - NSSet *mediaIDs = [DisplayableImageHelper searchPostContentForAttachmentIdsInGalleries:self.content]; - for (Media *media in self.blog.media) { - NSNumber *mediaID = media.mediaID; - if (mediaID && [mediaIDs containsObject:mediaID]) { - result = media.remoteURL; - } - } - self.pathForDisplayImage = result; -} - @end diff --git a/Sources/WordPressData/Objective-C/include/AbstractPost.h b/Sources/WordPressData/Objective-C/include/AbstractPost.h index 7a9cd3160bb8..1769e35276c3 100644 --- a/Sources/WordPressData/Objective-C/include/AbstractPost.h +++ b/Sources/WordPressData/Objective-C/include/AbstractPost.h @@ -70,12 +70,6 @@ typedef NS_ENUM(NSUInteger, AbstractPostRemoteStatus) { // Save changes to disk - (void)save; -/** - * Updates the path for the display image by looking at the post content and trying to find an good image to use. - * If no appropiated image is found the path is set to nil. - */ -- (void)updatePathForDisplayImageBasedOnContent; - @end @interface AbstractPost (CoreDataGeneratedAccessors) diff --git a/Sources/WordPressData/Swift/AbstractPost.swift b/Sources/WordPressData/Swift/AbstractPost.swift index 2b366bbcce53..a46d445ce523 100644 --- a/Sources/WordPressData/Swift/AbstractPost.swift +++ b/Sources/WordPressData/Swift/AbstractPost.swift @@ -407,4 +407,35 @@ public extension AbstractPost { rawOtherTerms = try? JSONSerialization.data(withJSONObject: newValue) } } + + /// Updates the path for the display image by looking at the post content and trying to find an good image to use. + /// If no appropiated image is found the path is set to nil. + @objc + func updatePathForDisplayImageBasedOnContent() { + guard let content else { + return + } + + if let result = DisplayableImageHelper.searchPostContentForImage(toDisplay: content), !result.isEmpty { + pathForDisplayImage = result + return + } + + guard let allMedia = blog.media, !allMedia.isEmpty else { return } + + let mediaIDs = DisplayableImageHelper.searchPostContentForAttachmentIds(inGalleries: content) as? Set ?? [] + for media in allMedia { + guard let media = media as? Media else { continue } + + guard let mediaID = media.mediaID, + mediaIDs.contains(mediaID) else { + continue + } + + if let remoteURL = media.remoteURL { + pathForDisplayImage = remoteURL + break + } + } + } } From 086eca578264a8e065fc31a8e1e34601df0d9246 Mon Sep 17 00:00:00 2001 From: Tony Li Date: Mon, 24 Nov 2025 21:45:35 +1300 Subject: [PATCH 12/12] Remove unused function `AbstractPost.save` --- Sources/WordPressData/Objective-C/AbstractPost.m | 7 ------- Sources/WordPressData/Objective-C/include/AbstractPost.h | 5 ----- 2 files changed, 12 deletions(-) diff --git a/Sources/WordPressData/Objective-C/AbstractPost.m b/Sources/WordPressData/Objective-C/AbstractPost.m index 686e4089fca6..a54b0058ec06 100644 --- a/Sources/WordPressData/Objective-C/AbstractPost.m +++ b/Sources/WordPressData/Objective-C/AbstractPost.m @@ -28,13 +28,6 @@ @implementation AbstractPost @dynamic permalinkTemplateURL; @synthesize voiceContent; -#pragma mark - Life Cycle Methods - -- (void)save -{ - [[ContextManager sharedInstance] saveContext:self.managedObjectContext]; -} - #pragma mark - #pragma mark Revision management diff --git a/Sources/WordPressData/Objective-C/include/AbstractPost.h b/Sources/WordPressData/Objective-C/include/AbstractPost.h index 1769e35276c3..24833ca1ef5b 100644 --- a/Sources/WordPressData/Objective-C/include/AbstractPost.h +++ b/Sources/WordPressData/Objective-C/include/AbstractPost.h @@ -65,11 +65,6 @@ typedef NS_ENUM(NSUInteger, AbstractPostRemoteStatus) { - (BOOL)hasCategories; - (BOOL)hasTags; -#pragma mark - Unsaved Changes - -// Save changes to disk -- (void)save; - @end @interface AbstractPost (CoreDataGeneratedAccessors)