Service provides Jackett integration for Torznab searching
| 69 | |
| 70 | // Service provides Jackett integration for Torznab searching |
| 71 | type Service struct { |
| 72 | indexerStore IndexerStore |
| 73 | releaseParser *releases.Parser |
| 74 | rateLimiter *RateLimiter |
| 75 | searchScheduler *searchScheduler |
| 76 | rateLimiterRestoreOnce sync.Once |
| 77 | persistedCooldowns map[int]time.Time |
| 78 | persistedCooldownsMu sync.RWMutex |
| 79 | torrentCache *models.TorznabTorrentCacheStore |
| 80 | searchCache searchCacheStore |
| 81 | searchCacheTTL time.Duration |
| 82 | searchCacheEnabled bool |
| 83 | searchCacheConfigMu sync.RWMutex |
| 84 | searchExecutor func(context.Context, []*models.TorznabIndexer, url.Values, *searchContext) ([]Result, []int, error) |
| 85 | |
| 86 | searchCacheCleanupMu sync.Mutex |
| 87 | nextSearchCacheCleanup time.Time |
| 88 | torrentCacheCleanupMu sync.Mutex |
| 89 | nextTorrentCacheCleanup time.Time |
| 90 | |
| 91 | // searchHistory provides in-memory search history tracking |
| 92 | searchHistory *SearchHistoryBuffer |
| 93 | |
| 94 | // indexerOutcomes tracks cross-seed outcomes per (jobID, indexerID) |
| 95 | indexerOutcomes *IndexerOutcomeStore |
| 96 | |
| 97 | activityPublisher activity.Publisher |
| 98 | } |
| 99 | |
| 100 | // ErrMissingIndexerIdentifier signals that the Torznab backend requires an indexer ID to fetch caps. |
| 101 | var ErrMissingIndexerIdentifier = errors.New("torznab indexer identifier is required for caps sync") |
nothing calls this directly
no outgoing calls
no test coverage detected