2019-01-21 21:17:51 +00:00
|
|
|
package characters
|
|
|
|
|
|
|
|
import (
|
|
|
|
"cwtch.im/cwtch/event"
|
|
|
|
"cwtch.im/ui/go/cwutil"
|
|
|
|
"cwtch.im/ui/go/gobjects"
|
|
|
|
"cwtch.im/ui/go/the"
|
2019-02-14 17:54:15 +00:00
|
|
|
"encoding/base32"
|
2019-02-11 20:23:31 +00:00
|
|
|
"git.openprivacy.ca/openprivacy/libricochet-go/log"
|
2019-02-14 17:54:15 +00:00
|
|
|
"strings"
|
2019-01-21 21:17:51 +00:00
|
|
|
"time"
|
|
|
|
)
|
|
|
|
|
|
|
|
func IncomingListener(callback func(*gobjects.Message)) {
|
|
|
|
q := event.NewEventQueue(1000)
|
|
|
|
the.CwtchApp.EventBus().Subscribe(event.NewMessageFromPeer, q.EventChannel)
|
|
|
|
the.CwtchApp.EventBus().Subscribe(event.NewMessageFromGroup, q.EventChannel)
|
2019-02-11 20:23:31 +00:00
|
|
|
the.CwtchApp.EventBus().Subscribe(event.NewGroupInvite, q.EventChannel)
|
2019-01-21 21:17:51 +00:00
|
|
|
|
|
|
|
for {
|
|
|
|
e := q.Next()
|
|
|
|
|
|
|
|
switch e.EventType {
|
2019-01-22 19:12:20 +00:00
|
|
|
case event.NewMessageFromPeer://event.TimestampReceived, event.RemotePeer, event.Data
|
|
|
|
ts, _ := time.Parse(time.RFC3339Nano, e.Data[event.TimestampReceived])
|
2019-01-21 21:17:51 +00:00
|
|
|
callback(&gobjects.Message{
|
2019-01-22 19:12:20 +00:00
|
|
|
Handle: e.Data[event.RemotePeer],
|
|
|
|
From: e.Data[event.RemotePeer],
|
|
|
|
Message: e.Data[event.Data],
|
|
|
|
Image: cwutil.RandomProfileImage(e.Data[event.RemotePeer]),
|
|
|
|
Timestamp: ts,
|
2019-01-21 21:17:51 +00:00
|
|
|
})
|
2019-02-14 17:54:15 +00:00
|
|
|
if the.Peer.GetContact(e.Data[event.RemotePeer]) == nil {
|
|
|
|
decodedPub, _ := base32.StdEncoding.DecodeString(strings.ToUpper(e.Data[event.RemotePeer]))
|
|
|
|
the.Peer.AddContact(e.Data[event.RemotePeer], e.Data[event.RemotePeer], decodedPub, false)
|
|
|
|
}
|
2019-02-04 22:22:58 +00:00
|
|
|
the.Peer.PeerWithOnion(e.Data[event.RemotePeer])
|
|
|
|
if e.Data[event.Data] != "ack" {
|
|
|
|
the.Peer.SendMessageToPeer(e.Data[event.RemotePeer], "ack")
|
|
|
|
}
|
2019-01-22 19:12:20 +00:00
|
|
|
case event.NewMessageFromGroup://event.TimestampReceived, event.TimestampSent, event.Data, event.GroupID, event.RemotePeer
|
2019-01-30 20:46:31 +00:00
|
|
|
ts, _ := time.Parse(time.RFC3339Nano, e.Data[event.TimestampSent])
|
2019-01-21 21:17:51 +00:00
|
|
|
callback(&gobjects.Message{
|
2019-02-20 20:07:12 +00:00
|
|
|
MessageID: e.Data[event.Signature],
|
2019-01-22 19:12:20 +00:00
|
|
|
Handle: e.Data[event.GroupID],
|
|
|
|
From: e.Data[event.RemotePeer],
|
|
|
|
Message: e.Data[event.Data],
|
2019-01-30 19:58:23 +00:00
|
|
|
Image: cwutil.RandomProfileImage(e.Data[event.RemotePeer]),
|
2019-02-04 23:05:38 +00:00
|
|
|
FromMe: e.Data[event.RemotePeer] == the.Peer.GetProfile().Onion,
|
2019-01-22 19:12:20 +00:00
|
|
|
Timestamp: ts,
|
2019-02-20 20:07:12 +00:00
|
|
|
Acknowledged: true,
|
2019-01-21 21:17:51 +00:00
|
|
|
})
|
2019-02-11 20:23:31 +00:00
|
|
|
case event.NewGroupInvite:
|
|
|
|
log.Debugf("got a group invite!")
|
2019-01-21 21:17:51 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|