OnlineLibrary

Форк
0
/
OnlineLibrary.go 
89 строк · 2.3 Кб
1
package main
2

3
import (
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

16
func main() {
17
	userDataDir := config.UserData()
18
	if err := os.MkdirAll(userDataDir, os.ModeDir); err != nil {
19
		os.Exit(1)
20
	}
21

22
	logger := log.New(os.Stdout, log.Info, "\t")
23
	configFile := filepath.Join(userDataDir, config.ConfigFile)
24
	logFile := filepath.Join(userDataDir, config.LogFile)
25

26
	if fl, err := os.Create(logFile); err == nil {
27
		logger.SetOutput(fl)
28
		defer fl.Close()
29
	}
30

31
	logger.Info("Starting OnlineLibrary version %v", config.ProgramVersion)
32
	conf := config.NewConfig()
33
	logger.Info("Loading config file from %v", configFile)
34
	if err := conf.Load(configFile); err != nil {
35
		logger.Error("Loading config file: %v", err)
36
	}
37

38
	if level, err := log.StringToLevel(conf.General.LogLevel); err == nil {
39
		logger.SetLevel(level)
40
	}
41

42
	langs, langIsAvailable := lang.Init(conf.General.Language)
43

44
	wnd, err := gui.NewMainWindow()
45
	if err != nil {
46
		logger.Error("Creating main window: %v", err)
47
		os.Exit(1)
48
	}
49
	menuBar := wnd.MenuBar()
50

51
	// Filling in the menu with the available audio output devices
52
	menuBar.SetOutputDeviceMenu(waveout.OutputDeviceNames(), conf.General.OutputDevice)
53

54
	// Filling in the menu with the available languages
55
	if langIsAvailable {
56
		menuBar.SetLanguageMenu(langs, conf.General.Language)
57
	} else {
58
		menuBar.SetLanguageMenu(langs, "")
59
	}
60

61
	// Filling in the menu with the available providers
62
	menuBar.SetProvidersMenu(conf.Services, "")
63

64
	// Setting label for the pause timer in the menu
65
	menuBar.SetPauseTimerLabel(int(conf.General.PauseTimer.Minutes()))
66

67
	// Filling in the menu with the supported log levels
68
	menuBar.SetLogLevelMenu(logger.SupportedLevels(), logger.Level())
69

70
	mng := manager.NewManager(wnd, logger)
71
	done := make(chan bool)
72
	go mng.Start(conf, done)
73
	wnd.Run()
74

75
	logger.Debug("Waiting for the manager to finish")
76
	select {
77
	case <-done:
78
		break
79
	case <-time.After(time.Second * 16):
80
		logger.Error("Manager termination timeout has expired. Forced program exit")
81
		os.Exit(1)
82
	}
83

84
	logger.Info("Saving config file to %v", configFile)
85
	if err := conf.Save(configFile); err != nil {
86
		logger.Error("Saving config file: %v", err)
87
	}
88
	logger.Info("Exiting")
89
}
90

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.