public bool DownloadImage() { try { ImageInfo Image = new ImageInfo(DownloadInfo); switch (Image.Status) { case DownloadStatus.FileAlreadyExists: return(true); case DownloadStatus.ReadyToDownload: // Download file. using (DownloadClient = new Controls.ExtendedWebClient()) { DownloadClient.Proxy = WebRequest.GetSystemWebProxy(); DownloadClient.Headers.Add("User-Agent: " + Program.UserAgent); DownloadClient.Method = "GET"; DownloadClient.DownloadFile(Image.FileUrl, Image.DownloadPath); } return(true); default: return(false); } } catch (PoolOrPostWasDeletedException) { System.Media.SystemSounds.Hand.Play(); ErrorLog.ReportCustomException("The image was deleted.", "ImageDownloader.cs"); return(false); } catch (ApiReturnedNullOrEmptyException) { System.Media.SystemSounds.Hand.Play(); ErrorLog.ReportCustomException("The api returned null or empty.", "ImageDownloader.cs"); return(false); } catch (NoFilesToDownloadException) { System.Media.SystemSounds.Hand.Play(); ErrorLog.ReportCustomException("No image is available to download.", "ImageDownloader.cs"); return(false); } catch (ImageWasNullAfterBypassingException) { ErrorLog.ReportCustomException("The image was null after attempting to bypassing the e621 global blacklist.", "ImageDownloader.cs"); return(false); } catch (ThreadAbortException) { if (DownloadClient != null && DownloadClient.IsBusy) { DownloadClient.CancelAsync(); } return(false); } catch (ObjectDisposedException) { return(false); } catch (WebException WebE) { System.Media.SystemSounds.Hand.Play(); ErrorLog.ReportWebException(WebE, DownloadInfo.ImageUrl, "ImageDownloader.cs"); return(false); } catch (Exception ex) { System.Media.SystemSounds.Hand.Play(); if (DownloadClient != null && DownloadClient.IsBusy) { DownloadClient.CancelAsync(); } ErrorLog.ReportException(ex, "ImageDownloader.cs"); return(false); } }
public async void DownloadImage() { try { this.Invoke((Action) delegate { lbInfo.Text = "Downloading image id " + DownloadInfo.PostId; status.Text = "Waiting for JSON parse..."; }); ImageInfo Image = new ImageInfo(DownloadInfo); CurrentStatus = Image.Status; if (Image.Status == DownloadStatus.ReadyToDownload) { this.Invoke((Action) delegate { status.Text = "Downloading image..."; pbDownloadStatus.Value = 0; pbDownloadStatus.Style = ProgressBarStyle.Blocks; pbDownloadStatus.State = aphrodite.Controls.ProgressBarState.Normal; }); // Download file. using (DownloadClient = new Controls.ExtendedWebClient()) { DownloadClient.DownloadProgressChanged += (s, e) => { this.Invoke((Action) delegate { pbDownloadStatus.Value = e.ProgressPercentage; pbDownloadStatus.Value++; pbDownloadStatus.Value--; lbPercentage.Text = e.ProgressPercentage.ToString() + "%"; }); }; DownloadClient.DownloadFileCompleted += (s, e) => { this.Invoke((Action) delegate { pbDownloadStatus.Value = 100; lbPercentage.Text = "Done"; }); }; DownloadClient.Proxy = WebRequest.GetSystemWebProxy(); DownloadClient.Headers.Add("User-Agent: " + Program.UserAgent); DownloadClient.Method = "GET"; await DownloadClient.DownloadFileTaskAsync(Image.FileUrl, Image.DownloadPath); } } this.Invoke((Action) delegate { Program.Log(LogAction.WriteToLog, "The image " + DownloadInfo.PostId + " was downloaded. (frmImageDownloader.cs)"); }); CurrentStatus = DownloadStatus.Finished; } catch (PoolOrPostWasDeletedException) { this.Invoke((Action) delegate { Program.Log(LogAction.WriteToLog, "The image " + DownloadInfo.PostId + " was deleted. (frmImageDownloader.cs)"); }); CurrentStatus = DownloadStatus.PostOrPoolWasDeleted; } catch (ApiReturnedNullOrEmptyException) { this.Invoke((Action) delegate { Program.Log(LogAction.WriteToLog, "The image " + DownloadInfo.PostId + " API Returned null or empty. (frmImageDownloader.cs)"); }); CurrentStatus = DownloadStatus.ApiReturnedNullOrEmpty; } catch (NoFilesToDownloadException) { this.Invoke((Action) delegate { Program.Log(LogAction.WriteToLog, "No files are available for image " + DownloadInfo.PostId + ". (frmImageDownloader.cs)"); }); CurrentStatus = DownloadStatus.NothingToDownload; } catch (ImageWasNullAfterBypassingException) { this.Invoke((Action) delegate { Program.Log(LogAction.WriteToLog, "The image " + DownloadInfo.PostId + " was still null after trying to bypass e621's hard filter. (frmImageDownloader.cs)"); }); CurrentStatus = DownloadStatus.FileWasNullAfterBypassingBlacklist; } catch (ThreadAbortException) { this.Invoke((Action) delegate { Program.Log(LogAction.WriteToLog, "The download thread was aborted. (frmImageDownloader.cs)"); }); if (DownloadClient != null && DownloadClient.IsBusy) { DownloadClient.CancelAsync(); } CurrentStatus = DownloadStatus.Aborted; } catch (ObjectDisposedException) { this.Invoke((Action) delegate { Program.Log(LogAction.WriteToLog, "Seems like the form got disposed. (frmImageDownloader.cs)"); }); CurrentStatus = DownloadStatus.FormWasDisposed; } catch (WebException WebE) { this.Invoke((Action) delegate { Program.Log(LogAction.WriteToLog, "A WebException occured. (frmImageDownloader.cs"); status.Text = "A WebException has occured"; pbDownloadStatus.State = aphrodite.Controls.ProgressBarState.Error; }); ErrorLog.ReportWebException(WebE, DownloadInfo.ImageUrl, "frmImageDownloader.cs"); CurrentStatus = DownloadStatus.Errored; } catch (Exception ex) { this.Invoke((Action) delegate { Program.Log(LogAction.WriteToLog, "An Exception occured. (frmImageDownloader.cs"); status.Text = "An Exception has occured"; pbDownloadStatus.State = aphrodite.Controls.ProgressBarState.Error; }); if (DownloadClient != null && DownloadClient.IsBusy) { DownloadClient.CancelAsync(); } ErrorLog.ReportException(ex, "frmImageDownloader.cs"); CurrentStatus = DownloadStatus.Errored; } finally { if (CurrentStatus != DownloadStatus.FormWasDisposed) { this.Invoke((Action) delegate { AfterDownload(); }); } } }