Browse Source

Check last message ID before attempting backfill

Max Sandholm 2 years ago
parent
commit
693fe49a9a
2 changed files with 18 additions and 8 deletions
  1. 16 6
      portal.go
  2. 2 2
      user.go

+ 16 - 6
portal.go

@@ -1968,11 +1968,24 @@ func (portal *Portal) UpdateInfo(source *User, meta *discordgo.Channel) *discord
 	return meta
 	return meta
 }
 }
 
 
-func (portal *Portal) ForwardBackfill(source *User) error {
+func (portal *Portal) ForwardBackfill(source *User, meta *discordgo.Channel) error {
 	portal.log.Debugln("Checking for missing messages to fill")
 	portal.log.Debugln("Checking for missing messages to fill")
 	lastMessage := portal.bridge.DB.Message.GetLast(portal.Key)
 	lastMessage := portal.bridge.DB.Message.GetLast(portal.Key)
 	if lastMessage == nil {
 	if lastMessage == nil {
-		portal.log.Debugln("No last message in portal, can't forward backfill")
+		return nil
+	}
+
+	metaLastMessageID, err := strconv.ParseInt(meta.LastMessageID, 10, 0)
+	if err != nil {
+		portal.log.Errorfln("Last message ID %s isn't integer", meta.LastMessageID)
+		return err
+	}
+	dbLastMessageID, err := strconv.ParseInt(lastMessage.DiscordID, 10, 0)
+	if err != nil {
+		portal.log.Errorfln("Last message ID %s isn't integer", lastMessage.DiscordID)
+		return err
+	}
+	if metaLastMessageID <= dbLastMessageID {
 		return nil
 		return nil
 	}
 	}
 
 
@@ -1995,14 +2008,11 @@ func (portal *Portal) ForwardBackfill(source *User) error {
 
 
 		if len(messages) < 100 {
 		if len(messages) < 100 {
 			// Assume that was all the missing messages
 			// Assume that was all the missing messages
-			break
+			return nil
 		}
 		}
 		lastMessage = portal.bridge.DB.Message.GetLast(portal.Key)
 		lastMessage = portal.bridge.DB.Message.GetLast(portal.Key)
 		if lastMessage == nil {
 		if lastMessage == nil {
-			portal.log.Debugln("No last message in portal, can't forward backfill")
 			return nil
 			return nil
 		}
 		}
 	}
 	}
-
-	return nil
 }
 }

+ 2 - 2
user.go

@@ -728,7 +728,7 @@ func (user *User) handlePrivateChannel(portal *Portal, meta *discordgo.Channel,
 		}
 		}
 	} else {
 	} else {
 		portal.UpdateInfo(user, meta)
 		portal.UpdateInfo(user, meta)
-		portal.ForwardBackfill(user)
+		portal.ForwardBackfill(user, meta)
 	}
 	}
 	user.MarkInPortal(database.UserPortal{
 	user.MarkInPortal(database.UserPortal{
 		DiscordID: portal.Key.ChannelID,
 		DiscordID: portal.Key.ChannelID,
@@ -843,7 +843,7 @@ func (user *User) handleGuild(meta *discordgo.Guild, timestamp time.Time, isInSp
 				}
 				}
 			} else {
 			} else {
 				portal.UpdateInfo(user, ch)
 				portal.UpdateInfo(user, ch)
-				portal.ForwardBackfill(user)
+				portal.ForwardBackfill(user, ch)
 			}
 			}
 		}
 		}
 	}
 	}