From c193ca6536882ad3bf0604068a100ec8588c93b4 Mon Sep 17 00:00:00 2001 From: talksik Date: Tue, 21 Dec 2021 02:34:29 -0800 Subject: [PATCH] listeners somewhat working? --- nirvana-ios/Models/Messages.swift | 7 +++-- nirvana-ios/Services/AuthSessionStore.swift | 31 ++++++++++++++++++- .../Views/InnerCircle/CircleGridView.swift | 2 +- 3 files changed, 35 insertions(+), 5 deletions(-) diff --git a/nirvana-ios/Models/Messages.swift b/nirvana-ios/Models/Messages.swift index 8dc5d24..02b093e 100644 --- a/nirvana-ios/Models/Messages.swift +++ b/nirvana-ios/Models/Messages.swift @@ -11,11 +11,12 @@ import FirebaseFirestoreSwift struct Messages: Identifiable, Codable { @DocumentID var id: String? var senderId: String - var receiverId: String + var listenCount: Int + var hasListened: Bool? = false + var audioDataUrl:String? @ServerTimestamp var sentTimestamp:Date? - @ServerTimestamp var listenedToTimestamp:Date? - var audioDataUrl:String? + @ServerTimestamp var firstListenTimestamp:Date? } diff --git a/nirvana-ios/Services/AuthSessionStore.swift b/nirvana-ios/Services/AuthSessionStore.swift index be17507..0477abd 100644 --- a/nirvana-ios/Services/AuthSessionStore.swift +++ b/nirvana-ios/Services/AuthSessionStore.swift @@ -211,7 +211,9 @@ extension AuthSessionStore { // parse through the new result set // if already exists in dict, then make sure not to delete the associated list - db.collection("user_friends").whereField("userId", isEqualTo: userId) + // order: when the relationship was created...also easy for user + // limit: for my protection of db costs lol + db.collection("user_friends").whereField("userId", isEqualTo: userId).order(by: "created").limit(to: 100) .addSnapshotListener { querySnapshot, error in guard let snapshot = querySnapshot else { print("Error fetching user's friends: \(error!)") @@ -236,6 +238,33 @@ extension AuthSessionStore { // MARK: keeping the list of messages updated + // one listener for received messages + + // don't know if we need a listener for sent messages as we can alter our model from local and add to the dictionary + + // order: sent time should make it easy to add to dict + // limit: because each user should have most 12 friends and so would at most need 24 messages to show turns and all that...save myself from hackers here + db.collection("messages").whereField("receiverId", isEqualTo: userId).limit(to: 100) + .addSnapshotListener { querySnapshot, error in + guard let snapshot = querySnapshot else { + print("Error fetching messages: \(error!)") + return + } + snapshot.documentChanges.forEach { diff in + if (diff.type == .added) { + print("New message: \(diff.document.data())") + + // keep array of messages sorted, but this should automatically be sorted? + } + if (diff.type == .modified) { + // nothing to really do here + print("Modified message: \(diff.document.data())") + } + if (diff.type == .removed) { + print("Removed message: \(diff.document.data())") + } + } + } } diff --git a/nirvana-ios/Views/InnerCircle/CircleGridView.swift b/nirvana-ios/Views/InnerCircle/CircleGridView.swift index 930e6ff..f0613a3 100644 --- a/nirvana-ios/Views/InnerCircle/CircleGridView.swift +++ b/nirvana-ios/Views/InnerCircle/CircleGridView.swift @@ -187,6 +187,6 @@ struct CircleGridView: View { struct CircleGridView_Previews: PreviewProvider { static var previews: some View { - CircleGridView() + CircleGridView().environmentObject(AuthSessionStore()) } }