Torrent Queuing for Botched torrent (#83)

* Implement a queue for handling failed torrent

* Add checks for getting slots

* Few other cleanups, change some function names
This commit is contained in:
Mukhtar Akere
2025-06-07 17:23:41 +01:00
committed by GitHub
parent 84603b084b
commit 5bf1dab5e6
30 changed files with 556 additions and 239 deletions

View File

@@ -2,6 +2,7 @@ package store
import (
"cmp"
"context"
"github.com/rs/zerolog"
"github.com/sirrobot01/decypharr/internal/config"
"github.com/sirrobot01/decypharr/internal/logger"
@@ -16,6 +17,7 @@ type Store struct {
repair *repair.Repair
arr *arr.Storage
debrid *debrid.Storage
importsQueue *ImportQueue // Queued import requests(probably from too_many_active_downloads)
torrents *TorrentStorage
logger zerolog.Logger
refreshInterval time.Duration
@@ -28,8 +30,8 @@ var (
once sync.Once
)
// GetStore returns the singleton instance
func GetStore() *Store {
// Get returns the singleton instance
func Get() *Store {
once.Do(func() {
arrs := arr.NewStorage()
deb := debrid.NewStorage()
@@ -45,6 +47,7 @@ func GetStore() *Store {
refreshInterval: time.Duration(cmp.Or(qbitCfg.RefreshInterval, 10)) * time.Minute,
skipPreCache: qbitCfg.SkipPreCache,
downloadSemaphore: make(chan struct{}, cmp.Or(qbitCfg.MaxDownloads, 5)),
importsQueue: NewImportQueue(context.Background(), 1000),
}
})
return instance
@@ -55,21 +58,26 @@ func Reset() {
if instance.debrid != nil {
instance.debrid.Reset()
}
if instance.importsQueue != nil {
instance.importsQueue.Close()
}
close(instance.downloadSemaphore)
}
once = sync.Once{}
instance = nil
}
func (s *Store) GetArr() *arr.Storage {
func (s *Store) Arr() *arr.Storage {
return s.arr
}
func (s *Store) GetDebrid() *debrid.Storage {
func (s *Store) Debrid() *debrid.Storage {
return s.debrid
}
func (s *Store) GetRepair() *repair.Repair {
func (s *Store) Repair() *repair.Repair {
return s.repair
}
func (s *Store) GetTorrentStorage() *TorrentStorage {
func (s *Store) Torrents() *TorrentStorage {
return s.torrents
}