Urban Terror launch check on shutdown.

Added checking if Urban Terror launched while trying to shut down
URTrator. If yes - we will show error message and won't quit,
until Urban Terror will be dead.
This commit is contained in:
Stanislav Nikitin 2016-10-06 22:19:03 +05:00
parent e87d51b1e3
commit ceaaf67510
3 changed files with 42 additions and 5 deletions

View File

@ -11,6 +11,7 @@ package context
import (
// stdlib
"errors"
"fmt"
// local
@ -43,14 +44,19 @@ type Context struct {
Requester *requester.Requester
}
func (ctx *Context) Close() {
func (ctx *Context) Close() error {
fmt.Println("Closing URTrator...")
launched := ctx.Launcher.CheckForLaunchedUrbanTerror()
if launched != nil {
return errors.New("Urban Terror is launched!")
}
ctx.Cache.FlushServers()
ctx.Database.Close()
// At last, close main window.
gtk.MainQuit()
return nil
}
func (ctx *Context) initializeCache() {

View File

@ -11,6 +11,7 @@ package launcher
import (
// stdlib
"errors"
"fmt"
"os"
"os/exec"
@ -19,9 +20,30 @@ import (
// local
"github.com/pztrn/urtrator/datamodels"
// Github
"github.com/mattn/go-gtk/gtk"
)
type Launcher struct {}
type Launcher struct {
// Flags.
// Is Urban Terror launched ATM?
launched bool
}
func (l *Launcher) CheckForLaunchedUrbanTerror() error {
if l.launched {
mbox_string := "Game is launched.\n\nCannot quit, because game is launched.\nQuit Urban Terror to exit URTrator!"
m := gtk.NewMessageDialog(nil, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, mbox_string)
m.Response(func() {
m.Destroy()
})
m.Run()
return errors.New("User didn't select valid profile, mismatch with server's version.")
}
return nil
}
func (l *Launcher) findFreeDisplay() string {
current_display_raw := os.Getenv("DISPLAY")

View File

@ -319,9 +319,10 @@ func (m *MainWindow) hideOfflineFavoriteServers() {
// Main window initialization.
func (m *MainWindow) Initialize() {
gtk.Init(nil)
m.initializeStorages()
gtk.Init(nil)
m.window = gtk.NewWindow(gtk.WINDOW_TOPLEVEL)
m.window.SetTitle("URTrator")
m.window.Connect("destroy", m.Close)
@ -950,7 +951,8 @@ func (m *MainWindow) loadAllServers() {
fmt.Println("Loading all servers...")
// ToDo: do it without clearing.
for _, server := range ctx.Cache.Servers {
if m.all_servers_hide_offline.GetActive() && server.Server.Name == "" && server.Server.Players == "" {
ping, _ := strconv.Atoi(server.Server.Ping)
if m.all_servers_hide_offline.GetActive() && ping > 9999 {
continue
}
iter := new (gtk.TreeIter)
@ -1076,8 +1078,15 @@ func (m *MainWindow) showShortServerInformation() {
model.GetValue(iter, 7, srv_address_gval)
srv_address := srv_address_gval.GetString()
var srv_ping_raw string
srv_ping_gval := glib.ValueFromNative(srv_ping_raw)
model.GetValue(iter, 7, srv_ping_gval)
srv_ping := srv_ping_gval.GetString()
ping, _ := strconv.Atoi(srv_ping)
// Getting server information from cache.
if len(srv_address) > 0 {
if len(srv_address) > 0 && ping < 1000 {
server_info := ctx.Cache.Servers[srv_address].Server
parsed_general_data := ioq3dataparser.ParseInfoToMap(server_info.ExtendedConfig)
parsed_players_info := ioq3dataparser.ParsePlayersInfoToMap(server_info.PlayersInfo)