79 lines
2.3 KiB
Go
79 lines
2.3 KiB
Go
package debrid
|
|
|
|
import (
|
|
"context"
|
|
"github.com/sirrobot01/decypharr/internal/utils"
|
|
"time"
|
|
)
|
|
|
|
func (c *Cache) StartSchedule() error {
|
|
// For now, we just want to refresh the listing and download links
|
|
ctx := context.Background()
|
|
downloadLinkJob, err := utils.ScheduleJob(ctx, c.downloadLinksRefreshInterval, nil, c.refreshDownloadLinks)
|
|
if err != nil {
|
|
c.logger.Error().Err(err).Msg("Failed to add download link refresh job")
|
|
}
|
|
if t, err := downloadLinkJob.NextRun(); err == nil {
|
|
c.logger.Trace().Msgf("Next download link refresh job: %s", t.Format("2006-01-02 15:04:05"))
|
|
}
|
|
|
|
torrentJob, err := utils.ScheduleJob(ctx, c.torrentRefreshInterval, nil, c.refreshTorrents)
|
|
if err != nil {
|
|
c.logger.Error().Err(err).Msg("Failed to add torrent refresh job")
|
|
}
|
|
if t, err := torrentJob.NextRun(); err == nil {
|
|
c.logger.Trace().Msgf("Next torrent refresh job: %s", t.Format("2006-01-02 15:04:05"))
|
|
}
|
|
|
|
// Schedule the reset invalid links job
|
|
// This job will run every 24 hours
|
|
// and reset the invalid links in the cache
|
|
cet, _ := time.LoadLocation("CET")
|
|
resetLinksJob, err := utils.ScheduleJob(ctx, "00:00", cet, c.resetInvalidLinks)
|
|
if err != nil {
|
|
c.logger.Error().Err(err).Msg("Failed to add reset invalid links job")
|
|
}
|
|
if t, err := resetLinksJob.NextRun(); err == nil {
|
|
c.logger.Trace().Msgf("Next reset invalid download links job at: %s", t.Format("2006-01-02 15:04:05"))
|
|
}
|
|
|
|
// Schedule the cleanup job
|
|
|
|
cleanupJob, err := utils.ScheduleJob(ctx, "1h", nil, c.cleanupWorker)
|
|
if err != nil {
|
|
c.logger.Error().Err(err).Msg("Failed to add cleanup job")
|
|
}
|
|
if t, err := cleanupJob.NextRun(); err == nil {
|
|
c.logger.Trace().Msgf("Next cleanup job at: %s", t.Format("2006-01-02 15:04:05"))
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (c *Cache) cleanupWorker() {
|
|
// Cleanup every hour
|
|
torrents, err := c.client.GetTorrents()
|
|
if err != nil {
|
|
c.logger.Error().Err(err).Msg("Failed to get torrents")
|
|
return
|
|
}
|
|
|
|
idStore := make(map[string]struct{})
|
|
for _, t := range torrents {
|
|
idStore[t.Id] = struct{}{}
|
|
}
|
|
|
|
deletedTorrents := make([]string, 0)
|
|
c.torrents.Range(func(key string, _ *CachedTorrent) bool {
|
|
if _, exists := idStore[key]; !exists {
|
|
deletedTorrents = append(deletedTorrents, key)
|
|
}
|
|
return true
|
|
})
|
|
|
|
if len(deletedTorrents) > 0 {
|
|
c.DeleteTorrents(deletedTorrents)
|
|
c.logger.Info().Msgf("Deleted %d torrents", len(deletedTorrents))
|
|
}
|
|
}
|