53 lines
1.3 KiB
Go
53 lines
1.3 KiB
Go
package qbit
|
|
|
|
import (
|
|
"cmp"
|
|
"github.com/rs/zerolog"
|
|
"github.com/sirrobot01/decypharr/internal/config"
|
|
"github.com/sirrobot01/decypharr/internal/logger"
|
|
"os"
|
|
"path/filepath"
|
|
)
|
|
|
|
type QBit struct {
|
|
Username string `json:"username"`
|
|
Password string `json:"password"`
|
|
Port string `json:"port"`
|
|
DownloadFolder string `json:"download_folder"`
|
|
Categories []string `json:"categories"`
|
|
Storage *TorrentStorage
|
|
logger zerolog.Logger
|
|
Tags []string
|
|
RefreshInterval int
|
|
SkipPreCache bool
|
|
|
|
downloadSemaphore chan struct{}
|
|
}
|
|
|
|
func New() *QBit {
|
|
_cfg := config.Get()
|
|
cfg := _cfg.QBitTorrent
|
|
port := cmp.Or(_cfg.Port, os.Getenv("QBIT_PORT"), "8282")
|
|
refreshInterval := cmp.Or(cfg.RefreshInterval, 10)
|
|
return &QBit{
|
|
Username: cfg.Username,
|
|
Password: cfg.Password,
|
|
Port: port,
|
|
DownloadFolder: cfg.DownloadFolder,
|
|
Categories: cfg.Categories,
|
|
Storage: NewTorrentStorage(filepath.Join(_cfg.Path, "torrents.json")),
|
|
logger: logger.New("qbit"),
|
|
RefreshInterval: refreshInterval,
|
|
SkipPreCache: cfg.SkipPreCache,
|
|
downloadSemaphore: make(chan struct{}, cmp.Or(cfg.MaxDownloads, 5)),
|
|
}
|
|
}
|
|
|
|
func (q *QBit) Reset() {
|
|
if q.Storage != nil {
|
|
q.Storage.Reset()
|
|
}
|
|
q.Tags = nil
|
|
close(q.downloadSemaphore)
|
|
}
|