Add option to set private chat portal rooms' name/avatar explicitly

This commit is contained in:
Tulir Asokan
2019-06-01 20:03:29 +03:00
parent 9fa0ad923d
commit e124641107
8 changed files with 158 additions and 51 deletions

View File

@ -67,9 +67,16 @@ func (bridge *Bridge) GetPortalByJID(key database.PortalKey) *Portal {
}
func (bridge *Bridge) GetAllPortals() []*Portal {
return bridge.dbPortalsToPortals(bridge.DB.Portal.GetAll())
}
func (bridge *Bridge) GetAllPortalsByJID(jid types.WhatsAppID) []*Portal {
return bridge.dbPortalsToPortals(bridge.DB.Portal.GetAllByJID(jid))
}
func (bridge *Bridge) dbPortalsToPortals(dbPortals []*database.Portal) []*Portal {
bridge.portalsLock.Lock()
defer bridge.portalsLock.Unlock()
dbPortals := bridge.DB.Portal.GetAll()
output := make([]*Portal, len(dbPortals))
for index, dbPortal := range dbPortals {
portal, ok := bridge.portalsByJID[dbPortal.Key]
@ -131,8 +138,6 @@ type Portal struct {
bridge *Bridge
log log.Logger
avatarURL string
roomCreateLock sync.Mutex
recentlyHandled [recentlyHandledLength]types.WhatsAppMessageID
@ -333,7 +338,7 @@ func (portal *Portal) UpdateAvatar(user *User, avatar *whatsappExt.ProfilePicInf
return false
}
portal.avatarURL = resp.ContentURI
portal.AvatarURL = resp.ContentURI
if len(portal.MXID) > 0 {
_, err = portal.MainIntent().SetRoomAvatar(portal.MXID, resp.ContentURI)
if err != nil {
@ -582,7 +587,7 @@ func (portal *Portal) beginBackfill() func() {
portal.backfilling = true
var privateChatPuppetInvited bool
var privateChatPuppet *Puppet
if portal.IsPrivateChat() {
if portal.IsPrivateChat() && portal.bridge.Config.Bridge.InviteOwnPuppetForBackfilling {
privateChatPuppet = portal.bridge.GetPuppetByJID(portal.Key.Receiver)
portal.privateChatBackfillInvitePuppet = func() {
if privateChatPuppetInvited {
@ -686,7 +691,14 @@ func (portal *Portal) CreateMatrixRoom(user *User) error {
var metadata *whatsappExt.GroupInfo
isPrivateChat := false
if portal.IsPrivateChat() {
portal.Name = ""
puppet := portal.bridge.GetPuppetByJID(portal.Key.JID)
if portal.bridge.Config.Bridge.PrivateChatPortalMeta {
portal.Name = puppet.Displayname
portal.AvatarURL = puppet.AvatarURL
portal.Avatar = puppet.Avatar
} else {
portal.Name = ""
}
portal.Topic = "WhatsApp private chat"
isPrivateChat = true
} else if portal.IsStatusBroadcastRoom() {
@ -708,11 +720,11 @@ func (portal *Portal) CreateMatrixRoom(user *User) error {
PowerLevels: portal.GetBasePowerLevels(),
},
}}
if len(portal.avatarURL) > 0 {
if len(portal.AvatarURL) > 0 {
initialState = append(initialState, &mautrix.Event{
Type: mautrix.StateRoomAvatar,
Content: mautrix.Content{
URL: portal.avatarURL,
URL: portal.AvatarURL,
},
})
}