private async void editFVariables_Click(object sender, EventArgs e) { bool allow = true; // Create a warning prompt if the user hasn't disabled this warning. var warningDisabled = Program.GetBool("Disable Flag Warning"); if (!warningDisabled) { SystemSounds.Hand.Play(); allow = false; using (Form warningPrompt = createFlagWarningPrompt()) { warningPrompt.ShowDialog(); if (warningPrompt.DialogResult == DialogResult.Yes) { Program.SetValue("Disable Flag Warning", warningPrompt.Enabled); allow = true; } } } if (allow) { string branch = getSelectedBranch(); Enabled = false; UseWaitCursor = true; var infoTask = StudioBootstrapper.GetCurrentVersionInfo(branch); var info = await infoTask.ConfigureAwait(true); Hide(); var updateTask = BootstrapperForm.BringUpToDate(branch, info.Guid, "Some newer flags might be missing."); await updateTask.ConfigureAwait(true); using (FlagEditor editor = new FlagEditor()) editor.ShowDialog(); Show(); BringToFront(); Enabled = true; UseWaitCursor = false; } }
private async void editFVariables_Click(object sender, EventArgs e) { bool allow = true; // Create a warning prompt if the user hasn't disabled this warning. var warningDisabled = Program.GetBool("Disable Flag Warning"); if (!warningDisabled) { SystemSounds.Hand.Play(); allow = false; Form warningPrompt = createFlagWarningPrompt(); warningPrompt.ShowDialog(); DialogResult result = warningPrompt.DialogResult; if (result == DialogResult.Yes) { Program.SetValue("Disable Flag Warning", warningPrompt.Enabled); allow = true; } } if (allow) { string branch = (string)branchSelect.SelectedItem; Enabled = false; UseWaitCursor = true; ClientVersionInfo info = await RobloxStudioInstaller.GetCurrentVersionInfo(branch); Hide(); await RobloxStudioInstaller.BringUpToDate(branch, info.Guid, "Some newer flags might be missing."); FlagEditor editor = new FlagEditor(branch); editor.ShowDialog(); Show(); BringToFront(); Enabled = true; UseWaitCursor = false; } }
public async Task RunInstaller(string branch) { restore(); setStatus("Checking for updates"); echo("Checking build installation..."); string currentBranch = Program.GetString("BuildBranch", "roblox"); string currentVersion = versionRegistry.GetString("VersionGuid"); bool shouldInstall = (forceInstall || currentBranch != branch); string fastVersion = await GetFastVersionGuid(currentBranch); if (branch == "roblox") { buildVersion = fastVersion; } ClientVersionInfo versionInfo = null; if (shouldInstall || fastVersion != currentVersion) { if (currentBranch != "roblox") { echo("Possible update detected, verifying..."); } versionInfo = await GetCurrentVersionInfo(branch, fastVersion); buildVersion = versionInfo.Guid; } else { buildVersion = fastVersion; } if (currentVersion != buildVersion || shouldInstall) { echo("This build needs to be installed!"); bool studioClosed = await shutdownStudioProcesses(); if (studioClosed) { string binaryType = GetStudioBinaryType(); string studioDir = GetStudioDirectory(); string versionId = versionInfo.Version; restore(); setStatus($"Installing Version {versionId} of Roblox Studio..."); var taskQueue = new List <Task>(); echo("Grabbing package manifest..."); List <PackageManifest> pkgManifest = await PackageManifest.Get(branch, buildVersion); echo("Grabbing file manifest..."); fileManifest = await FileManifest.Get(branch, buildVersion); progressBar.Maximum = 1; progressBar.Value = 0; progressBar.Style = ProgressBarStyle.Continuous; progressBar.Refresh(); foreach (PackageManifest package in pkgManifest) { Task installer = Task.Run(() => installPackage(package)); taskQueue.Add(installer); } await Task.WhenAll(taskQueue.ToArray()); echo("Writing AppSettings.xml..."); string appSettings = Path.Combine(studioDir, "AppSettings.xml"); File.WriteAllText(appSettings, appSettingsXml); setStatus("Deleting unused files..."); await deleteUnusedFiles(); progressBar.Style = ProgressBarStyle.Marquee; progressBar.Refresh(); Program.SetValue("BuildBranch", branch); versionRegistry.SetValue("Version", versionId); versionRegistry.SetValue("VersionGuid", buildVersion); } else { progressBar.Style = ProgressBarStyle.Marquee; progressBar.Refresh(); echo("Update cancelled. Launching on current branch and version."); } } else { echo("This version of Roblox Studio has been installed!"); } setStatus("Configuring Roblox Studio..."); echo("Updating registry protocols..."); Program.UpdateStudioRegistryProtocols(); if (exitWhenClosed) { echo("Applying flag configuration..."); FlagEditor.ApplyFlags(); echo("Patching explorer icons..."); await ExplorerIconEditor.PatchExplorerIcons(); } setStatus("Starting Roblox Studio..."); echo("Roblox Studio is up to date!"); await Task.Delay(1000); }
public async Task RunInstaller(string branch, bool setStartEvent = false) { restore(); setStatus("检查更新中"); echo("检查该构建版本是否可安装..."); string currentBranch = Program.GetString("BuildBranch", "roblox"); string currentVersion = versionRegistry.GetString("VersionGuid"); bool shouldInstall = (forceInstall || currentBranch != branch); string fastVersion = await GetFastVersionGuid(currentBranch); ClientVersionInfo versionInfo = null; if (shouldInstall || fastVersion != currentVersion) { if (currentBranch != "roblox") { echo("发现已有更新,验证中..."); } versionInfo = await GetCurrentVersionInfo(branch, fastVersion); buildVersion = versionInfo.Guid; } else { buildVersion = fastVersion; } if (currentVersion != buildVersion || shouldInstall) { echo("此构建版本需要安装!"); bool studioClosed = await shutdownStudioProcesses(); if (studioClosed) { string binaryType = GetStudioBinaryType(); string studioDir = GetStudioDirectory(); string versionId = versionInfo.Version; restore(); setStatus($"正在安装版本为 {versionId} 的 Roblox Studio..."); var taskQueue = new List <Task>(); writtenFiles = new HashSet <string>(); echo("正在获取版本元信息..."); var pkgManifest = await PackageManifest.Get(branch, buildVersion); echo("正在获取文件元信息..."); fileManifest = await FileManifest.Get(branch, buildVersion); progressBar.Maximum = 5000; progressBar.Value = 0; progressBar.Style = ProgressBarStyle.Continuous; progressBar.Refresh(); foreach (var package in pkgManifest) { Task installer = Task.Run(() => installPackage(branch, package)); taskQueue.Add(installer); } await Task.WhenAll(taskQueue); echo("正在写入 AppSettings.xml..."); string appSettings = Path.Combine(studioDir, "AppSettings.xml"); File.WriteAllText(appSettings, appSettingsXml); setStatus("正在搜索未使用的文件..."); await deleteUnusedFiles(); progressBar.Style = ProgressBarStyle.Marquee; progressBar.Refresh(); Program.SetValue("BuildBranch", branch); versionRegistry.SetValue("Version", versionId); versionRegistry.SetValue("VersionGuid", buildVersion); } else { progressBar.Style = ProgressBarStyle.Marquee; progressBar.Refresh(); echo("更新已取消,正在启动当前已有分支版本..."); } } else { echo("该版本安装成功!"); } setStatus("正在配置 Roblox Studio..."); echo("正在更新注册表..."); Program.UpdateStudioRegistryProtocols(); if (exitWhenClosed) { echo("应用参数配置中..."); FlagEditor.ApplyFlags(); echo("修改浏览窗口图标中..."); await ClassIconEditor.PatchExplorerIcons(); } setStatus("正在启动 Roblox Studio..."); echo("Roblox Studio 已为最新版!"); if (setStartEvent) { SystemEvent start = new SystemEvent("RobloxStudioModManagerStart"); autoExitTask = Task.Run(async() => { bool started = await start.WaitForEvent(); start.Close(); if (started) { await Task.Delay(500); Application.Exit(); } }); StartEvent = start; } }