diff --git a/go/characters/incominglistener.go b/go/characters/incominglistener.go index 09eff28f..776bd3d8 100644 --- a/go/characters/incominglistener.go +++ b/go/characters/incominglistener.go @@ -26,6 +26,10 @@ func IncomingListener(callback func(*gobjects.Message)) { Image: cwutil.RandomProfileImage(e.Data[event.RemotePeer]), Timestamp: ts, }) + the.Peer.PeerWithOnion(e.Data[event.RemotePeer]) + if e.Data[event.Data] != "ack" { + the.Peer.SendMessageToPeer(e.Data[event.RemotePeer], "ack") + } case event.NewMessageFromGroup://event.TimestampReceived, event.TimestampSent, event.Data, event.GroupID, event.RemotePeer ts, _ := time.Parse(time.RFC3339Nano, e.Data[event.TimestampSent]) callback(&gobjects.Message{ diff --git a/go/characters/postmanpat.go b/go/characters/postmanpat.go index 8c45d385..6c008b92 100644 --- a/go/characters/postmanpat.go +++ b/go/characters/postmanpat.go @@ -27,7 +27,7 @@ func andHisBlackAndWhiteCat(incomingMessages chan gobjects.Letter) { m := <-incomingMessages the.Peer.PeerWithOnion(m.To) log.Debugf("sending message!") - id := the.Peer.SendMessageToPeer(m.To, m.Message) - the.AcknowledgementIDs[id] = m.MID + the.AcknowledgementIDs[m.To] = append(the.AcknowledgementIDs[m.To], m.MID) + the.Peer.SendMessageToPeer(m.To, m.Message) } } diff --git a/go/gothings/uistate.go b/go/gothings/uistate.go index c870d536..2967e44c 100644 --- a/go/gothings/uistate.go +++ b/go/gothings/uistate.go @@ -75,19 +75,27 @@ func (this *InterfaceState) AddMessage(m *gobjects.Message) { this.messages[m.Handle] = make([]*gobjects.Message, 0) } - this.messages[m.Handle] = append(this.messages[m.Handle], m) - - if this.parentGcd.CurrentOpenConversation() == m.Handle { - if m.FromMe { - m.From = "me" + if m.Message == "ack" { + // If an ack, swallow the message and ack from the list. + acklist := the.AcknowledgementIDs[m.From] + for _,ack := range acklist { + this.parentGcd.Acknowledged(ack) } - - this.parentGcd.AppendMessage(m.Handle, m.From, m.DisplayName, m.Message, m.Image, uint(m.MessageID), m.FromMe, m.Timestamp.Format(constants.TIME_FORMAT)) } else { - c := this.GetContact(m.Handle) - c.Badge++ - this.UpdateContact(c.Handle) + this.messages[m.Handle] = append(this.messages[m.Handle], m) + + if this.parentGcd.CurrentOpenConversation() == m.Handle { + if m.FromMe { + m.From = "me" + } + this.parentGcd.AppendMessage(m.Handle, m.From, m.DisplayName, m.Message, m.Image, uint(m.MessageID), m.FromMe, m.Timestamp.Format(constants.TIME_FORMAT)) + } else { + c := this.GetContact(m.Handle) + c.Badge++ + this.UpdateContact(c.Handle) + } } + } func (this *InterfaceState) GetMessages(handle string) []*gobjects.Message { diff --git a/go/the/globals.go b/go/the/globals.go index 5cc8f69b..09d68f42 100644 --- a/go/the/globals.go +++ b/go/the/globals.go @@ -8,4 +8,4 @@ import ( var CwtchApp app.Application var Peer libPeer.CwtchPeer var CwtchDir string -var AcknowledgementIDs map[string]uint +var AcknowledgementIDs map[string][]uint diff --git a/main.go b/main.go index 0088ac83..dd732a0f 100644 --- a/main.go +++ b/main.go @@ -33,7 +33,7 @@ func main() { // our globals gcd := gothings.NewGrandCentralDispatcher(nil) gcd.UIState = gothings.NewUIState(gcd) - the.AcknowledgementIDs = make(map[string]uint) + the.AcknowledgementIDs = make(map[string][]uint) gcd.OutgoingMessages = make(chan gobjects.Letter, 1000) //TODO: put theme stuff somewhere better