diff --git a/nirvana-ios/Views/InnerCircle/CircleFooterView.swift b/nirvana-ios/Views/InnerCircle/CircleFooterView.swift index 22c1b0a..81433c8 100644 --- a/nirvana-ios/Views/InnerCircle/CircleFooterView.swift +++ b/nirvana-ios/Views/InnerCircle/CircleFooterView.swift @@ -105,36 +105,40 @@ struct CircleFooterView: View { x:0, y:self.selectedFriendIndex == nil ? 150 : 0 ) - .onChange(of: self.selectedFriendIndex) {newValue in - // update meta data based on which friend was selected - let myId = self.authSessionStore.user?.id - - // reset the selected options to start fresh - self.selectedFriend = nil - self.myTurn = false - self.convoRelativeTime = "" - - // set convo moment/relative time to show - if newValue != nil && myId != nil { - self.selectedFriend = self.authSessionStore.relevantUsersDict[newValue!] - - // get the latest message's timestamp...will be the first in list now - let lastMessage = self.authSessionStore.relevantMessagesByUserDict[self.selectedFriend!.id!]?.first - if lastMessage != nil { - // figure out whose turn it is - self.myTurn = lastMessage!.receiverId == myId! ? true : false - - // ask for the full relative date - let formatter = RelativeDateTimeFormatter() - formatter.unitsStyle = .full - - let relativeDate = formatter.localizedString(for: lastMessage?.sentTimestamp ?? Date(), relativeTo: Date()) - - print("Relative date is: \(relativeDate)") + .onChange(of: self.selectedFriendIndex) {_ in + self.updateLocals() + } + } + + func updateLocals() { + // update meta data based on which friend was selected + let myId = AuthSessionStore.getCurrentUserId() + + // reset the selected options to start fresh + self.selectedFriend = nil + self.myTurn = false + self.convoRelativeTime = "" - // setting the state for ui to update - self.convoRelativeTime = self.myTurn! ? "received " + relativeDate: "sent " + relativeDate - } + // set convo moment/relative time to show + if myId != nil && self.selectedFriendIndex != nil { + self.selectedFriend = self.authSessionStore.relevantUsersDict[self.selectedFriendIndex!] + + // get the latest message's timestamp...will be the first in list now + let lastMessage = self.authSessionStore.relevantMessagesByUserDict[self.selectedFriend!.id!]?.first + if lastMessage != nil { + // figure out whose turn it is + self.myTurn = lastMessage!.receiverId == myId! ? true : false + + // ask for the full relative date + let formatter = RelativeDateTimeFormatter() + formatter.unitsStyle = .full + + let relativeDate = formatter.localizedString(for: lastMessage?.sentTimestamp ?? Date(), relativeTo: Date()) + + print("Relative date is: \(relativeDate)") + + // setting the state for ui to update + self.convoRelativeTime = self.myTurn! ? "received " + relativeDate: "sent " + relativeDate } } } diff --git a/nirvana-ios/Views/InnerCircle/CircleGridView.swift b/nirvana-ios/Views/InnerCircle/CircleGridView.swift index 4c3f74a..25d6fbe 100644 --- a/nirvana-ios/Views/InnerCircle/CircleGridView.swift +++ b/nirvana-ios/Views/InnerCircle/CircleGridView.swift @@ -34,6 +34,7 @@ struct CircleGridView: View { count: totalColumns) @Binding var selectedFriendIndex: String? + @State var lastPersonIdSentMessageTo: String? private let big:CGFloat = 1 private let medium:CGFloat = 0.9 @@ -157,7 +158,8 @@ struct CircleGridView: View { if self.haveNewMessageFromFriend(friendDbId: friendId) { ProgressBarView(progress: self.selectedFriendIndex == friendId ? self.innerCircleVM.messagesListeningProgress : Float(1), color: Color.orange) - } else if self.selectedFriendIndex == friendId { + } + else if friendId == self.lastPersonIdSentMessageTo { // show that I sent a message to the last person I sent a message to ProgressBarView(progress: self.innerCircleVM.toast == InnerCircleViewModel.Toast.clipSent ? Float(1) : Float(0), color: NirvanaColor.dimTeal) } @@ -252,7 +254,8 @@ struct CircleGridView: View { // stop recording print("stopping recording") -// self.selectedFriendIndex = nil + self.lastPersonIdSentMessageTo = self.selectedFriendIndex + self.selectedFriendIndex = nil self.innerCircleVM.stopRecording(sender: self.authSessionStore.user!, receiver: self.authSessionStore.relevantUsersDict[friendId]!) @@ -360,7 +363,6 @@ struct CircleGridView: View { } //lazygrid // TODO: add padding based on if we are on any cornering item to allow the bubble to enlargen .padding(.trailing, Self.size / 2 + Self.spacingBetweenColumns / 2) // because of the offset of last column .padding(.top, Self.size / 2 + Self.spacingBetweenRows / 2) // because we are going under the nav bar -// .id(UUID()) }// scrollview .onAppear { // scrolling to first person in grid diff --git a/nirvana-ios/Views/InnerCircle/InnerCircleViewModel.swift b/nirvana-ios/Views/InnerCircle/InnerCircleViewModel.swift index 51ece8a..a79964e 100644 --- a/nirvana-ios/Views/InnerCircle/InnerCircleViewModel.swift +++ b/nirvana-ios/Views/InnerCircle/InnerCircleViewModel.swift @@ -63,7 +63,7 @@ class InnerCircleViewModel: NSObject, ObservableObject { case .problemSendingClip: return AlertToast(displayMode: .hud, type: .error(Color.orange), title: "problem sending clip", subTitle: "please try again") case .startedClip: - return AlertToast(displayMode: .hud, type: .systemImage("waveform.and.mic", Color.orange), subTitle: "you're on") + return AlertToast(displayMode: .hud, type: .systemImage("waveform.and.mic", Color.orange)) default: return AlertToast(displayMode: .hud, type: .error(Color.orange), title: "Something went wrong ‼️") } @@ -74,6 +74,7 @@ class InnerCircleViewModel: NSObject, ObservableObject { var queuePlayer = AVQueuePlayer() var avplayer: AVPlayer? + private var cachedPlayerItemsDict: [String: URL] = [:] // firebase audio url to local url @Published var isRecording : Bool = false