private void SaveState() { var infoList = _data.List<TorrentInfo>(); foreach (var m in _torrents.Values) { HdknTorrentManager manager = (HdknTorrentManager)m; TorrentInfo info = infoList.SingleOrDefault(i => i.InfoHash == manager.InfoHash); if (info == null) info = new TorrentInfo(); _logger.Debug("Saving state for torrent {0}", manager.Torrent.Name); CreateTorrentInfo(manager, info); _data.SaveOrUpdate(info); } }
private void CreateTorrentInfo(HdknTorrentManager manager, TorrentInfo info) { info.Data = manager.TorrentData; info.DownloadedBytes = manager.DownloadedBytes; if (manager.HashChecked) { info.FastResumeData = manager.SaveFastResume(); } else { info.FastResumeData = null; } info.InfoHash = manager.InfoHash; info.Label = manager.Label; info.SavePath = manager.SavePath; info.StartTime = manager.StartTime; info.CompletedTime = manager.CompletedTime; // to prevent nesting directories if (manager.Torrent.Files.Length > 1) info.SavePath = Directory.GetParent(manager.SavePath).FullName; info.State = manager.State; info.UploadedBytes = manager.UploadedBytes; // save torrent settings info.ConnectionRetentionFactor = manager.Settings.ConnectionRetentionFactor; info.EnablePeerExchange = manager.Settings.EnablePeerExchange; info.InitialSeedingEnabled = manager.Settings.InitialSeedingEnabled; info.MaxConnections = manager.Settings.MaxConnections; info.MaxDownloadSpeed = manager.Settings.MaxDownloadSpeed; info.MaxUploadSpeed = manager.Settings.MaxUploadSpeed; info.MinimumTimeBetweenReviews = manager.Settings.MinimumTimeBetweenReviews; info.PercentOfMaxRateToSkipReview = manager.Settings.PercentOfMaxRateToSkipReview; info.UploadSlots = manager.Settings.UploadSlots; info.UseDht = manager.Settings.UseDht; }