private static IEnumerable DownloadAsync(ProductRow row, Action <string, float> progressCallback = null) { var downloadVersion = default(Version); if (row.Action == ACTION_DOWNLOAD || row.Action == ACTION_UPDATE) { downloadVersion = row.SelectedVersion; } else if (row.Action == ACTION_REPAIR) { downloadVersion = row.CurrentVersion.GetResult(); } if (downloadVersion == null) { yield break; } var downloadPath = Path.GetTempFileName(); var downloadSuccess = false; try { var downloadAsync = UpdateServerCli.DownloadBuild(row.Id, downloadVersion, downloadPath, progressCallback); yield return(downloadAsync); downloadSuccess = true; yield return(downloadPath); } finally { if (downloadSuccess == false && File.Exists(downloadPath)) { try { File.Delete(downloadPath); } catch { /* ignore delete error */ } } } }
public UpdateWindow() { this.titleContent = new GUIContent(Resources.UI_UNITYPLUGIN_WINDOW_UPDATE_TITLE); this.minSize = new Vector2(380, 290); this.position = new Rect( (Screen.width - this.minSize.x) / 2, (Screen.height - this.minSize.y) / 2, this.minSize.x, this.minSize.y ); this.padding = new Rect(10, 10, 10, 10); this.rows = new[] { new ProductRow(UpdateServerCli.PRODUCT_CHARON, Resources.UI_UNITYPLUGIN_WINDOW_UPDATE_CHARON_NAME, disabled: false) { CurrentVersion = CharonCli.GetVersionAsync().IgnoreFault(), AllBuilds = UpdateServerCli.GetBuilds(UpdateServerCli.PRODUCT_CHARON), Location = Path.GetFullPath(Settings.CharonPath), ExpectedVersion = string.IsNullOrEmpty(Settings.Current.EditorVersion) ? default(Version) : new Version(Settings.Current.EditorVersion) }, new ProductRow(UpdateServerCli.PRODUCT_CHARON_UNITY, Resources.UI_UNITYPLUGIN_WINDOW_UPDATE_CHARON_UNITY_PLUGIN_NAME, disabled: !IsAssemblyLoaded(UpdateServerCli.PRODUCT_CHARON_UNITY_ASSEMBLY)) { CurrentVersion = Promise.FromResult(GetAssemblyVersion(UpdateServerCli.PRODUCT_CHARON_UNITY_ASSEMBLY)), AllBuilds = UpdateServerCli.GetBuilds(UpdateServerCli.PRODUCT_CHARON_UNITY), Location = GetAssemblyLocation(UpdateServerCli.PRODUCT_CHARON_UNITY_ASSEMBLY) }, new ProductRow(UpdateServerCli.PRODUCT_EXPRESSIONS, Resources.UI_UNITYPLUGIN_WINDOW_UPDATE_EXPRESSIONS_PLUGIN_NAME, disabled: !IsAssemblyLoaded(UpdateServerCli.PRODUCT_EXPRESSIONS_ASSEMBLY)) { CurrentVersion = Promise.FromResult(GetAssemblyVersion(UpdateServerCli.PRODUCT_EXPRESSIONS_ASSEMBLY)), AllBuilds = UpdateServerCli.GetBuilds(UpdateServerCli.PRODUCT_EXPRESSIONS), Location = GetAssemblyLocation(UpdateServerCli.PRODUCT_EXPRESSIONS_ASSEMBLY) }, new ProductRow(UpdateServerCli.PRODUCT_TEXT_TEMPLATES, Resources.UI_UNITYPLUGIN_WINDOW_UPDATE_TEXT_TRANSFORM_PLUGIN_NAME, disabled: !IsAssemblyLoaded(UpdateServerCli.PRODUCT_TEXT_TEMPLATES_ASSEMBLY)) { CurrentVersion = Promise.FromResult(GetAssemblyVersion(UpdateServerCli.PRODUCT_TEXT_TEMPLATES_ASSEMBLY)), AllBuilds = UpdateServerCli.GetBuilds(UpdateServerCli.PRODUCT_TEXT_TEMPLATES), Location = GetAssemblyLocation(UpdateServerCli.PRODUCT_TEXT_TEMPLATES_ASSEMBLY) } }; this.columns = new[] { new ProductColumn(Resources.UI_UNITYPLUGIN_WINDOW_UPDATE_PRODUCT_COLUMN_NAME, RenderProductCell) { Flex = true, Width = 10 }, new ProductColumn(Resources.UI_UNITYPLUGIN_WINDOW_UPDATE_CURRENT_VERSION_COLUMN_NAME, RenderCurrentVersionCell) { Width = 100 }, new ProductColumn(Resources.UI_UNITYPLUGIN_WINDOW_UPDATE_AVAILABLE_VERSION_COLUMN_NAME, RenderSelectedVersionCell) { Width = 100 }, new ProductColumn(Resources.UI_UNITYPLUGIN_WINDOW_UPDATE_ACTION_COLUMN_NAME, RenderActionCell) { Width = 80 } }; this.UpdateColumnWidths(); for (var i = 0; i < this.rows.Length; i++) { var row = this.rows[i]; if (row.CurrentVersion.IsCompleted == false) { row.CurrentVersion.ContinueWith(this.ContinueWithRepaint); } if (row.AllBuilds.IsCompleted == false) { row.AllBuilds.ContinueWith(this.ContinueWithRepaint); } Promise.WhenAll(row.CurrentVersion, row.AllBuilds) .ContinueWith(p => ChooseAction(row)) .ContinueWith(this.ContinueWithRepaint); } }