Exemple #1
0
        internal async Task DownloadFileAsync(DownloadFile file)
        {
            string?directoryName = Path.GetDirectoryName(file.Path);

            if (!string.IsNullOrEmpty(directoryName))
            {
                Directory.CreateDirectory(directoryName);
            }

            using (var wc = new TimeoutWebClient())
            {
                long lastBytes = 0;

                wc.DownloadProgressChanged += (s, e) =>
                {
                    lock (locker)
                    {
                        var progressedBytes = e.BytesReceived - lastBytes;
                        if (progressedBytes < 0)
                        {
                            return;
                        }

                        lastBytes = e.BytesReceived;

                        var progress = new FileDownloadProgress(
                            file, e.TotalBytesToReceive, progressedBytes, e.BytesReceived, e.ProgressPercentage);
                        FileDownloadProgressChanged?.Invoke(this, progress);
                    }
                };
                await wc.DownloadFileTaskAsync(file.Url, file.Path)
                .ConfigureAwait(false);
            }
        }
Exemple #2
0
        public async Task Process()
        {
            var dirs = Directory.GetDirectories(basePath);

            for (var i = 0; i < dirs.Length; i++)
            {
                var dir         = dirs[i];
                var rawJsonPath = Path.Combine(dir, "raw.json");
                if (!File.Exists(rawJsonPath))
                {
                    continue;
                }
                var info  = JsonConvert.DeserializeObject <RawGrantItemInfo>(File.ReadAllText(rawJsonPath));
                var ginfo = info.ToGrantInfo();

                {
                    var imagePath = Path.Combine(dir, "image.jpg");
                    if (!File.Exists(imagePath))
                    {
                        this.Ui.AddStatus($"work on {i + 1}/{dirs.Length} image");
                        var url = imageBaseUrl + info.Image;
                        using (var wc = new TimeoutWebClient(10000))
                        {
                            await wc.DownloadFileTaskAsync(url, imagePath);
                        }
                    }
                }

                foreach (var link in ginfo.Links)
                {
                    var filePath = Path.Combine(dir, $"{ginfo.Id}-{ginfo.Title}-{link.Title}.pdf");
                    if (File.Exists(filePath))
                    {
                        continue;
                    }
                    var jsonFilePath = Path.Combine(dir, $"{link.Title}.json");

                    switch (link)
                    {
                    case GrantItemPamLink gipl:
                        this.Ui.AddStatus($"work on {i + 1}/{dirs.Length} {link.Title} {gipl.Id}");

                        var pam = await ParsePamAsync(gipl.Type, gipl.Id, gipl.Index);

                        File.WriteAllText(jsonFilePath, JsonConvert.SerializeObject(pam));

                        using (var wc = new TimeoutWebClient(10000))
                        {
                            await wc.DownloadFileTaskAsync(pam.FileLink, filePath);
                        }

                        this.Ui.AddStatus($"Sleep {20}s");
                        await Task.Delay(20000);

                        break;

                    case GrantItemTxLink gitl:
                    default:
                        break;
                    }
                }

                if (i % 10 == 0)
                {
                    this.Ui.AddStatus($"Sleep {1}s");
                    await Task.Delay(1000);
                }
            }
        }