From b03a83853e67a59cd0c754972d818269fa50d97f Mon Sep 17 00:00:00 2001 From: lin onetwo Date: Mon, 21 Nov 2022 00:30:58 +0800 Subject: [PATCH] fix: sometimes subwiki open is not triggered --- src/preload/wikiOperation.ts | 10 ++++++++-- src/services/wiki/index.ts | 9 --------- src/services/wiki/interface.ts | 2 -- src/services/workspaces/getWorkspaceMenuTemplate.ts | 9 ++++----- 4 files changed, 12 insertions(+), 18 deletions(-) diff --git a/src/preload/wikiOperation.ts b/src/preload/wikiOperation.ts index d9e65006..7094510a 100644 --- a/src/preload/wikiOperation.ts +++ b/src/preload/wikiOperation.ts @@ -94,9 +94,15 @@ ipcRenderer.on(WikiChannel.generalNotification, async (event, message: string) = }); // open a tiddler ipcRenderer.on(WikiChannel.openTiddler, async (event, tiddlerName: string) => { - const newHref: string = await native.getLocalHostUrlWithActualIP(`http://localhost:5212/#${tiddlerName}`); + // iterate until we find NavigatorWidget, this normally needs to be Widget > Widget > ElementWidget > TranscludeWidget > TranscludeWidget > ImportVariablesWidget > VarsWidget > ElementWidget > NavigatorWidget await executeTWJavaScriptWhenIdle(` - window.location.href = "${newHref}"; + let currentHandlerWidget = $tw.rootWidget + let handled = false; + while (currentHandlerWidget && !handled) { + const bubbled = currentHandlerWidget.dispatchEvent({ type: "tm-navigate", navigateTo: "${tiddlerName}", param: "${tiddlerName}" }); + handled = !bubbled; + currentHandlerWidget = currentHandlerWidget.children?.[0] + } `); }); // send an action message diff --git a/src/services/wiki/index.ts b/src/services/wiki/index.ts index 5a111333..5e2ab4ec 100644 --- a/src/services/wiki/index.ts +++ b/src/services/wiki/index.ts @@ -49,15 +49,6 @@ export class Wiki implements IWikiService { return await getSubWikiPluginContent(mainWikiPath); } - public async requestOpenTiddlerInWiki(tiddlerName: string): Promise { - const browserViews = await this.viewService.getActiveBrowserViews(); - browserViews.forEach((browserView) => { - if (browserView !== undefined) { - browserView.webContents.send(WikiChannel.openTiddler, tiddlerName); - } - }); - } - public async requestWikiSendActionMessage(actionMessage: string): Promise { const browserViews = await this.viewService.getActiveBrowserViews(); browserViews.forEach((browserView) => { diff --git a/src/services/wiki/interface.ts b/src/services/wiki/interface.ts index 0dcdc4db..2537351a 100644 --- a/src/services/wiki/interface.ts +++ b/src/services/wiki/interface.ts @@ -53,7 +53,6 @@ export interface IWikiService { openTiddlerInExternal(homePath: string, title: string): Promise; packetHTMLFromWikiFolder(folderWikiPath: string, saveWikiHtmlfolder: string): Promise; removeWiki(wikiPath: string, mainWikiToUnLink?: string, onlyRemoveLink?: boolean): Promise; - requestOpenTiddlerInWiki(tiddlerName: string): Promise; /** send tiddlywiki action message to current active wiki */ requestWikiSendActionMessage(actionMessage: string): Promise; restartWiki(workspace: IWorkspace): Promise; @@ -89,7 +88,6 @@ export const WikiServiceIPCDescriptor = { linkWiki: ProxyPropertyType.Function, openTiddlerInExternal: ProxyPropertyType.Function, removeWiki: ProxyPropertyType.Function, - requestOpenTiddlerInWiki: ProxyPropertyType.Function, requestWikiSendActionMessage: ProxyPropertyType.Function, restartWiki: ProxyPropertyType.Function, runFilterOnWiki: ProxyPropertyType.Function, diff --git a/src/services/workspaces/getWorkspaceMenuTemplate.ts b/src/services/workspaces/getWorkspaceMenuTemplate.ts index f7966eff..530475fd 100644 --- a/src/services/workspaces/getWorkspaceMenuTemplate.ts +++ b/src/services/workspaces/getWorkspaceMenuTemplate.ts @@ -12,6 +12,7 @@ import type { IWikiGitWorkspaceService } from '@services/wikiGitWorkspace/interf import { IContextService } from '@services/context/interface'; import { IGitService } from '@services/git/interface'; import { SupportedStorageServices } from '@services/types'; +import { WikiChannel } from '@/constants/channels'; interface IWorkspaceMenuRequiredServices { auth: Pick; @@ -19,7 +20,7 @@ interface IWorkspaceMenuRequiredServices { git: Pick; native: Pick; view: Pick; - wiki: Pick; + wiki: Pick; wikiGitWorkspace: Pick; window: Pick; workspace: Pick; @@ -45,12 +46,10 @@ export async function openWorkspaceTagTiddler(workspace: IWorkspace, service: IW // is not a new main workspace // open tiddler in the active view if (isSubWiki) { - if (typeof tagName === 'string') { - await service.wiki.requestOpenTiddlerInWiki(tagName); - } - if (mainWikiID === null || idToActive === undefined) { + if (mainWikiID === null || idToActive === undefined || tagName === null) { return; } + service.wiki.wikiOperation(WikiChannel.openTiddler, [mainWikiID, tagName]); idToActive = mainWikiID; } else { await service.wiki.requestWikiSendActionMessage('tm-home');