forked from MirrorHub/mautrix-whatsapp
Create all portals before backfilling when handling history syncs
This commit is contained in:
parent
db44ef2b36
commit
817cd21550
1 changed files with 15 additions and 5 deletions
20
user.go
20
user.go
|
@ -356,6 +356,11 @@ func containsSupportedMessages(conv *waProto.Conversation) bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type portalToBackfill struct {
|
||||||
|
portal *Portal
|
||||||
|
conv *waProto.Conversation
|
||||||
|
}
|
||||||
|
|
||||||
func (user *User) handleHistorySync(evt *waProto.HistorySync) {
|
func (user *User) handleHistorySync(evt *waProto.HistorySync) {
|
||||||
if evt.GetSyncType() != waProto.HistorySync_RECENT && evt.GetSyncType() != waProto.HistorySync_FULL {
|
if evt.GetSyncType() != waProto.HistorySync_RECENT && evt.GetSyncType() != waProto.HistorySync_FULL {
|
||||||
return
|
return
|
||||||
|
@ -364,6 +369,7 @@ func (user *User) handleHistorySync(evt *waProto.HistorySync) {
|
||||||
maxAge := user.bridge.Config.Bridge.HistorySync.MaxAge
|
maxAge := user.bridge.Config.Bridge.HistorySync.MaxAge
|
||||||
minLastMsgToCreate := time.Now().Add(-time.Duration(maxAge) * time.Second)
|
minLastMsgToCreate := time.Now().Add(-time.Duration(maxAge) * time.Second)
|
||||||
createRooms := user.bridge.Config.Bridge.HistorySync.CreatePortals
|
createRooms := user.bridge.Config.Bridge.HistorySync.CreatePortals
|
||||||
|
portalsToBackfill := make([]portalToBackfill, 0)
|
||||||
for _, conv := range evt.GetConversations() {
|
for _, conv := range evt.GetConversations() {
|
||||||
jid, err := types.ParseJID(conv.GetId())
|
jid, err := types.ParseJID(conv.GetId())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -404,13 +410,17 @@ func (user *User) handleHistorySync(evt *waProto.HistorySync) {
|
||||||
} else if !user.bridge.Config.Bridge.HistorySync.Backfill {
|
} else if !user.bridge.Config.Bridge.HistorySync.Backfill {
|
||||||
user.log.Debugln("Backfill is disabled, not bridging history sync payload for", portal.Key.JID)
|
user.log.Debugln("Backfill is disabled, not bridging history sync payload for", portal.Key.JID)
|
||||||
} else {
|
} else {
|
||||||
user.log.Debugln("Bridging history sync payload for", portal.Key.JID)
|
portalsToBackfill = append(portalsToBackfill, portalToBackfill{portal, conv})
|
||||||
portal.backfill(user, conv.GetMessages())
|
|
||||||
if !conv.GetMarkedAsUnread() && conv.GetUnreadCount() == 0 {
|
|
||||||
user.markSelfReadFull(portal)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
for _, ptb := range portalsToBackfill {
|
||||||
|
user.log.Debugln("Bridging history sync payload for", ptb.portal.Key.JID)
|
||||||
|
ptb.portal.backfill(user, ptb.conv.GetMessages())
|
||||||
|
if !ptb.conv.GetMarkedAsUnread() && ptb.conv.GetUnreadCount() == 0 {
|
||||||
|
user.markSelfReadFull(ptb.portal)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
user.log.Infofln("Finished handling history sync with type %s, chunk order %d, progress %d%%", evt.GetSyncType(), evt.GetChunkOrder(), evt.GetProgress())
|
||||||
}
|
}
|
||||||
|
|
||||||
func (user *User) HandleEvent(event interface{}) {
|
func (user *User) HandleEvent(event interface{}) {
|
||||||
|
|
Loading…
Reference in a new issue