forked from MirrorHub/mautrix-whatsapp
Add command to sync DM rooms into space
This commit is contained in:
parent
7e5c2769c6
commit
ba536f17e7
2 changed files with 38 additions and 2 deletions
19
commands.go
19
commands.go
|
@ -1072,13 +1072,14 @@ const cmdSyncHelp = `sync <appstate/contacts/groups> [--create-portals] - Synchr
|
|||
|
||||
func (handler *CommandHandler) CommandSync(ce *CommandEvent) {
|
||||
if len(ce.Args) == 0 {
|
||||
ce.Reply("**Usage:** `sync <appstate/contacts/groups> [--create-portals]`")
|
||||
ce.Reply("**Usage:** `sync <appstate/contacts/groups/space> [--create-portals]`")
|
||||
return
|
||||
}
|
||||
args := strings.ToLower(strings.Join(ce.Args, " "))
|
||||
contacts := strings.Contains(args, "contacts")
|
||||
appState := strings.Contains(args, "appstate")
|
||||
groups := strings.Contains(args, "groups")
|
||||
space := strings.Contains(args, "space")
|
||||
groups := strings.Contains(args, "groups") || space
|
||||
createPortals := strings.Contains(args, "--create-portals")
|
||||
|
||||
if appState {
|
||||
|
@ -1100,6 +1101,20 @@ func (handler *CommandHandler) CommandSync(ce *CommandEvent) {
|
|||
ce.Reply("Resynced contacts")
|
||||
}
|
||||
}
|
||||
if space {
|
||||
keys := ce.Bridge.DB.Portal.FindPrivateChatsNotInSpace(ce.User.JID)
|
||||
count := 0
|
||||
for _, key := range keys {
|
||||
portal := ce.Bridge.GetPortalByJID(key)
|
||||
portal.addToSpace(ce.User)
|
||||
count++
|
||||
}
|
||||
plural := "s"
|
||||
if count == 1 {
|
||||
plural = ""
|
||||
}
|
||||
ce.Reply("Added %d DM room%s to space", count, plural)
|
||||
}
|
||||
if groups {
|
||||
err := ce.User.ResyncGroups(createPortals)
|
||||
if err != nil {
|
||||
|
|
|
@ -82,6 +82,27 @@ func (pq *PortalQuery) FindPrivateChats(receiver types.JID) []*Portal {
|
|||
return pq.getAll("SELECT * FROM portal WHERE receiver=$1 AND jid LIKE '%@s.whatsapp.net'", receiver.ToNonAD())
|
||||
}
|
||||
|
||||
func (pq *PortalQuery) FindPrivateChatsNotInSpace(receiver types.JID) (keys []PortalKey) {
|
||||
receiver = receiver.ToNonAD()
|
||||
rows, err := pq.db.Query(`
|
||||
SELECT jid FROM portal
|
||||
LEFT JOIN user_portal ON portal.jid=user_portal.portal_jid AND portal.receiver=user_portal.portal_receiver
|
||||
WHERE mxid<>'' AND receiver=$1 AND (in_space=false OR in_space IS NULL)
|
||||
`, receiver)
|
||||
if err != nil || rows == nil {
|
||||
return
|
||||
}
|
||||
for rows.Next() {
|
||||
var key PortalKey
|
||||
key.Receiver = receiver
|
||||
err = rows.Scan(&key.JID)
|
||||
if err == nil {
|
||||
keys = append(keys, key)
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (pq *PortalQuery) getAll(query string, args ...interface{}) (portals []*Portal) {
|
||||
rows, err := pq.db.Query(query, args...)
|
||||
if err != nil || rows == nil {
|
||||
|
|
Loading…
Reference in a new issue