129 lines
4.2 KiB
C#
129 lines
4.2 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Text.RegularExpressions;
|
|
using System.Windows.Forms;
|
|
|
|
namespace BetterDiscordWI.panels {
|
|
public partial class ConfigPanel : UserControl, IPanel {
|
|
|
|
private FormMain _formMain;
|
|
private readonly Regex _matcher = new Regex(@"[0-9]+\.[0-9]+\.[0-9]+");
|
|
|
|
private static string StablePath => $"{Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)}\\Discord";
|
|
private static bool StableExists() => Directory.Exists(StablePath);
|
|
private static string CanaryPath => $"{Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)}\\DiscordCanary";
|
|
private static bool CanaryExists() => Directory.Exists(CanaryPath);
|
|
private static string PtbPath => $"{Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)}\\DiscordPTB";
|
|
private static bool PtbExists() => Directory.Exists(PtbPath);
|
|
|
|
public ConfigPanel() {
|
|
InitializeComponent();
|
|
}
|
|
|
|
public void ShowPanel() {
|
|
_formMain.btnBack.ShowEnable();
|
|
_formMain.btnCancel.ShowEnable();
|
|
_formMain.btnNext.ShowEnable("Install");
|
|
|
|
if (!CanaryExists()) {
|
|
lblCanarywarning.Show();
|
|
cbCanary.Enabled = false;
|
|
}
|
|
|
|
if (!PtbExists()) {
|
|
lblPtbwarning.Show();
|
|
cbPtb.Enabled = false;
|
|
}
|
|
|
|
if (!StableExists()) {
|
|
lblStablewarning.Show();
|
|
cbStable.Enabled = false;
|
|
}
|
|
|
|
if (!StableExists() && !CanaryExists() && PtbExists()) {
|
|
_formMain.btnNext.ShowDisable();
|
|
}
|
|
|
|
cbRestart.Checked = _formMain.RestartDiscord;
|
|
cbCanary.Checked = _formMain.Canary;
|
|
cbPtb.Checked = _formMain.Ptb;
|
|
cbStable.Checked = _formMain.Stable;
|
|
|
|
LocateDiscord();
|
|
|
|
Show();
|
|
}
|
|
|
|
public void HidePanel() {
|
|
Hide();
|
|
}
|
|
|
|
public void SetForm(FormMain formMain) => _formMain = formMain;
|
|
|
|
public string Title => "Installation";
|
|
public UserControl Control => this;
|
|
|
|
private void btnBrowse_Click(object sender, System.EventArgs e) {
|
|
var fbd = new FolderBrowserDialog {SelectedPath = tbPath.Text};
|
|
fbd.ShowDialog();
|
|
|
|
tbPath.Text = fbd.SelectedPath;
|
|
_formMain.DiscordPath = fbd.SelectedPath;
|
|
}
|
|
|
|
private void LocateDiscord() {
|
|
var finalPath = GetLatestVersion(cbPtb.Checked ? PtbPath : cbCanary.Checked ? CanaryPath : StablePath);
|
|
if (finalPath == string.Empty) finalPath = "Not found!";
|
|
|
|
tbPath.Text = finalPath;
|
|
_formMain.DiscordPath = finalPath;
|
|
_formMain.Stable = cbStable.Checked;
|
|
_formMain.Canary = cbCanary.Checked;
|
|
_formMain.Ptb = cbPtb.Checked;
|
|
}
|
|
|
|
|
|
|
|
private string GetLatestVersion(string path) {
|
|
var dirs = Directory.GetDirectories(path);
|
|
if (dirs.Length <= 0) return string.Empty;
|
|
var latest = dirs[0];
|
|
|
|
foreach (var dir in dirs) {
|
|
if (!_matcher.IsMatch(dir)) continue;
|
|
if (string.CompareOrdinal(dir, latest) > 0) latest = dir;
|
|
}
|
|
|
|
return latest;
|
|
}
|
|
|
|
private void cbCanary_CheckedChanged(object sender, EventArgs e) {
|
|
if (cbCanary.Checked) {
|
|
cbPtb.Checked = false;
|
|
cbStable.Checked = false;
|
|
}
|
|
LocateDiscord();
|
|
}
|
|
|
|
private void cbPtb_CheckedChanged(object sender, EventArgs e) {
|
|
if (cbPtb.Checked) {
|
|
cbCanary.Checked = false;
|
|
cbStable.Checked = false;
|
|
}
|
|
LocateDiscord();
|
|
}
|
|
|
|
private void cbRestart_CheckedChanged(object sender, EventArgs e) {
|
|
_formMain.RestartDiscord = cbRestart.Checked;
|
|
}
|
|
|
|
private void cbStable_CheckedChanged(object sender, EventArgs e) {
|
|
if (cbStable.Checked) {
|
|
cbCanary.Checked = false;
|
|
cbPtb.Checked = false;
|
|
}
|
|
LocateDiscord();
|
|
}
|
|
}
|
|
}
|