diff --git a/NovetusLauncher/.vs/NovetusLauncher/v14/.suo b/NovetusLauncher/.vs/NovetusLauncher/v14/.suo index 70447da..bac4b8d 100644 Binary files a/NovetusLauncher/.vs/NovetusLauncher/v14/.suo and b/NovetusLauncher/.vs/NovetusLauncher/v14/.suo differ diff --git a/NovetusLauncher/NovetusFuncs/Downloader.cs b/NovetusLauncher/NovetusFuncs/Downloader.cs new file mode 100644 index 0000000..49e0eb9 --- /dev/null +++ b/NovetusLauncher/NovetusFuncs/Downloader.cs @@ -0,0 +1,140 @@ +using System; +using System.Net; +using System.Windows.Forms; +using System.IO; + +class Downloader +{ + private string fileURL; + private string fileName; + private string fileFilter; + private string downloadOutcome; + private string downloadOutcomeAddText; + private ProgressBar downloadProgress; + private SaveFileDialog saveFileDialog1; + + public Downloader(string url, string name, string filter, ProgressBar progress) + { + fileName = name; + fileURL = url; + fileFilter = filter; + downloadProgress = progress; + } + + public void setDownloadOutcome(string text) + { + downloadOutcome = text; + } + + public string getDownloadOutcome() + { + return downloadOutcome; + } + + public void InitDownload(string additionalText = "") + { + downloadOutcomeAddText = additionalText; + + saveFileDialog1 = new SaveFileDialog() + { + FileName = fileName, + //"Compressed zip files (*.zip)|*.zip|All files (*.*)|*.*" + Filter = fileFilter, + Title = "Save " + fileName + }; + + if (saveFileDialog1.ShowDialog() == DialogResult.OK) + { + try + { + int read = DownloadGZipFile(fileURL, saveFileDialog1.FileName); + downloadOutcome = "File " + Path.GetFileName(saveFileDialog1.FileName) + " downloaded! " + read + " bytes written!" + downloadOutcomeAddText; + } + catch (Exception ex) + { + downloadOutcome = "Error when downloading file: " + ex.Message; + } + } + } + // currently this only DLs GZipped files. Will mod it to download both types later on. - Bitl + public static int DownloadGZipFile(string remoteFilename, string localFilename) + { + //credit to Tom Archer (https://www.codeguru.com/columns/dotnettips/article.php/c7005/Downloading-Files-with-the-WebRequest-and-WebResponse-Classes.htm) + //and Brokenglass (https://stackoverflow.com/questions/4567313/uncompressing-gzip-response-from-webclient/4567408#4567408) + + // Function will return the number of bytes processed + // to the caller. Initialize to 0 here. + int bytesProcessed = 0; + + // Assign values to these objects here so that they can + // be referenced in the finally block + Stream remoteStream = null; + Stream localStream = null; + WebResponse response = null; + + // Use a try/catch/finally block as both the WebRequest and Stream + // classes throw exceptions upon error + try + { + // Create a request for the specified remote file name + //WebRequest request = WebRequest.Create(remoteFilename); + var request = (HttpWebRequest)WebRequest.Create(remoteFilename); + request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate"); + request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; + if (request != null) + { + // Send the request to the server and retrieve the + // WebResponse object + response = request.GetResponse(); + if (response != null) + { + // Once the WebResponse object has been retrieved, + // get the stream object associated with the response's data + remoteStream = response.GetResponseStream(); + + // Create the local file + localStream = File.Create(localFilename); + + // Allocate a 1k buffer + byte[] buffer = new byte[1024]; + int bytesRead; + + // Simple do/while loop to read from stream until + // no bytes are returned + do + { + // Read data (up to 1k) from the stream + bytesRead = remoteStream.Read(buffer, 0, buffer.Length); + + // Write the data to the local file + localStream.Write(buffer, 0, bytesRead); + + // Increment total bytes processed + bytesProcessed += bytesRead; + } while (bytesRead > 0); + } + } + } + catch (Exception e) + { + Console.WriteLine(e.Message); + } + finally + { + // Close the response and streams objects here + // to make sure they're closed even if an exception + // is thrown at some point + if (response != null) response.Close(); + if (remoteStream != null) remoteStream.Close(); + if (localStream != null) localStream.Close(); + } + + // Return total bytes processed to caller. + return bytesProcessed; + } + + void wc_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) + { + downloadProgress.Value = e.ProgressPercentage; + } +} diff --git a/NovetusLauncher/NovetusFuncs/NovetusFuncs.projitems b/NovetusLauncher/NovetusFuncs/NovetusFuncs.projitems index 3dc8447..ce6771c 100644 --- a/NovetusLauncher/NovetusFuncs/NovetusFuncs.projitems +++ b/NovetusLauncher/NovetusFuncs/NovetusFuncs.projitems @@ -14,6 +14,7 @@ +