protected bool HasReachedSeedLimit(QBittorrentTorrent torrent, QBittorrentPreferences config) { if (torrent.RatioLimit >= 0) { if (torrent.Ratio >= torrent.RatioLimit) { return(true); } } else if (torrent.RatioLimit == -2 && config.MaxRatioEnabled) { if (torrent.Ratio >= config.MaxRatio) { return(true); } } if (HasReachedSeedingTimeLimit(torrent, config)) { return(true); } return(false); }
protected bool HasReachedSeedLimit(QBittorrentTorrent torrent, QBittorrentPreferences config) { if (torrent.RatioLimit >= 0) { if (torrent.Ratio >= torrent.RatioLimit) { return(true); } } else if (torrent.RatioLimit == -2 && config.MaxRatioEnabled) { if (torrent.Ratio >= config.MaxRatio) { return(true); } } if (torrent.SeedingTimeLimit >= 0) { if (!torrent.SeedingTime.HasValue) { FetchTorrentDetails(torrent); } if (torrent.SeedingTime >= torrent.SeedingTimeLimit) { return(true); } } else if (torrent.SeedingTimeLimit == -2 && config.MaxSeedingTimeEnabled) { if (!torrent.SeedingTime.HasValue) { FetchTorrentDetails(torrent); } if (torrent.SeedingTime >= config.MaxSeedingTime) { return(true); } } return(false); }
protected bool HasReachedSeedingTimeLimit(QBittorrentTorrent torrent, QBittorrentPreferences config) { long seedingTimeLimit; if (torrent.SeedingTimeLimit >= 0) { seedingTimeLimit = torrent.SeedingTimeLimit; } else if (torrent.SeedingTimeLimit == -2 && config.MaxSeedingTimeEnabled) { seedingTimeLimit = config.MaxSeedingTime; } else { return(false); } if (torrent.SeedingTime.HasValue) { // SeedingTime can't be available here, but use it if the api starts to provide it. return(torrent.SeedingTime.Value >= seedingTimeLimit); } var cacheKey = Settings.Host + Settings.Port + torrent.Hash; var cacheSeedingTime = _seedingTimeCache.Find(cacheKey); if (cacheSeedingTime != null) { var togo = seedingTimeLimit - cacheSeedingTime.SeedingTime; var elapsed = (DateTime.UtcNow - cacheSeedingTime.LastFetched).TotalSeconds; if (togo <= 0) { // Already reached the limit, keep the cache alive _seedingTimeCache.Set(cacheKey, cacheSeedingTime, TimeSpan.FromMinutes(5)); return(true); } else if (togo > elapsed) { // SeedingTime cannot have reached the required value since the last check, preserve the cache _seedingTimeCache.Set(cacheKey, cacheSeedingTime, TimeSpan.FromMinutes(5)); return(false); } } FetchTorrentDetails(torrent); cacheSeedingTime = new SeedingTimeCacheEntry { LastFetched = DateTime.UtcNow, SeedingTime = torrent.SeedingTime.Value }; _seedingTimeCache.Set(cacheKey, cacheSeedingTime, TimeSpan.FromMinutes(5)); if (cacheSeedingTime.SeedingTime >= seedingTimeLimit) { // Reached the limit, keep the cache alive return(true); } return(false); }