in FriendlyPix/FPFeedViewController.swift [378:456]
func loadFeed() {
if observers.isEmpty && !posts.isEmpty {
if let spinner = spinner {
removeSpinner(spinner)
}
for post in posts {
postsRef.child(post.postID).observeSingleEvent(of: .value, with: {
if $0.exists() && !self.appDelegate.isBlocked($0) {
self.updatePost(post, postSnapshot: $0)
self.listenPost(post)
} else {
if let index = self.posts.firstIndex(where: {$0.postID == post.postID}) {
self.posts.remove(at: index)
self.loadingPostCount -= 1
Crashlytics.crashlytics().setCustomValue(self.posts.count, forKey: "updateDeletes")
self.collectionView?.deleteItems(at: [IndexPath(item: index, section: 0)])
if self.posts.isEmpty {
self.collectionView?.backgroundView = self.emptyHomeLabel
}
}
}
})
}
} else {
var query = self.query?.queryOrderedByKey()
if let queryEnding = nextEntry {
query = query?.queryEnding(atValue: queryEnding)
}
loadingPostCount = posts.count + FPFeedViewController.postsPerLoad
query?.queryLimited(toLast: FPFeedViewController.postsLimit).observeSingleEvent(of: .value, with: { snapshot in
if let spinner = self.spinner {
self.removeSpinner(spinner)
}
if let reversed = snapshot.children.allObjects as? [DataSnapshot], !reversed.isEmpty {
self.collectionView?.backgroundView = nil
self.nextEntry = reversed[0].key
var results = [Int: DataSnapshot]()
let myGroup = DispatchGroup()
let extraElement = reversed.count > FPFeedViewController.postsPerLoad ? 1 : 0
self.collectionView?.performBatchUpdates({
for index in stride(from: reversed.count - 1, through: extraElement, by: -1) {
let item = reversed[index]
if self.showFeed {
self.loadPost(item)
} else {
myGroup.enter()
let current = reversed.count - 1 - index
self.postsRef.child(item.key).observeSingleEvent(of: .value) {
results[current] = $0
myGroup.leave()
}
}
}
myGroup.notify(queue: .main) {
if !self.showFeed {
for index in 0..<(reversed.count - extraElement) {
if let snapshot = results[index] {
if snapshot.exists() {
self.loadPost(snapshot)
} else {
self.loadingPostCount -= 1
self.database.reference(withPath: "feed/\(self.uid)/\(snapshot.key)").removeValue()
}
}
}
}
}
}, completion: nil)
} else if self.posts.isEmpty && !self.showFeed {
if self.isFirstOpen {
self.feedAction()
self.isFirstOpen = false
} else {
self.collectionView?.backgroundView = self.emptyHomeLabel
}
}
})
}
}