Skip to content

Plugins de ejemplo

Dos plugins se distribuyen con el propio SwiftList y son referencias útiles del mundo real — ambos residen en la carpeta Plugins/ del repositorio de SwiftList.

CoreExtensions — acciones y el menú contextual del shell

CoreExtensionsPlugin implementa tres interfaces a la vez: IPlugin, IActionProvider e IConfigurable.

  • IActionProvider.GetActions() devuelve diez ISearchResultAction integradas — abrir, localizar en el Explorador, copiar ruta, copiar/cortar el propio archivo, abrir un símbolo del sistema en su ubicación, crear archivo/carpeta, y variantes elevadas (ejecutar como administrador) de abrir y símbolo del sistema.
  • IActionProvider.GetDynamicActionProviders() devuelve un único IDynamicActionProviderShellMenuActionProvider — que es lo que hace que el menú contextual real de Windows (incluidos submenús en cascada anidados como "Enviar a") aparezca dentro del propio menú de Acciones de SwiftList. Este es el patrón que hay que copiar si quieres mostrar cualquier menú externo generado dinámicamente dentro de SwiftList en lugar de una lista fija de acciones.
  • IConfigurable.GetConfigSchema() muestra un esquema de configuración con grupos de campos anidados y un tipo de campo StringList — merece la pena leerlo si tu propio plugin necesita algo más que una lista plana de booleanos en su cuadro de configuración de Configuración → Plugins.
  • FavoritesTabProvider y HistoryTabProvider implementan cada uno IStartupPanelTabProvider para mostrar sus listas existentes como pestañas en el Panel de Inicio — una referencia mínima para esa interfaz, ya que ambos simplemente envuelven una lista de elementos ya consultada, sin estado adicional propio.

PinyinAlias — alias en pinyin para nombres de archivo en chino

PinyinAliasProvider implementa tanto IAliasProvider como ITranslationProvider — un plugin puede combinar libremente roles del SDK cuando están relacionados, y este es un buen modelo para ello:

  • IAliasProvider.InputRanges/OutputRanges declaran sus dos alfabetos directamente a partir de los límites de la propia tabla de PinyinEngine (InputRanges: el bloque CJK; OutputRanges: a-z) en lugar de duplicar números mágicos — el host usa ambos juntos para admitir consultas mixtas de literal+pinyin como 大cj contra 大长今.
  • IAliasProvider.CanHandle(text) busca cualquier carácter chino antes de hacer trabajo real, de modo que los nombres de archivo que no son chinos se saltan por completo la generación de alias.
  • IAliasProvider.GetAliases(text) construye una tabla de sílabas por carácter (cada carácter chino se asocia a sus posibles lecturas en pinyin) y luego genera tanto un alias en pinyin completo como un alias solo de iniciales. Para nombres de archivo con caracteres polifónicos (más de una lectura válida), genera alias para cada combinación habitual — limitado a 32 combinaciones para evitar una explosión combinatoria con entradas patológicas — uniendo las alternativas con | para que el motor de búsqueda trate cada una como candidata en lugar de exigir que todas coincidan simultáneamente.
  • ITranslationProvider se implementa en la misma clase, únicamente para proporcionar las cadenas de interfaz propias de este plugin (por ejemplo, su nombre visible) mediante TranslationService.LoadEmbeddedTranslations — las dos interfaces no están relacionadas en propósito, pero coinciden aquí en un mismo tipo por tratarse de un plugin pequeño, de un solo archivo.
  • Una caché Dictionary<string, Dictionary<string, string>> protegida por un lock evita volver a analizar el JSON de traducción incrustado en cada llamada — el patrón habitual para cualquier plugin que realice trabajo no trivial en GetTranslations.

Leer ambos plugins uno junto al otro es la forma más rápida de ver cómo encajan en la práctica las piezas de la Referencia del SDK de Plugins.