diff --git a/main.go b/main.go index 3f42c6b..95472dc 100644 --- a/main.go +++ b/main.go @@ -24,9 +24,6 @@ const nsqEndpoint = "https://nsq.site.quack-lab.dev/pub?topic=wowspy" var debug *bool var nsqWorkers = 32 -var allPlayersAchievementsGlobal = make(map[string][]NSQMessage) // PlayerName -> list of all their achievements -var allPlayerNamesGlobal = make(map[string]bool) // Set of all player names - func main() { root := flag.String("root", ".", "Root workdir") debug = flag.Bool("d", false, "Debug") @@ -80,10 +77,31 @@ func main() { defer wg.Done() saveAchievementsToDB(&db, achievements) }() + loadUniquePlayers(&db, achievements) saveAchievementsToSourceFiles(luaStates, achievements) wg.Wait() } +// loadUniquePlayers loads all unique players from the database and stores them in the achievements map +// So that we can populate our "alreadySeen" with the database values too +func loadUniquePlayers(db *DB, achievements *sync.Map) { + rows, err := db.readConn.Query("SELECT DISTINCT name FROM achievements") + if err != nil { + logger.Error("error querying unique players: %v", err) + return + } + defer rows.Close() + for rows.Next() { + var playerName string + err = rows.Scan(&playerName) + if err != nil { + logger.Error("error scanning player name: %v", err) + } + achievements.Store(playerName, &[]NSQMessage{}) + } + return +} + func saveAchievementsToSourceFiles(luaStates *sync.Map, achievements *sync.Map) { wg := sync.WaitGroup{} luaStates.Range(func(k, v any) bool {