From f4270307a77027b65131bd5cf71f2623656c8009 Mon Sep 17 00:00:00 2001 From: Nicholas Kolba Date: Fri, 4 Nov 2022 14:49:34 -0400 Subject: [PATCH] linting and fix for name/target support in getIntentsForContext --- .../main/src/handlers/fdc3/1.2/raiseIntent.ts | 41 +++++++++++-------- packages/main/src/view.ts | 2 +- packages/preload/exposedInMainWorld.d.ts | 4 +- packages/preload/src/fdc3-1.2/api.ts | 11 ++++- packages/preload/src/systemView/index.ts | 2 +- 5 files changed, 38 insertions(+), 22 deletions(-) diff --git a/packages/main/src/handlers/fdc3/1.2/raiseIntent.ts b/packages/main/src/handlers/fdc3/1.2/raiseIntent.ts index 6878391d..edaeaab9 100644 --- a/packages/main/src/handlers/fdc3/1.2/raiseIntent.ts +++ b/packages/main/src/handlers/fdc3/1.2/raiseIntent.ts @@ -364,26 +364,44 @@ export const raiseIntentForContext = async (message: RuntimeMessage) => { const r: Array = []; - const context = + const context: string = message.data?.context && message.data?.context?.type ? message.data.context.type : ''; + /** + * To Do: Support additional AppMetadata searching (other than name) + */ + const target: TargetApp | undefined = + (message.data && message.data.target) || undefined; + const name: string | undefined = target + ? typeof target === 'string' + ? target + : (target as AppMetadata).name + : ''; const intentListeners = runtime.getIntentListenersByContext(context); if (intentListeners) { // let keys = Object.keys(intentListeners); intentListeners.forEach((listeners: Array) => { + let addListener = true; //look up the details of the window and directory metadata in the "connected" store listeners.forEach((view: View) => { + if (name && name !== view.directoryData?.name) { + addListener = false; + } //de-dupe if ( - !r.find((item) => { + r.find((item) => { return ( item.details.instanceId && item.details.instanceId === view.id ); }) ) { + addListener = false; + } + + if (addListener) { const title = view.getTitle(); const details: FDC3AppDetail = { instanceId: view.id, @@ -396,24 +414,13 @@ export const raiseIntentForContext = async (message: RuntimeMessage) => { }); } - /** - * To Do: Support additional AppMetadata searching (other than name) - */ - const target: TargetApp | undefined = - (message.data && message.data.target) || undefined; - const name: string | undefined = target - ? typeof target === 'string' - ? target - : (target as AppMetadata).name - : ''; - - const data = getRuntime() - .getDirectory() - .retrieveByIntentAndContextType(name, context.type); + const data = getRuntime().getDirectory().retrieveByContextType(context); if (data) { data.forEach((entry: DirectoryApp) => { - r.push({ type: 'directory', details: { directoryData: entry } }); + if (!name || (name && entry.name === name)) { + r.push({ type: 'directory', details: { directoryData: entry } }); + } }); } diff --git a/packages/main/src/view.ts b/packages/main/src/view.ts index 23bbeb24..15ea4ae2 100644 --- a/packages/main/src/view.ts +++ b/packages/main/src/view.ts @@ -191,7 +191,7 @@ export class View { initiated = false; - fdc3Version: '2.0' | '1.2' = '2.0'; + fdc3Version: '2.0' | '1.2' = '1.2'; private type: 'system' | 'app' = 'app'; diff --git a/packages/preload/exposedInMainWorld.d.ts b/packages/preload/exposedInMainWorld.d.ts index fbbe32a1..ac7f34ae 100644 --- a/packages/preload/exposedInMainWorld.d.ts +++ b/packages/preload/exposedInMainWorld.d.ts @@ -1,4 +1,4 @@ interface Window { - readonly fdc3: import("/Users/nicholaskolba/connectifi/electron-fdc3/node_modules/@finos/fdc3/dist/api/DesktopAgent").DesktopAgent; - readonly sail: { isConnected: () => boolean; isReady: () => void; joinChannel: (channel: string) => void; leaveChannel: () => void; hideWindow: () => void; resolveIntent: (data: any) => void; versions: NodeJS.ProcessVersions; getApps: () => Promise; tabs: { select: (selectedId: string) => void; tearOut: (tabId: string) => void; new: () => void; drop: (frameTarget: boolean) => void; dragStart: (selected: string) => void; close: (tabId: string) => void; }; menu: { openTools: (clientX: number, clientY: number) => void; openChannelPicker: (mouseX: number, mouseY: number) => void; }; search: { hideResultsWindow: () => void; searchDirectory: (query: string) => void; selectResult: (selection: string) => void; }; }; + readonly fdc3: import("/Users/nicholaskolba/connectifi/electron-fdc3/node_modules/fdc3-1.2/dist/api/DesktopAgent").DesktopAgent; + readonly sail: { isConnected: () => boolean; isReady: () => void; joinChannel: (channel: string) => void; leaveChannel: () => void; hideWindow: () => void; resolveIntent: (data: { selectedIntent: any; selected: { details: any; }; }) => void; versions: NodeJS.ProcessVersions; getApps: () => Promise; tabs: { select: (selectedId: string) => void; tearOut: (tabId: string) => void; new: () => void; drop: (frameTarget: boolean) => void; dragStart: (selected: string) => void; close: (tabId: string) => void; }; menu: { openTools: (clientX: number, clientY: number) => void; openChannelPicker: (mouseX: number, mouseY: number) => void; }; search: { hideResultsWindow: () => void; searchDirectory: (query: string) => void; selectResult: (selection: string) => void; }; }; } diff --git a/packages/preload/src/fdc3-1.2/api.ts b/packages/preload/src/fdc3-1.2/api.ts index 707d9c81..915162ed 100644 --- a/packages/preload/src/fdc3-1.2/api.ts +++ b/packages/preload/src/fdc3-1.2/api.ts @@ -52,6 +52,14 @@ interface FDC3ReturnListener { listener: { (msg: FDC3Message): void }; } +//backwards compatability support for fdc3 namespaced intents +const stripNS = (intent: string): string => { + if (intent.startsWith('fdc3.')) { + intent = intent.substring(5); + } + return intent; +}; + //flag to indicate the background script is ready for fdc3! let instanceId = ''; @@ -342,7 +350,7 @@ export const createAPI = (): DesktopAgent => { app?: TargetApp, ): Promise => { return await sendMessage(FDC3_1_2_TOPICS.RAISE_INTENT, { - intent: intent, + intent: stripNS(intent), context: context, target: app, }); @@ -381,6 +389,7 @@ export const createAPI = (): DesktopAgent => { addIntentListener: (intent: string, listener: ContextHandler): Listener => { const listenerId: string = guid(); + intent = stripNS(intent); if (!_intentListeners.has(intent)) { _intentListeners.set(intent, new Map()); } diff --git a/packages/preload/src/systemView/index.ts b/packages/preload/src/systemView/index.ts index f25b211b..c4690aa3 100644 --- a/packages/preload/src/systemView/index.ts +++ b/packages/preload/src/systemView/index.ts @@ -1,4 +1,4 @@ -import { connect, createAPI } from '../fdc3-2.0/api'; +import { connect, createAPI } from '../fdc3-1.2/api'; import { contextBridge } from 'electron'; import { api } from '../system/api'; connect();