public static void RestoreDownloadConnection(DownloadInfo info)
        {
            try
            {
                var file = $"{info.Folder}\\{info.Name}";
                if (!File.Exists(file))
                {
                    return;
                }
                using (var s = File.OpenWrite(file))
                {
                    if (s.Length != info.TotalLoad)
                    {
                        return;
                    }

                    info.LoadState = LoadState.Starting;

                    if (!info.IsVkd)
                    {
                        var executor = new DownloadExecutor();
                        executor.ProgressChanged += info.ProgressChangedHandler;
                        info.LoadStop            += () => { executor.Stop = true; };
                        info.LoadState            = LoadState.Loading;
                        executor.Download(s, info.Src, info.TotalLoad);
                        info.LoadState = LoadState.Finished;
                        return;
                    }

                    var links = new List <string>();
                    using (var ms = new MemoryStream())
                    {
                        new DownloadExecutor().Download(ms, info.Src);
                        using (var sr = new StreamReader(ms))
                            while (!sr.EndOfStream)
                            {
                                links.Add(sr.ReadLine());
                            }
                    }

                    var part = (int)(info.TotalLoad / PartSize);

                    var vkdEx = new DownloadExecutor();
                    vkdEx.ProgressChanged += info.ProgressChangedHandler;
                    info.LoadStop         += () => { vkdEx.Stop = true; };
                    info.LoadState         = LoadState.Loading;
                    vkdEx.Download(s, links[part], info.TotalLoad % PartSize);

                    for (var i = part + 1; i < links.Count; i++)
                    {
                        vkdEx = new DownloadExecutor();
                        vkdEx.ProgressChanged += info.ProgressChangedHandler;
                        info.LoadStop         += () => { vkdEx.Stop = true; };
                        vkdEx.Download(s, links[i]);
                    }

                    info.LoadState = LoadState.Finished;
                }
            }
            catch (Exception)
            {
                info.LoadState = LoadState.Error;
            }
        }
        public static void Download(string src, string folder)
        {
            // если идет загрузка этого файла - выходим.
            lock (DownloadLocker)
                if (Downloads.Any(o => o.Src == src && o.Folder == folder && o.LoadState < LoadState.Finished))
                {
                    return;
                }

            var download = new DownloadInfo(src, folder);

            AddToDownloads(download);

            download.Name = GetFileName(download);

            if (!download.IsVkd)
            {
                GetFileSize(download);

                try
                {
                    using (var s = File.Create(folder.FixFolder() + download.Name))
                    {
                        var executor = new DownloadExecutor();
                        executor.ProgressChanged += download.ProgressChangedHandler;
                        download.LoadState        = LoadState.Loading;
                        download.LoadStop        += () => { executor.Stop = true; };
                        executor.Download(s, download.Src);
                        download.LoadState = LoadState.Finished;
                    }
                }
                catch (Exception)
                {
                    download.LoadState = LoadState.Error;
                }
            }
            else
            {
                var links = GetFileContent(download.Src)
                            .Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries)
                            .ToList();

                download.TotalSize = GetFileSize(links);

                var loaded   = (long)0;
                var partFile = PreparePartFile(download.Name, download.Folder);

                download.LoadState = LoadState.Loading;

                try
                {
                    using (var stream = File.Create(partFile))
                    {
                        foreach (var link in links)
                        {
                            var executor = new DownloadExecutor();
                            var loaded1  = loaded;
                            executor.ProgressChanged += (bytes, time) => download.ProgressChangedHandler(loaded1 + bytes, time);
                            download.LoadStop        += () => { executor.Stop = true; };
                            loaded += executor.Download(stream, link);
                        }
                    }

                    File.Move(partFile, download.Folder.FixFolder() + GetFileName(download));
                    download.LoadState = LoadState.Finished;
                }
                catch (Exception)
                {
                    download.LoadState = LoadState.Error;
                }
            }
        }