aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--telegram/connect.go25
-rw-r--r--xmpp/component.go3
-rw-r--r--xmpp/handlers.go20
4 files changed, 44 insertions, 5 deletions
diff --git a/.gitignore b/.gitignore
index bda8001..772ab8b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
config.yml
telegabber
+sessions/
diff --git a/telegram/connect.go b/telegram/connect.go
index 72cd417..400c706 100644
--- a/telegram/connect.go
+++ b/telegram/connect.go
@@ -13,6 +13,20 @@ func (c *Client) Connect() error {
}
authorizer := client.ClientAuthorizer()
+ go func() {
+ for {
+ state, ok := <-authorizer.State
+ if !ok {
+ return
+ }
+
+ ok = authorizationStateHandler(state)
+ if !ok {
+ return
+ }
+ }
+ }()
+
authorizer.TdlibParameters <- c.parameters
tdlibClient, err := client.NewClient(authorizer, c.logVerbosity)
@@ -33,4 +47,15 @@ func (c *Client) Disconnect() {
if !c.online {
return
}
+
+ c.client.Stop()
+ c.online = false
+}
+
+func authorizationStateHandler(state client.AuthorizationState) bool {
+ switch state.AuthorizationStateType() {
+ // TODO
+ }
+
+ return true
}
diff --git a/xmpp/component.go b/xmpp/component.go
index 1562224..036bc3c 100644
--- a/xmpp/component.go
+++ b/xmpp/component.go
@@ -2,12 +2,14 @@ package xmpp
import (
"dev.narayana.im/narayana/telegabber/config"
+ "dev.narayana.im/narayana/telegabber/telegram"
"gosrc.io/xmpp"
)
var jid *xmpp.Jid
var tgConf config.TelegramConfig
+var sessions map[string]telegram.Client
// NewComponent starts a new component and wraps it in
// a stream manager that you should start yourself
@@ -19,6 +21,7 @@ func NewComponent(conf config.XMPPConfig, tc config.TelegramConfig) (*xmpp.Strea
}
tgConf = tc
+ sessions = make(map[string]telegram.Client)
options := xmpp.ComponentOptions{
Address: conf.Host + ":" + conf.Port,
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"))
+ }
+ }()
}
}