From 3d778a5a447f53aacd430cde9474eea99abd3a94 Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Fri, 26 Feb 2021 16:09:24 +0200 Subject: [PATCH] Create user_portal row when creating portal for new chat Closes #273 Co-authored-by: dbedoya --- commands.go | 3 ++- database/user.go | 11 +++++++++++ portal.go | 5 ++++- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/commands.go b/commands.go index b4a3b18..b5e9d85 100644 --- a/commands.go +++ b/commands.go @@ -334,7 +334,8 @@ func (handler *CommandHandler) CommandCreate(ce *CommandEvent) { portal.UpdateBridgeInfo() ce.Reply("Successfully created WhatsApp group %s", portal.Key.JID) - ce.User.addPortalToCommunity(portal) + inCommunity := ce.User.addPortalToCommunity(portal) + ce.User.CreateUserPortal(database.PortalKeyWithMeta{PortalKey: portal.Key, InCommunity: inCommunity}) } const cmdSetPowerLevelHelp = `set-pl [user ID] - Change the power level in a portal room. Only for bridge admins.` diff --git a/database/user.go b/database/user.go index 2a52fcd..a92f5eb 100644 --- a/database/user.go +++ b/database/user.go @@ -245,3 +245,14 @@ func (user *User) GetInCommunityMap() map[PortalKey]bool { } return keys } + +func (user *User) CreateUserPortal(newKey PortalKeyWithMeta) { + user.log.Debugfln("Creating new portal %s for %s", newKey.PortalKey.JID, newKey.PortalKey.Receiver) + _, err := user.db.Exec(`INSERT INTO user_portal (user_jid, portal_jid, portal_receiver, in_community) VALUES ($1, $2, $3, $4)`, + user.jidPtr(), + newKey.PortalKey.JID, newKey.PortalKey.Receiver, + newKey.InCommunity) + if err != nil { + user.log.Warnfln("Failed to insert %s: %v", user.MXID, err) + } +} diff --git a/portal.go b/portal.go index feb3c9d..bd28d28 100644 --- a/portal.go +++ b/portal.go @@ -1131,7 +1131,7 @@ func (portal *Portal) CreateMatrixRoom(user *User) error { if broadcastMetadata != nil { portal.SyncBroadcastRecipients(broadcastMetadata) } - user.addPortalToCommunity(portal) + inCommunity := user.addPortalToCommunity(portal) if portal.IsPrivateChat() { puppet := user.bridge.GetPuppetByJID(portal.Key.JID) user.addPuppetToCommunity(puppet) @@ -1145,6 +1145,9 @@ func (portal *Portal) CreateMatrixRoom(user *User) error { user.UpdateDirectChats(map[id.UserID][]id.RoomID{puppet.MXID: {portal.MXID}}) } + + user.CreateUserPortal(database.PortalKeyWithMeta{PortalKey: portal.Key, InCommunity: inCommunity}) + err = portal.FillInitialHistory(user) if err != nil { portal.log.Errorln("Failed to fill history:", err)