using System; using System.ComponentModel; using System.Windows.Forms; using System.Net; using System.IO; using System.IO.Compression; using System.Diagnostics; //using NonFormTimer = System.Threading.Timer; using NonFormTimer = System.Timers.Timer; using System.Threading.Tasks; using static DS4Windows.Global; namespace DS4Windows.Forms { public partial class WelcomeDialog : Form { private const string InstallerDL = "https://github.com/ViGEm/ViGEmBus/releases/download/v1.16.112/ViGEmBus_Setup_1.16.115.exe"; private const string InstFileName = "ViGEmBus_Setup_1.16.115.exe"; Process monitorProc; public WelcomeDialog(bool loadConfig=false) { if (loadConfig) { Global.FindConfigLocation(); Global.Load(); Global.SetCulture(Global.UseLang); } InitializeComponent(); Icon = Properties.Resources.DS4; } private void bnFinish_Click(object sender, EventArgs e) { this.Close(); } private void linkBluetoothSettings_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { Process.Start("control", "bthprops.cpl"); } private void bnStep1_Click(object sender, EventArgs e) { if (File.Exists(exepath + $"\\{InstFileName}")) { File.Delete(exepath + $"\\{InstFileName}"); } WebClient wb = new WebClient(); wb.DownloadFileAsync(new Uri(InstallerDL), exepath + $"\\{InstFileName}"); wb.DownloadProgressChanged += wb_DownloadProgressChanged; wb.DownloadFileCompleted += wb_DownloadFileCompleted; } private void wb_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) { bnStep1.Text = Properties.Resources.Downloading.Replace("*number*", e.ProgressPercentage.ToString()); } private void wb_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e) { if (Directory.Exists(exepath + "\\ViGEmBusInstaller")) { Directory.Delete(exepath + "\\ViGEmBusInstaller", true); } if (File.Exists(exepath + $"\\{InstFileName}")) { bnStep1.Text = Properties.Resources.OpeningInstaller; monitorProc = Process.Start(exepath + $"\\{InstFileName}", "/exenoupdates"); bnStep1.Text = Properties.Resources.Installing; } NonFormTimer timer = new NonFormTimer(); timer.Elapsed += timer_Tick; timer.Start(); } private void timer_Tick(object sender, EventArgs e) { if (monitorProc != null && monitorProc.HasExited) { if (Global.IsViGEmBusInstalled()) { this.BeginInvoke((Action)(() => { bnStep1.Text = Properties.Resources.InstallComplete; })); } else { this.BeginInvoke((Action)(() => { bnStep1.Text = Properties.Resources.InstallFailed; }), null); } File.Delete(exepath + $"\\{InstFileName}"); ((NonFormTimer)sender).Stop(); } } private void button2_Click(object sender, EventArgs e) { Process.Start("http://www.microsoft.com/accessories/en-gb/d/xbox-360-controller-for-windows"); } } }