feat: reduce time consuming

This commit is contained in:
Simon Ding
2024-10-10 10:29:47 +08:00
parent 1728690860
commit a22100b2fc
5 changed files with 56 additions and 21 deletions

View File

@@ -56,11 +56,16 @@ func (c *Client) GetAll() ([]pkg.Torrent, error) {
} }
func (c *Client) Download(link, dir string) (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 { if err != nil {
return nil, errors.Wrap(err, "get hash") 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 { if err != nil {
return nil, errors.Wrap(err, "qbt download") 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) c, err := NewClient(info.URL, info.User, info.Password)
if err != nil { if err != nil {
return nil, err 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) hash, err := utils.MagnetHash(magnet)
if err != nil { if err != nil {
return nil, err return nil, err

View File

@@ -9,7 +9,6 @@ import (
"net/url" "net/url"
"polaris/db" "polaris/db"
"polaris/log" "polaris/log"
"polaris/pkg/utils"
"slices" "slices"
"strconv" "strconv"
"time" "time"
@@ -81,14 +80,14 @@ func (r *Response) ToResults(indexer *db.TorznabInfo) []Result {
if slices.Contains(item.Category, "3000") { //exclude audio files if slices.Contains(item.Category, "3000") { //exclude audio files
continue continue
} }
link, err := utils.Link2Magnet(item.Link) //TODO time consuming operation // link, err := utils.Link2Magnet(item.Link) //TODO time consuming operation
if err != nil { // if err != nil {
log.Warnf("converting link to magnet error, error: %v, link: %v", err, item.Link) // log.Warnf("converting link to magnet error, error: %v, link: %v", err, item.Link)
continue // continue
} // }
r := Result{ r := Result{
Name: item.Title, Name: item.Title,
Link: link, Link: item.Link,
Size: mustAtoI(item.Size), Size: mustAtoI(item.Size),
Seeders: mustAtoI(item.GetAttr("seeders")), Seeders: mustAtoI(item.GetAttr("seeders")),
Peers: mustAtoI(item.GetAttr("peers")), Peers: mustAtoI(item.GetAttr("peers")),

View File

@@ -61,13 +61,18 @@ func (c *Client) GetAll() ([]pkg.Torrent, error) {
} }
func (c *Client) Download(link, dir string) (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 { if err != nil {
return nil, errors.Wrap(err, "get hash") return nil, errors.Wrap(err, "get hash")
} }
t, err := c.c.TorrentAdd(context.TODO(), transmissionrpc.TorrentAddPayload{ t, err := c.c.TorrentAdd(context.TODO(), transmissionrpc.TorrentAddPayload{
Filename: &link, Filename: &magnet,
DownloadDir: &dir, DownloadDir: &dir,
}) })
log.Debugf("get torrent info: %+v", t) log.Debugf("get torrent info: %+v", t)
@@ -79,17 +84,23 @@ func (c *Client) Download(link, dir string) (pkg.Torrent, error) {
}, err }, err
} }
func NewTorrent(cfg Config, magnet string) (*Torrent, error) { func NewTorrent(cfg Config, link string) (*Torrent, error) {
c, err := NewClient(cfg) c, err := NewClient(cfg)
if err != nil { if err != nil {
return nil, err 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) hash, err := utils.MagnetHash(magnet)
if err != nil { if err != nil {
return nil, err return nil, err
} }
t := &Torrent{ t := &Torrent{
c: c.c, c: c.c,
hash: hash, hash: hash,
//cfg: cfg, //cfg: cfg,
@@ -103,7 +114,7 @@ func NewTorrent(cfg Config, magnet string) (*Torrent, error) {
type Torrent struct { type Torrent struct {
//t *transmissionrpc.Torrent //t *transmissionrpc.Torrent
c *transmissionrpc.Client c *transmissionrpc.Client
hash string `json:"hash"` hash string
//cfg Config //cfg Config
} }

View File

@@ -44,7 +44,12 @@ func (c *Client) DownloadEpisodeTorrent(r1 torznab.Result, seriesId, seasonNum,
} else { //season package download } else { //season package download
ep = &ent.Episode{} 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 { if err != nil {
return nil, errors.Wrap(err, "downloading") return nil, errors.Wrap(err, "downloading")
} }
@@ -60,7 +65,7 @@ func (c *Client) DownloadEpisodeTorrent(r1 torznab.Result, seriesId, seasonNum,
Status: history.StatusRunning, Status: history.StatusRunning,
Size: r1.Size, Size: r1.Size,
//Saved: torrent.Save(), //Saved: torrent.Save(),
Link: r1.Link, Link: magnet,
DownloadClientID: dlc.ID, DownloadClientID: dlc.ID,
IndexerID: r1.IndexerId, IndexerID: r1.IndexerId,
}) })
@@ -107,8 +112,12 @@ func (c *Client) DownloadMovie(m *ent.Media, link, name string, size int, indexe
if err != nil { if err != nil {
return nil, errors.Wrap(err, "connect transmission") 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 { if err != nil {
return nil, errors.Wrap(err, "downloading") 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, Status: history.StatusRunning,
Size: size, Size: size,
//Saved: torrent.Save(), //Saved: torrent.Save(),
Link: link, Link: magnet,
DownloadClientID: dlc.ID, DownloadClientID: dlc.ID,
IndexerID: indexerID, IndexerID: indexerID,
}) })

View File

@@ -363,7 +363,13 @@ func (c *Client) downloadMovieSingleEpisode(ep *ent.Episode, targetDir string) (
} }
r1 := res[0] r1 := res[0]
log.Infof("begin download torrent resource: %v", r1.Name) 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 { if err != nil {
return "", errors.Wrap(err, "downloading") return "", errors.Wrap(err, "downloading")
} }
@@ -377,7 +383,7 @@ func (c *Client) downloadMovieSingleEpisode(ep *ent.Episode, targetDir string) (
Status: history.StatusRunning, Status: history.StatusRunning,
Size: r1.Size, Size: r1.Size,
//Saved: torrent.Save(), //Saved: torrent.Save(),
Link: r1.Link, Link: magnet,
DownloadClientID: dlc.ID, DownloadClientID: dlc.ID,
IndexerID: r1.IndexerId, IndexerID: r1.IndexerId,
}) })