-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
121 lines (98 loc) · 2.31 KB
/
main.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
package main
import (
_ "embed"
"log"
"os"
"os/exec"
"github.com/mitchellh/mapstructure"
"github.com/nkoporec/ginker/compiler"
"github.com/spf13/viper"
"github.com/wailsapp/wails"
)
//go:embed frontend/dist/app.js
var js string
//go:embed frontend/dist/app.css
var css string
func main() {
// Create working dir.
_, err := compiler.CreateWorkingDir()
if err != nil {
}
// Create module.
dirConfig, err := compiler.GetDirConfig()
if err != nil {
}
compiler.Execute("mod", "init", dirConfig.ModuleName)
// Load config.
compiler.LoadConfig(dirConfig.Dir)
app := wails.CreateApp(&wails.AppConfig{
Width: 1024,
Height: 768,
Title: "ginker",
JS: js,
CSS: css,
Colour: "#131313",
Resizable: true,
})
app.Bind(runCompiler)
app.Bind(getSettings)
app.Bind(saveSettings)
app.Run()
}
func runCompiler(value string) (string, error) {
ginkerDir, err := compiler.GetDirConfig()
if err != nil {
}
// write the whole body at once
file, _ := os.Create(ginkerDir.File)
file.Write([]byte(value))
file.Close()
// Run tidy.
tidy, err := compiler.Execute("mod", "tidy")
if tidy != "" {
return tidy, nil
}
// Run fmt.
fmt, err := compiler.Execute("fmt")
if fmt != "" {
return fmt, nil
}
// Test run and display any potential errors.
testRun, err := compiler.Execute("run", ginkerDir.File)
if testRun != "" {
return testRun, nil
}
// Execute for real.
// @TODO: This should work with execute()
result, err := exec.Command(compiler.GetGoBinaryPath(), "run", ginkerDir.File).Output()
if err != nil {
return err.Error(), nil
}
return string(result), nil
}
func getSettings() (compiler.Config, error) {
dirConfig, err := compiler.GetDirConfig()
// Send config.
config, err := compiler.LoadConfig(dirConfig.Dir)
if err != nil {
log.Fatal(err)
}
return config, nil
}
// Declare settings structure
type Settings struct {
GolangBinary string
FontSize string
FontFamily string
LineHeight string
}
func saveSettings(data map[string]interface{}) (string, error) {
settings := Settings{}
mapstructure.Decode(data, &settings)
viper.Set("GOLANG_BINARY", settings.GolangBinary)
viper.Set("FONT_SIZE", settings.FontSize)
viper.Set("FONT_FAMILY", settings.FontFamily)
viper.Set("LINE_HEIGHT", settings.LineHeight)
viper.WriteConfig()
return "true", nil
}