diff --git a/event/common.go b/event/common.go index 9825b96..7616359 100644 --- a/event/common.go +++ b/event/common.go @@ -94,6 +94,12 @@ const ( // RemotePeer: The peer associated with the acknowledgement PeerAcknowledgement = Type("PeerAcknowledgement") + // Like PeerAcknowledgement but with message index instead of event ID + // attributes + // Index: The original index of the message that the peer is responding too. + // RemotePeer: The peer associated with the acknowledgement + IndexedAcknowledgement = Type("IndexedAcknowledgement") + // attributes: // RemotePeer: [eg "chpr7qm6op5vfcg2pi4vllco3h6aa7exexc4rqwnlupqhoogx2zgd6qd"] // Error: string describing the error @@ -265,6 +271,7 @@ const ( Status = Field("Status") EventID = Field("EventID") EventContext = Field("EventContext") + Index = Field("Index") Authorization = Field("Authorization") diff --git a/model/profile.go b/model/profile.go index 983644c..9fe29ec 100644 --- a/model/profile.go +++ b/model/profile.go @@ -197,7 +197,7 @@ func (p *Profile) ErrorSentMessageToPeer(onion string, eventID string, error str } // AckSentMessageToPeer sets mesage to a peer as acknowledged -func (p *Profile) AckSentMessageToPeer(onion string, eventID string) { +func (p *Profile) AckSentMessageToPeer(onion string, eventID string) int { p.lock.Lock() defer p.lock.Unlock() @@ -207,8 +207,11 @@ func (p *Profile) AckSentMessageToPeer(onion string, eventID string) { if ok { contact.Timeline.Messages[mIdx].Acknowledged = true delete(contact.UnacknowledgedMessages, eventID) + return mIdx } } + + return -1 } // AddGroupSentMessageError searches matching groups for the message by sig and marks it as an error diff --git a/peer/cwtch_peer.go b/peer/cwtch_peer.go index f136b87..342f22c 100644 --- a/peer/cwtch_peer.go +++ b/peer/cwtch_peer.go @@ -715,7 +715,10 @@ func (cp *cwtchPeer) eventHandler() { case event.PeerAcknowledgement: cp.mutex.Lock() - cp.Profile.AckSentMessageToPeer(ev.Data[event.RemotePeer], ev.Data[event.EventID]) + idx := cp.Profile.AckSentMessageToPeer(ev.Data[event.RemotePeer], ev.Data[event.EventID]) + edata := ev.Data + edata[event.Index] = strconv.Itoa(idx) + cp.eventBus.Publish(event.NewEvent(event.IndexedAcknowledgement, edata)) cp.mutex.Unlock() case event.SendMessageToGroupError: