aboutsummaryrefslogtreecommitdiff
path: root/xmpp/handlers.go
diff options
context:
space:
mode:
authorbodqhrohro <bodqhrohro@gmail.com>2019-11-08 00:09:53 +0300
committerbodqhrohro <bodqhrohro@gmail.com>2019-11-08 00:09:53 +0300
commit7185d4ac9b039bbb74291f57ee2dae6120c636f6 (patch)
treed6c8acc0e02b174c14cfb67068607da3e4b19a50 /xmpp/handlers.go
parent29da6ac0a08ab955441dcfa83ec1afac2e56efed (diff)
Fix presence handling and lockup on TDlib instance creation
Diffstat (limited to 'xmpp/handlers.go')
-rw-r--r--xmpp/handlers.go20
1 files changed, 15 insertions, 5 deletions
diff --git a/xmpp/handlers.go b/xmpp/handlers.go
index 4a6c999..ad6e3ba 100644
--- a/xmpp/handlers.go
+++ b/xmpp/handlers.go
@@ -1,6 +1,8 @@
package xmpp
import (
+ "github.com/pkg/errors"
+
"dev.narayana.im/narayana/telegabber/telegram"
log "github.com/sirupsen/logrus"
@@ -8,8 +10,6 @@ import (
"gosrc.io/xmpp/stanza"
)
-var sessions map[string]telegram.Client
-
func logPacketType(p stanza.Packet) {
log.Warn("Ignoring packet: %T\n", p)
}
@@ -48,7 +48,8 @@ func HandlePresence(s xmpp.Sender, p stanza.Packet) {
if prs.Type == "subscribe" {
handleSubscription(s, prs)
- } else if prs.To == jid.Bare() {
+ }
+ if prs.To == jid.Bare() {
handlePresence(s, prs)
}
}
@@ -93,17 +94,26 @@ func handlePresence(s xmpp.Sender, p stanza.Presence) {
if !ok {
client, err := telegram.NewClient(tgConf, bareFromJid)
if err != nil {
- log.Error("Invalid from JID!")
+ log.Error(errors.Wrap(err, "TDlib initialization failure"))
+ return
}
sessions[bareFromJid] = client
}
switch p.Type {
case "unsubscribed":
+ session.Disconnect()
delete(sessions, bareFromJid)
case "unavailable", "error":
session.Disconnect()
case "":
- session.Connect()
+ // due to the weird implentation of go-tdlib wrapper, it won't
+ // return the client instance until successful authorization
+ go func() {
+ session.Connect()
+ if err != nil {
+ log.Error(errors.Wrap(err, "TDlib connection failure"))
+ }
+ }()
}
}