diff --git a/Modules/Package.swift b/Modules/Package.swift index 02e73fbad4e3..4df8b818864f 100644 --- a/Modules/Package.swift +++ b/Modules/Package.swift @@ -45,7 +45,7 @@ let package = Package( .package(url: "https://github.com/wordpress-mobile/MediaEditor-iOS", branch: "task/spm-support"), .package(url: "https://github.com/wordpress-mobile/NSObject-SafeExpectations", from: "0.0.6"), .package(url: "https://github.com/wordpress-mobile/NSURL-IDN", branch: "trunk"), - .package(url: "https://github.com/wordpress-mobile/WordPressKit-iOS", branch: "wpios-edition"), + .package(url: "https://github.com/wordpress-mobile/WordPressKit-iOS", branch: "parse-page-order-property"), .package(url: "https://github.com/zendesk/support_sdk_ios", from: "8.0.3"), // We can't use wordpress-rs branches nor commits here. Only tags work. .package(url: "https://github.com/Automattic/wordpress-rs", revision: "alpha-20250127"), diff --git a/WordPress.xcworkspace/xcshareddata/swiftpm/Package.resolved b/WordPress.xcworkspace/xcshareddata/swiftpm/Package.resolved index 9b9551386cf0..daaa1a817a89 100644 --- a/WordPress.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/WordPress.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,5 +1,5 @@ { - "originHash" : "b048f2348f14b6f12b4a4b8588355abe499af3f8f4e91cacc054e98187a7746c", + "originHash" : "22d0c1b3f7e39812921cdd883dd43d6502abbb0b8d294779f4db4f79c6ce80fb", "pins" : [ { "identity" : "alamofire", @@ -391,8 +391,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/wordpress-mobile/WordPressKit-iOS", "state" : { - "branch" : "wpios-edition", - "revision" : "ba542bae62a1d9b80b0baee44d610bfac55936ea" + "branch" : "parse-page-order-property", + "revision" : "7c2c1d0f2851eb6744376b4d61f03211826ed7f0" } }, { diff --git a/WordPress/Classes/Models/AbstractPost.h b/WordPress/Classes/Models/AbstractPost.h index 41ed30bc1b4d..6178226e463b 100644 --- a/WordPress/Classes/Models/AbstractPost.h +++ b/WordPress/Classes/Models/AbstractPost.h @@ -34,6 +34,7 @@ typedef NS_ENUM(NSUInteger, AbstractPostRemoteStatus) { @property (weak, readonly) AbstractPost *revision; @property (nonatomic, strong) NSSet *comments; @property (nonatomic, strong, nullable) Media *featuredImage; +@property (nonatomic, assign) NSInteger order; /// This array will contain a list of revision IDs. @property (nonatomic, strong, nullable) NSArray *revisions; diff --git a/WordPress/Classes/Models/AbstractPost.m b/WordPress/Classes/Models/AbstractPost.m index 55d68a55515b..966afe533af6 100644 --- a/WordPress/Classes/Models/AbstractPost.m +++ b/WordPress/Classes/Models/AbstractPost.m @@ -23,6 +23,7 @@ @implementation AbstractPost @dynamic autosaveModifiedDate; @dynamic autosaveIdentifier; @dynamic foreignID; +@dynamic order; @synthesize voiceContent; #pragma mark - Life Cycle Methods diff --git a/WordPress/Classes/Services/PostHelper.m b/WordPress/Classes/Services/PostHelper.m index e6b659aa0be4..fd85123cdc40 100644 --- a/WordPress/Classes/Services/PostHelper.m +++ b/WordPress/Classes/Services/PostHelper.m @@ -30,6 +30,7 @@ + (void)updatePost:(AbstractPost *)post withRemotePost:(RemotePost *)remotePost post.content = remotePost.content; post.status = remotePost.status; post.password = remotePost.password; + post.order = remotePost.order; if (remotePost.postThumbnailID != nil) { post.featuredImage = [Media existingOrStubMediaWithMediaID: remotePost.postThumbnailID inBlog:post.blog]; diff --git a/WordPress/Classes/Utility/PageTree.swift b/WordPress/Classes/Utility/PageTree.swift index 1c92e1613480..049cead400bd 100644 --- a/WordPress/Classes/Utility/PageTree.swift +++ b/WordPress/Classes/Utility/PageTree.swift @@ -2,10 +2,6 @@ final class PageTree { // A node in a tree, which of course is also a tree itself. private class TreeNode { - struct PageData { - var postID: NSNumber? - var parentID: NSNumber? - } let page: Page var children = [TreeNode]() var parentNode: TreeNode? @@ -16,7 +12,7 @@ final class PageTree { func dfsList() -> [Page] { var pages = [Page]() - _ = depthFirstSearch { level, node in + _ = depthFirstSearch(sortByPageOrder: true) { level, node in let page = node.page page.hierarchyIndex = level page.hasVisibleParent = node.parentNode != nil @@ -32,18 +28,19 @@ final class PageTree { /// a boolean value indicate whether the search should be stopped. /// - Returns: `true` if search has been stopped by the closure. @discardableResult - func depthFirstSearch(using closure: (Int, TreeNode) -> Bool) -> Bool { - depthFirstSearch(level: 0, using: closure) + func depthFirstSearch(sortByPageOrder: Bool, using closure: (Int, TreeNode) -> Bool) -> Bool { + depthFirstSearch(level: 0, sortByPageOrder: sortByPageOrder, using: closure) } - private func depthFirstSearch(level: Int, using closure: (Int, TreeNode) -> Bool) -> Bool { + private func depthFirstSearch(level: Int, sortByPageOrder: Bool, using closure: (Int, TreeNode) -> Bool) -> Bool { let shouldStop = closure(level, self) if shouldStop { return true } - for child in children { - let shouldStop = child.depthFirstSearch(level: level + 1, using: closure) + let pages = sortByPageOrder ? children.sorted(using: KeyPathComparator(\TreeNode.page.order)) : children + for child in pages { + let shouldStop = child.depthFirstSearch(level: level + 1, sortByPageOrder: sortByPageOrder, using: closure) if shouldStop { return true } diff --git a/WordPress/Classes/WordPress.xcdatamodeld/.xccurrentversion b/WordPress/Classes/WordPress.xcdatamodeld/.xccurrentversion index 3d6139808000..80f88276341c 100644 --- a/WordPress/Classes/WordPress.xcdatamodeld/.xccurrentversion +++ b/WordPress/Classes/WordPress.xcdatamodeld/.xccurrentversion @@ -3,6 +3,6 @@ _XCCurrentVersionName - WordPress 154.xcdatamodel + WordPress 155.xcdatamodel diff --git a/WordPress/Classes/WordPress.xcdatamodeld/WordPress 155.xcdatamodel/contents b/WordPress/Classes/WordPress.xcdatamodeld/WordPress 155.xcdatamodel/contents new file mode 100644 index 000000000000..b90e23b2197c --- /dev/null +++ b/WordPress/Classes/WordPress.xcdatamodeld/WordPress 155.xcdatamodel/contents @@ -0,0 +1,883 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file