Exemple #1
0
        public FailedAddonViewModel(FailedAddonResult result, IDialogService?service)
        {
            this.PackageID        = new ReactiveProperty <string>(result.PackageID);
            this.Details          = new ReactiveProperty <string>(result.Message);
            this.CanUninstall     = new ReactiveProperty <bool>(result.CanUninstall);
            this.service          = service;
            this.UninstallCommand = new AsyncReactiveCommand()
                                    .WithSubscribe(async() =>
            {
                if (this.service is null)
                {
                    return;
                }

                if (!this.CanUninstall.Value)
                {
                    WS::AddonPage.Queue.Enqueue("このアドオンはアンインストールできません。");
                    return;
                }

                IDialogResult messageBoxResult = CommonMessageBoxAPI.Show(this.service !, "本当にアンインストールしますか?", CommonMessageBoxAPI.MessageType.Warinng, CommonMessageBoxButtons.Yes | CommonMessageBoxButtons.No | CommonMessageBoxButtons.Cancel);

                if (messageBoxResult.Result != ButtonResult.Yes)
                {
                    return;
                }

                IAttemptResult result = await WS::AddonPage.InstallManager.UnistallAddonAsync(this.PackageID.Value);
                if (!result.IsSucceeded)
                {
                    WS::AddonPage.Queue.Enqueue("アンインストールに失敗しました。");
                }
                else
                {
                    WS::AddonPage.Queue.Enqueue("アンインストールしました。");
                }
            });
        }
Exemple #2
0
        /// <summary>
        /// アドオンを初期化する
        /// </summary>
        /// <returns></returns>
        public async Task <IAttemptResult> InitializeAsync()
        {
            if (this.isInitialized)
            {
                return(new AttemptResult()
                {
                    Message = "既に初期化されています。"
                });
            }

            this._initializeAwaiterHandler.RegisterStep(AwaiterNames.Addon, typeof(VM::MainWindowViewModel));
            await this._initializeAwaiterHandler.GetAwaiter(AwaiterNames.Addon);

            IAttemptResult dResult = this._uninstaller.DeleteListed();

            if (!dResult.IsSucceeded)
            {
                return(new AttemptResult()
                {
                    Message = "アンインストール済みアドオンフォルダーの削除に失敗しました。", Exception = dResult.Exception
                });
            }

            IAttemptResult mResult = this._installer.ReplaceTemporaryFiles();

            if (!mResult.IsSucceeded)
            {
                return(new AttemptResult()
                {
                    Message = mResult.Message, Exception = mResult.Exception
                });
            }

            List <string> packages;

            try
            {
                packages = this._directoryIO.GetDirectorys(FileFolder.AddonsFolder);
            }
            catch (Exception e)
            {
                this._logger.Error("アドオンパッケージ一覧の取得に失敗しました。", e);
                return(new AttemptResult()
                {
                    Message = "アドオンパッケージ一覧の取得に失敗しました。", Exception = e
                });
            }

            bool isDevMode = this._settingHandler.GetBoolSetting(SettingsEnum.IsDevMode);
            bool isAddonDebuggingEnable = this._settingHandler.GetBoolSetting(SettingsEnum.IsAddonDebugEnable);

            foreach (var packagePath in packages)
            {
                string package = Path.GetFileName(packagePath);
                IAttemptResult <bool> result = await this._engine.InitializeAsync(package, isDevMode);

                if (!result.IsSucceeded)
                {
                    var failedResult = new FailedAddonResult(package, result.Message ?? string.Empty, result.Data);
                    this.LoadFailedAddons.Add(failedResult);
                }
            }

            foreach (KeyValuePair <int, IAddonContext> item in this._contexts.Contexts)
            {
                AddonInfomation info       = this._container.GetAddon(item.Key);
                IAPIEntryPoint  entryPoint = DIFactory.Provider.GetRequiredService <IAPIEntryPoint>();

                IAttemptResult result = item.Value.Initialize(info, engine =>
                {
                    entryPoint.Initialize(info, engine);
                    engine.AddHostObject("application", entryPoint);

                    IFetch fetch = DIFactory.Provider.GetRequiredService <IFetch>();
                    fetch.Initialize(info);
                    Func <string, dynamic?, Task <Response> > fetchFunc = (url, optionObj) =>
                    {
                        var option = new FetchOption()
                        {
                            method      = optionObj?.method,
                            body        = optionObj?.body,
                            credentials = optionObj?.credentials,
                        };

                        return(fetch.FetchAsync(url, option));
                    };
                    engine.AddHostObject("fetch", fetchFunc);
                }, entryPoint, isAddonDebuggingEnable);

                if (!result.IsSucceeded)
                {
                    var failedResult = new FailedAddonResult(info.PackageID.Value, result.Message ?? string.Empty, true);
                    this.LoadFailedAddons.Add(failedResult);
                }
            }

            IAttemptResult <IEnumerable <string> > packageIds = this._storeHandler.GetAllAddonsPackageID();

            if (packageIds.IsSucceeded && packageIds.Data is not null)
            {
                List <string> loaded = this._contexts.Contexts.Select(v => v.Value.AddonInfomation !.PackageID.Value).ToList();
                foreach (var package in packageIds.Data)
                {
                    if (!loaded.Contains(package))
                    {
                        var failedResult = new FailedAddonResult(package, "インストールされていますが、ファイルが見つかりませんでした。", true);
                        this.LoadFailedAddons.Add(failedResult);
                    }
                }
            }

            this.isInitialized = true;
            return(new AttemptResult()
            {
                IsSucceeded = true
            });
        }
Exemple #3
0
 public FailedAddonViewModel(FailedAddonResult result) : this(result, null)
 {
 }