Exemplo n.º 1
0
        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 */ }
                }
            }
        }
Exemplo n.º 2
0
        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);
            }
        }