diff --git a/EQEmu Patcher/EQEmu Patcher/IniLibrary.cs b/EQEmu Patcher/EQEmu Patcher/IniLibrary.cs index c3bcc36d..df35a9d7 100644 --- a/EQEmu Patcher/EQEmu Patcher/IniLibrary.cs +++ b/EQEmu Patcher/EQEmu Patcher/IniLibrary.cs @@ -6,6 +6,7 @@ using System.Threading.Tasks; using YamlDotNet.Serialization; using YamlDotNet.Serialization.NamingConventions; +using System.Windows.Forms; namespace EQEmu_Patcher { @@ -17,21 +18,21 @@ class IniLibrary public VersionTypes ClientVersion { get; set; } public string LastPatchedVersion { get; set; } - + public static void Save() { var serializerBuilder = new SerializerBuilder().WithNamingConvention(new CamelCaseNamingConvention()); var serializer = serializerBuilder.Build(); string body = serializer.Serialize(instance); - + Console.WriteLine(body); - File.WriteAllText(@"eqemupatcher.yml", body); + File.WriteAllText($"{System.IO.Path.GetDirectoryName(Application.ExecutablePath)}\\eqemupatcher.yml", body); } public static void Load() { try { - using (var input = File.OpenText("eqemupatcher.yml")) + using (var input = File.OpenText($"{System.IO.Path.GetDirectoryName(Application.ExecutablePath)}\\eqemupatcher.yml")) { var deserializerBuilder = new DeserializerBuilder().WithNamingConvention(new CamelCaseNamingConvention()); @@ -39,7 +40,7 @@ public static void Load() instance = deserializer.Deserialize(input); } - + if (instance == null) { ResetDefaults(); Save(); diff --git a/EQEmu Patcher/EQEmu Patcher/MainForm.cs b/EQEmu Patcher/EQEmu Patcher/MainForm.cs index 8e0aee9f..9bd6894f 100644 --- a/EQEmu Patcher/EQEmu Patcher/MainForm.cs +++ b/EQEmu Patcher/EQEmu Patcher/MainForm.cs @@ -13,7 +13,7 @@ namespace EQEmu_Patcher { - + public partial class MainForm : Form { @@ -43,7 +43,7 @@ public partial class MainForm : Form VersionTypes.Rain_Of_Fear, //rof VersionTypes.Rain_Of_Fear_2 //rof //VersionTypes.Broken_Mirror, //bro - }; + }; private Dictionary clientVersions = new Dictionary(); @@ -57,7 +57,6 @@ public MainForm() private async void MainForm_Load(object sender, EventArgs e) { - isLoading = true; version = Assembly.GetEntryAssembly().GetName().Version.ToString(); Console.WriteLine($"Initializing {version}"); @@ -157,7 +156,7 @@ private async void MainForm_Load(object sender, EventArgs e) bool isSupported = false; foreach (var ver in supportedClients) { - if (ver != currentVersion) continue; + if (ver != currentVersion) continue; isSupported = true; break; } @@ -177,7 +176,7 @@ private async void MainForm_Load(object sender, EventArgs e) if (Environment.OSVersion.Version.Major < 6) { return; } - var taskbar = TaskbarManager.Instance; + var taskbar = TaskbarManager.Instance; taskbar.SetProgressValue(value, 10000); taskbar.SetProgressState((value == 10000) ? TaskbarProgressBarState.NoProgress : TaskbarProgressBarState.Normal); }); @@ -209,7 +208,7 @@ private async void MainForm_Load(object sender, EventArgs e) })); string webUrl = $"{filelistUrl}{suffix}/filelist_{suffix}.yml"; - + string response = await DownloadFile(cts, webUrl, "filelist.yml"); if (response != "") { @@ -249,7 +248,7 @@ private async void MainForm_Load(object sender, EventArgs e) FileList filelist; - using (var input = File.OpenText("filelist.yml")) + using (var input = File.OpenText($"{System.IO.Path.GetDirectoryName(Application.ExecutablePath)}\\filelist.yml")) { var deserializerBuilder = new DeserializerBuilder().WithNamingConvention(new CamelCaseNamingConvention()); @@ -257,7 +256,7 @@ private async void MainForm_Load(object sender, EventArgs e) filelist = deserializer.Deserialize(input); } - + if (filelist.version != IniLibrary.instance.LastPatchedVersion) { if (!isPendingPatch) @@ -339,9 +338,9 @@ private void detectClientVersion() { //StatusLibrary.Log($"You seem to have put me in a {clientVersions[currentVersion].FullName} client directory"); } - + //MessageBox.Show(""+currentVersion); - //StatusLibrary.Log($"If you wish to help out, press the scan button on the bottom left and wait for it to complete, then copy paste this data as an Issue on github!"); + //StatusLibrary.Log($"If you wish to help out, press the scan button on the bottom left and wait for it to complete, then copy paste this data as an Issue on github!"); } catch (UnauthorizedAccessException err) { @@ -408,7 +407,7 @@ public static async Task DownloadFile(CancellationTokenSource cts, strin { path = path.Replace("/", "\\"); if (path.Contains("\\")) { //Make directory if needed. - string dir = Application.StartupPath + "\\" + path.Substring(0, path.LastIndexOf("\\")); + string dir = System.IO.Path.GetDirectoryName(Application.ExecutablePath) + "\\" + path.Substring(0, path.LastIndexOf("\\")); Directory.CreateDirectory(dir); } return await UtilityLibrary.DownloadFile(cts, url, path); @@ -454,8 +453,8 @@ private async Task AsyncPatch() StatusLibrary.Log($"Patching with patcher version {version}..."); StatusLibrary.SetProgress(0); FileList filelist; - - using (var input = File.OpenText("filelist.yml")) + + using (var input = File.OpenText($"{System.IO.Path.GetDirectoryName(Application.ExecutablePath)}\\filelist.yml")) { var deserializerBuilder = new DeserializerBuilder().WithNamingConvention(new CamelCaseNamingConvention()); @@ -490,7 +489,7 @@ private async Task AsyncPatch() await w.WriteAsync(data, 0, data.Length, cts.Token); } StatusLibrary.Log($"Self update of {generateSize(data.Length)} will be used next run"); - + } catch (Exception e) { StatusLibrary.Log($"Self update failed {url}: {e.Message}"); @@ -531,7 +530,7 @@ private async Task AsyncPatch() string url = filelist.downloadprefix + entry.name.Replace("\\", "/"); - + string resp = await DownloadFile(cts, url, entry.name); if (resp != "") { @@ -580,11 +579,11 @@ private async Task AsyncPatch() { version = version.Substring(0, 8); } - + StatusLibrary.Log($"Up to date with patch {version}."); return; } - + string elapsed = start.Elapsed.ToString("ss\\.ff"); StatusLibrary.Log($"Complete! Patched {generateSize(patchedBytes)} in {elapsed} seconds. Press Play to begin."); IniLibrary.instance.LastPatchedVersion = filelist.version; @@ -664,7 +663,7 @@ private void pendingPatchTimer_Tick(object sender, EventArgs e) public class FileList { public string version { get; set; } - + public List deletes { get; set; } public string downloadprefix { get; set; } public List downloads { get; set; } diff --git a/EQEmu Patcher/EQEmu Patcher/UtilityLibrary.cs b/EQEmu Patcher/EQEmu Patcher/UtilityLibrary.cs index 9edcfb72..d728f8d6 100644 --- a/EQEmu Patcher/EQEmu Patcher/UtilityLibrary.cs +++ b/EQEmu Patcher/EQEmu Patcher/UtilityLibrary.cs @@ -10,6 +10,7 @@ using System.Threading; using YamlDotNet.Core.Tokens; using System.Runtime.InteropServices.ComTypes; +using System.Windows.Forms; namespace EQEmu_Patcher { @@ -27,7 +28,14 @@ public static async Task DownloadFile(CancellationTokenSource cts, strin response.EnsureSuccessStatusCode(); using (var stream = await response.Content.ReadAsStreamAsync()) { - using (var w = File.Create(outFile)) { + var outPath = outFile.Replace("/", "\\"); + if (outFile.Contains("\\")) { //Make directory if needed. + string dir = System.IO.Path.GetDirectoryName(Application.ExecutablePath) + "\\" + outFile.Substring(0, outFile.LastIndexOf("\\")); + Directory.CreateDirectory(dir); + } + outPath = System.IO.Path.GetDirectoryName(Application.ExecutablePath) + "\\" + outFile; + + using (var w = File.Create(outPath)) { await stream.CopyToAsync(w, 81920, cts.Token); } } @@ -44,6 +52,7 @@ public static async Task DownloadFile(CancellationTokenSource cts, strin return ""; } + // Download will grab a remote URL's file and return the data as a byte array public static async Task Download(CancellationTokenSource cts, string url) { var client = new HttpClient(); @@ -66,7 +75,7 @@ public static string GetMD5(string filename) using (var stream = File.OpenRead(filename)) { var hash = md5.ComputeHash(stream); - + StringBuilder sb = new StringBuilder(); for (int i = 0; i < hash.Length; i++)