84 lines
1.8 KiB
Go
84 lines
1.8 KiB
Go
package debrid
|
|
|
|
import (
|
|
"github.com/anacrolix/torrent/metainfo"
|
|
"goBlack/common"
|
|
"path/filepath"
|
|
)
|
|
|
|
type Service interface {
|
|
SubmitMagnet(torrent *Torrent) (*Torrent, error)
|
|
CheckStatus(torrent *Torrent) (*Torrent, error)
|
|
DownloadLink(torrent *Torrent) error
|
|
Process(arr *Arr, magnet string) (*Torrent, error)
|
|
IsAvailable(magnet *common.Magnet) bool
|
|
}
|
|
|
|
type Debrid struct {
|
|
Host string `json:"host"`
|
|
APIKey string
|
|
DownloadUncached bool
|
|
}
|
|
|
|
func NewDebrid(dc common.DebridConfig) Service {
|
|
switch dc.Name {
|
|
case "realdebrid":
|
|
return NewRealDebrid(dc)
|
|
default:
|
|
return NewRealDebrid(dc)
|
|
}
|
|
}
|
|
|
|
func GetTorrentInfo(filePath string) (*Torrent, error) {
|
|
// Open and read the .torrent file
|
|
if filepath.Ext(filePath) == ".torrent" {
|
|
return getTorrentInfo(filePath)
|
|
} else {
|
|
return torrentFromMagnetFile(filePath)
|
|
}
|
|
|
|
}
|
|
|
|
func torrentFromMagnetFile(filePath string) (*Torrent, error) {
|
|
magnetLink := common.OpenMagnetFile(filePath)
|
|
magnet, err := common.GetMagnetInfo(magnetLink)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
torrent := &Torrent{
|
|
InfoHash: magnet.InfoHash,
|
|
Name: magnet.Name,
|
|
Size: magnet.Size,
|
|
Magnet: magnet,
|
|
Filename: filePath,
|
|
}
|
|
return torrent, nil
|
|
}
|
|
|
|
func getTorrentInfo(filePath string) (*Torrent, error) {
|
|
mi, err := metainfo.LoadFromFile(filePath)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
hash := mi.HashInfoBytes()
|
|
infoHash := hash.HexString()
|
|
info, err := mi.UnmarshalInfo()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
magnet := &common.Magnet{
|
|
InfoHash: infoHash,
|
|
Name: info.Name,
|
|
Size: info.Length,
|
|
Link: mi.Magnet(&hash, &info).String(),
|
|
}
|
|
torrent := &Torrent{
|
|
InfoHash: infoHash,
|
|
Name: info.Name,
|
|
Size: info.Length,
|
|
Magnet: magnet,
|
|
Filename: filePath,
|
|
}
|
|
return torrent, nil
|
|
}
|