Favorites and fixes.
Favorites functionality done, except editing favorite server. Note, that game profile defined for favorite server have higher priority on normal profile selected in combobox near "Launch!" button. Later WILL be ignored. Bunch of fixes is added.
This commit is contained in:
@@ -65,12 +65,48 @@ func (d *Database) Migrate() {
|
||||
|
||||
func (d *Database) UpdateServers(data map[string]*datamodels.Server) {
|
||||
fmt.Println("Updating servers information in database...")
|
||||
// ToDo: real update :)
|
||||
d.Db.MustExec("DELETE FROM servers")
|
||||
raw_cached := []datamodels.Server{}
|
||||
d.Db.Select(&raw_cached, "SELECT * FROM servers")
|
||||
|
||||
// Create map[string]*datamodels.Server once, so we won't iterate
|
||||
// over slice of datamodels.Server everytime.
|
||||
cached_servers := make(map[string]*datamodels.Server)
|
||||
for s := range raw_cached {
|
||||
mapping_item_name := raw_cached[s].Ip + ":" + raw_cached[s].Port
|
||||
cached_servers[mapping_item_name] = &raw_cached[s]
|
||||
}
|
||||
|
||||
new_servers := make(map[string]*datamodels.Server)
|
||||
|
||||
// Update our cached mapping.
|
||||
for _, s := range data {
|
||||
mapping_item_name := s.Ip + ":" + s.Port
|
||||
_, ok := cached_servers[mapping_item_name]
|
||||
if !ok {
|
||||
fmt.Println(mapping_item_name + " not found!")
|
||||
new_servers[mapping_item_name] = s
|
||||
} else {
|
||||
cached_servers[mapping_item_name].Ip = s.Ip
|
||||
cached_servers[mapping_item_name].Port = s.Port
|
||||
cached_servers[mapping_item_name].Name = s.Name
|
||||
cached_servers[mapping_item_name].Players = s.Players
|
||||
cached_servers[mapping_item_name].Maxplayers = s.Maxplayers
|
||||
cached_servers[mapping_item_name].Ping = s.Ping
|
||||
cached_servers[mapping_item_name].Map = s.Map
|
||||
cached_servers[mapping_item_name].Gamemode = s.Gamemode
|
||||
}
|
||||
}
|
||||
|
||||
tx := d.Db.MustBegin()
|
||||
for _, srv := range data {
|
||||
fmt.Println("Adding new servers...")
|
||||
for _, srv := range new_servers {
|
||||
tx.NamedExec("INSERT INTO servers (ip, port, name, ping, players, maxplayers, gamemode, map, version) VALUES (:ip, :port, :name, :ping, :players, :maxplayers, :gamemode, :map, :version)", srv)
|
||||
}
|
||||
fmt.Println("Updating cached servers...")
|
||||
for _, srv := range cached_servers {
|
||||
tx.NamedExec("UPDATE servers SET name=:name, players=:players, maxplayers=:maxplayers, gamemode=:gamemode, map=:map, version=:version WHERE ip=:ip AND port=:port", &srv)
|
||||
}
|
||||
|
||||
tx.Commit()
|
||||
fmt.Println("Done")
|
||||
}
|
||||
|
@@ -55,6 +55,14 @@ func migrate_full(db *Database, version int) {
|
||||
three_to_four(db)
|
||||
version = 4
|
||||
}
|
||||
if version == 4 {
|
||||
four_to_five(db)
|
||||
version = 5
|
||||
}
|
||||
if version == 5 {
|
||||
five_to_six(db)
|
||||
version = 6
|
||||
}
|
||||
}
|
||||
|
||||
// Initial database structure.
|
||||
@@ -84,4 +92,19 @@ func two_to_three(db *Database) {
|
||||
func three_to_four(db *Database) {
|
||||
fmt.Println("Upgrading database from 3 to 4...")
|
||||
db.Db.MustExec("UPDATE urt_profiles SET version='4.3.0' WHERE version='4.3.000'")
|
||||
db.Db.MustExec("UPDATE database SET version=4")
|
||||
}
|
||||
|
||||
// Server's passwords.
|
||||
func four_to_five(db *Database) {
|
||||
fmt.Println("Upgrading database from 4 to 5...")
|
||||
db.Db.MustExec("ALTER TABLE servers ADD password VARCHAR(64) DEFAULT ''")
|
||||
db.Db.MustExec("UPDATE database SET version=5")
|
||||
}
|
||||
|
||||
// Profile for server.
|
||||
func five_to_six(db *Database) {
|
||||
fmt.Println("Upgrading database from 5 to 6...")
|
||||
db.Db.MustExec("ALTER TABLE servers ADD profile_to_use VARCHAR(128) DEFAULT ''")
|
||||
db.Db.MustExec("UPDATE database SET version=6")
|
||||
}
|
||||
|
Reference in New Issue
Block a user