Skip to content

NuGetベースのプラグイン導入UIを実装する #614

@Freeesia

Description

@Freeesia

概要

現在の Weikio.PluginFramework + FolderPluginCatalog による既存プラグイン読み込み方式に合わせて、アプリ内からNuGet上のプラグインを一覧表示し、インストールできるようにする。

前提・決定済み仕様

  • プラグイン配布元は NuGet を利用する。
  • WTアプリ内に導入可能プラグイン一覧を表示する。
  • 導入可能一覧からインストールできるようにする。
  • 既存のプラグイン仕様を維持する。
    • ITranslateModule
    • IOcrModule
    • ICacheModule
    • ICaptureModule
    • IColorModule
    • IFilterModule
    • IPluginParam
    • その他既存のプラグインIF
  • プラグイン種別ごとの配布仕様は作らない。
  • plugin.json は導入しない。
  • 自前のプラグインギャラリーは作らない。
  • out-of-process化はこの課題に含めない。
  • WinGet / Microsoft Store AppExtension 連携はこの課題に含めない。
  • インストール後の読み込みは既存の FolderPluginCatalog に任せる。

実装タスク

NuGet検索

  • NuGet V3 feedを検索するサービスを追加する。
  • WTプラグイン候補のNuGetパッケージ一覧を取得する。
  • NuGetメタデータから、一覧表示に必要な情報を取得する。
    • パッケージID
    • 表示名
    • 説明
    • 作者
    • バージョン
    • ライセンス情報
    • プロジェクトURLまたはリポジトリURL
  • NuGet検索失敗時のエラー表示とログ出力を実装する。

プラグイン一覧UI

  • 設定画面にプラグイン管理画面を追加する。
  • 導入可能プラグイン一覧を表示する。
  • インストール済み状態を表示する。
  • 更新可能状態を表示する。
  • 一覧からパッケージ詳細を確認できるようにする。
  • 一覧からインストールを実行できるようにする。

インストール処理

  • 選択したNuGetパッケージをダウンロードする。
  • 一時フォルダへ展開する。
  • 既存のユーザープラグインフォルダ配下へ配置する。
  • 必要な依存DLLを配置する。
  • インストール完了後、WTの再起動が必要であることをユーザーに表示する。
  • インストール失敗時に中途半端な配置が残らないようにする。

インストール済み管理

  • WTがNuGet経由で導入したプラグインを識別できるようにする。
  • インストール済みバージョンを管理する。
  • 更新可能判定を実装する。
  • アンインストール処理を実装する。
  • 実行中DLLのロックを考慮し、必要なファイル操作は次回起動時に安全に適用する。

既存プラグイン読み込みとの接続

  • インストールしたプラグインが既存の FolderPluginCatalog で読み込まれることを確認する。
  • インストールしたプラグインが既存のプラグイン選択UIに表示されることを確認する。
  • 選択中プラグインが削除された場合でも、起動不能にならないようにする。

開発者向け整備

  • 外部プラグイン作成用のサンプルプロジェクトを追加する。
  • NuGetパッケージとして公開するための最小 .csproj 例を追加する。
  • 利用者向けに、アプリ内からプラグインをインストールする手順を追記する。
  • 開発者向けに、既存プラグインIFを実装してNuGet公開する手順を追記する。

完了条件

  • WTアプリ内でNuGet上の導入可能プラグインを一覧表示できる。
  • 一覧からプラグインをインストールできる。
  • インストールしたプラグインが既存の FolderPluginCatalog 経由で読み込まれる。
  • plugin.json なしで動作する。
  • 自前ギャラリーなしで動作する。
  • 既存のビルトイン/フォルダ読み込みプラグインの動作を壊さない。

この課題に含めないこと

  • plugin.json の導入
  • 独自プラグインギャラリーの作成
  • out-of-processプラグイン方式
  • WinGet連携
  • Microsoft Store AppExtension連携
  • プラグイン種別ごとの別配布仕様

Metadata

Metadata

Labels

No labels
No labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions