Make network requests in viewWillAppear instead of viewDidLoad

This commit is contained in:
Shadowfacts 2020-06-15 19:39:44 -04:00
parent 6b7904ed52
commit 36326e4469
Signed by untrusted user: shadowfacts
GPG Key ID: 94A5AB95422746E5
4 changed files with 73 additions and 45 deletions

View File

@ -15,6 +15,8 @@ class BookmarksTableViewController: EnhancedTableViewController {
let mastodonController: MastodonController let mastodonController: MastodonController
private var loaded = false
var statuses: [(id: String, state: StatusState)] = [] var statuses: [(id: String, state: StatusState)] = []
var newer: RequestRange? var newer: RequestRange?
@ -42,21 +44,29 @@ class BookmarksTableViewController: EnhancedTableViewController {
tableView.prefetchDataSource = self tableView.prefetchDataSource = self
let request = Client.getBookmarks() userActivity = UserActivityManager.bookmarksActivity()
mastodonController.run(request) { (response) in }
guard case let .success(statuses, pagination) = response else { fatalError() }
self.mastodonController.persistentContainer.addAll(statuses: statuses) {
self.statuses.append(contentsOf: statuses.map { ($0.id, .unknown) })
self.newer = pagination?.newer
self.older = pagination?.older
DispatchQueue.main.async { override func viewWillAppear(_ animated: Bool) {
self.tableView.reloadData() super.viewWillAppear(animated)
if !loaded {
loaded = true
let request = Client.getBookmarks()
mastodonController.run(request) { (response) in
guard case let .success(statuses, pagination) = response else { fatalError() }
self.mastodonController.persistentContainer.addAll(statuses: statuses) {
self.statuses.append(contentsOf: statuses.map { ($0.id, .unknown) })
self.newer = pagination?.newer
self.older = pagination?.older
DispatchQueue.main.async {
self.tableView.reloadData()
}
} }
} }
} }
userActivity = UserActivityManager.bookmarksActivity()
} }
// MARK: - Table view data source // MARK: - Table view data source

View File

