Servicios del host
Servicios estáticos en PluginSdk.Services que exponen funcionalidad de la aplicación host a los plugins — cada uno es una fina clase estática que envuelve un delegado que el host conecta al iniciarse, de modo que los plugins los llaman de la misma manera sin importar qué haya funcionando por debajo.
| Servicio | Propósito |
|---|---|
FuzzyMatchService | IsMatch(pattern, text) — si text (o uno de sus alias) coincide con un pattern de sintaxis fzf, usando exactamente la misma coincidencia que emplea la propia búsqueda del host; GetHighlightMask(text, query) — la máscara de resaltado por carácter para ese par, usando los mismos niveles de reserva literal/difuso/alias (incluido el pinyin CJK) con los que el host resalta sus propios resultados, de modo que los resultados de un plugin se resalten de forma coherente en lugar de solo gestionar una coincidencia de subcadena literal. |
TranslationService | Get(key) / Format(key, args) para búsquedas en tiempo de ejecución contra el idioma activo; LoadEmbeddedTranslations(assembly, cultureKey, typeName) para cargar las propias traducciones JSON incrustadas de un plugin; GetSupportedCultures(assembly); GetCurrentCulture() — el idioma de interfaz actualmente seleccionado por la aplicación (por ejemplo, "zh-CN"), un ajuste de usuario independiente de la configuración regional del sistema operativo. Recurre a esto solo cuando necesites el propio código de cultura en bruto (por ejemplo, para ponerlo en una cabecera HTTP Accept-Language o elegir el idioma de destino de una API de traducción) — CultureInfo.CurrentUICulture refleja la configuración regional del sistema operativo, no este ajuste, y discrepará en silencio con él siempre que el idioma de Windows del usuario y el idioma dentro de la app difieran. |
IconService | GetIcon(path, isDir) y GetThumbnail(path, size) — extracción de icono/miniatura del shell con caché, de modo que un plugin nunca tenga que invocar directamente las API de iconos de Windows. |
FavoritesService | GetFavorites() — acceso de solo lectura a la lista de Favoritos del usuario (FavoriteItem: Name, Path). |
HistoryService | GetHistoryEntries() — cada entrada registrada de Historial, con la abierta más recientemente primero, como HistoryEntry { Keyword, Path, Kind, Time } (Kind es un HistoryEntryKind: File / Folder / Application; Keyword es el texto de búsqueda que llevó hasta ella, vacío si se abrió directamente desde una pestaña del Panel de Inicio sin escribir ninguna consulta; Time son segundos Unix). Cada ruta aparece como máximo una vez, bajo cualquiera que sea la palabra clave que más recientemente haya llevado hasta ella. |
FileMetadataService | GetMetadataAsync(paths) — consulta por lotes de Size/Created/Modified/Accessed (FileMetadata) para una ruta que no sea ya uno de tus resultados actuales — cada ISearchResult ya lleva esto consigo mediante su propia propiedad Metadata sin coste alguno (ver Abstracciones), así que recurre a este servicio solo para rutas que hayas obtenido de otra manera (por ejemplo, desde tu propia configuración). |
DirectoryIndexerService | RegisterDirectory(pluginId, path, recursive, filterPattern) / UnregisterDirectories(pluginId) / SearchDirectoriesAsync(pluginId, query, token) / NotifyDirectoryChanged(pluginId) — permite que un plugin registre sus propios directorios para indexación y monitorización USN en segundo plano, sin reimplementar esa maquinaria. |
PluginSettingsService | GetSetting<T>(pluginId, key, defaultValue) — acceso de solo lectura a la configuración persistida propia de un plugin en el almacén de configuración del host. Recurre a tres niveles en cascada: el valor persistido si el usuario alguna vez guardó uno, luego el propio DefaultValue de tu esquema IConfigurable para ese campo si no se persistió nada, y por último el argumento defaultValue que hayas pasado como último recurso — de modo que un valor predeterminado declarado en el esquema es la única fuente de verdad y no necesita una segunda copia codificada a mano en tu punto de llamada. Si guardas en caché un ajuste en lugar de volver a leerlo en cada llamada, suscríbete al evento SettingChanged(pluginId, key) y descarta tu caché cuando se dispare para tu plugin — el host lo lanza justo después de guardar en la página de configuración, que es el único punto fiable para invalidar la caché (una comprobación por pulsación de tecla o por sondeo no verá un cambio hasta lo que sea que lo desencadene coincidentemente la próxima vez, o nunca). |
SearchRefreshService | RefreshIfMatches(queryMatches) — para un IInstantResultProvider cuyos datos llegan de forma asíncrona (ver IInstantResultProvider): una vez que tu obtención en segundo plano termina y has guardado el resultado en caché, llama a esto con un predicado sobre el texto de consulta actual de una búsqueda, y el host vuelve a ejecutar toda búsqueda activa cuya consulta coincida con ese predicado, de modo que el resultado ahora en caché realmente aparezca sin que el usuario necesite volver a escribir nada. |
Logger | Log(message, level = LogLevel.Info) — escribe en el archivo de registro de la App, visible en Configuración → Estado del Servicio → App exactamente igual que las propias líneas de registro del host. |
PluginPromptService | Prompt(title, fields, initialValues?) — muestra un pequeño modal solicitando los valores de PluginConfigField indicados (el mismo esquema/renderizado de campos que usa el diálogo Configurar de IConfigurable), precargado a partir de initialValues (emparejado por Key) o del propio DefaultValue de cada campo. Devuelve los valores introducidos, indexados por Key de campo, o null si el usuario canceló — estos valores nunca se leen de la configuración persistida real del plugin ni se escriben en ella, así que es seguro reutilizar el esquema de un campo de configuración únicamente para una entrada puntual (por ejemplo, "ponle un nombre antes de añadirlo") sin tocar el ajuste real que hay detrás. |
LogLevel es Error / Warn / Info / Debug, coincidiendo con el filtro de nivel del visor de registros de Estado del Servicio.