diff --git a/pkg/qbittorrent/qbittorrent.go b/pkg/qbittorrent/qbittorrent.go index 5bc9e71..8bc578e 100644 --- a/pkg/qbittorrent/qbittorrent.go +++ b/pkg/qbittorrent/qbittorrent.go @@ -56,11 +56,16 @@ func (c *Client) GetAll() ([]pkg.Torrent, error) { } func (c *Client) Download(link, dir string) (pkg.Torrent, error) { - hash, err := utils.MagnetHash(link) + magnet, err := utils.Link2Magnet(link) + if err != nil { + return nil, errors.Errorf("converting link to magnet error, link: %v, error: %v", link, err) + } + + hash, err := utils.MagnetHash(magnet) if err != nil { return nil, errors.Wrap(err, "get hash") } - err = c.c.DownloadLinks([]string{link}, qbt.DownloadOptions{Savepath: &dir}) + err = c.c.DownloadLinks([]string{magnet}, qbt.DownloadOptions{Savepath: &dir}) if err != nil { return nil, errors.Wrap(err, "qbt download") } @@ -69,11 +74,16 @@ func (c *Client) Download(link, dir string) (pkg.Torrent, error) { } -func NewTorrent(info Info, magnet string) (*Torrent, error) { +func NewTorrent(info Info, link string) (*Torrent, error) { c, err := NewClient(info.URL, info.User, info.Password) if err != nil { return nil, err } + magnet, err := utils.Link2Magnet(link) + if err != nil { + return nil, errors.Errorf("converting link to magnet error, link: %v, error: %v", link, err) + } + hash, err := utils.MagnetHash(magnet) if err != nil { return nil, err diff --git a/pkg/torznab/torznab.go b/pkg/torznab/torznab.go index 9164bf7..3135392 100644 --- a/pkg/torznab/torznab.go +++ b/pkg/torznab/torznab.go @@ -9,7 +9,6 @@ import ( "net/url" "polaris/db" "polaris/log" - "polaris/pkg/utils" "slices" "strconv" "time" @@ -81,14 +80,14 @@ func (r *Response) ToResults(indexer *db.TorznabInfo) []Result { if slices.Contains(item.Category, "3000") { //exclude audio files continue } - link, err := utils.Link2Magnet(item.Link) //TODO time consuming operation - if err != nil { - log.Warnf("converting link to magnet error, error: %v, link: %v", err, item.Link) - continue - } + // link, err := utils.Link2Magnet(item.Link) //TODO time consuming operation + // if err != nil { + // log.Warnf("converting link to magnet error, error: %v, link: %v", err, item.Link) + // continue + // } r := Result{ Name: item.Title, - Link: link, + Link: item.Link, Size: mustAtoI(item.Size), Seeders: mustAtoI(item.GetAttr("seeders")), Peers: mustAtoI(item.GetAttr("peers")), diff --git a/pkg/transmission/transmission.go b/pkg/transmission/transmission.go index 82942aa..e7a3464 100644 --- a/pkg/transmission/transmission.go +++ b/pkg/transmission/transmission.go @@ -61,13 +61,18 @@ func (c *Client) GetAll() ([]pkg.Torrent, error) { } func (c *Client) Download(link, dir string) (pkg.Torrent, error) { - hash, err := utils.MagnetHash(link) + magnet, err := utils.Link2Magnet(link) + if err != nil { + return nil, errors.Errorf("converting link to magnet error, link: %v, error: %v", link, err) + } + + hash, err := utils.MagnetHash(magnet) if err != nil { return nil, errors.Wrap(err, "get hash") } t, err := c.c.TorrentAdd(context.TODO(), transmissionrpc.TorrentAddPayload{ - Filename: &link, + Filename: &magnet, DownloadDir: &dir, }) log.Debugf("get torrent info: %+v", t) @@ -79,17 +84,23 @@ func (c *Client) Download(link, dir string) (pkg.Torrent, error) { }, err } -func NewTorrent(cfg Config, magnet string) (*Torrent, error) { +func NewTorrent(cfg Config, link string) (*Torrent, error) { c, err := NewClient(cfg) if err != nil { return nil, err } + + magnet, err := utils.Link2Magnet(link) + if err != nil { + return nil, errors.Errorf("converting link to magnet error, link: %v, error: %v", link, err) + } + hash, err := utils.MagnetHash(magnet) if err != nil { return nil, err } - t := &Torrent{ + t := &Torrent{ c: c.c, hash: hash, //cfg: cfg, @@ -103,7 +114,7 @@ func NewTorrent(cfg Config, magnet string) (*Torrent, error) { type Torrent struct { //t *transmissionrpc.Torrent c *transmissionrpc.Client - hash string `json:"hash"` + hash string //cfg Config } diff --git a/server/core/resources.go b/server/core/resources.go index 3b81e4f..249f628 100644 --- a/server/core/resources.go +++ b/server/core/resources.go @@ -44,7 +44,12 @@ func (c *Client) DownloadEpisodeTorrent(r1 torznab.Result, seriesId, seasonNum, } else { //season package download ep = &ent.Episode{} } - torrent, err := trc.Download(r1.Link, downloadDir) + magnet, err := utils.Link2Magnet(r1.Link) + if err != nil { + return nil, errors.Errorf("converting link to magnet error, link: %v, error: %v", r1.Link, err) + } + + torrent, err := trc.Download(magnet, downloadDir) if err != nil { return nil, errors.Wrap(err, "downloading") } @@ -60,7 +65,7 @@ func (c *Client) DownloadEpisodeTorrent(r1 torznab.Result, seriesId, seasonNum, Status: history.StatusRunning, Size: r1.Size, //Saved: torrent.Save(), - Link: r1.Link, + Link: magnet, DownloadClientID: dlc.ID, IndexerID: r1.IndexerId, }) @@ -107,8 +112,12 @@ func (c *Client) DownloadMovie(m *ent.Media, link, name string, size int, indexe if err != nil { return nil, errors.Wrap(err, "connect transmission") } + magnet, err := utils.Link2Magnet(link) + if err != nil { + return nil, errors.Errorf("converting link to magnet error, link: %v, error: %v", link, err) + } - torrent, err := trc.Download(link, c.db.GetDownloadDir()) + torrent, err := trc.Download(magnet, c.db.GetDownloadDir()) if err != nil { return nil, errors.Wrap(err, "downloading") } @@ -127,7 +136,7 @@ func (c *Client) DownloadMovie(m *ent.Media, link, name string, size int, indexe Status: history.StatusRunning, Size: size, //Saved: torrent.Save(), - Link: link, + Link: magnet, DownloadClientID: dlc.ID, IndexerID: indexerID, }) diff --git a/server/core/scheduler.go b/server/core/scheduler.go index 1526632..b14e59c 100644 --- a/server/core/scheduler.go +++ b/server/core/scheduler.go @@ -363,7 +363,13 @@ func (c *Client) downloadMovieSingleEpisode(ep *ent.Episode, targetDir string) ( } r1 := res[0] log.Infof("begin download torrent resource: %v", r1.Name) - torrent, err := trc.Download(r1.Link, c.db.GetDownloadDir()) + + magnet, err := utils.Link2Magnet(r1.Link) + if err != nil { + return "", errors.Errorf("converting link to magnet error, link: %v, error: %v", r1.Link, err) + } + + torrent, err := trc.Download(magnet, c.db.GetDownloadDir()) if err != nil { return "", errors.Wrap(err, "downloading") } @@ -377,7 +383,7 @@ func (c *Client) downloadMovieSingleEpisode(ep *ent.Episode, targetDir string) ( Status: history.StatusRunning, Size: r1.Size, //Saved: torrent.Save(), - Link: r1.Link, + Link: magnet, DownloadClientID: dlc.ID, IndexerID: r1.IndexerId, })