diff --git a/server/core/resources.go b/server/core/resources.go index e247b57..668a06c 100644 --- a/server/core/resources.go +++ b/server/core/resources.go @@ -80,11 +80,14 @@ func (c *Client) DownloadEpisodeTorrent(r1 torznab.Result, seriesId, seasonNum, } func (c *Client) SearchAndDownload(seriesId, seasonNum, episodeNum int) (*string, error) { - + var episodes []int + if episodeNum > 0 { + episodes = append(episodes, episodeNum) + } res, err := SearchTvSeries(c.db, &SearchParam{ MediaId: seriesId, SeasonNum: seasonNum, - Episodes: []int{episodeNum}, + Episodes: episodes, CheckFileSize: true, CheckResolution: true, }) diff --git a/server/core/scheduler.go b/server/core/scheduler.go index 1d88093..01fd633 100644 --- a/server/core/scheduler.go +++ b/server/core/scheduler.go @@ -207,23 +207,46 @@ func (c *Client) downloadTvSeries() { allSeries := c.db.GetMediaWatchlist(media.MediaTypeTv) for _, series := range allSeries { tvDetail := c.db.GetMediaDetails(series.ID) + m := make(map[int][]*ent.Episode) for _, ep := range tvDetail.Episodes { - if !ep.Monitored { //未监控的剧集不去下载 - continue - } - - if ep.Status != episode.StatusMissing { //已经下载的不去下载 - continue - } - name, err := c.SearchAndDownload(series.ID, ep.SeasonNumber, ep.EpisodeNumber) - if err != nil { - log.Infof("cannot find resource to download for %s: %v", ep.Title, err) - } else { - log.Infof("begin download torrent resource: %v", name) - } - + m[ep.SeasonNumber] = append(m[ep.SeasonNumber], ep) } + for seasonNum, epsides := range m { + wantedSeasonPack := true + for _, ep := range epsides { + if !ep.Monitored { + wantedSeasonPack = false + } + if ep.Status != episode.StatusMissing { + wantedSeasonPack = false + } + } + if wantedSeasonPack { + name, err := c.SearchAndDownload(series.ID, seasonNum, -1) + if err != nil { + log.Infof("cannot find resource to download : %v", err) + } else { + log.Infof("begin download torrent resource: %v", name) + } + } else { + for _, ep := range epsides { + if !ep.Monitored { + continue + } + if ep.Status != episode.StatusMissing { + continue + } + name, err := c.SearchAndDownload(series.ID, ep.SeasonNumber, ep.EpisodeNumber) + if err != nil { + log.Infof("cannot find resource to download for %s: %v", ep.Title, err) + } else { + log.Infof("begin download torrent resource: %v", name) + } + } + + } + } } }