Move domains to internal/services, remove unnecessary versioning for services. Change copyright year.
120 lines
3.3 KiB
Go
120 lines
3.3 KiB
Go
// NNM-Club torrent files mass downloader
|
||
// Created for Uploaders group
|
||
// Copyright (c) 2012-2022 Vladimir "fat0troll" Hodakov
|
||
|
||
package context
|
||
|
||
import (
|
||
"encoding/json"
|
||
"fmt"
|
||
"log"
|
||
"net/http"
|
||
"os"
|
||
"path/filepath"
|
||
"runtime"
|
||
|
||
"github.com/kirsle/configdir"
|
||
"github.com/rs/zerolog"
|
||
"gitlab.com/pztrn/flagger"
|
||
)
|
||
|
||
// getMemoryUsage returns memory usage for logger.
|
||
func (c *Context) getMemoryUsage(e *zerolog.Event, level zerolog.Level, message string) {
|
||
var m runtime.MemStats
|
||
|
||
runtime.ReadMemStats(&m)
|
||
|
||
e.Str("memalloc", fmt.Sprintf("%dMB", m.Alloc/1024/1024))
|
||
e.Str("memsys", fmt.Sprintf("%dMB", m.Sys/1024/1024))
|
||
e.Str("numgc", fmt.Sprintf("%d", m.NumGC))
|
||
}
|
||
|
||
// initFlagger initializes flags parser
|
||
func (c *Context) initFlagger() {
|
||
c.Flagger = flagger.New("NNM-Club Uploader Tools", flagger.LoggerInterface(log.New(os.Stdout, "", log.Lshortfile)))
|
||
c.Flagger.Initialize()
|
||
}
|
||
|
||
func (c *Context) readConfig() {
|
||
fh, err := os.Open(c.configFilePath)
|
||
if err != nil {
|
||
dlog.Fatal().Err(err).Msg("Ошибка чтения конфигурации")
|
||
}
|
||
|
||
defer fh.Close()
|
||
|
||
decoder := json.NewDecoder(fh)
|
||
|
||
err = decoder.Decode(&c.Config)
|
||
if err != nil {
|
||
dlog.Fatal().Err(err).Msg("Ошибка декодирования конфигурации")
|
||
}
|
||
}
|
||
|
||
func (c *Context) setLogNoColor() bool {
|
||
return runtime.GOOS == "windows"
|
||
}
|
||
|
||
// Init is an initialization function for core context
|
||
// Without these parts of the application we can't start at all
|
||
func (c *Context) Init() {
|
||
c.initFlagger()
|
||
|
||
c.Logger = zerolog.New(
|
||
zerolog.ConsoleWriter{
|
||
Out: os.Stdout,
|
||
NoColor: c.setLogNoColor(),
|
||
},
|
||
).With().Timestamp().Logger()
|
||
c.Logger = c.Logger.Hook(zerolog.HookFunc(c.getMemoryUsage))
|
||
|
||
dlog = c.Logger.With().Str("модуль", "context").Logger()
|
||
}
|
||
|
||
func (c *Context) InitConfig() {
|
||
configPath := configdir.LocalConfig("uploader_tools")
|
||
|
||
err := configdir.MakePath(configPath)
|
||
if err != nil {
|
||
dlog.Fatal().Err(err).Str("директория с конфигурационным файлом", configPath).
|
||
Msg("Не получилось создать или обнаружить директорию для конфигурационных файлов")
|
||
}
|
||
|
||
dlog.Debug().Str("директория с конфигурационным файлом", configPath).
|
||
Msg("Найдена директория с конфигурационным файлом")
|
||
|
||
configFile := filepath.Join(configPath, "settings.json")
|
||
c.configFilePath = configFile
|
||
|
||
if _, err = os.Stat(configFile); os.IsNotExist(err) {
|
||
// Generating new config on first run
|
||
dlog.Debug().Msg("Генерируется новый конфигурационный файл")
|
||
|
||
c.SaveConfig()
|
||
} else {
|
||
dlog.Debug().Msg("Используется существующий конфигурационный файл")
|
||
|
||
c.readConfig()
|
||
}
|
||
}
|
||
|
||
func (c *Context) SaveConfig() {
|
||
fh, err := os.Create(c.configFilePath)
|
||
if err != nil {
|
||
dlog.Fatal().Err(err).Msg("Не удалось создать файл конфигурации")
|
||
}
|
||
|
||
defer fh.Close()
|
||
|
||
encoder := json.NewEncoder(fh)
|
||
|
||
err = encoder.Encode(&c.Config)
|
||
if err != nil {
|
||
dlog.Fatal().Err(err).Msg("Не удалось записать файл конфигурации")
|
||
}
|
||
}
|
||
|
||
func (c *Context) SetCookies(cookies []*http.Cookie) {
|
||
c.Cookies = append(c.Cookies, cookies...)
|
||
}
|