aboutsummaryrefslogtreecommitdiff
path: root/telegram
diff options
context:
space:
mode:
Diffstat (limited to 'telegram')
-rw-r--r--telegram/connect.go10
-rw-r--r--telegram/handlers.go16
2 files changed, 23 insertions, 3 deletions
diff --git a/telegram/connect.go b/telegram/connect.go
index 3827bcc..3a711c2 100644
--- a/telegram/connect.go
+++ b/telegram/connect.go
@@ -146,6 +146,7 @@ func (c *Client) Disconnect() {
_, err := c.client.Close()
if err != nil {
log.Errorf("Couldn't close the Telegram instance: %v; %#v", err, c)
+ c.forceClose()
}
}
@@ -198,13 +199,16 @@ func (c *Client) interactor() {
}
gateway.SendPresence(c.xmpp, c.jid, gateway.SPStatus("Logged in "+c.Session.Login))
- case client.TypeAuthorizationStateClosed:
- log.Warn("Closing the updates listener")
- c.listener.Close()
+
+ return
}
}
}
+func (c *Client) forceClose() {
+ c.listener.Close()
+}
+
// Online checks if the updates listener is alive
func (c *Client) Online() bool {
return c.listener != nil && c.listener.IsActive()
diff --git a/telegram/handlers.go b/telegram/handlers.go
index d6aba94..d6b945f 100644
--- a/telegram/handlers.go
+++ b/telegram/handlers.go
@@ -90,6 +90,12 @@ func (c *Client) updateHandler() {
}
c.updateFile(typedUpdate)
log.Debugf("%#v", typedUpdate.File)
+ case client.TypeUpdateAuthorizationState:
+ typedUpdate, ok := update.(*client.UpdateAuthorizationState)
+ if !ok {
+ uhOh()
+ }
+ c.updateAuthorizationState(typedUpdate)
default:
// log only handled types
continue
@@ -242,3 +248,13 @@ func (c *Client) updateFile(update *client.UpdateFile) {
log.Errorf("Error creating symlink: %v", err)
}
}
+
+func (c *Client) updateAuthorizationState(update *client.UpdateAuthorizationState) {
+ switch update.AuthorizationState.AuthorizationStateType() {
+ case client.TypeAuthorizationStateClosing:
+ log.Warn("Closing the updates listener")
+ case client.TypeAuthorizationStateClosed:
+ log.Warn("Closed the updates listener")
+ c.forceClose()
+ }
+}