forked from cwtch.im/ui
60 lines
1.5 KiB
Go
60 lines
1.5 KiB
Go
package characters
|
|
|
|
import (
|
|
"cwtch.im/cwtch/event"
|
|
"cwtch.im/ui/go/cwutil"
|
|
"cwtch.im/ui/go/gobjects"
|
|
"cwtch.im/ui/go/the"
|
|
"time"
|
|
)
|
|
|
|
func PresencePoller(getContact func(string) *gobjects.Contact, addContact func(contact *gobjects.Contact), updateContact func(string)) { // TODO: make this subscribe-able in ricochet
|
|
time.Sleep(time.Second * 4)
|
|
for {
|
|
contacts := the.Peer.GetContacts()
|
|
for i := range contacts {
|
|
ct := getContact(contacts[i])
|
|
if ct == nil { // new contact has attempted to connect with us, treat it as an invite
|
|
toc := the.Peer.GetContact(contacts[i])
|
|
c, _ := the.Peer.GetProfile().GetContact(contacts[i])
|
|
deleted,_ := c.GetAttribute("deleted")
|
|
|
|
if deleted != "deleted" {
|
|
addContact(&gobjects.Contact{
|
|
toc.Onion,
|
|
toc.Name,
|
|
cwutil.RandomProfileImage(toc.Onion),
|
|
"",
|
|
0,
|
|
0,
|
|
c.Trusted,
|
|
})
|
|
|
|
the.CwtchApp.EventBus().Publish(event.NewEvent(event.SetPeerAttribute, map[event.Field]string{
|
|
event.RemotePeer: contacts[i],
|
|
event.Key: "name",
|
|
event.Data: c.Name,
|
|
}))
|
|
}
|
|
}
|
|
|
|
cxnState, found := the.Peer.GetPeers()[contacts[i]]
|
|
if !found {
|
|
the.Peer.PeerWithOnion(contacts[i])
|
|
c2 := getContact(contacts[i])
|
|
if c2 != nil && c2.Status != -2 {
|
|
c2.Status = -2
|
|
updateContact(contacts[i])
|
|
}
|
|
} else {
|
|
c2 := getContact(contacts[i])
|
|
if c2 != nil && c2.Status != int(cxnState) {
|
|
c2.Status = int(cxnState)
|
|
updateContact(contacts[i])
|
|
}
|
|
}
|
|
}
|
|
time.Sleep(time.Second * 4)
|
|
}
|
|
}
|