diff --git a/db/db.go b/db/db.go index b120fb2..0bbd06f 100644 --- a/db/db.go +++ b/db/db.go @@ -196,11 +196,10 @@ type MediaDetails struct { Episodes []*ent.Episode `json:"episodes"` } -func (c *Client) GetMediaDetails(id int) *MediaDetails { +func (c *Client) GetMediaDetails(id int) (*MediaDetails, error) { se, err := c.ent.Media.Query().Where(media.ID(id)).First(context.TODO()) if err != nil { - log.Errorf("get series %d: %v", id, err) - return nil + return nil, errors.Errorf("get series %d: %v", id, err) } var md = &MediaDetails{ Media: se, @@ -208,12 +207,11 @@ func (c *Client) GetMediaDetails(id int) *MediaDetails { ep, err := se.QueryEpisodes().All(context.Background()) if err != nil { - log.Errorf("get episodes %d: %v", id, err) - return nil + return nil, errors.Errorf("get episodes %d: %v", id, err) } md.Episodes = ep - return md + return md, nil } func (c *Client) GetMedia(id int) (*ent.Media, error) { diff --git a/server/core/resources.go b/server/core/resources.go index 795f892..7697073 100644 --- a/server/core/resources.go +++ b/server/core/resources.go @@ -41,7 +41,11 @@ func (c *Client) checkBtReourceWithTmdb(r *torznab.Result, seriesId int) bool { log.Debugf("tmdb search no result, consider this torrent ok: %s", r.Name) //because tv name parse is not accurate return true } - series := c.db.GetMediaDetails(seriesId) + series, err := c.db.GetMediaDetails(seriesId) + if err != nil { + log.Warnf("get media details error: %v", err) + return false + } se0 := se.Results[0] if se0.ID != int64(series.TmdbID) { diff --git a/server/core/scheduler.go b/server/core/scheduler.go index 054dc83..4d4f201 100644 --- a/server/core/scheduler.go +++ b/server/core/scheduler.go @@ -206,7 +206,11 @@ func (c *Client) GetEpisodeIds(r *ent.History) []int { // if r.EpisodeID > 0 { // episodeIds = append(episodeIds, r.EpisodeID) // } - series := c.db.GetMediaDetails(r.MediaID) + series, err := c.db.GetMediaDetails(r.MediaID) + if err != nil { + log.Errorf("get media details error: %v", err) + return []int{} + } if len(r.EpisodeNums) > 0 { for _, epNum := range r.EpisodeNums { @@ -260,9 +264,9 @@ func (c *Client) moveCompletedTask(id int) (err1 error) { } }() - series := c.db.GetMediaDetails(r.MediaID) - if series == nil { - return nil + series, err := c.db.GetMediaDetails(r.MediaID) + if err != nil { + return err } st := c.db.GetStorage(series.StorageID) @@ -354,7 +358,11 @@ type Task struct { } func (c *Client) DownloadSeriesAllEpisodes(id int) []string { - tvDetail := c.db.GetMediaDetails(id) + tvDetail, err := c.db.GetMediaDetails(id) + if err != nil { + log.Errorf("get media details error: %v", err) + return nil + } m := make(map[int][]*ent.Episode) for _, ep := range tvDetail.Episodes { m[ep.SeasonNumber] = append(m[ep.SeasonNumber], ep) @@ -441,7 +449,10 @@ func (c *Client) downloadAllMovies() { } func (c *Client) DownloadMovieByID(id int) (string, error) { - detail := c.db.GetMediaDetails(id) + detail, err := c.db.GetMediaDetails(id) + if err != nil { + return "", errors.Wrap(err, "get media details") + } if len(detail.Episodes) == 0 { return "", fmt.Errorf("no related dummy episode: %v", detail.NameEn) } diff --git a/server/core/torrent.go b/server/core/torrent.go index a5b0c98..5db567f 100644 --- a/server/core/torrent.go +++ b/server/core/torrent.go @@ -72,9 +72,9 @@ func names2Query(media *ent.Media) []string { } func SearchTvSeries(db1 *db.Client, param *SearchParam) ([]torznab.Result, error) { - series := db1.GetMediaDetails(param.MediaId) - if series == nil { - return nil, fmt.Errorf("no tv series of id %v", param.MediaId) + series, err := db1.GetMediaDetails(param.MediaId) + if err != nil { + return nil, fmt.Errorf("no tv series of id %v: %v", param.MediaId, err) } limiter, err := db1.GetSizeLimiter("tv") if err != nil { @@ -235,9 +235,9 @@ func isNoSeasonSeries(detail *db.MediaDetails) bool { } func SearchMovie(db1 *db.Client, param *SearchParam) ([]torznab.Result, error) { - movieDetail := db1.GetMediaDetails(param.MediaId) - if movieDetail == nil { - return nil, errors.New("no media found of id") + movieDetail, err := db1.GetMediaDetails(param.MediaId) + if err != nil { + return nil, err } limiter, err := db1.GetSizeLimiter("movie") diff --git a/server/watchlist.go b/server/watchlist.go index cdb8fb0..58c4fdd 100644 --- a/server/watchlist.go +++ b/server/watchlist.go @@ -109,7 +109,10 @@ func (s *Server) GetTvWatchlist(c *gin.Context) (interface{}, error) { ms.MonitoredNum = mon ms.DownloadedNum = dow } else { - details := s.db.GetMediaDetails(item.ID) + details, err := s.db.GetMediaDetails(item.ID) + if err != nil { + return nil, errors.Wrap(err, "get details") + } for _, ep := range details.Episodes { if ep.Monitored { ms.MonitoredNum++ @@ -160,7 +163,10 @@ func (s *Server) GetMediaDetails(c *gin.Context) (interface{}, error) { if err != nil { return nil, errors.Wrap(err, "convert") } - detail := s.db.GetMediaDetails(id) + detail, err := s.db.GetMediaDetails(id) + if err != nil { + return nil, errors.Wrap(err, "get details") + } st := s.db.GetStorage(detail.StorageID) return MediaDetails{MediaDetails: detail, Storage: &st.Storage}, nil }