Initial commit, what works:

* Servers update
* Profile creation/edit/deletion
* Game launching
* Checks server version <> profile version.
This commit is contained in:
2016-10-04 15:42:36 +05:00
commit ac938c16eb
26 changed files with 3411 additions and 0 deletions

View File

@@ -0,0 +1,76 @@
// URTator - Urban Terror server browser and game launcher, written in
// Go.
//
// Copyright (c) 2016, Stanslav N. a.k.a pztrn (or p0z1tr0n)
// All rights reserved.
//
// Licensed under Terms and Conditions of GNU General Public License
// version 3 or any higher.
// ToDo: put full text of license here.
package database
import (
// stdlib
//"database/sql"
"fmt"
"path"
"strconv"
// local
"github.com/pztrn/urtrator/datamodels"
// Other
"github.com/jmoiron/sqlx"
_ "github.com/mattn/go-sqlite3"
)
type Database struct {
// Pointer to initialized database connection.
Db *sqlx.DB
}
func (d *Database) Close() {
fmt.Println("Closing database...")
d.Db.Close()
}
func (d *Database) Initialize() {
fmt.Println("Initializing database...")
// Connect to database.
db_path := path.Join(cfg.TEMP["DATA"], "database.sqlite3")
fmt.Println("Database path: " + db_path)
db, err := sqlx.Connect("sqlite3", db_path)
if err != nil {
fmt.Println(err.Error())
}
d.Db = db
}
func (d *Database) Migrate() {
// Getting current database version.
dbver := 0
database := []datamodels.Database{}
d.Db.Select(&database, "SELECT * FROM database")
if len(database) > 0 {
fmt.Println("Current database version: " + database[0].Version)
dbver, _ = strconv.Atoi(database[0].Version)
} else {
fmt.Println("No database found, will create new one")
}
migrate_full(d, dbver)
}
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")
tx := d.Db.MustBegin()
for _, srv := range data {
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)
}
tx.Commit()
fmt.Println("Done")
}

25
database/exported.go Normal file
View File

@@ -0,0 +1,25 @@
// URTator - Urban Terror server browser and game launcher, written in
// Go.
//
// Copyright (c) 2016, Stanslav N. a.k.a pztrn (or p0z1tr0n)
// All rights reserved.
//
// Licensed under Terms and Conditions of GNU General Public License
// version 3 or any higher.
// ToDo: put full text of license here.
package database
import (
// Local
"github.com/pztrn/urtrator/configuration"
)
var (
cfg *configuration.Config
)
func New(c *configuration.Config) *Database {
cfg = c
d := Database{}
return &d
}

77
database/migrations.go Normal file
View File

@@ -0,0 +1,77 @@
// URTator - Urban Terror server browser and game launcher, written in
// Go.
//
// Copyright (c) 2016, Stanslav N. a.k.a pztrn (or p0z1tr0n)
// All rights reserved.
//
// Licensed under Terms and Conditions of GNU General Public License
// version 3 or any higher.
// ToDo: put full text of license here.
package database
import (
// stdlib
"fmt"
)
var start_schema = `
DROP TABLE IF EXISTS database;
CREATE TABLE database (
version VARCHAR(10) NOT NULL
);
DROP TABLE IF EXISTS servers;
CREATE TABLE servers (
ip VARCHAR(128) NOT NULL,
port VARCHAR(5) NOT NULL,
name VARCHAR(128) NOT NULL,
players VARCHAR(2) NOT NULL,
maxplayers VARCHAR(2) NOT NULL,
ping VARCHAR(4),
gamemode VARCHAR(1) NOT NULL,
map VARCHAR(64) NOT NULL,
version VARCHAR(5) NOT NULL
);
INSERT INTO database (version) VALUES (1);
`
// Migrate database to latest version.
// ToDo: make it more good :).
func migrate_full(db *Database, version int) {
if version < 1 {
start_to_one(db)
version = 1
}
if version == 1 {
one_to_two(db)
version = 2
}
if version == 2 {
two_to_three(db)
version = 3
}
}
// Initial database structure.
func start_to_one(db *Database) {
fmt.Println("Upgrading database from 0 to 1...")
db.Db.MustExec(start_schema)
}
// Favorite server mark.
func one_to_two(db *Database) {
fmt.Println("Upgrading database from 1 to 2...")
db.Db.MustExec("ALTER TABLE servers ADD favorite VARCHAR(1) DEFAULT '0'")
db.Db.MustExec("UPDATE database SET version=2")
}
// URTRator settings and Urban Terror profiles.
func two_to_three(db *Database) {
fmt.Println("Upgrading database from 2 to 3...")
db.Db.MustExec("DROP TABLE IF EXISTS settings")
db.Db.MustExec("CREATE TABLE settings (show_tray_icon VARCHAR(1) NOT NULL DEFAULT '0', enable_autoupdate VARCHAR(1) NOT NULL DEFAULT '0')")
db.Db.MustExec("DROP TABLE IF EXISTS urt_profiles")
db.Db.MustExec("CREATE TABLE urt_profiles (name VARCHAR(128) NOT NULL, version VARCHAR(5) NOT NULL DEFAULT '4.3', binary VARCHAR(1024) NOT NULL, second_x_session VARCHAR(1) NOT NULL DEFAULT '0', additional_parameters VARCHAR(1024) NOT NULL DEFAULT '')")
db.Db.MustExec("UPDATE database SET version=3")
}