OnlineLibrary
/
OnlineLibrary.go
89 строк · 2.3 Кб
1package main
2
3import (
4"os"
5"path/filepath"
6"time"
7
8"OnlineLibrary/internal/config"
9"OnlineLibrary/internal/gui"
10"OnlineLibrary/internal/lang"
11"OnlineLibrary/internal/log"
12"OnlineLibrary/internal/manager"
13"OnlineLibrary/internal/waveout"
14)
15
16func main() {
17userDataDir := config.UserData()
18if err := os.MkdirAll(userDataDir, os.ModeDir); err != nil {
19os.Exit(1)
20}
21
22logger := log.New(os.Stdout, log.Info, "\t")
23configFile := filepath.Join(userDataDir, config.ConfigFile)
24logFile := filepath.Join(userDataDir, config.LogFile)
25
26if fl, err := os.Create(logFile); err == nil {
27logger.SetOutput(fl)
28defer fl.Close()
29}
30
31logger.Info("Starting OnlineLibrary version %v", config.ProgramVersion)
32conf := config.NewConfig()
33logger.Info("Loading config file from %v", configFile)
34if err := conf.Load(configFile); err != nil {
35logger.Error("Loading config file: %v", err)
36}
37
38if level, err := log.StringToLevel(conf.General.LogLevel); err == nil {
39logger.SetLevel(level)
40}
41
42langs, langIsAvailable := lang.Init(conf.General.Language)
43
44wnd, err := gui.NewMainWindow()
45if err != nil {
46logger.Error("Creating main window: %v", err)
47os.Exit(1)
48}
49menuBar := wnd.MenuBar()
50
51// Filling in the menu with the available audio output devices
52menuBar.SetOutputDeviceMenu(waveout.OutputDeviceNames(), conf.General.OutputDevice)
53
54// Filling in the menu with the available languages
55if langIsAvailable {
56menuBar.SetLanguageMenu(langs, conf.General.Language)
57} else {
58menuBar.SetLanguageMenu(langs, "")
59}
60
61// Filling in the menu with the available providers
62menuBar.SetProvidersMenu(conf.Services, "")
63
64// Setting label for the pause timer in the menu
65menuBar.SetPauseTimerLabel(int(conf.General.PauseTimer.Minutes()))
66
67// Filling in the menu with the supported log levels
68menuBar.SetLogLevelMenu(logger.SupportedLevels(), logger.Level())
69
70mng := manager.NewManager(wnd, logger)
71done := make(chan bool)
72go mng.Start(conf, done)
73wnd.Run()
74
75logger.Debug("Waiting for the manager to finish")
76select {
77case <-done:
78break
79case <-time.After(time.Second * 16):
80logger.Error("Manager termination timeout has expired. Forced program exit")
81os.Exit(1)
82}
83
84logger.Info("Saving config file to %v", configFile)
85if err := conf.Save(configFile); err != nil {
86logger.Error("Saving config file: %v", err)
87}
88logger.Info("Exiting")
89}
90