Make network requests in viewWillAppear instead of viewDidLoad
This commit is contained in:
parent
6b7904ed52
commit
36326e4469
|
@ -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?
|
||||||
|
@ -41,22 +43,30 @@ class BookmarksTableViewController: EnhancedTableViewController {
|
||||||
tableView.register(UINib(nibName: "TimelineStatusTableViewCell", bundle: .main), forCellReuseIdentifier: statusCell)
|
tableView.register(UINib(nibName: "TimelineStatusTableViewCell", bundle: .main), forCellReuseIdentifier: statusCell)
|
||||||
|
|
||||||
tableView.prefetchDataSource = self
|
tableView.prefetchDataSource = self
|
||||||
|
|
||||||
|
userActivity = UserActivityManager.bookmarksActivity()
|
||||||
|
}
|
||||||
|
|
||||||
|
override func viewWillAppear(_ animated: Bool) {
|
||||||
|
super.viewWillAppear(animated)
|
||||||
|
|
||||||
let request = Client.getBookmarks()
|
if !loaded {
|
||||||
mastodonController.run(request) { (response) in
|
loaded = true
|
||||||
guard case let .success(statuses, pagination) = response else { fatalError() }
|
|
||||||
self.mastodonController.persistentContainer.addAll(statuses: statuses) {
|
let request = Client.getBookmarks()
|
||||||
self.statuses.append(contentsOf: statuses.map { ($0.id, .unknown) })
|
mastodonController.run(request) { (response) in
|
||||||
self.newer = pagination?.newer
|
guard case let .success(statuses, pagination) = response else { fatalError() }
|
||||||
self.older = pagination?.older
|
self.mastodonController.persistentContainer.addAll(statuses: statuses) {
|
||||||
|
self.statuses.append(contentsOf: statuses.map { ($0.id, .unknown) })
|
||||||
DispatchQueue.main.async {
|
self.newer = pagination?.newer
|
||||||
self.tableView.reloadData()
|
self.older = pagination?.older
|
||||||
|
|
||||||
|
DispatchQueue.main.async {
|
||||||
|
self.tableView.reloadData()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
userActivity = UserActivityManager.bookmarksActivity()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - Table view data source
|
// MARK: - Table view data source
|
||||||
|
|
|
@ -21,6 +21,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] = []
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
}
|
||||||
|
|
||||||
|
override func viewWillAppear(_ animated: Bool) {
|
||||||
|
super.viewWillAppear(animated)
|
||||||
|
|
||||||
let request = Client.getNotifications(excludeTypes: excludedTypes)
|
if !loaded {
|
||||||
mastodonController.run(request) { result in
|
loaded = true
|
||||||
guard case let .success(notifications, pagination) = result else { fatalError() }
|
|
||||||
|
|
||||||
let groups = NotificationGroup.createGroups(notifications: notifications, only: self.groupTypes)
|
let request = Client.getNotifications(excludeTypes: excludedTypes)
|
||||||
|
mastodonController.run(request) { result in
|
||||||
self.groups.append(contentsOf: groups)
|
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.groups.append(contentsOf: groups)
|
||||||
self.mastodonController.persistentContainer.addAll(notifications: notifications) {
|
|
||||||
DispatchQueue.main.async {
|
self.newer = pagination?.newer
|
||||||
self.tableView.reloadData()
|
self.older = pagination?.older
|
||||||
|
|
||||||
|
self.mastodonController.persistentContainer.addAll(notifications: notifications) {
|
||||||
|
DispatchQueue.main.async {
|
||||||
|
self.tableView.reloadData()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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() }
|
||||||
|
|
Loading…
Reference in New Issue