diff --git a/src/services/menu/index.ts b/src/services/menu/index.ts index d11c7b53..d1c5a43a 100644 --- a/src/services/menu/index.ts +++ b/src/services/menu/index.ts @@ -399,6 +399,12 @@ export class MenuService implements IMenuService { }, }), ); + menu.append( + new MenuItem({ + label: i18next.t('ContextMenu.RestartService'), + click: async () => await this.workspaceViewService.restartWorkspaceViewService(), + }), + ); menu.append( new MenuItem({ label: sidebar ? i18next.t('Preference.HideSideBar') : i18next.t('Preference.ShowSideBar'), diff --git a/src/services/workspaces/getWorkspaceMenuTemplate.ts b/src/services/workspaces/getWorkspaceMenuTemplate.ts index e2ce5419..a74b1787 100644 --- a/src/services/workspaces/getWorkspaceMenuTemplate.ts +++ b/src/services/workspaces/getWorkspaceMenuTemplate.ts @@ -1,6 +1,5 @@ import type { TFunction } from 'i18next'; import type { MenuItemConstructorOptions } from 'electron'; -import { WikiChannel } from '@/constants/channels'; import { WindowNames } from '@services/windows/WindowProperties'; import type { IWindowService } from '@services/windows/interface'; import type { IWorkspaceViewService } from '@services/workspacesView/interface'; @@ -13,11 +12,11 @@ import type { IWikiGitWorkspaceService } from '@services/wikiGitWorkspace/interf interface IWorkspaceMenuRequiredServices { native: Pick; view: Pick; - wiki: Pick; + wiki: Pick; wikiGitWorkspace: Pick; window: Pick; - workspace: Pick; - workspaceView: Pick; + workspace: Pick; + workspaceView: Pick; } export async function openWorkspaceTagTiddler(workspace: IWorkspace, service: IWorkspaceMenuRequiredServices): Promise { @@ -70,14 +69,7 @@ export function getWorkspaceMenuTemplate(workspace: IWorkspace, t: TFunction, se }, { label: t('ContextMenu.RestartService'), - click: async () => { - const workspaceToRestart = await service.workspace.get(id); - if (workspaceToRestart !== undefined) { - await service.wiki.restartWiki(workspaceToRestart); - await service.view.reloadViewsWebContents(id); - await service.wiki.wikiOperation(WikiChannel.generalNotification, [t('ContextMenu.RestartServiceComplete')]); - } - }, + click: async () => await service.workspaceView.restartWorkspaceViewService(id), }, ]; diff --git a/src/services/workspacesView/index.ts b/src/services/workspacesView/index.ts index 82a62c8e..69e834a0 100644 --- a/src/services/workspacesView/index.ts +++ b/src/services/workspacesView/index.ts @@ -276,6 +276,15 @@ export class WorkspaceView implements IWorkspaceViewService { this.viewService.removeView(id); } + public async restartWorkspaceViewService(id?: string): Promise { + const workspaceToRestart = id !== undefined ? await this.workspaceService.get(id) : await this.workspaceService.getActiveWorkspace(); + if (workspaceToRestart !== undefined) { + await this.wikiService.restartWiki(workspaceToRestart); + await this.viewService.reloadViewsWebContents(workspaceToRestart.id); + await this.wikiService.wikiOperation(WikiChannel.generalNotification, [i18n.t('ContextMenu.RestartServiceComplete')]); + } + } + public async clearBrowsingDataWithConfirm(): Promise { const availableWindowToShowDialog = this.windowService.get(WindowNames.preferences) ?? this.windowService.get(WindowNames.main); if (availableWindowToShowDialog !== undefined) { diff --git a/src/services/workspacesView/interface.ts b/src/services/workspacesView/interface.ts index 752c9ce3..0d355c53 100644 --- a/src/services/workspacesView/interface.ts +++ b/src/services/workspacesView/interface.ts @@ -30,6 +30,7 @@ export interface IWorkspaceViewService { printTiddler(tiddlerName?: string | undefined): Promise; realignActiveWorkspace(): Promise; removeWorkspaceView(id: string): Promise; + restartWorkspaceViewService(id?: string | undefined): Promise; setActiveWorkspaceView(id: string): Promise; setWorkspaceView(id: string, workspaceOptions: IWorkspace): Promise; setWorkspaceViews(workspaces: Record): Promise; @@ -48,6 +49,7 @@ export const WorkspaceViewServiceIPCDescriptor = { printTiddler: ProxyPropertyType.Function, realignActiveWorkspace: ProxyPropertyType.Function, removeWorkspaceView: ProxyPropertyType.Function, + restartWorkspaceViewService: ProxyPropertyType.Function, setActiveWorkspaceView: ProxyPropertyType.Function, setWorkspaceView: ProxyPropertyType.Function, setWorkspaceViews: ProxyPropertyType.Function,