Skip to content

Commit 697186e

Browse files
authored
Merge pull request #21974 from wordpress-mobile/tonyli-use-post-repository-homepage-settings
Use PostRepository to fetch all pages in homepage settings
2 parents b5199f3 + 5254b27 commit 697186e

File tree

2 files changed

+29
-26
lines changed

2 files changed

+29
-26
lines changed

RELEASE-NOTES.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
* [*] Bug fix: Reader now scrolls to the top when tapping the status bar. [#21914]
44
* [*] [internal] Refactor sending the API requests for searching posts and pages. [#21976]
55
* [*] Fix an issue in Menu screen where it fails to create default menu items. [#21949]
6+
* [*] [internal] Refactor how site's pages are loaded in Site Settings -> Homepage Settings. [#21974]
67

78
23.6
89
-----

WordPress/Classes/ViewRelated/Blog/Site Settings/HomepageSettingsViewController.swift

Lines changed: 28 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import UIKit
22
import WordPressFlux
33
import WordPressShared
44

5-
@objc open class HomepageSettingsViewController: UITableViewController {
5+
@objc class HomepageSettingsViewController: UITableViewController {
66

77
fileprivate enum PageSelectionType {
88
case homepage
@@ -44,13 +44,15 @@ import WordPressShared
4444
///
4545
/// - Parameter blog: The blog for which we want to configure Homepage settings
4646
///
47-
@objc public convenience init(blog: Blog) {
48-
self.init(style: .insetGrouped)
49-
47+
@objc init(blog: Blog) {
48+
self.coreDataStack = ContextManager.shared
5049
self.blog = blog
50+
self.postRepository = PostRepository(coreDataStack: self.coreDataStack)
51+
super.init(style: .insetGrouped)
52+
}
5153

52-
let context = blog.managedObjectContext ?? ContextManager.shared.mainContext
53-
postService = PostService(managedObjectContext: context)
54+
required init?(coder: NSCoder) {
55+
fatalError("init(coder:) has not been implemented")
5456
}
5557

5658
open override func viewDidLoad() {
@@ -66,25 +68,23 @@ import WordPressShared
6668
ImmuTable.registerRows([CheckmarkRow.self, NavigationItemRow.self, ActivityIndicatorRow.self], tableView: tableView)
6769
reloadViewModel()
6870

69-
fetchAllPages()
70-
}
71-
72-
private func fetchAllPages() {
73-
let options = PostServiceSyncOptions()
74-
options.number = 20
75-
76-
postService.syncPosts(ofType: .page, with: options, for: blog, success: { [weak self] posts in
77-
self?.reloadViewModel()
78-
}, failure: { _ in
79-
80-
})
71+
fetchAllPagesTask = postRepository.fetchAllPages(statuses: [], in: TaggedManagedObjectID(blog))
8172
}
8273

8374
open override func viewWillAppear(_ animated: Bool) {
8475
super.viewWillAppear(animated)
8576
animateDeselectionInteractively()
8677
}
8778

79+
open override func viewDidDisappear(_ animated: Bool) {
80+
super.viewDidDisappear(animated)
81+
82+
if self.navigationController == nil {
83+
fetchAllPagesTask?.cancel()
84+
fetchAllPagesTask = nil
85+
}
86+
}
87+
8888
// MARK: - Model
8989

9090
fileprivate func reloadViewModel() {
@@ -151,23 +151,23 @@ import WordPressShared
151151

152152
var selectedPagesRows: [ImmuTableRow] {
153153
let homepageID = blog.homepagePageID
154-
let homepage = homepageID.flatMap { blog.lookupPost(withID: $0, in: postService.managedObjectContext) }
154+
let homepage = homepageID.flatMap { blog.lookupPost(withID: $0, in: coreDataStack.mainContext) }
155155
let homepageTitle = homepage?.titleForDisplay() ?? ""
156156

157157
let postsPageID = blog.homepagePostsPageID
158-
let postsPage = postsPageID.flatMap { blog.lookupPost(withID: $0, in: postService.managedObjectContext) }
158+
let postsPage = postsPageID.flatMap { blog.lookupPost(withID: $0, in: coreDataStack.mainContext) }
159159
let postsPageTitle = postsPage?.titleForDisplay() ?? ""
160160

161161
let homepageRow = pageSelectionRow(selectionType: .homepage,
162162
detail: homepageTitle,
163-
selectedPostID: blog?.homepagePageID,
164-
hiddenPostID: blog?.homepagePostsPageID,
163+
selectedPostID: blog.homepagePageID,
164+
hiddenPostID: blog.homepagePostsPageID,
165165
isInProgress: HomepageChange.isSelectedHomepage,
166166
changeForPost: { .selectedHomepage($0) })
167167
let postsPageRow = pageSelectionRow(selectionType: .postsPage,
168168
detail: postsPageTitle,
169-
selectedPostID: blog?.homepagePostsPageID,
170-
hiddenPostID: blog?.homepagePageID,
169+
selectedPostID: blog.homepagePostsPageID,
170+
hiddenPostID: blog.homepagePageID,
171171
isInProgress: HomepageChange.isSelectedPostsPage,
172172
changeForPost: { .selectedPostsPage($0) })
173173
return [homepageRow, postsPageRow]
@@ -304,9 +304,11 @@ import WordPressShared
304304
}
305305

306306
// MARK: - Private Properties
307-
fileprivate var blog: Blog!
307+
private let coreDataStack: CoreDataStackSwift
308+
private let blog: Blog
309+
private let postRepository: PostRepository
308310

309-
fileprivate var postService: PostService!
311+
private var fetchAllPagesTask: Task<[TaggedManagedObjectID<Page>], Error>?
310312

311313
/// Are we currently updating the homepage type?
312314
private var inProgressChange: HomepageChange? = nil

0 commit comments

Comments
 (0)