60 lines
1.8 KiB
Go
60 lines
1.8 KiB
Go
/*
|
|
* Copyright (c) 2025-2026, Антон Аксенов
|
|
* This file is part of iptvc project
|
|
* MIT License: https://git.axenov.dev/IPTV/iptvc/src/branch/master/LICENSE
|
|
*/
|
|
|
|
package cmd
|
|
|
|
import (
|
|
"axenov/iptv-checker/app"
|
|
"axenov/iptv-checker/app/web"
|
|
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
// serveCmd represents the serve command
|
|
var serveCmd = &cobra.Command{
|
|
Use: "serve",
|
|
Short: "Start web interface",
|
|
Long: `Start web interface for browsing IPTV playlists.
|
|
Use --check to enable background playlist checking.
|
|
Copyright (c) 2025, Антон Аксенов, MIT license.`,
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
app.Init()
|
|
applyAppOverrides(cmd)
|
|
applyCacheOverrides(cmd)
|
|
applyCheckOverrides(cmd)
|
|
app.InitCache()
|
|
|
|
// CLI-флаги переопределяют конфиг, только если заданы явно.
|
|
if cmd.Flags().Changed("port") {
|
|
app.Config.Server.Port = app.Args.ServerPort
|
|
}
|
|
if cmd.Flags().Changed("host") {
|
|
app.Config.Server.Host = app.Args.ServerHost
|
|
}
|
|
|
|
server := web.NewServer(app.Config, app.Cache)
|
|
|
|
// запускаем фоновую проверку, если передан --check или включён check.start-on-serve в конфиге
|
|
if app.Args.NeedCheck || app.Config.Check.StartOnServe {
|
|
opts := web.CheckOptions{
|
|
Repeat: app.Args.RepeatCount,
|
|
Random: app.Args.RandomCount,
|
|
}
|
|
go server.StartBackgroundChecker(opts)
|
|
}
|
|
|
|
server.Start()
|
|
},
|
|
}
|
|
|
|
func init() {
|
|
serveCmd.Flags().UintVarP(&app.Args.ServerPort, "port", "p", 0, "port for web interface (overrides config.yml and env)")
|
|
serveCmd.Flags().StringVar(&app.Args.ServerHost, "host", "", "host to bind web interface (overrides config.yml and env)")
|
|
serveCmd.Flags().BoolVar(&app.Args.NeedCheck, "check", false, "enable background playlist checking")
|
|
addCommonCheckFlags(serveCmd, 0)
|
|
rootCmd.AddCommand(serveCmd)
|
|
}
|