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 TimeSpan?GetRemainingTime(QBittorrentTorrent torrent) { if (torrent.Eta < 0 || torrent.Eta > 365 * 24 * 3600) { return(null); } return(TimeSpan.FromSeconds((int)torrent.Eta)); }
protected TimeSpan?GetRemainingTime(QBittorrentTorrent torrent) { if (torrent.Eta < 0 || torrent.Eta > 365 * 24 * 3600) { return(null); } // qBittorrent sends eta=8640000 if unknown such as queued if (torrent.Eta == 8640000) { return(null); } return(TimeSpan.FromSeconds((int)torrent.Eta)); }
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 void FetchTorrentDetails(QBittorrentTorrent torrent) { var torrentProperties = Proxy.GetTorrentProperties(torrent.Hash, Settings); torrent.SeedingTime = torrentProperties.SeedingTime; }
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); }