예제 #1
0
        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);
            }
        }
예제 #2
0
        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;
        }