128 lines
3.7 KiB
Go
128 lines
3.7 KiB
Go
package api
|
|
|
|
import (
|
|
"easyvqd/internal/conf"
|
|
"git.lnton.com/lnton/pkg/reason"
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/ixugo/goddd/pkg/web"
|
|
"github.com/jinzhu/copier"
|
|
"github.com/pelletier/go-toml/v2"
|
|
"io"
|
|
"log/slog"
|
|
"strconv"
|
|
"sync"
|
|
)
|
|
|
|
var confMutex sync.Mutex
|
|
|
|
type ConfigAPI struct {
|
|
cfg *conf.Bootstrap
|
|
uc *Usecase
|
|
}
|
|
|
|
func registerConfig(g gin.IRouter, api ConfigAPI, handler ...gin.HandlerFunc) {
|
|
group := g.Group("/api/configs", handler...)
|
|
//group.GET("", api.getToml)
|
|
//group.PUT("", api.editToml)
|
|
|
|
group.GET("/base", web.WarpH(api.getBase))
|
|
group.PUT("/base", web.WarpH(api.editBase))
|
|
group.GET("/default", web.WarpH(api.getDefaultConfig))
|
|
|
|
}
|
|
|
|
type getBaseOutput struct {
|
|
SaveDay int32 `json:"save_day"`
|
|
}
|
|
type editBaseInput struct {
|
|
SaveDay int32 `json:"save_day"`
|
|
}
|
|
type getBaseConfigOutput struct {
|
|
FrmNum int32 `json:"frm_num"`
|
|
IsDeepLearn bool `json:"is_deep_learn"`
|
|
VqdLgtDark conf.VqdLgtDark `json:"vqd_lgt_dark"` // 亮度检测
|
|
VqdBlue conf.VqdBlue `json:"vqd_blue"` // 蓝屏检查
|
|
VqdClarity conf.VqdClarity `json:"vqd_clarity"` // 清晰度检查
|
|
VqdShark conf.VqdShark `json:"vqd_shark"` // 抖动检查
|
|
VqdFreeze conf.VqdFreeze `json:"vqd_freeze"` // 冻结检测
|
|
VqdColor conf.VqdColor `json:"vqd_color"` // 偏色检测
|
|
VqdOcclusion conf.VqdOcclusion `json:"vqd_occlusion"` // 遮挡检测
|
|
VqdNoise conf.VqdNoise `json:"vqd_noise"` // 噪声检测
|
|
VqdContrast conf.VqdContrast `json:"vqd_contrast"` // 对比度检测
|
|
VqdMosaic conf.VqdMosaic `json:"vqd_mosaic"` // 马赛克检测
|
|
VqdFlower conf.VqdFlower `json:"vqd_flower"` // 花屏检测
|
|
}
|
|
|
|
func (uc *ConfigAPI) editBase(c *gin.Context, in *editBaseInput) (any, error) {
|
|
uc.cfg.VqdConfig.SaveDay = in.SaveDay
|
|
conf.WriteConfig(uc.cfg, uc.cfg.ConfigDirPath())
|
|
return in, nil
|
|
}
|
|
func (uc *ConfigAPI) getDefaultConfig(_ *gin.Context, _ *struct{}) (getBaseConfigOutput, error) {
|
|
return getBaseConfigOutput{
|
|
FrmNum: uc.cfg.VqdConfig.FrmNum,
|
|
IsDeepLearn: uc.cfg.VqdConfig.IsDeepLearn,
|
|
VqdLgtDark: uc.cfg.VqdLgtDark,
|
|
VqdBlue: uc.cfg.VqdBlue,
|
|
VqdClarity: uc.cfg.VqdClarity,
|
|
VqdShark: uc.cfg.VqdShark,
|
|
VqdFreeze: uc.cfg.VqdFreeze,
|
|
VqdColor: uc.cfg.VqdColor,
|
|
VqdOcclusion: uc.cfg.VqdOcclusion,
|
|
VqdNoise: uc.cfg.VqdNoise,
|
|
VqdContrast: uc.cfg.VqdContrast,
|
|
VqdMosaic: uc.cfg.VqdMosaic,
|
|
VqdFlower: uc.cfg.VqdFlower,
|
|
}, nil
|
|
}
|
|
func (uc *ConfigAPI) getBase(_ *gin.Context, _ *struct{}) (getBaseOutput, error) {
|
|
confMutex.Lock()
|
|
defer confMutex.Unlock()
|
|
|
|
return getBaseOutput{
|
|
SaveDay: uc.cfg.VqdConfig.SaveDay,
|
|
}, nil
|
|
}
|
|
func (uc *ConfigAPI) getToml(c *gin.Context) {
|
|
c.Header("Content-Type", "application/toml")
|
|
if err := toml.NewEncoder(c.Writer).Encode(uc.uc.Conf); err != nil {
|
|
slog.Error("获取配置失败", "err", err)
|
|
return
|
|
}
|
|
}
|
|
|
|
func (uc *ConfigAPI) editToml(c *gin.Context) {
|
|
b, err := io.ReadAll(io.LimitReader(c.Request.Body, 1024*20))
|
|
if err != nil {
|
|
web.Fail(c, reason.ErrBadRequest.SetMsg(err.Error()))
|
|
return
|
|
}
|
|
if len(b) <= 10 {
|
|
web.Fail(c, reason.ErrBadRequest.SetMsg("错误的文件"))
|
|
return
|
|
}
|
|
|
|
data, err := strconv.Unquote(string(b))
|
|
if err != nil {
|
|
web.Fail(c, reason.ErrBadRequest.SetMsg(err.Error()))
|
|
return
|
|
}
|
|
|
|
var cfg conf.Bootstrap
|
|
if err := toml.Unmarshal([]byte(data), &cfg); err != nil {
|
|
web.Fail(c, reason.ErrBadRequest.SetMsg(err.Error()))
|
|
return
|
|
}
|
|
|
|
if err := copier.Copy(uc.uc.Conf, cfg); err != nil {
|
|
web.Fail(c, reason.ErrServer.SetMsg(err.Error()))
|
|
return
|
|
}
|
|
if err := conf.WriteConfig(uc.uc.Conf, uc.uc.Conf.ConfigDirPath()); err != nil {
|
|
web.Fail(c, reason.ErrServer.SetMsg(err.Error()))
|
|
return
|
|
}
|
|
|
|
web.Success(c, gin.H{"msg": "ok"})
|
|
}
|