func updateHomeFeeds()

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()
      }
    })
  }