mirror of
https://github.com/tulir/mautrix-whatsapp
synced 2024-12-14 09:23:51 +01:00
Update child portal m.bridge info when updating parent
This commit is contained in:
parent
ee26bc6061
commit
54c61c63e6
3 changed files with 31 additions and 2 deletions
|
@ -83,6 +83,10 @@ func (pq *PortalQuery) GetAllByJID(jid types.JID) []*Portal {
|
||||||
return pq.getAll(fmt.Sprintf("SELECT %s FROM portal WHERE jid=$1", portalColumns), jid.ToNonAD())
|
return pq.getAll(fmt.Sprintf("SELECT %s FROM portal WHERE jid=$1", portalColumns), jid.ToNonAD())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (pq *PortalQuery) GetAllByParentGroup(jid types.JID) []*Portal {
|
||||||
|
return pq.getAll(fmt.Sprintf("SELECT %s FROM portal WHERE parent_group=$1", portalColumns), jid)
|
||||||
|
}
|
||||||
|
|
||||||
func (pq *PortalQuery) FindPrivateChats(receiver types.JID) []*Portal {
|
func (pq *PortalQuery) FindPrivateChats(receiver types.JID) []*Portal {
|
||||||
return pq.getAll(fmt.Sprintf("SELECT %s FROM portal WHERE receiver=$1 AND jid LIKE '%%@s.whatsapp.net'", portalColumns), receiver.ToNonAD())
|
return pq.getAll(fmt.Sprintf("SELECT %s FROM portal WHERE receiver=$1 AND jid LIKE '%%@s.whatsapp.net'", portalColumns), receiver.ToNonAD())
|
||||||
}
|
}
|
||||||
|
|
2
database/upgrades/53-community-index.sql
Normal file
2
database/upgrades/53-community-index.sql
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
-- v53: Add index to make querying by community faster
|
||||||
|
CREATE INDEX portal_parent_group_idx ON portal(parent_group);
|
27
portal.go
27
portal.go
|
@ -136,6 +136,10 @@ func (br *WABridge) GetAllPortalsByJID(jid types.JID) []*Portal {
|
||||||
return br.dbPortalsToPortals(br.DB.Portal.GetAllByJID(jid))
|
return br.dbPortalsToPortals(br.DB.Portal.GetAllByJID(jid))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (br *WABridge) GetAllByParentGroup(jid types.JID) []*Portal {
|
||||||
|
return br.dbPortalsToPortals(br.DB.Portal.GetAllByParentGroup(jid))
|
||||||
|
}
|
||||||
|
|
||||||
func (br *WABridge) dbPortalsToPortals(dbPortals []*database.Portal) []*Portal {
|
func (br *WABridge) dbPortalsToPortals(dbPortals []*database.Portal) []*Portal {
|
||||||
br.portalsLock.Lock()
|
br.portalsLock.Lock()
|
||||||
defer br.portalsLock.Unlock()
|
defer br.portalsLock.Unlock()
|
||||||
|
@ -1129,6 +1133,7 @@ func (portal *Portal) UpdateAvatar(user *User, setBy types.JID, updateInfo bool)
|
||||||
if updateInfo {
|
if updateInfo {
|
||||||
portal.UpdateBridgeInfo()
|
portal.UpdateBridgeInfo()
|
||||||
portal.Update(nil)
|
portal.Update(nil)
|
||||||
|
portal.updateChildRooms()
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
@ -1158,6 +1163,7 @@ func (portal *Portal) UpdateName(name string, setBy types.JID, updateInfo bool)
|
||||||
portal.NameSet = true
|
portal.NameSet = true
|
||||||
if updateInfo {
|
if updateInfo {
|
||||||
portal.UpdateBridgeInfo()
|
portal.UpdateBridgeInfo()
|
||||||
|
portal.updateChildRooms()
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
} else {
|
} else {
|
||||||
|
@ -1294,6 +1300,7 @@ func (portal *Portal) UpdateMatrixRoom(user *User, groupInfo *types.GroupInfo) b
|
||||||
portal.LastSync = time.Now()
|
portal.LastSync = time.Now()
|
||||||
portal.Update(nil)
|
portal.Update(nil)
|
||||||
portal.UpdateBridgeInfo()
|
portal.UpdateBridgeInfo()
|
||||||
|
portal.updateChildRooms()
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
@ -1460,6 +1467,20 @@ func (portal *Portal) UpdateBridgeInfo() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (portal *Portal) updateChildRooms() {
|
||||||
|
if !portal.IsParent {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
children := portal.bridge.GetAllByParentGroup(portal.Key.JID)
|
||||||
|
for _, child := range children {
|
||||||
|
changed := child.updateCommunitySpace(nil, true, false)
|
||||||
|
child.UpdateBridgeInfo()
|
||||||
|
if changed {
|
||||||
|
portal.Update(nil)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (portal *Portal) GetEncryptionEventContent() (evt *event.EncryptionEventContent) {
|
func (portal *Portal) GetEncryptionEventContent() (evt *event.EncryptionEventContent) {
|
||||||
evt = &event.EncryptionEventContent{Algorithm: id.AlgorithmMegolmV1}
|
evt = &event.EncryptionEventContent{Algorithm: id.AlgorithmMegolmV1}
|
||||||
if rot := portal.bridge.Config.Bridge.Encryption.Rotation; rot.EnableCustom {
|
if rot := portal.bridge.Config.Bridge.Encryption.Rotation; rot.EnableCustom {
|
||||||
|
@ -1652,7 +1673,7 @@ func (portal *Portal) CreateMatrixRoom(user *User, groupInfo *types.GroupInfo, i
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
portal.log.Infoln("Matrix room created:", portal.MXID)
|
portal.log.Infoln("Matrix room created:", resp.RoomID)
|
||||||
portal.InSpace = false
|
portal.InSpace = false
|
||||||
portal.NameSet = len(portal.Name) > 0
|
portal.NameSet = len(portal.Name) > 0
|
||||||
portal.TopicSet = len(portal.Topic) > 0
|
portal.TopicSet = len(portal.Topic) > 0
|
||||||
|
@ -1696,6 +1717,8 @@ func (portal *Portal) CreateMatrixRoom(user *User, groupInfo *types.GroupInfo, i
|
||||||
}
|
}
|
||||||
|
|
||||||
user.UpdateDirectChats(map[id.UserID][]id.RoomID{puppet.MXID: {portal.MXID}})
|
user.UpdateDirectChats(map[id.UserID][]id.RoomID{puppet.MXID: {portal.MXID}})
|
||||||
|
} else if portal.IsParent {
|
||||||
|
portal.updateChildRooms()
|
||||||
}
|
}
|
||||||
|
|
||||||
firstEventResp, err := portal.MainIntent().SendMessageEvent(portal.MXID, PortalCreationDummyEvent, struct{}{})
|
firstEventResp, err := portal.MainIntent().SendMessageEvent(portal.MXID, PortalCreationDummyEvent, struct{}{})
|
||||||
|
@ -1746,7 +1769,7 @@ func (portal *Portal) updateCommunitySpace(user *User, add, updateInfo bool) boo
|
||||||
if space == nil {
|
if space == nil {
|
||||||
return false
|
return false
|
||||||
} else if space.MXID == "" {
|
} else if space.MXID == "" {
|
||||||
if !add {
|
if !add || user == nil {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
portal.log.Debugfln("Creating portal for parent group %v", space.Key.JID)
|
portal.log.Debugfln("Creating portal for parent group %v", space.Key.JID)
|
||||||
|
|
Loading…
Reference in a new issue