From 0aeeda616ec778f9fc048991e91dd89cfba43818 Mon Sep 17 00:00:00 2001 From: hugo Date: Sun, 15 Feb 2026 17:49:59 +0100 Subject: [PATCH] feat: implement and recognize vimeo macro --- src/main/config/macroConfig.ts | 15 +++++ src/main/engine/ImportExecutionEngine.ts | 15 ++++- src/renderer/macros/definitions/index.ts | 1 + src/renderer/macros/definitions/vimeo.ts | 76 ++++++++++++++++++++++++ 4 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 src/renderer/macros/definitions/vimeo.ts diff --git a/src/main/config/macroConfig.ts b/src/main/config/macroConfig.ts index bbffa4a..fcdbea7 100644 --- a/src/main/config/macroConfig.ts +++ b/src/main/config/macroConfig.ts @@ -39,6 +39,21 @@ export const macroConfigs: MacroConfig[] = [ return undefined; }, }, + { + name: 'vimeo', + description: 'Embeds a Vimeo video player', + requiredParams: ['id'], + validate: (params) => { + if (!params.id) { + return 'Vimeo macro requires an "id" parameter (the video ID)'; + } + // Vimeo IDs are numeric + if (!/^\d+$/.test(params.id)) { + return 'Invalid Vimeo video ID format (should be numeric)'; + } + return undefined; + }, + }, { name: 'gallery', description: 'Renders an image gallery from linked media files', diff --git a/src/main/engine/ImportExecutionEngine.ts b/src/main/engine/ImportExecutionEngine.ts index e1af5e1..bfdccc6 100644 --- a/src/main/engine/ImportExecutionEngine.ts +++ b/src/main/engine/ImportExecutionEngine.ts @@ -430,9 +430,12 @@ export class ImportExecutionEngine extends EventEmitter { const wxrPost = analyzed.wxrPost; const db = getDatabase().getLocal(); + // Convert Vimeo iframes to [[vimeo]] macros BEFORE markdown conversion + const contentWithVimeo = this.convertVimeoIframes(wxrPost.content); + // Transform WordPress shortcodes [shortcode] to [[shortcode]] BEFORE markdown conversion // (TurndownService escapes brackets, so we must transform first) - const contentWithShortcodes = this.transformShortcodes(wxrPost.content); + const contentWithShortcodes = this.transformShortcodes(contentWithVimeo); // Convert HTML content to Markdown let transformedContent = this.convertToMarkdown(contentWithShortcodes); @@ -779,6 +782,16 @@ export class ImportExecutionEngine extends EventEmitter { return markdown.replace(uploadsUrlPattern, 'media/$1'); } + /** + * Convert Vimeo iframes to [[vimeo id=...]] macros. + * Matches + + + `; + }, +}; + +// Self-register +registerMacro(vimeoMacro); + +export default vimeoMacro;