mirror of
https://github.com/simon-ding/polaris.git
synced 2026-04-21 11:17:30 +08:00
feat: support reload qbit tasks
This commit is contained in:
@@ -10,6 +10,7 @@ type Torrent interface {
|
|||||||
Exists() bool
|
Exists() bool
|
||||||
SeedRatio() (float64, error)
|
SeedRatio() (float64, error)
|
||||||
GetHash() string
|
GetHash() string
|
||||||
|
Reload() error
|
||||||
}
|
}
|
||||||
|
|
||||||
type Downloader interface {
|
type Downloader interface {
|
||||||
@@ -17,5 +18,3 @@ type Downloader interface {
|
|||||||
Download(link, dir string) (Torrent, error)
|
Download(link, dir string) (Torrent, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type Storage interface {
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -174,3 +174,15 @@ func (t *Torrent) SeedRatio() (float64, error) {
|
|||||||
}
|
}
|
||||||
return qb.Ratio, nil
|
return qb.Ratio, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (t *Torrent) Reload() error {
|
||||||
|
c, err := NewClient(t.URL, t.User, t.Password)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
t.c = c.c
|
||||||
|
if !t.Exists() {
|
||||||
|
return errors.Errorf("torrent not exists: %v", t.Hash)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|||||||
@@ -105,12 +105,15 @@ type Torrent struct {
|
|||||||
Config
|
Config
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Torrent) reloadClient() error {
|
func (t *Torrent) Reload() error {
|
||||||
c, err := NewClient(t.Config)
|
c, err := NewClient(t.Config)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
t.c = c.c
|
t.c = c.c
|
||||||
|
if !t.Exists() {
|
||||||
|
return errors.Errorf("torrent not exists: %v", t.Hash)
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -211,18 +214,3 @@ func (t *Torrent) Save() string {
|
|||||||
func (t *Torrent) GetHash() string {
|
func (t *Torrent) GetHash() string {
|
||||||
return t.Hash
|
return t.Hash
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
func ReloadTorrent(s string) (*Torrent, error) {
|
|
||||||
var torrent = Torrent{}
|
|
||||||
err := json.Unmarshal([]byte(s), &torrent)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
err = torrent.reloadClient()
|
|
||||||
if err != nil {
|
|
||||||
return nil, errors.Wrap(err, "reload client")
|
|
||||||
}
|
|
||||||
return &torrent, nil
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package core
|
package core
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"polaris/db"
|
"polaris/db"
|
||||||
"polaris/ent"
|
"polaris/ent"
|
||||||
"polaris/ent/downloadclients"
|
"polaris/ent/downloadclients"
|
||||||
@@ -51,19 +52,44 @@ func (c *Client) Init() {
|
|||||||
func (c *Client) reloadTasks() {
|
func (c *Client) reloadTasks() {
|
||||||
allTasks := c.db.GetRunningHistories()
|
allTasks := c.db.GetRunningHistories()
|
||||||
for _, t := range allTasks {
|
for _, t := range allTasks {
|
||||||
torrent, err := transmission.ReloadTorrent(t.Saved)
|
var torrent pkg.Torrent
|
||||||
if err != nil {
|
if tt, err := c.reloadTransmiision(t.Saved); err == nil {
|
||||||
log.Errorf("relaod task %s failed: %v", t.SourceTitle, err)
|
torrent = tt
|
||||||
|
log.Infof("load transmission task: %v", t.Saved)
|
||||||
|
} else if tt, err := c.reloadQbit(t.Saved); err == nil {
|
||||||
|
torrent = tt
|
||||||
|
log.Infof("load qbit task: %v", t.Saved)
|
||||||
|
} else {
|
||||||
|
log.Warnf("load task fail: %v", t.Saved)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if !torrent.Exists() { //只要种子还存在于客户端中,就重新加载,有可能是还在做种中
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
log.Infof("reloading task: %d %s", t.ID, t.SourceTitle)
|
|
||||||
c.tasks[t.ID] = &Task{Torrent: torrent}
|
c.tasks[t.ID] = &Task{Torrent: torrent}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Client) reloadTransmiision(s string) (pkg.Torrent, error) {
|
||||||
|
var t transmission.Torrent
|
||||||
|
if err := json.Unmarshal([]byte(s), &t); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if err := t.Reload(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &t, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Client) reloadQbit(s string) (pkg.Torrent, error) {
|
||||||
|
var t qbittorrent.Torrent
|
||||||
|
if err := json.Unmarshal([]byte(s), &t); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if err := t.Reload(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &t, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
func (c *Client) GetDownloadClient() (pkg.Downloader, *ent.DownloadClients, error) {
|
func (c *Client) GetDownloadClient() (pkg.Downloader, *ent.DownloadClients, error) {
|
||||||
downloaders := c.db.GetAllDonloadClients()
|
downloaders := c.db.GetAllDonloadClients()
|
||||||
for _, d := range downloaders {
|
for _, d := range downloaders {
|
||||||
|
|||||||
Reference in New Issue
Block a user