HUGE refactor. working towards web UI
This commit is contained in:
parent
dd54e8cc49
commit
1f94eecca9
29 changed files with 1669 additions and 162 deletions
99
cmd/server/main.go
Normal file
99
cmd/server/main.go
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"log/slog"
|
||||
"os"
|
||||
"os/signal"
|
||||
"path"
|
||||
"syscall"
|
||||
|
||||
"arimelody.space/melody-vod-manager/config"
|
||||
"arimelody.space/melody-vod-manager/logger"
|
||||
"arimelody.space/melody-vod-manager/server"
|
||||
"arimelody.space/melody-vod-manager/templates"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/mattn/go-isatty"
|
||||
)
|
||||
|
||||
func main() {
|
||||
var err error
|
||||
|
||||
ctx, cancel := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM)
|
||||
defer cancel()
|
||||
|
||||
gin.SetMode(gin.ReleaseMode)
|
||||
|
||||
var handlers []slog.Handler
|
||||
slogger := slog.New(logger.NewSlogHandler(os.Stderr, logger.Options{
|
||||
Handlers: handlers,
|
||||
IsTerminal: isatty.IsTerminal(os.Stderr.Fd()),
|
||||
Level: slog.LevelDebug,
|
||||
}))
|
||||
slog.SetDefault(slogger)
|
||||
|
||||
cliLogger := slogger.WithGroup("CLI")
|
||||
|
||||
cliLogger.Debug("Running with arguments:", "args", os.Args)
|
||||
|
||||
userConfigDir, err := os.UserConfigDir()
|
||||
if err != nil {
|
||||
cliLogger.Error("Could not determine user configuration directory:", "err", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
configLocations := []string{
|
||||
"config.toml",
|
||||
path.Join(userConfigDir, "melody-vod-manager", "config.toml"),
|
||||
"/etc/melody-vod-manager/config.toml",
|
||||
}
|
||||
var cfg *config.Config
|
||||
for _, path := range configLocations {
|
||||
cliLogger.Debug("Checking config path:", "path", path)
|
||||
cfg, err = config.ReadConfig(path)
|
||||
if !os.IsNotExist(err) { break }
|
||||
}
|
||||
if cfg == nil {
|
||||
cliLogger.Error("Failed to load configuration!", "err", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
var templateDir string
|
||||
templateLocations := []string{
|
||||
path.Join(userConfigDir, "melody-vod-manager", "templates"),
|
||||
"/etc/melody-vod-manager/templates",
|
||||
}
|
||||
var textTemplates *templates.TextTemplates
|
||||
for _, dir := range templateLocations {
|
||||
cliLogger.Debug("Checking template directory:", "dir", dir)
|
||||
textTemplates, err = templates.FetchTemplates(ctx, dir)
|
||||
if err == nil { templateDir = dir }
|
||||
if !os.IsNotExist(err) { break }
|
||||
}
|
||||
if err != nil {
|
||||
cliLogger.Error("Failed to fetch templates:", "err", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
srv, err := server.New(
|
||||
server.VODServerConfig{
|
||||
Host: cfg.Host,
|
||||
Port: cfg.Port,
|
||||
VODDirectory: cfg.VODDirectory,
|
||||
TemplateDirectory: templateDir,
|
||||
},
|
||||
server.VODGoogleConfig{
|
||||
ApiKey: cfg.Google.ApiKey,
|
||||
ClientID: cfg.Google.ClientID,
|
||||
ClientSecret: cfg.Google.ClientSecret,
|
||||
},
|
||||
textTemplates,
|
||||
)
|
||||
if err != nil { panic(err) }
|
||||
|
||||
if err = srv.Run(ctx); err != nil {
|
||||
if !errors.Is(err, context.Canceled) {
|
||||
cliLogger.Error("A fatal error has occurred:", "err", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue