-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathapp.go
136 lines (125 loc) · 4.08 KB
/
app.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
package main
import (
"context"
"fmt"
"os"
"os/exec"
"os/user"
"strings"
runtime "github.com/wailsapp/wails/v2/pkg/runtime"
)
type App struct {
ctx context.Context
}
func NewApp() *App {
return &App{}
}
var CONFIG_FILE_PATH string
func (a *App) startup(ctx context.Context) {
a.ctx = ctx
winUser, err := user.Current()
if err == nil {
CONFIG_FILE_PATH = winUser.HomeDir + "\\Documents\\alt-launcher-config.json"
fmt.Println("CONFIG_FILE_PATH=", CONFIG_FILE_PATH)
} else {
runtime.MessageDialog(ctx, runtime.MessageDialogOptions{
Title: "Ошибка",
Message: "Ошибка получения папки с настройками:\n" + err.Error(),
Type: runtime.ErrorDialog,
})
}
//fmt.Sprintf("%s\\alt-launcher-config.json", os.Use())
runtime.EventsOn(ctx, "servers:request", func(args ...interface{}) {
go func() {
servers, err := LoadServers()
if err != nil {
runtime.MessageDialog(ctx, runtime.MessageDialogOptions{
Title: "Ошибка",
Message: "Ошибка получения списка серверов:\n" + err.Error(),
Type: runtime.ErrorDialog,
})
return
}
runtime.EventsEmit(ctx, "servers:update", servers.Arizona, servers.ArizonaMobile)
}()
})
// Game path
runtime.EventsOn(ctx, "settings:requestFileDialog", func(args ...interface{}) {
path, err := runtime.OpenDirectoryDialog(ctx, runtime.OpenDialogOptions{})
if err != nil {
runtime.MessageDialog(ctx, runtime.MessageDialogOptions{
Title: "Ошибка",
Message: "Ошибка при открытии диалога: " + err.Error(),
Type: runtime.ErrorDialog,
})
return
}
if len(path) > 0 {
gamePath := fmt.Sprintf("%s\\gta_sa.exe", path)
_, err := os.Stat(gamePath)
if err != nil {
runtime.MessageDialog(ctx, runtime.MessageDialogOptions{
Title: "Error",
Message: "Файл \"gta_sa.exe\" не найден в \"" + path + "\"",
Type: runtime.ErrorDialog,
})
return
}
runtime.EventsEmit(ctx, "settings:fileDialogPathSelected", path)
}
})
}
func (a *App) StartGame(name string, gamePath string, parameters []string) error {
if len(name) < 3 || len(name) > 22 {
runtime.MessageDialog(a.ctx, runtime.MessageDialogOptions{
Title: "Ошибка запуска игры",
Message: "Некоррекнтный ник-нейм",
Type: runtime.ErrorDialog,
})
return nil
}
var batFile = fmt.Sprintf("%s\\%s", gamePath, "alternative-launcher.bat")
var batText = fmt.Sprintf("@echo off\ncd /D %%~dp0\nstart gta_sa.exe %s\nexit", strings.Join(parameters, " "))
fmt.Println("[CREATING BAT]:", batText)
err := os.WriteFile(batFile, []byte(batText), 0644)
if err != nil {
runtime.MessageDialog(a.ctx, runtime.MessageDialogOptions{
Title: "Ошибка запуска игры",
Message: fmt.Sprintf("Ошибка: %s", err.Error()),
Type: runtime.ErrorDialog,
})
return err
}
cmd := exec.Command(batFile).Run()
fmt.Println(cmd)
return nil
}
func (a *App) ReadConfig() string {
bytes, err := os.ReadFile(CONFIG_FILE_PATH)
if err != nil {
runtime.MessageDialog(a.ctx, runtime.MessageDialogOptions{
Title: "Ваши настройки не были загружены",
Message: fmt.Sprintf("Произошла ошибка при чтении файла настроек: %s\nБыли загружены стандартные настройки.", err.Error()),
Type: runtime.InfoDialog,
})
return ""
}
return string(bytes)
}
func (a *App) SaveConfig(json string) {
fmt.Println("SAVE CONFIG:", json)
err := os.WriteFile(CONFIG_FILE_PATH, []byte(json), 0644)
if err != nil {
runtime.MessageDialog(a.ctx, runtime.MessageDialogOptions{
Title: "Ваши настройки не были сохранены",
Message: "Ошибка при сохранении настроек: " + err.Error(),
Type: runtime.ErrorDialog,
})
}
}
func (a *App) UpdateServerInfo(host string) {
server, err := getServerQueryInfo(host, 7777)
if err == nil {
runtime.EventsEmit(a.ctx, "server:update_players", host, server.Players, server.MaxPlayers)
}
}