aboutsummaryrefslogtreecommitdiff
path: root/telegram/connect.go
diff options
context:
space:
mode:
Diffstat (limited to 'telegram/connect.go')
-rw-r--r--telegram/connect.go40
1 files changed, 38 insertions, 2 deletions
diff --git a/telegram/connect.go b/telegram/connect.go
index ef03428..ab9c19c 100644
--- a/telegram/connect.go
+++ b/telegram/connect.go
@@ -3,6 +3,7 @@ package telegram
import (
"github.com/pkg/errors"
"strconv"
+ "time"
"dev.narayana.im/narayana/telegabber/xmpp/gateway"
@@ -154,14 +155,49 @@ func (c *Client) Connect(resource string) error {
log.Errorf("Could not retrieve chats: %v", err)
}
- gateway.SendPresence(c.xmpp, c.jid, gateway.SPType("subscribe"))
- gateway.SendPresence(c.xmpp, c.jid, gateway.SPType("subscribed"))
+ gateway.SubscribeToTransport(c.xmpp, c.jid)
gateway.SendPresence(c.xmpp, c.jid, gateway.SPStatus("Logged in as: "+c.Session.Login))
}()
return nil
}
+func (c *Client) TryLogin(resource string, login string) error {
+ wasSessionLoginEmpty := c.Session.Login == ""
+ c.Session.Login = login
+
+ if wasSessionLoginEmpty && c.authorizer == nil {
+ go func() {
+ err := c.Connect(resource)
+ if err != nil {
+ log.Error(errors.Wrap(err, "TDlib connection failure"))
+ }
+ }()
+ // a quirk for authorizer to become ready. If it's still not,
+ // nothing bad: just re-login again
+ time.Sleep(1e5)
+ }
+
+ if c.authorizer == nil {
+ return errors.New(TelegramNotInitialized)
+ }
+
+ if c.authorizer.isClosed {
+ return errors.New(TelegramAuthDone)
+ }
+
+ return nil
+}
+
+func (c *Client) SetPhoneNumber(login string) error {
+ if c.authorizer == nil || c.authorizer.isClosed {
+ return errors.New("Authorization not needed")
+ }
+
+ c.authorizer.PhoneNumber <- login
+ return nil
+}
+
// Disconnect drops TDlib connection and
// returns the flag indicating if disconnecting is permitted
func (c *Client) Disconnect(resource string, quit bool) bool {