package models import ( "github.com/jmoiron/sqlx" polochon "github.com/odwrtw/polochon/lib" "github.com/sirupsen/logrus" ) // TorrentVideo reprensents a torrent embeding the video inforamtions type TorrentVideo struct { *polochon.Torrent Thumb string `json:"thumb"` Fanart string `json:"fanart"` Video polochon.Video `json:"video,omitempty"` } // NewTorrentVideo returns a new TorrentVideo func NewTorrentVideo(t *polochon.Torrent) *TorrentVideo { torrent := &polochon.Torrent{ ImdbID: t.ImdbID, Type: t.Type, Quality: t.Quality, Season: t.Season, Episode: t.Episode, } return &TorrentVideo{ Torrent: t, Video: torrent.Video(), } } // Update updates the Torrent video with the database details func (t *TorrentVideo) Update(detailer polochon.Detailer, db *sqlx.DB, log *logrus.Entry) { if t.Video == nil { return } // TODO: refresh the video in db if not found err := detailer.GetDetails(t.Video, log) if err != nil { log.WithField("function", "TorrentVideo.Update").Errorf(err.Error()) } switch v := t.Video.(type) { case *polochon.ShowEpisode: if v.Show != nil { if err := GetShow(db, v.Show); err != nil { return } t.Fanart = v.Show.Fanart t.Thumb = v.Show.Poster v.Show = nil } case *polochon.Movie: t.Thumb = v.Thumb t.Fanart = v.Fanart } } // NewTorrentVideos returns a new slice of TorrentVideo from papi torrents func NewTorrentVideos(detailer polochon.Detailer, db *sqlx.DB, log *logrus.Entry, torrents []*polochon.Torrent) []*TorrentVideo { tv := make([]*TorrentVideo, len(torrents)) for i := range torrents { tv[i] = NewTorrentVideo(torrents[i]) tv[i].Update(detailer, db, log) } return tv }