@ -22,6 +22,8 @@ class NotificationsTableViewController: EnhancedTableViewController {
let excludedTypes: [Pachyderm.Notification.Kind] let excludedTypes: [Pachyderm.Notification.Kind]
let groupTypes = [Notification.Kind.favourite, .reblog, .follow] let groupTypes = [Notification.Kind.favourite, .reblog, .follow]
private var loaded = false
var groups: [NotificationGroup] = [] var groups: [NotificationGroup] = []
var newer: RequestRange? var newer: RequestRange?
@ -54,21 +56,29 @@ class NotificationsTableViewController: EnhancedTableViewController {
tableView.register(UINib(nibName: "BasicTableViewCell", bundle: .main), forCellReuseIdentifier: unknownCell) tableView.register(UINib(nibName: "BasicTableViewCell", bundle: .main), forCellReuseIdentifier: unknownCell)
tableView.prefetchDataSource = self tableView.prefetchDataSource = self
}
let request = Client.getNotifications(excludeTypes: excludedTypes) override func viewWillAppear(_ animated: Bool) {
mastodonController.run(request) { result in super.viewWillAppear(animated)
guard case let .success(notifications, pagination) = result else { fatalError() }
let groups = NotificationGroup.createGroups(notifications: notifications, only: self.groupTypes) if !loaded {
loaded = true
self.groups.append(contentsOf: groups) let request = Client.getNotifications(excludeTypes: excludedTypes)
mastodonController.run(request) { result in
guard case let .success(notifications, pagination) = result else { fatalError() }
self.newer = pagination?.newer let groups = NotificationGroup.createGroups(notifications: notifications, only: self.groupTypes)
self.older = pagination?.older
self.mastodonController.persistentContainer.addAll(notifications: notifications) { self.groups.append(contentsOf: groups)
DispatchQueue.main.async {
self.tableView.reloadData() self.newer = pagination?.newer
self.older = pagination?.older
self.mastodonController.persistentContainer.addAll(notifications: notifications) {
DispatchQueue.main.async {
self.tableView.reloadData()
}
} }
} }
} }

View File

@ -14,15 +14,7 @@ class ProfileTableViewController: EnhancedTableViewController {
weak var mastodonController: MastodonController! weak var mastodonController: MastodonController!
var accountID: String! { var accountID: String!
didSet {
if shouldLoadOnAccountIDSet {
DispatchQueue.main.async {
self.updateAccountUI()
}
}
}
}
var pinnedStatuses: [(id: String, state: StatusState)] = [] { var pinnedStatuses: [(id: String, state: StatusState)] = [] {
didSet { didSet {
@ -42,8 +34,8 @@ class ProfileTableViewController: EnhancedTableViewController {
var older: RequestRange? var older: RequestRange?
var newer: RequestRange? var newer: RequestRange?
var shouldLoadOnAccountIDSet = false private var loadingVC: LoadingViewController? = nil
var loadingVC: LoadingViewController? = nil private var loaded = false
init(accountID: String?, mastodonController: MastodonController) { init(accountID: String?, mastodonController: MastodonController) {
self.mastodonController = mastodonController self.mastodonController = mastodonController
@ -80,7 +72,22 @@ class ProfileTableViewController: EnhancedTableViewController {
tableView.prefetchDataSource = self tableView.prefetchDataSource = self
if let accountID = accountID { if accountID == nil {
loadingVC = LoadingViewController()
embedChild(loadingVC!)
}
NotificationCenter.default.addObserver(self, selector: #selector(updateUIForPreferences), name: .preferencesChanged, object: nil)
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if !loaded, let accountID = accountID {
loaded = true
loadingVC?.removeViewAndController()
loadingVC = nil
if mastodonController.persistentContainer.account(for: accountID) != nil { if mastodonController.persistentContainer.account(for: accountID) != nil {
updateAccountUI() updateAccountUI()
} else { } else {
@ -106,18 +113,10 @@ class ProfileTableViewController: EnhancedTableViewController {
} }
} }
} }
} else {
loadingVC = LoadingViewController()
embedChild(loadingVC!)
shouldLoadOnAccountIDSet = true
} }
NotificationCenter.default.addObserver(self, selector: #selector(updateUIForPreferences), name: .preferencesChanged, object: nil)
} }
func updateAccountUI() { func updateAccountUI() {
loadingVC?.removeViewAndController()
updateUIForPreferences() updateUIForPreferences()
getStatuses(onlyPinned: true) { (response) in getStatuses(onlyPinned: true) { (response) in

View File

@ -14,6 +14,8 @@ class TimelineTableViewController: EnhancedTableViewController {
var timeline: Timeline! var timeline: Timeline!
weak var mastodonController: MastodonController! weak var mastodonController: MastodonController!
private var loaded = false
var timelineSegments: [[(id: String, state: StatusState)]] = [] var timelineSegments: [[(id: String, state: StatusState)]] = []
var newer: RequestRange? var newer: RequestRange?
@ -63,11 +65,18 @@ class TimelineTableViewController: EnhancedTableViewController {
tableView.register(UINib(nibName: "TimelineStatusTableViewCell", bundle: nil), forCellReuseIdentifier: "statusCell") tableView.register(UINib(nibName: "TimelineStatusTableViewCell", bundle: nil), forCellReuseIdentifier: "statusCell")
tableView.prefetchDataSource = self tableView.prefetchDataSource = self
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
loadInitialStatuses() loadInitialStatuses()
} }
func loadInitialStatuses() { func loadInitialStatuses() {
guard !loaded else { return }
loaded = true
let request = Client.getStatuses(timeline: timeline) let request = Client.getStatuses(timeline: timeline)
mastodonController.run(request) { response in mastodonController.run(request) { response in
guard case let .success(statuses, pagination) = response else { fatalError() } guard case let .success(statuses, pagination) = response else { fatalError() }