Fix duration bug in config

This commit is contained in:
Mukhtar Akere
2025-06-16 13:55:02 +01:00
parent 8d87c602b9
commit 605d5b81c2
4 changed files with 37 additions and 28 deletions

View File

@@ -75,7 +75,7 @@ func Start(ctx context.Context) error {
done := make(chan struct{}) done := make(chan struct{})
go func(ctx context.Context) { go func(ctx context.Context) {
if err := startServices(ctx, wd, srv); err != nil { if err := startServices(ctx, cancelSvc, wd, srv); err != nil {
_log.Error().Err(err).Msg("Error starting services") _log.Error().Err(err).Msg("Error starting services")
cancelSvc() cancelSvc()
} }
@@ -107,7 +107,7 @@ func Start(ctx context.Context) error {
} }
} }
func startServices(ctx context.Context, wd *webdav.WebDav, srv *server.Server) error { func startServices(ctx context.Context, cancelSvc context.CancelFunc, wd *webdav.WebDav, srv *server.Server) error {
var wg sync.WaitGroup var wg sync.WaitGroup
errChan := make(chan error) errChan := make(chan error)
@@ -177,7 +177,11 @@ func startServices(ctx context.Context, wd *webdav.WebDav, srv *server.Server) e
for err := range errChan { for err := range errChan {
if err != nil { if err != nil {
_log.Error().Err(err).Msg("Service error detected") _log.Error().Err(err).Msg("Service error detected")
// Don't shut down the whole app // If the error is critical, return it to stop the main loop
if ctx.Err() == nil {
_log.Error().Msg("Stopping services due to error")
cancelSvc() // Cancel the service context to stop all services
}
} }
} }
}() }()

View File

@@ -10,7 +10,6 @@ import (
"runtime" "runtime"
"strings" "strings"
"sync" "sync"
"time"
) )
var ( var (
@@ -78,20 +77,20 @@ type Config struct {
URLBase string `json:"url_base,omitempty"` URLBase string `json:"url_base,omitempty"`
Port string `json:"port,omitempty"` Port string `json:"port,omitempty"`
LogLevel string `json:"log_level,omitempty"` LogLevel string `json:"log_level,omitempty"`
Debrids []Debrid `json:"debrids,omitempty"` Debrids []Debrid `json:"debrids,omitempty"`
QBitTorrent QBitTorrent `json:"qbittorrent,omitempty"` QBitTorrent QBitTorrent `json:"qbittorrent,omitempty"`
Arrs []Arr `json:"arrs,omitempty"` Arrs []Arr `json:"arrs,omitempty"`
Repair Repair `json:"repair,omitempty"` Repair Repair `json:"repair,omitempty"`
WebDav WebDav `json:"webdav,omitempty"` WebDav WebDav `json:"webdav,omitempty"`
AllowedExt []string `json:"allowed_file_types,omitempty"` AllowedExt []string `json:"allowed_file_types,omitempty"`
MinFileSize string `json:"min_file_size,omitempty"` // Minimum file size to download, 10MB, 1GB, etc MinFileSize string `json:"min_file_size,omitempty"` // Minimum file size to download, 10MB, 1GB, etc
MaxFileSize string `json:"max_file_size,omitempty"` // Maximum file size to download (0 means no limit) MaxFileSize string `json:"max_file_size,omitempty"` // Maximum file size to download (0 means no limit)
Path string `json:"-"` // Path to save the config file Path string `json:"-"` // Path to save the config file
UseAuth bool `json:"use_auth,omitempty"` UseAuth bool `json:"use_auth,omitempty"`
Auth *Auth `json:"-"` Auth *Auth `json:"-"`
DiscordWebhook string `json:"discord_webhook_url,omitempty"` DiscordWebhook string `json:"discord_webhook_url,omitempty"`
RemoveStalledAfter time.Duration `json:"remove_stalled_after,omitempty"` RemoveStalledAfter string `json:"remove_stalled_after,omitzero"`
} }
func (c *Config) JsonFile() string { func (c *Config) JsonFile() string {

View File

@@ -258,6 +258,7 @@ func (c *Cache) reInsertTorrent(ct *CachedTorrent) (*CachedTorrent, error) {
} }
func (c *Cache) resetInvalidLinks() { func (c *Cache) resetInvalidLinks() {
c.logger.Debug().Msgf("Resetting accounts")
c.invalidDownloadLinks = sync.Map{} c.invalidDownloadLinks = sync.Map{}
c.client.Accounts().Reset() // Reset the active download keys c.client.Accounts().Reset() // Reset the active download keys
} }

View File

@@ -40,16 +40,21 @@ func Get() *Store {
qbitCfg := cfg.QBitTorrent qbitCfg := cfg.QBitTorrent
instance = &Store{ instance = &Store{
repair: repair.New(arrs, deb), repair: repair.New(arrs, deb),
arr: arrs, arr: arrs,
debrid: deb, debrid: deb,
torrents: newTorrentStorage(cfg.TorrentsFile()), torrents: newTorrentStorage(cfg.TorrentsFile()),
logger: logger.Default(), // Use default logger [decypharr] logger: logger.Default(), // Use default logger [decypharr]
refreshInterval: time.Duration(cmp.Or(qbitCfg.RefreshInterval, 10)) * time.Minute, refreshInterval: time.Duration(cmp.Or(qbitCfg.RefreshInterval, 10)) * time.Minute,
skipPreCache: qbitCfg.SkipPreCache, skipPreCache: qbitCfg.SkipPreCache,
downloadSemaphore: make(chan struct{}, cmp.Or(qbitCfg.MaxDownloads, 5)), downloadSemaphore: make(chan struct{}, cmp.Or(qbitCfg.MaxDownloads, 5)),
importsQueue: NewImportQueue(context.Background(), 1000), importsQueue: NewImportQueue(context.Background(), 1000),
removeStalledAfter: cfg.RemoveStalledAfter, }
if cfg.RemoveStalledAfter != "" {
removeStalledAfter, err := time.ParseDuration(cfg.RemoveStalledAfter)
if err == nil {
instance.removeStalledAfter = removeStalledAfter
}
} }
}) })
return instance return instance