예제 #1
0
        public async ReusableTask <bool> RemoveTrackerAsync(ITracker tracker)
        {
            if (tracker == null)
            {
                throw new ArgumentNullException(nameof(tracker));
            }
            if (Private)
            {
                throw new InvalidOperationException("Cannot remove trackers from a private torrent.");
            }

            await ClientEngine.MainLoop;

            var clone = new List <TrackerTier> (Tiers);
            var tier  = Tiers.FirstOrDefault(t => t.Trackers.Contains(tracker));

            if (tier == null)
            {
                return(false);
            }

            tier.AnnounceComplete -= AnnounceComplete;
            tier.ScrapeComplete   -= ScrapeComplete;
            var index = clone.IndexOf(tier);

            if (tier.Trackers.Count == 1)
            {
                clone.RemoveAt(index);
            }
            else
            {
                clone[index] = tier.Without(tracker);
            }
            Tiers = clone.AsReadOnly();
            return(true);
        }