fix: remove torrent panics

This commit is contained in:
Simon Ding
2025-02-13 11:46:35 +08:00
parent 059c0ee994
commit 8a4566aee8
5 changed files with 40 additions and 21 deletions

View File

@@ -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) {

View File

@@ -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) {

View File

@@ -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)
}

View File

@@ -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")

View File

@@ -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
}