using GCMM.Properties; using System; using System.Collections.Generic; using System.Diagnostics; using System.Drawing; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Windows.Forms; namespace GCMM { partial class MainForm { public void UpdateButton(Button button, bool enabled) { if (enabled) { button.ForeColor = Color.Lime; button.FlatAppearance.MouseOverBackColor = Color.FromArgb(0, 40, 0); button.FlatAppearance.MouseDownBackColor = Color.Green; } else { button.ForeColor = Color.Green; button.FlatAppearance.MouseOverBackColor = Color.Black; button.FlatAppearance.MouseDownBackColor = Color.Black; } } public string GetGameFolder() { //TODO string libs; if (Environment.OSVersion.Platform == PlatformID.Win32NT) libs = @"C:\Program Files (x86)\Steam\steamapps\libraryfolders.vdf"; else return null; foreach (var line in File.ReadAllLines(libs).Concat(new[] {@"C:\Program Files (x86)\Steam\"})) { var regex = new Regex("\\t\"\\d+\"\\t\\t\"(.+)\""); var match = regex.Match(line); if (!match.Success) continue; string library = match.Groups[1].Value.Replace("\\\\", "\\"); library += @"\steamapps\common\"; if (GetExe(library + "Gamecraft") != null) return library + "Gamecraft"; if (GetExe(library + "RobocraftX") != null) return library + "RobocraftX"; } return null; } public string SelectGameFolder() { var ofd = new OpenFileDialog(); ofd.Filter = "Gamecraft executable|Gamecraft.exe|Gamecraft Preview executable|GamecraftPreview.exe"; ofd.Title = "Game location"; ofd.InitialDirectory = @"C:\Program Files (x86)\Steam\steamapps\common\"; //TODO ofd.CheckFileExists = true; ofd.ShowDialog(); if (string.IsNullOrWhiteSpace(ofd.FileName)) return null; return Directory.GetParent(ofd.FileName).FullName; } private void CheckStartGame(object sender, EventArgs e) { Action act = () => { if (((sender as Process)?.ExitCode ?? 0) != 0) { status.Text = "Status: Patching failed"; return; } if (CheckIfPatched() == GameState.Patched || unpatched.Checked) if (Environment.OSVersion.Platform == PlatformID.Win32NT) Process.Start("steam://run/1078000/"); else Process.Start("xdg-open", "steam://run/1078000/"); }; if (InvokeRequired) Invoke(act); else act(); EndWork(false); } public WebClient GetClient() { var client = new WebClient(); if (!Settings.Default.UseProxy) client.Proxy = null; client.Headers.Clear(); client.Headers[HttpRequestHeader.Accept] = "application/json"; client.BaseAddress = "https://git.exmods.org"; return client; } private bool working = false; /// /// Some simple "locking", only allow one operation at a time /// /// Whether the work can begin public bool BeginWork() { if (working) return false; working = true; UpdateButton(playbtn, false); UpdateButton(installbtn, false); UpdateButton(uninstallbtn, false); UpdateButton(settingsbtn, false); return true; } public void EndWork(bool desc = true) { working = false; UpdateButton(playbtn, true); UpdateButton(settingsbtn, true); if (desc) modlist_SelectedIndexChanged(modlist, null); } /// /// Path must start with \ /// /// /// /// public string GamePath(string path, string gamepath = null) { return ((gamepath ?? Settings.Default.GamePath) + path).Replace('\\', Path.DirectorySeparatorChar); } public string GetExe(string path = null) { if (File.Exists(GamePath("\\Gamecraft.exe", path))) return "Gamecraft.exe"; if (File.Exists(GamePath("\\GamecraftPreview.exe", path))) return "GamecraftPreview.exe"; return null; } private bool CheckNoExe() { return CheckNoExe(out _); } private bool CheckNoExe(out string path) { path = GetExe(); if (path == null) { MessageBox.Show("Gamecraft not found! Set the correct path in Settings."); return true; } return false; } } }