aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--telegram/commands.go8
-rw-r--r--telegram/connect.go11
-rw-r--r--telegram/utils.go33
-rw-r--r--xmpp/gateway/gateway.go15
4 files changed, 31 insertions, 36 deletions
diff --git a/telegram/commands.go b/telegram/commands.go
index c4b5988..19fd655 100644
--- a/telegram/commands.go
+++ b/telegram/commands.go
@@ -185,12 +185,8 @@ func keyValueString(key, value string) string {
}
func (c *Client) unsubscribe(chatID int64) error {
- return gateway.SendPresence(
- c.xmpp,
- c.jid,
- gateway.SPFrom(strconv.FormatInt(chatID, 10)),
- gateway.SPType("unsubscribed"),
- )
+ args := gateway.SimplePresence(chatID, "unsubscribed")
+ return c.sendPresence(args...)
}
func (c *Client) sendMessagesReverse(chatID int64, messages []*client.Message) {
diff --git a/telegram/connect.go b/telegram/connect.go
index b1b8b10..6c88cd1 100644
--- a/telegram/connect.go
+++ b/telegram/connect.go
@@ -2,7 +2,6 @@ package telegram
import (
"github.com/pkg/errors"
- "strconv"
"time"
"dev.narayana.im/narayana/telegabber/xmpp/gateway"
@@ -159,7 +158,7 @@ func (c *Client) Connect(resource string) error {
}
gateway.SubscribeToTransport(c.xmpp, c.jid)
- gateway.SendPresence(c.xmpp, c.jid, gateway.SPStatus("Logged in as: "+c.Session.Login))
+ c.sendPresence(gateway.SPStatus("Logged in as: "+c.Session.Login))
}()
return nil
@@ -228,12 +227,8 @@ func (c *Client) Disconnect(resource string, quit bool) bool {
// we're offline (unsubscribe if logout)
for _, id := range c.cache.ChatsKeys() {
- gateway.SendPresence(
- c.xmpp,
- c.jid,
- gateway.SPFrom(strconv.FormatInt(id, 10)),
- gateway.SPType("unavailable"),
- )
+ args := gateway.SimplePresence(id, "unavailable")
+ c.sendPresence(args...)
}
c.close()
diff --git a/telegram/utils.go b/telegram/utils.go
index b17d692..f0316f2 100644
--- a/telegram/utils.go
+++ b/telegram/utils.go
@@ -281,22 +281,17 @@ func (c *Client) ProcessStatusUpdate(chatID int64, status string, show string, o
c.cache.SetStatus(chatID, cacheShow, status)
newArgs := []args.V{
- gateway.SPFrom(strconv.FormatInt(chatID, 10)),
gateway.SPShow(show),
gateway.SPStatus(status),
gateway.SPPhoto(photo),
- gateway.SPResource(gateway.Jid.Resource),
gateway.SPImmed(gateway.SPImmed.Get(oldArgs)),
}
+ newArgs = gateway.SPAppendFrom(newArgs, chatID)
if presenceType != "" {
newArgs = append(newArgs, gateway.SPType(presenceType))
}
- return gateway.SendPresence(
- c.xmpp,
- c.jid,
- newArgs...,
- )
+ return c.sendPresence(newArgs...)
}
func (c *Client) formatContact(chatID int64) string {
@@ -1292,7 +1287,7 @@ func (c *Client) roster(resource string) {
c.ProcessStatusUpdate(chat, "", "")
}
- gateway.SendPresence(c.xmpp, c.jid, gateway.SPStatus("Logged in as: "+c.Session.Login))
+ c.sendPresence(gateway.SPStatus("Logged in as: "+c.Session.Login))
c.addResource(resource)
}
@@ -1393,9 +1388,7 @@ func (c *Client) GetChatDescription(chat *client.Chat) string {
// subscribe to a Telegram ID
func (c *Client) subscribeToID(id int64, chat *client.Chat) {
- var args []args.V
- args = append(args, gateway.SPFrom(strconv.FormatInt(id, 10)))
- args = append(args, gateway.SPType("subscribe"))
+ args := gateway.SimplePresence(id, "subscribe")
if chat == nil {
chat, _, _ = c.GetContactByID(id, nil)
@@ -1406,11 +1399,11 @@ func (c *Client) subscribeToID(id int64, chat *client.Chat) {
gateway.SetNickname(c.jid, strconv.FormatInt(id, 10), chat.Title, c.xmpp)
}
- gateway.SendPresence(
- c.xmpp,
- c.jid,
- args...,
- )
+ c.sendPresence(args...)
+}
+
+func (c *Client) sendPresence(args ...args.V) error {
+ return gateway.SendPresence(c.xmpp, c.jid, args...)
}
func (c *Client) prepareDiskSpace(size uint64) {
@@ -1459,9 +1452,9 @@ func (c *Client) UpdateChatNicknames() {
chat, ok := c.cache.GetChat(id)
if ok {
newArgs := []args.V{
- gateway.SPFrom(strconv.FormatInt(id, 10)),
gateway.SPNickname(chat.Title),
}
+ newArgs = gateway.SPAppendFrom(newArgs, id)
cachedStatus, ok := c.cache.GetStatus(id)
if ok {
@@ -1472,11 +1465,7 @@ func (c *Client) UpdateChatNicknames() {
}
}
- gateway.SendPresence(
- c.xmpp,
- c.jid,
- newArgs...,
- )
+ c.sendPresence(newArgs...)
gateway.SetNickname(c.jid, strconv.FormatInt(id, 10), chat.Title, c.xmpp)
}
diff --git a/xmpp/gateway/gateway.go b/xmpp/gateway/gateway.go
index dfe2ebf..981858d 100644
--- a/xmpp/gateway/gateway.go
+++ b/xmpp/gateway/gateway.go
@@ -3,6 +3,7 @@ package gateway
import (
"encoding/xml"
"github.com/pkg/errors"
+ "strconv"
"strings"
"sync"
@@ -343,6 +344,20 @@ func SendPresence(component *xmpp.Component, to string, args ...args.V) error {
return nil
}
+// SPAppendFrom appends numeric from and resource to varargs
+func SPAppendFrom(oldArgs []args.V, id int64) []args.V {
+ newArgs := append(oldArgs, SPFrom(strconv.FormatInt(id, 10)))
+ newArgs = append(newArgs, SPResource(Jid.Resource))
+ return newArgs
+}
+
+// SimplePresence crafts simple presence varargs
+func SimplePresence(from int64, typ string) []args.V {
+ args := []args.V{SPType(typ)}
+ args = SPAppendFrom(args, from)
+ return args
+}
+
// ResumableSend tries to resume the connection once and sends the packet again
func ResumableSend(component *xmpp.Component, packet stanza.Packet) error {
err := component.Send(packet)