package characters import ( "cwtch.im/cwtch/event" "cwtch.im/ui/go/cwutil" "cwtch.im/ui/go/gobjects" "cwtch.im/ui/go/the" "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) for { e := q.Next() switch e.EventType { case event.NewMessageFromPeer://event.TimestampReceived, event.RemotePeer, event.Data ts, _ := time.Parse(time.RFC3339Nano, e.Data[event.TimestampReceived]) callback(&gobjects.Message{ Handle: e.Data[event.RemotePeer], From: e.Data[event.RemotePeer], Message: e.Data[event.Data], 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{ Handle: e.Data[event.GroupID], From: e.Data[event.RemotePeer], Message: e.Data[event.Data], Image: cwutil.RandomProfileImage(e.Data[event.RemotePeer]), FromMe: e.Data[event.RemotePeer] == the.Peer.GetProfile().Onion, Timestamp: ts, }) } } }