From b69881d26ba039c3be3e3b2d1ac266c7f7dd7e4c Mon Sep 17 00:00:00 2001 From: Simon Ding Date: Tue, 19 Nov 2024 18:22:40 +0800 Subject: [PATCH] WIP: size limiter --- db/const.go | 15 ++++++-------- db/db.go | 30 +++++++++++++++++++++++---- server/server.go | 2 ++ server/setting.go | 52 ++++++++++++++++++++++++++++++++++++++++++++--- 4 files changed, 83 insertions(+), 16 deletions(-) diff --git a/db/const.go b/db/const.go index 75c4fb1..ae3a79c 100644 --- a/db/const.go +++ b/db/const.go @@ -14,10 +14,12 @@ const ( SettingNfoSupportEnabled = "nfo_support_enabled" SettingAllowQiangban = "filter_qiangban" SettingEnableTmdbAdultContent = "tmdb_adult_content" - SetttingSizeLimiter = "size_limiter" SettingTvNamingFormat = "tv_naming_format" SettingMovieNamingFormat = "movie_naming_format" SettingProwlarrInfo = "prowlarr_info" + Setting720pSizeLimiter = "720p_size_limiter" + Setting1080ppSizeLimiter = "1080p_size_limiter" + Setting2160ppSizeLimiter = "2160p_size_limiter" ) const ( @@ -52,14 +54,9 @@ type ResolutionType string const JwtSerectKey = "jwt_secrect_key" type SizeLimiter struct { - R720p Limiter `json:"720p"` - R1080p Limiter `json:"1080p"` - R2160p Limiter `json:"2160p"` -} - -type Limiter struct { - Max int `json:"max"` - Min int `json:"min"` + MaxSIze int64 `json:"max_size"` + MinSize int64 `json:"min_size"` + PreferSIze int64 `json:"prefer_size"` } type ProwlarrSetting struct { diff --git a/db/db.go b/db/db.go index 5b37719..6c7c450 100644 --- a/db/db.go +++ b/db/db.go @@ -631,19 +631,41 @@ func (c *Client) DeleteImportlist(id int) error { return c.ent.ImportList.DeleteOneID(id).Exec(context.TODO()) } -func (c *Client) GetSizeLimiter() (*SizeLimiter, error) { - v := c.GetSetting(SetttingSizeLimiter) +func (c *Client) GetSizeLimiter(r media.Resolution) (*SizeLimiter, error) { + var v string + if r == media.Resolution720p { + v = c.GetSetting(Setting720pSizeLimiter) + } else if r == media.Resolution1080p { + v = c.GetSetting(Setting1080ppSizeLimiter) + } else if r == media.Resolution2160p { + v = c.GetSetting(Setting2160ppSizeLimiter) + } else { + return nil, errors.Errorf("resolution not supported: %v", r) + } + var limiter SizeLimiter + if v == "" { + return &limiter, nil + } + err := json.Unmarshal([]byte(v), &limiter) return &limiter, err } -func (c *Client) SetSizeLimiter(limiter *SizeLimiter) error { +func (c *Client) SetSizeLimiter(r media.Resolution, limiter *SizeLimiter) error { data, err := json.Marshal(limiter) if err != nil { return err } - return c.SetSetting(SetttingSizeLimiter, string(data)) + if r == media.Resolution720p { + return c.SetSetting(Setting720pSizeLimiter, string(data)) + } else if r == media.Resolution1080p { + return c.SetSetting(Setting1080ppSizeLimiter, string(data)) + } else if r == media.Resolution2160p { + return c.SetSetting(Setting2160ppSizeLimiter, string(data)) + } else { + return errors.Errorf("resolution not supported: %v", r) + } } func (c *Client) GetTvNamingFormat() string { diff --git a/server/server.go b/server/server.go index 46f7b45..ba73492 100644 --- a/server/server.go +++ b/server/server.go @@ -72,6 +72,8 @@ func (s *Server) Serve() error { setting.POST("/cron/trigger", HttpHandler(s.TriggerCronJob)) setting.GET("/prowlarr", HttpHandler(s.GetProwlarrSetting)) setting.POST("/prowlarr", HttpHandler(s.SaveProwlarrSetting)) + setting.GET("/limiter", HttpHandler(s.GetSizeLimiter)) + setting.POST("/limiter", HttpHandler(s.SetSizeLimiter)) } activity := api.Group("/activity") { diff --git a/server/setting.go b/server/setting.go index 5710e99..33af7af 100644 --- a/server/setting.go +++ b/server/setting.go @@ -7,6 +7,7 @@ import ( "polaris/db" "polaris/ent" "polaris/ent/downloadclients" + "polaris/ent/media" "polaris/log" "polaris/pkg/prowlarr" "polaris/pkg/qbittorrent" @@ -104,7 +105,6 @@ func (s *Server) SetSetting(c *gin.Context) (interface{}, error) { return nil, nil } - func (s *Server) GetSetting(c *gin.Context) (interface{}, error) { tmdb := s.db.GetSetting(db.SettingTmdbApiKey) downloadDir := s.db.GetSetting(db.SettingDownloadDir) @@ -306,7 +306,7 @@ func (s *Server) TriggerCronJob(c *gin.Context) (interface{}, error) { } func (s *Server) GetProwlarrSetting(c *gin.Context) (interface{}, error) { - se, err :=s.db.GetProwlarrSetting() + se, err := s.db.GetProwlarrSetting() if err != nil { return &db.ProwlarrSetting{}, nil } @@ -321,7 +321,7 @@ func (s *Server) SaveProwlarrSetting(c *gin.Context) (interface{}, error) { client := prowlarr.New(in.ApiKey, in.URL) if _, err := client.GetIndexers(prowlarr.TV); err != nil { return nil, errors.Wrap(err, "connect to prowlarr error") - } + } } err := s.db.SaveProwlarrSetting(&in) if err != nil { @@ -329,3 +329,49 @@ func (s *Server) SaveProwlarrSetting(c *gin.Context) (interface{}, error) { } return "success", nil } + +type ResolutionSizeLimiter struct { + P720 db.SizeLimiter `json:"720p"` + P1080 db.SizeLimiter `json:"1080p"` + P2160 db.SizeLimiter `json:"2160p"` +} + +func (s *Server) GetSizeLimiter(c *gin.Context) (interface{}, error) { + p720, err := s.db.GetSizeLimiter(media.Resolution720p) + if err != nil { + return nil, errors.Wrap(err, "db") + } + p1080, err := s.db.GetSizeLimiter(media.Resolution1080p) + if err != nil { + return nil, errors.Wrap(err, "db") + } + + p2160, err := s.db.GetSizeLimiter(media.Resolution2160p) + if err != nil { + return nil, errors.Wrap(err, "db") + } + r := ResolutionSizeLimiter{ + P720: *p720, + P1080: *p1080, + P2160: *p2160, + } + return r, nil +} + +func (s *Server) SetSizeLimiter(c *gin.Context) (interface{}, error) { + var in ResolutionSizeLimiter + if err := c.ShouldBindJSON(&in); err != nil { + return nil, err + } + if err := s.db.SetSizeLimiter(media.Resolution720p, &in.P720); err != nil { + return nil, errors.Wrap(err, "db") + } + if err := s.db.SetSizeLimiter(media.Resolution1080p, &in.P1080); err != nil { + return nil, errors.Wrap(err, "db") + } + + if err := s.db.SetSizeLimiter(media.Resolution2160p, &in.P2160); err != nil { + return nil, errors.Wrap(err, "db") + } + return "success", nil +} \ No newline at end of file