-
Notifications
You must be signed in to change notification settings - Fork 1
/
main.go
92 lines (75 loc) · 1.98 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
package main
import (
"fmt"
"os"
"path"
"github.com/ralim/switchhost/library"
"github.com/ralim/switchhost/server"
"github.com/ralim/switchhost/settings"
"github.com/ralim/switchhost/termui"
"github.com/ralim/switchhost/titledb"
"github.com/rivo/tview"
"github.com/rs/zerolog/log"
)
func main() {
settingsPath := "config.json"
if len(os.Args) > 1 {
settingsPath = os.Args[1]
}
ui := termui.NewTermUI()
settings := settings.NewSettings(settingsPath)
settings.SetupLogging(tview.ANSIWriter(ui.LogsView))
uiExit := make(chan bool, 1)
go func() {
ui.Run()
uiExit <- true
}()
// Download TitlesDB
titlesDBInfo := ui.RegisterTask("TitlesDB")
titlesDBInfo.UpdateStatus("Downloading")
Titles := titledb.CreateTitlesDB(settings)
Titles.UpdateTitlesDB()
titlesDBInfo.UpdateStatus("Done")
lib := library.NewLibrary(Titles, settings, ui)
tryAndLoadKeys(lib)
lib.Start()
server := server.NewServer(lib, Titles, settings)
server.Run()
<-uiExit
//Rediect logs back to terminal
settings.SetupLogging(os.Stdout)
log.Warn().Msg("Ctrl-c pressed, closing up")
fmt.Println("Waiting for tasks to stop")
server.Stop() // stop the servers
lib.Stop() // wait for library to close down
ui.Stop()
}
func tryAndLoadKeys(lib *library.Library) {
paths := []string{"."}
if userHomeDir, err := os.UserHomeDir(); err == nil {
paths = append(paths, path.Join(userHomeDir, ".switch"))
}
for _, path := range paths {
if ok := loadKeys(path, lib); ok {
return // Done loading
}
}
log.Warn().Msg("No keys could be loaded, functionality will be limited")
}
func loadKeys(folder string, lib *library.Library) bool {
path := path.Join(folder, "prod.keys")
if _, err := os.Stat(path); err == nil {
log.Info().Str("path", path).Msg("Loading keys...")
file, err := os.Open(path)
if err != nil {
return false
}
defer file.Close()
if err := lib.LoadKeys(file); err != nil {
log.Info().Err(err).Msg("Could not load keys")
return false
}
return true
}
return false
}