in FriendlyPix/FPFeedViewController.swift [725:767]
func updateHomeFeeds() {
// Make sure we listen on each followed people's posts.
followingRef?.observeSingleEvent(of: .value, with: { followingSnapshot in
// Start listening the followed user's posts to populate the home feed.
guard let following = followingSnapshot.value as? [String: Any] else {
self.startHomeFeedLiveUpdaters()
// Get home feed posts
self.getHomeFeedPosts()
return
}
var followedUserPostsRef: DatabaseQuery!
let myGroup = DispatchGroup()
for (followedUid, lastSyncedPostId) in following {
myGroup.enter()
followedUserPostsRef = self.database.reference(withPath: "people/\(followedUid)/posts")
var lastSyncedPost = ""
if let lastSyncedPostId = lastSyncedPostId as? String {
followedUserPostsRef = followedUserPostsRef.queryOrderedByKey().queryStarting(atValue: lastSyncedPostId)
lastSyncedPost = lastSyncedPostId
}
followedUserPostsRef.observeSingleEvent(of: .value, with: { postSnapshot in
if let postArray = postSnapshot.value as? [String: Any] {
var updates = [AnyHashable: Any]()
for postId in postArray.keys where postId != lastSyncedPost {
updates["/feed/\(self.uid)/\(postId)"] = true
updates["/people/\(self.uid)/following/\(followedUid)"] = postId
}
self.ref.updateChildValues(updates, withCompletionBlock: { error, reference in
myGroup.leave()
})
} else {
myGroup.leave()
}
})
}
myGroup.notify(queue: .main) {
// Add new posts from followers live.
self.startHomeFeedLiveUpdaters()
// Get home feed posts
self.getHomeFeedPosts()
}
})
}