mirror of
https://github.com/simon-ding/polaris.git
synced 2026-06-05 09:27:43 +08:00
refactor: size limiter
This commit is contained in:
@@ -114,8 +114,9 @@ type AddWatchlistIn struct {
|
||||
Resolution string `json:"resolution" binding:"required"`
|
||||
Folder string `json:"folder" binding:"required"`
|
||||
DownloadHistoryEpisodes bool `json:"download_history_episodes"` //for tv
|
||||
SizeMin int `json:"size_min"`
|
||||
SizeMax int `json:"size_max"`
|
||||
SizeMin int64 `json:"size_min"`
|
||||
SizeMax int64 `json:"size_max"`
|
||||
PreferSize int64 `json:"prefer_size"`
|
||||
}
|
||||
|
||||
func (c *Client) AddTv2Watchlist(in AddWatchlistIn) (interface{}, error) {
|
||||
@@ -139,7 +140,7 @@ func (c *Client) AddTv2Watchlist(in AddWatchlistIn) (interface{}, error) {
|
||||
}
|
||||
log.Infof("find detail for tv id %d: %+v", in.TmdbID, detail)
|
||||
|
||||
lastSeason := 0
|
||||
lastSeason := 0
|
||||
for _, season := range detail.Seasons {
|
||||
if season.SeasonNumber > lastSeason && season.EpisodeCount > 0 { //如果最新一季已经有剧集信息,则以最新一季为准
|
||||
lastSeason = season.SeasonNumber
|
||||
@@ -327,8 +328,8 @@ func (c *Client) checkMovieFolder(m *ent.Media) error {
|
||||
return err
|
||||
}
|
||||
|
||||
for _,f := range files {
|
||||
if f.IsDir() || f.Size() < 100 * 1000 * 1000 /* 100M */{ //忽略路径和小于100M的文件
|
||||
for _, f := range files {
|
||||
if f.IsDir() || f.Size() < 100*1000*1000 /* 100M */ { //忽略路径和小于100M的文件
|
||||
continue
|
||||
}
|
||||
meta := metadata.ParseMovie(f.Name())
|
||||
|
||||
@@ -68,7 +68,7 @@ func (c *Client) DownloadEpisodeTorrent(r1 torznab.Result, seriesId, seasonNum i
|
||||
SourceTitle: r1.Name,
|
||||
TargetDir: dir,
|
||||
Status: history.StatusRunning,
|
||||
Size: r1.Size,
|
||||
Size: int(r1.Size),
|
||||
//Saved: torrent.Save(),
|
||||
Link: magnet,
|
||||
DownloadClientID: dlc.ID,
|
||||
@@ -192,7 +192,7 @@ lo:
|
||||
return torrentNames, nil
|
||||
}
|
||||
|
||||
func (c *Client) DownloadMovie(m *ent.Media, link, name string, size int, indexerID int) (*string, error) {
|
||||
func (c *Client) DownloadMovie(m *ent.Media, link, name string, size int64, indexerID int) (*string, error) {
|
||||
trc, dlc, err := c.GetDownloadClient()
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "connect transmission")
|
||||
@@ -219,7 +219,7 @@ func (c *Client) DownloadMovie(m *ent.Media, link, name string, size int, indexe
|
||||
SourceTitle: name,
|
||||
TargetDir: m.TargetDir,
|
||||
Status: history.StatusRunning,
|
||||
Size: size,
|
||||
Size: int(size),
|
||||
//Saved: torrent.Save(),
|
||||
Link: magnet,
|
||||
DownloadClientID: dlc.ID,
|
||||
|
||||
@@ -434,7 +434,7 @@ func (c *Client) downloadMovieSingleEpisode(ep *ent.Episode, targetDir string) (
|
||||
SourceTitle: r1.Name,
|
||||
TargetDir: targetDir,
|
||||
Status: history.StatusRunning,
|
||||
Size: r1.Size,
|
||||
Size: int(r1.Size),
|
||||
//Saved: torrent.Save(),
|
||||
Link: magnet,
|
||||
DownloadClientID: dlc.ID,
|
||||
|
||||
@@ -114,8 +114,8 @@ func imdbIDMatchExact(id1, id2 string) bool {
|
||||
return id1 == id2
|
||||
}
|
||||
|
||||
func torrentSizeOk(detail *db.MediaDetails, torrentSize int, torrentEpisodeNum int, param *SearchParam) bool {
|
||||
defaultMinSize := 80 * 1000 * 1000 //tv, 80M min
|
||||
func torrentSizeOk(detail *db.MediaDetails, torrentSize int64, torrentEpisodeNum int, param *SearchParam) bool {
|
||||
defaultMinSize := int64(80 * 1000 * 1000) //tv, 80M min
|
||||
if detail.MediaType == media.MediaTypeMovie {
|
||||
defaultMinSize = 200 * 1000 * 1000 // movie, 200M min
|
||||
}
|
||||
@@ -134,20 +134,20 @@ func torrentSizeOk(detail *db.MediaDetails, torrentSize int, torrentEpisodeNum i
|
||||
|
||||
if param.CheckFileSize { //check file size when trigger automatic download
|
||||
if detail.Limiter.SizeMin > 0 { //min size
|
||||
sizeMin := detail.Limiter.SizeMin * multiplier
|
||||
sizeMin := detail.Limiter.SizeMin * int64(multiplier)
|
||||
if torrentSize < sizeMin { //比最小要求的大小还要小, min size not qualify
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
if detail.Limiter.SizeMax > 0 { //max size
|
||||
sizeMax := detail.Limiter.SizeMax * multiplier
|
||||
sizeMax := detail.Limiter.SizeMax * int64(multiplier)
|
||||
if torrentSize > sizeMax { //larger than max size wanted, max size not qualify
|
||||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
return torrentSize > defaultMinSize*multiplier
|
||||
return torrentSize > defaultMinSize*int64(multiplier)
|
||||
}
|
||||
|
||||
func seasonEpisodeCount(detail *db.MediaDetails, seasonNum int) int {
|
||||
|
||||
@@ -7,7 +7,6 @@ import (
|
||||
"polaris/db"
|
||||
"polaris/ent"
|
||||
"polaris/ent/downloadclients"
|
||||
"polaris/ent/media"
|
||||
"polaris/log"
|
||||
"polaris/pkg/prowlarr"
|
||||
"polaris/pkg/qbittorrent"
|
||||
@@ -331,29 +330,22 @@ func (s *Server) SaveProwlarrSetting(c *gin.Context) (interface{}, error) {
|
||||
}
|
||||
|
||||
type ResolutionSizeLimiter struct {
|
||||
P720 db.SizeLimiter `json:"720p"`
|
||||
P1080 db.SizeLimiter `json:"1080p"`
|
||||
P2160 db.SizeLimiter `json:"2160p"`
|
||||
TvLimiter *db.MediaSizeLimiter `json:"tv_limiter"`
|
||||
MovieLimiter *db.MediaSizeLimiter `json:"movie_limiter"`
|
||||
}
|
||||
|
||||
func (s *Server) GetSizeLimiter(c *gin.Context) (interface{}, error) {
|
||||
p720, err := s.db.GetSizeLimiter(media.Resolution720p)
|
||||
tv, err := s.db.GetSizeLimiter("tv")
|
||||
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)
|
||||
movie, err := s.db.GetSizeLimiter("movie")
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "db")
|
||||
}
|
||||
r := ResolutionSizeLimiter{
|
||||
P720: *p720,
|
||||
P1080: *p1080,
|
||||
P2160: *p2160,
|
||||
TvLimiter: tv,
|
||||
MovieLimiter: movie,
|
||||
}
|
||||
return r, nil
|
||||
}
|
||||
@@ -363,15 +355,11 @@ func (s *Server) SetSizeLimiter(c *gin.Context) (interface{}, error) {
|
||||
if err := c.ShouldBindJSON(&in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := s.db.SetSizeLimiter(media.Resolution720p, &in.P720); err != nil {
|
||||
if err := s.db.SetSizeLimiter("tv", in.TvLimiter); 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 {
|
||||
if err := s.db.SetSizeLimiter("movie", in.MovieLimiter); err != nil {
|
||||
return nil, errors.Wrap(err, "db")
|
||||
}
|
||||
return "success", nil
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user