public void AddDownload(NzbDownload download, string downloadDirectory, string temporaryDirectory)
        {
            ArgumentChecker.ThrowIfNull("download", download);
            ArgumentChecker.ThrowIfNullOrWhitespace("downloadDirectory", downloadDirectory);
            ArgumentChecker.ThrowIfNullOrWhitespace("temporaryDirectory", temporaryDirectory);

            lock (download)
            {
                string downloadFullpath = Path.Combine(downloadDirectory, download.DownloadDirectory);

                foreach (var currentPart in download.Parts)
                {
                    foreach (var currentSegment in currentPart.Segments)
                    {
                        var job = new NzbDownloadJob(downloadFullpath, temporaryDirectory, currentSegment, SegmentDownloadedCheckpoint);

                        _downloadQueue.EnqueueJob(job);
                    }
                }
            }

            lock (_downloads)
            {
                _downloads.Add(download);
            }
        }
        public NzbDownload Parse()
        {
            var newDownload = new NzbDownload(_nzbFilename);

            var nzbFileXmlNodes = this.GetXmlNodesFromNzbFile(_nzbFilename);

            foreach (XmlNode currentNzbFileXmlNode in nzbFileXmlNodes.Where(node => node.Name.Equals("file", StringComparison.OrdinalIgnoreCase)))
            {
                NzbPart newPart = ParsePart(currentNzbFileXmlNode);

                newPart.Parent = newDownload;

                newDownload.Add(newPart);
            }

            return newDownload;
        }
 public void RemoveDownload(NzbDownload download)
 {
     lock (download)
     {
         foreach (var currentPart in download.Parts)
         {
             lock (currentPart)
             {
                 foreach (var currentSegment in currentPart.Segments)
                 {
                     lock (currentSegment)
                     {
                         currentSegment.Status = NzbSegmentStatus.Discarded;
                     }
                 }
             }
         }
     }
 }