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("アンインストールしました。"); } }); }
/// <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 }); }
public FailedAddonViewModel(FailedAddonResult result) : this(result, null) { }