Skip to content

ホストサービス

PluginSdk.Services にある静的サービスで、ホストアプリの機能をプラグインに公開します——それぞれがホスト起動時に配線されるデリゲートを薄くラップした静的クラスなので、実際に裏で何が動いていてもプラグイン側の呼び出し方は変わりません。

サービス用途
FuzzyMatchServiceIsMatch(pattern, text)text(またはそのエイリアスのいずれか)が fzf 構文の pattern に一致するかどうかを、ホスト自身の検索が使っているのとまったく同じマッチングロジックで判定します。GetHighlightMask(text, query) — その組み合わせに対する文字単位のハイライトマスクを、ホスト自身の結果と同じリテラル/あいまい/エイリアスの多段フォールバック(中国語ピンインを含む)で計算します。これにより、プラグインの結果のハイライトも単純なリテラル部分一致だけでなく一貫した見た目になります。
TranslationServiceGet(key) / Format(key, args) — 現在の言語に対してランタイムで文字列を取得します。LoadEmbeddedTranslations(assembly, cultureKey, typeName) — プラグイン自身が埋め込んだ JSON 翻訳を読み込みます。GetSupportedCultures(assembly)GetCurrentCulture() — アプリで現在選択されている UI 言語(例:"zh-CN")で、OS のシステムロケールとは独立したユーザー設定です。生のカルチャコードそのものが必要な場合(HTTP の Accept-Language ヘッダーに入れる、翻訳 API のターゲット言語を選ぶ、など)にのみこれを使ってください——CultureInfo.CurrentUICulture は OS のロケールを反映するもので、この設定とは別物であり、ユーザーの Windows の言語とアプリ内言語が異なる場合には静かに食い違います。
IconServiceGetIcon(path, isDir)GetThumbnail(path, size) — キャッシュ付きのシェルアイコン/サムネイル抽出で、プラグインが自分で Windows のアイコン API を呼び出す必要がありません。
FavoritesServiceGetFavorites() — ユーザーのお気に入り一覧への読み取り専用アクセス(FavoriteItem:Name、Path)。
HistoryServiceGetHistoryEntries() — 記録済みの履歴エントリを、最近開いた順に HistoryEntry { Keyword, Path, Kind, Time } として返します(KindHistoryEntryKind:File / Folder / ApplicationKeyword はそこに至った検索テキストで、クエリを何も入力せずスタートアップパネルのタブから直接開いた場合は空文字列です。Time は Unix 秒です)。各パスは最大1回だけ現れ、そのパスに最後にたどり着いたキーワードの下に紐付けられます。
FileMetadataServiceGetMetadataAsync(paths) — 現在の結果にまだ含まれていないパスに対する、バッチでの Size/Created/Modified/Accessed 取得(FileMetadata)です。すべての ISearchResult はすでに自身の Metadata プロパティを通じてこれを無料で保持しているため(共有抽象化を参照)、このサービスを使う価値があるのは、何か別の方法で得たパス(例えば自分の設定由来のもの)に対してだけです。
DirectoryIndexerServiceRegisterDirectory(pluginId, path, recursive, filterPattern) / UnregisterDirectories(pluginId) / SearchDirectoriesAsync(pluginId, query, token) / NotifyDirectoryChanged(pluginId) — その仕組みを自前で再実装することなく、プラグインが自身のディレクトリをバックグラウンドインデックス作成や USN 監視の対象として登録できるようにします。
PluginSettingsServiceGetSetting<T>(pluginId, key, defaultValue) — ホストの設定ストアから、プラグイン自身の永続化済み設定への読み取り専用アクセスです。3段階でフォールバックします。ユーザーが一度でも保存していればその永続化された値、何も保存されていなければあなたの IConfigurable スキーマにおけるそのフィールド自身の DefaultValue、それもなければ最後の手段としてあなたが渡した defaultValue 引数、という順です。したがって、スキーマで宣言されたデフォルト値が唯一の信頼できる情報源となり、呼び出し側のコードに同じデフォルト値をもう一度ハードコードする必要がありません。設定を毎回読み直すのではなくキャッシュする場合は、SettingChanged(pluginId, key) イベントを購読し、自分のプラグインに対して発火したタイミングでキャッシュを破棄してください——ホストは設定ページでの保存の直後にこれを発火させます。これがキャッシュを無効化できる唯一の信頼できるタイミングです(キー入力ごとのチェックやポーリングでは、たまたま何かがトリガーされるまで変化に気づけないか、あるいは永久に気づけません)。
SearchRefreshServiceRefreshIfMatches(queryMatches) — データが非同期に届く IInstantResultProvider(IInstantResultProviderを参照)向けです。バックグラウンドの取得処理が完了し結果をキャッシュしたら、現在のクエリ文字列に対する述語を指定してこれを呼び出してください。ホストはその述語に一致するアクティブな検索をすべて再実行するため、ユーザーが何も入力し直さなくても、キャッシュ済みの結果がそのまま表示されるようになります。
LoggerLog(message, level = LogLevel.Info) — App のログファイルに書き込み、ホスト自身のログ行とまったく同じように 設定 → サービスの状態 → App に表示されます。
PluginPromptServicePrompt(title, fields, initialValues?) — 指定された PluginConfigField の値をユーザーに尋ねる小さなモーダルを表示します(IConfigurable の設定ダイアログが使っているのと同じフィールドスキーマ/描画ロジックです)。Key で一致する initialValues があればそれで、なければ各フィールド自身の DefaultValue で事前入力されます。入力された値をフィールドの Key をキーとして返し、ユーザーがキャンセルした場合は null を返します——これらの値はプラグインの実際の永続化済み設定から読み取られたり、そこに書き込まれたりすることは一切ないため、実際の設定項目に触れることなく、設定フィールドのスキーマを一度限りの入力(例:「追加する前に名前を付ける」)のためだけに安心して再利用できます。

LogLevelError / Warn / Info / Debug で、サービスの状態のログビューアーのレベルフィルターと一致します。