Skip to content

Commit

Permalink
switch views between 1.2 and 2.0 on a view by view basis. 2.0 support…
Browse files Browse the repository at this point in the history
… still WIP - defaulting to 1.2 for now
  • Loading branch information
nkolba committed Oct 28, 2022
1 parent c8bccfd commit 7170259
Show file tree
Hide file tree
Showing 21 changed files with 321 additions and 209 deletions.
6 changes: 3 additions & 3 deletions packages/main/src/handlers/fdc3/1.2/broadcast.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { getRuntime } from '/@/index';
import { RuntimeMessage } from '/@/handlers/runtimeMessage';
import { View } from '/@/view';
import { FDC3Listener } from '/@/types/FDC3Listener';
import { FDC3_TOPICS } from './topics';
import { FDC3_1_2_TOPICS } from './topics';

interface ViewListener {
view: View;
Expand Down Expand Up @@ -54,7 +54,7 @@ export const broadcast = async (message: RuntimeMessage) => {
ts: message.data && message.data.ts,
context: message.data && message.data.context,
};
viewL.view.content.webContents.send(FDC3_TOPICS.CONTEXT, {
viewL.view.content.webContents.send(FDC3_1_2_TOPICS.CONTEXT, {
topic: 'context',
listenerId: viewL.listenerId,
data: data,
Expand Down Expand Up @@ -126,7 +126,7 @@ export const broadcast = async (message: RuntimeMessage) => {
});
//if there are listeners found, broadcast the context to the view (with all listenerIds)
if (viewListeners.length > 0) {
v.content.webContents.send(FDC3_TOPICS.CONTEXT, {
v.content.webContents.send(FDC3_1_2_TOPICS.CONTEXT, {
topic: 'context',
listenerIds: viewListeners,
data: {
Expand Down
8 changes: 4 additions & 4 deletions packages/main/src/handlers/fdc3/1.2/contextListeners.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { getRuntime } from '/@/index';
import { RuntimeMessage } from '/@/handlers/runtimeMessage';
import { View } from '/@/view';
import { FDC3_TOPICS } from './topics';
import { FDC3_1_2_TOPICS } from './topics';
import { Pending } from '/@/types/Pending';

export const dropContextListener = async (message: RuntimeMessage) => {
Expand Down Expand Up @@ -46,8 +46,8 @@ export const addContextListener = async (message: RuntimeMessage) => {
message.data.type
) {
console.log('send pending context');
view.content.webContents.postMessage(FDC3_TOPICS.CONTEXT, {
topic: FDC3_TOPICS.CONTEXT,
view.content.webContents.postMessage(FDC3_1_2_TOPICS.CONTEXT, {
topic: FDC3_1_2_TOPICS.CONTEXT,
data: pending.context,
source: source,
});
Expand Down Expand Up @@ -92,7 +92,7 @@ export const addContextListener = async (message: RuntimeMessage) => {
pending.context.type === message.data &&
message.data.type)
) {
view.content.webContents.send(FDC3_TOPICS.CONTEXT, {
view.content.webContents.send(FDC3_1_2_TOPICS.CONTEXT, {
topic: 'context',
listenerId: message.data && message.data.id,
data: {
Expand Down
45 changes: 28 additions & 17 deletions packages/main/src/handlers/fdc3/1.2/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { Runtime } from '/@/runtime';
import { dropContextListener, addContextListener } from './contextListeners';
import { broadcast } from './broadcast';
import { open } from './open';
import { FDC3_TOPICS } from './topics';
import { FDC3_1_2_TOPICS } from './topics';
import {
getCurrentContext,
getOrCreateChannel,
Expand All @@ -14,25 +14,36 @@ import {
import { dropIntentListener, addIntentListener } from './intentListeners';
import { findIntent, findIntentsByContext } from './findIntent';
import { raiseIntent, raiseIntentForContext } from './raiseIntent';
import { resolveIntent } from './resolveIntent';

export const register = (runtime: Runtime) => {
runtime.addHandler(FDC3_TOPICS.DROP_CONTEXT_LISTENER, dropContextListener);
runtime.addHandler(FDC3_TOPICS.ADD_CONTEXT_LISTENER, addContextListener);
runtime.addHandler(FDC3_TOPICS.BROADCAST, broadcast);
runtime.addHandler(FDC3_TOPICS.OPEN, open);
runtime.addHandler(FDC3_TOPICS.GET_CURRENT_CONTEXT, getCurrentContext);
runtime.addHandler(FDC3_TOPICS.GET_OR_CREATE_CHANNEL, getOrCreateChannel);
runtime.addHandler(FDC3_TOPICS.GET_SYSTEM_CHANNELS, getSystemChannels);
runtime.addHandler(FDC3_TOPICS.LEAVE_CURRENT_CHANNEL, leaveCurrentChannel);
runtime.addHandler(FDC3_TOPICS.JOIN_CHANNEL, joinChannel);
runtime.addHandler(FDC3_TOPICS.GET_CURRENT_CHANNEL, getCurrentChannel);
runtime.addHandler(FDC3_TOPICS.ADD_INTENT_LISTENER, addIntentListener);
runtime.addHandler(FDC3_TOPICS.DROP_INTENT_LISTENER, dropIntentListener);
runtime.addHandler(FDC3_TOPICS.FIND_INTENT, findIntent);
runtime.addHandler(FDC3_TOPICS.FIND_INTENTS_BY_CONTEXT, findIntentsByContext);
runtime.addHandler(FDC3_TOPICS.RAISE_INTENT, raiseIntent);
runtime.addHandler(
FDC3_TOPICS.RAISE_INTENT_FOR_CONTEXT,
FDC3_1_2_TOPICS.DROP_CONTEXT_LISTENER,
dropContextListener,
);
runtime.addHandler(FDC3_1_2_TOPICS.ADD_CONTEXT_LISTENER, addContextListener);
runtime.addHandler(FDC3_1_2_TOPICS.BROADCAST, broadcast);
runtime.addHandler(FDC3_1_2_TOPICS.OPEN, open);
runtime.addHandler(FDC3_1_2_TOPICS.GET_CURRENT_CONTEXT, getCurrentContext);
runtime.addHandler(FDC3_1_2_TOPICS.GET_OR_CREATE_CHANNEL, getOrCreateChannel);
runtime.addHandler(FDC3_1_2_TOPICS.GET_SYSTEM_CHANNELS, getSystemChannels);
runtime.addHandler(
FDC3_1_2_TOPICS.LEAVE_CURRENT_CHANNEL,
leaveCurrentChannel,
);
runtime.addHandler(FDC3_1_2_TOPICS.JOIN_CHANNEL, joinChannel);
runtime.addHandler(FDC3_1_2_TOPICS.GET_CURRENT_CHANNEL, getCurrentChannel);
runtime.addHandler(FDC3_1_2_TOPICS.ADD_INTENT_LISTENER, addIntentListener);
runtime.addHandler(FDC3_1_2_TOPICS.DROP_INTENT_LISTENER, dropIntentListener);
runtime.addHandler(FDC3_1_2_TOPICS.FIND_INTENT, findIntent);
runtime.addHandler(
FDC3_1_2_TOPICS.FIND_INTENTS_BY_CONTEXT,
findIntentsByContext,
);
runtime.addHandler(FDC3_1_2_TOPICS.RAISE_INTENT, raiseIntent);
runtime.addHandler(
FDC3_1_2_TOPICS.RAISE_INTENT_FOR_CONTEXT,
raiseIntentForContext,
);
runtime.addHandler(FDC3_1_2_TOPICS.RESOLVE_INTENT, resolveIntent);
};
4 changes: 2 additions & 2 deletions packages/main/src/handlers/fdc3/1.2/intentListeners.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { getRuntime } from '/@/index';
import { RuntimeMessage } from '/@/handlers/runtimeMessage';
import { FDC3_TOPICS } from './topics';
import { FDC3_1_2_TOPICS } from './topics';

export const dropIntentListener = async (message: RuntimeMessage) => {
const runtime = getRuntime();
Expand Down Expand Up @@ -37,7 +37,7 @@ export const addIntentListener = async (message: RuntimeMessage) => {
console.log('applying pending intent', pIntent);
//refactor with other instances of this logic
if (view && view.content) {
view.content.webContents.send(FDC3_TOPICS.INTENT, {
view.content.webContents.send(FDC3_1_2_TOPICS.INTENT, {
topic: 'intent',
data: {
intent: pIntent.intent,
Expand Down
73 changes: 49 additions & 24 deletions packages/main/src/handlers/fdc3/1.2/raiseIntent.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@ import {
FDC3AppDetail,
} from '/@/handlers/fdc3/1.2/types/FDC3Data';
import utils from '/@/utils';
import { FDC3_TOPICS } from './topics';
import { FDC3_1_2_TOPICS } from './topics';
import { FDC3_2_0_TOPICS } from '/@/handlers/fdc3/2.0/topics';
import { ipcMain } from 'electron';
import { RUNTIME_TOPICS } from '/@/handlers/runtime/topics';

Expand Down Expand Up @@ -102,18 +103,26 @@ const resolveIntent = (message: RuntimeMessage): Promise<IntentResolution> => {
console.log('send intent from source', source);
const app = getRuntime().getView(appId);
if (app && app.content) {
app.content.webContents.send(FDC3_TOPICS.INTENT, {
topic: 'intent',
data: {
intent: message.data.intent,
context: message.data.context,
},
source: source,
});
//bringing the tab to front conditional on the type of intent
/*if (! utils.isDataIntent(message.intent)){
utils.bringToFront(appId);
}*/
if (app.fdc3Version === '1.2') {
app.content.webContents.send(FDC3_1_2_TOPICS.INTENT, {
topic: 'intent',
data: {
intent: message.data.intent,
context: message.data.context,
},
source: source,
});
} else {
app.content.webContents.send(FDC3_2_0_TOPICS.INTENT, {
topic: 'intent',
data: {
intent: message.data.intent,
context: message.data.context,
},
source: source,
});
}

if (sView && sView.parent && sView.parent.window) {
sView.parent.window.webContents.send(RUNTIME_TOPICS.SELECT_TAB, {
viewId: sView.id,
Expand Down Expand Up @@ -238,6 +247,7 @@ export const raiseIntent = async (message: RuntimeMessage) => {
const r: Array<FDC3App> = [];
const intent = message.data?.intent;

console.log('************** raiseIntent', message);
if (!intent) {
throw 'No Intent Provided';
}
Expand Down Expand Up @@ -313,11 +323,19 @@ export const raiseIntent = async (message: RuntimeMessage) => {
if (r[0].type === 'window' && r[0].details && r[0].details.instanceId) {
const view = runtime.getView(r[0].details.instanceId);
if (view) {
view.content.webContents.send(FDC3_TOPICS.INTENT, {
topic: 'intent',
data: message.data,
source: message.source,
});
if (view.fdc3Version === '1.2') {
view.content.webContents.send(FDC3_1_2_TOPICS.INTENT, {
topic: 'intent',
data: message.data,
source: message.source,
});
} else {
view.content.webContents.send(FDC3_2_0_TOPICS.INTENT, {
topic: 'intent',
data: message.data,
source: message.source,
});
}
//bringing the tab to front conditional on the type of intent
if (!utils.isDataIntent(intent)) {
/* utils.bringToFront(r[0].details.port); */
Expand All @@ -332,7 +350,6 @@ export const raiseIntent = async (message: RuntimeMessage) => {
const start_url = r[0].details.directoryData.start_url;
const pending = true;

//let win = window.open(start_url,"_blank");
const workspace = getRuntime().createWorkspace();

const view = workspace.createView(start_url, {
Expand Down Expand Up @@ -473,11 +490,19 @@ export const raiseIntentForContext = async (message: RuntimeMessage) => {
if (r[0].type === 'window' && r[0].details.instanceId) {
const view = runtime.getView(r[0].details.instanceId);
if (view) {
view.content.webContents.send(FDC3_TOPICS.INTENT, {
topic: 'intent',
data: message.data,
source: message.source,
});
if (view.fdc3Version === '1.2') {
view.content.webContents.send(FDC3_1_2_TOPICS.INTENT, {
topic: 'intent',
data: message.data,
source: message.source,
});
} else {
view.content.webContents.send(FDC3_2_0_TOPICS.INTENT, {
topic: 'intent',
data: message.data,
source: message.source,
});
}

return { source: message.source, version: '1.2' };
} else {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import { getRuntime } from '../../index';
import { RuntimeMessage } from '../runtimeMessage';
import { getRuntime } from '/@/index';
import { RuntimeMessage } from '/@/handlers/runtimeMessage';
import { DirectoryApp } from '/@/handlers/fdc3/1.2/types/FDC3Data';
import { TOPICS } from '../../constants';
import { FDC3_2_0_TOPICS } from '/@/handlers/fdc3/2.0/topics';
import { FDC3_1_2_TOPICS } from '/@/handlers/fdc3/1.2/topics';

export const resolveIntent = async (message: RuntimeMessage) => {
const runtime = getRuntime();
Expand Down Expand Up @@ -30,11 +31,19 @@ export const resolveIntent = async (message: RuntimeMessage) => {
const view = runtime.getView(message.data.selected?.instanceId);
//send new intent
if (view && view.parent) {
view.content.webContents.send(TOPICS.FDC3_INTENT, {
topic: 'intent',
data: { intent: message.data.intent, context: message.data.context },
source: message.data.id,
});
if (view.fdc3Version === '1.2') {
view.content.webContents.send(FDC3_1_2_TOPICS.INTENT, {
topic: 'intent',
data: { intent: message.data.intent, context: message.data.context },
source: message.data.id,
});
} else {
view.content.webContents.send(FDC3_2_0_TOPICS.INTENT, {
topic: 'intent',
data: { intent: message.data.intent, context: message.data.context },
source: message.data.id,
});
}
view.parent.setSelectedTab(view.id);
}
}
Expand Down
41 changes: 20 additions & 21 deletions packages/main/src/handlers/fdc3/1.2/topics.ts
Original file line number Diff line number Diff line change
@@ -1,22 +1,21 @@
export const FDC3_TOPICS = {
START: 'FDC3:start',
INITIATE: 'FDC3:initiate',
DROP_CONTEXT_LISTENER: 'FDC3:dropContextListener',
ADD_CONTEXT_LISTENER: 'FDC3:addContextListener',
DROP_INTENT_LISTENER: 'FDC3:dropIntentListener',
ADD_INTENT_LISTENER: 'FDC3:addIntentListener',
BROADCAST: 'FDC3:broadcast',
OPEN: 'FDC3:open',
CONTEXT: 'FDC3:context',
GET_CURRENT_CONTEXT: 'FDC3:getCurrentContext',
GET_OR_CREATE_CHANNEL: 'FDC3:getOrCreateChannel',
GET_SYSTEM_CHANNELS: 'FDC3:getSystemChannels',
LEAVE_CURRENT_CHANNEL: 'FDC3:leaveCurrentChannel',
GET_CURRENT_CHANNEL: 'FDC3:getCurrentChannel',
JOIN_CHANNEL: 'FDC3:joinChannel',
INTENT: 'FDC3:intent',
FIND_INTENT: 'FDC3:findIntent',
FIND_INTENTS_BY_CONTEXT: 'FDC3:findIntentsByContext',
RAISE_INTENT: 'FDC3:raiseIntent',
RAISE_INTENT_FOR_CONTEXT: 'FDC3:raiseIntentForContext',
export const FDC3_1_2_TOPICS = {
DROP_CONTEXT_LISTENER: 'FDC3_1.2:dropContextListener',
ADD_CONTEXT_LISTENER: 'FDC3_1.2:addContextListener',
DROP_INTENT_LISTENER: 'FDC3_1.2:dropIntentListener',
ADD_INTENT_LISTENER: 'FDC3_1.2:addIntentListener',
BROADCAST: 'FDC3_1.2:broadcast',
OPEN: 'FDC3_1.2:open',
CONTEXT: 'FDC3_1.2:context',
GET_CURRENT_CONTEXT: 'FDC3_1.2:getCurrentContext',
GET_OR_CREATE_CHANNEL: 'FDC3_1.2:getOrCreateChannel',
GET_SYSTEM_CHANNELS: 'FDC3_1.2:getSystemChannels',
LEAVE_CURRENT_CHANNEL: 'FDC3_1.2:leaveCurrentChannel',
GET_CURRENT_CHANNEL: 'FDC3_1.2:getCurrentChannel',
JOIN_CHANNEL: 'FDC3_1.2:joinChannel',
INTENT: 'FDC3_1.2:intent',
FIND_INTENT: 'FDC3_1.2:findIntent',
FIND_INTENTS_BY_CONTEXT: 'FDC3_1.2:findIntentsByContext',
RAISE_INTENT: 'FDC3_1.2:raiseIntent',
RAISE_INTENT_FOR_CONTEXT: 'FDC3_1.2:raiseIntentForContext',
RESOLVE_INTENT: 'FDC3_1.2:resolveIntent',
};
Loading

0 comments on commit 7170259

Please sign in to comment.