From 491ff6e710d6ce2ab9e90c12aa204c88b0164253 Mon Sep 17 00:00:00 2001 From: Dan Ballard Date: Mon, 5 Dec 2022 21:07:09 -0800 Subject: [PATCH] GetConversationLastSeenTime use constants.SyncMostRecentMessageTime for servers; fix time parsing error in contact retry --- app/plugins/contactRetry.go | 2 +- peer/cwtch_peer.go | 21 ++++++++++++++++----- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/app/plugins/contactRetry.go b/app/plugins/contactRetry.go index 97e34ce..3589c1a 100644 --- a/app/plugins/contactRetry.go +++ b/app/plugins/contactRetry.go @@ -203,7 +203,7 @@ func (cr *contactRetry) run() { case event.QueueJoinServer: fallthrough case event.QueuePeerRequest: - lastSeen, err := time.Parse(e.Data[event.LastSeen], time.RFC3339Nano) + lastSeen, err := time.Parse(time.RFC3339Nano, e.Data[event.LastSeen]) if err != nil { lastSeen = event.CwtchEpoch } diff --git a/peer/cwtch_peer.go b/peer/cwtch_peer.go index 525f363..9b29ba7 100644 --- a/peer/cwtch_peer.go +++ b/peer/cwtch_peer.go @@ -1030,24 +1030,35 @@ type LastSeenConversation struct { } func (cp *cwtchPeer) GetConversationLastSeenTime(conversationId int) time.Time { + lastTime := event.CwtchEpoch + timestamp, err := cp.GetConversationAttribute(conversationId, attr.LocalScope.ConstructScopedZonedPath(attr.ProfileZone.ConstructZonedPath(constants.AttrLastConnectionTime))) if err == nil { if time, err := time.Parse(time.RFC3339Nano, timestamp); err == nil { - return time + lastTime = time } } + // for peers lastMessage, _ := cp.GetMostRecentMessages(conversationId, 0, 0, 1) if len(lastMessage) != 0 { - time, err := time.Parse(time.RFC3339Nano, lastMessage[0].Attr[constants.AttrSentTimestamp]) + lastMsgTime, err := time.Parse(time.RFC3339Nano, lastMessage[0].Attr[constants.AttrSentTimestamp]) if err == nil { - return time + if lastMsgTime.After(lastTime) { + lastTime = lastMsgTime + } } } - // Cwtch launch date - return event.CwtchEpoch + // for servers + recentTimeStr, err := cp.GetConversationAttribute(conversationId, attr.LocalScope.ConstructScopedZonedPath(attr.LegacyGroupZone.ConstructZonedPath(constants.SyncMostRecentMessageTime))) + if err == nil { + if recentTime, err := time.Parse(time.RFC3339Nano, recentTimeStr); err == nil && recentTime.After(lastTime) { + lastTime = recentTime + } + } + return lastTime } func (cp *cwtchPeer) getConnectionsSortedByLastSeen(doPeers, doServers bool) []*LastSeenConversation {