diff --git a/docs/releases/unreleased.md b/docs/releases/unreleased.md index 121110a0..5c107c81 100644 --- a/docs/releases/unreleased.md +++ b/docs/releases/unreleased.md @@ -31,3 +31,8 @@ When a change has user-facing documentation, include a canonical tasknotes.dev l ``` --> + +## Fixed + +- Fixed Obsidian links in Google Calendar event descriptions so the note path survives HTML entity handling. + - Thanks to @martin-forge for reporting and fixing. diff --git a/src/services/TaskCalendarSyncService.ts b/src/services/TaskCalendarSyncService.ts index cc4076bb..ec4039c2 100644 --- a/src/services/TaskCalendarSyncService.ts +++ b/src/services/TaskCalendarSyncService.ts @@ -1741,11 +1741,11 @@ export class TaskCalendarSyncService { parts.push("---"); } - // Add Obsidian link (as HTML anchor for clickability in Google Calendar) + // Google Calendar descriptions are HTML-capable, so keep the plain URL HTML-safe. if (settings.includeObsidianLink) { const vaultName = this.plugin.app.vault.getName(); const encodedPath = encodeURIComponent(task.path); - const obsidianUri = `obsidian://open?vault=${encodeURIComponent(vaultName)}&file=${encodedPath}`; + const obsidianUri = `obsidian://open?vault=${encodeURIComponent(vaultName)}&file=${encodedPath}`; const linkText = t("openInObsidian"); parts.push(`${linkText}: ${obsidianUri}`); } diff --git a/tests/services/TaskCalendarSyncService.test.ts b/tests/services/TaskCalendarSyncService.test.ts index 4f431f14..83b86da0 100644 --- a/tests/services/TaskCalendarSyncService.test.ts +++ b/tests/services/TaskCalendarSyncService.test.ts @@ -149,8 +149,9 @@ describe("TaskCalendarSyncService", () => { "Projects: Quarterly Planning, Nested Project, Markdown Project" ); expect(description).toContain( - "Open in Obsidian: obsidian://open?vault=Example%20Vault&file=Tasks%2FPrepare%20quarterly%20planning%20notes.md" + "Open in Obsidian: obsidian://open?vault=Example%20Vault&file=Tasks%2FPrepare%20quarterly%20planning%20notes.md" ); + expect(description).not.toContain("&file="); expect(description).not.toContain("[["); expect(description).not.toContain("]]"); expect(description).not.toContain("