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: 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
private var loaded = false
var statuses: [(id: String, state: StatusState)] = []
var newer: RequestRange?
@ -41,22 +43,30 @@ class BookmarksTableViewController: EnhancedTableViewController {
tableView.register(UINib(nibName: "TimelineStatusTableViewCell", bundle: .main), forCellReuseIdentifier: statusCell)
tableView.prefetchDataSource = self
userActivity = UserActivityManager.bookmarksActivity()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
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()
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

View File

@ -21,6 +21,8 @@ class NotificationsTableViewController: EnhancedTableViewController {
let excludedTypes: [Pachyderm.Notification.Kind]
let groupTypes = [Notification.Kind.favourite, .reblog, .follow]
private var loaded = false
var groups: [NotificationGroup] = []
@ -54,21 +56,29 @@ class NotificationsTableViewController: EnhancedTableViewController {
tableView.register(UINib(nibName: "BasicTableViewCell", bundle: .main), forCellReuseIdentifier: unknownCell)
tableView.prefetchDataSource = self
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
let request = Client.getNotifications(excludeTypes: excludedTypes)
mastodonController.run(request) { result in
guard case let .success(notifications, pagination) = result else { fatalError() }
if !loaded {
loaded = true
let groups = NotificationGroup.createGroups(notifications: notifications, only: self.groupTypes)
self.groups.append(contentsOf: groups)
self.newer = pagination?.newer
self.older = pagination?.older
self.mastodonController.persistentContainer.addAll(notifications: notifications) {
DispatchQueue.main.async {
self.tableView.reloadData()
let request = Client.getNotifications(excludeTypes: excludedTypes)
mastodonController.run(request) { result in
guard case let .success(notifications, pagination) = result else { fatalError() }
let groups = NotificationGroup.createGroups(notifications: notifications, only: self.groupTypes)
self.groups.append(contentsOf: groups)
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!
var accountID: String! {
didSet {
if shouldLoadOnAccountIDSet {
DispatchQueue.main.async {
self.updateAccountUI()
}
}
}
}
var accountID: String!
var pinnedStatuses: [(id: String, state: StatusState)] = [] {
didSet {
@ -42,8 +34,8 @@ class ProfileTableViewController: EnhancedTableViewController {
var older: RequestRange?
var newer: RequestRange?
var shouldLoadOnAccountIDSet = false
var loadingVC: LoadingViewController? = nil
private var loadingVC: LoadingViewController? = nil
private var loaded = false
init(accountID: String?, mastodonController: MastodonController) {
self.mastodonController = mastodonController
@ -80,7 +72,22 @@ class ProfileTableViewController: EnhancedTableViewController {
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 {
updateAccountUI()
} 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() {
loadingVC?.removeViewAndController()
updateUIForPreferences()
getStatuses(onlyPinned: true) { (response) in

View File

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