Przeglądaj źródła

Create all portals before backfilling when handling history syncs

Tulir Asokan 3 lat temu
rodzic
commit
817cd21550
1 zmienionych plików z 15 dodań i 5 usunięć
  1. 15 5
      user.go

+ 15 - 5
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)
-			portal.backfill(user, conv.GetMessages())
-			if !conv.GetMarkedAsUnread() && conv.GetUnreadCount() == 0 {
-				user.markSelfReadFull(portal)
-			}
+			portalsToBackfill = append(portalsToBackfill, portalToBackfill{portal, conv})
+		}
+	}
+	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{}) {