-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.ts
More file actions
127 lines (115 loc) · 2.89 KB
/
index.ts
File metadata and controls
127 lines (115 loc) · 2.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
import { writable, get } from "svelte/store";
export const actionSettings = writable<any>({});
export const globalSettings = writable<any>({});
export const eventTarget = new EventTarget();
let ws: WebSocket, action: string, context: string;
export function sendToPlugin(payload: any) {
if (ws?.readyState == WebSocket.OPEN) {
ws.send(
JSON.stringify({
event: "sendToPlugin",
action,
context,
payload,
}),
);
} else {
console.warn(
"Failed to send sendToPlugin event: not connected to OpenAction server",
);
}
}
export function openUrl(url: string) {
if (ws?.readyState == WebSocket.OPEN) {
ws.send(
JSON.stringify({
event: "openUrl",
payload: { url },
}),
);
} else {
console.warn(
"Failed to send openUrl event: not connected to OpenAction server",
);
}
}
// @ts-expect-error
if (globalThis.connectOpenActionSocketData) {
const [port, propertyInspectorUUID, registerEvent, _info, actionInfo] =
// @ts-expect-error
await globalThis.connectOpenActionSocketData;
ws = new WebSocket("ws://localhost:" + port);
const actionData = JSON.parse(actionInfo);
action = actionData.action;
context = actionData.context;
actionSettings.set(actionData.payload.settings ?? {});
let actionSettingsSubscribed = false,
globalSettingsSubscribed = false,
actionSettingsFromServer = false,
globalSettingsFromServer = false;
actionSettings.subscribe((settings) => {
if (!actionSettingsSubscribed) {
actionSettingsSubscribed = true;
return;
}
if (actionSettingsFromServer) return;
ws.send(
JSON.stringify({
event: "setSettings",
context,
payload: settings,
}),
);
});
globalSettings.subscribe((settings) => {
if (!globalSettingsSubscribed) {
globalSettingsSubscribed = true;
return;
}
if (globalSettingsFromServer) return;
ws.send(
JSON.stringify({
event: "setGlobalSettings",
context,
payload: settings,
}),
);
});
ws.onopen = () => {
ws.send(
JSON.stringify({
event: registerEvent,
uuid: propertyInspectorUUID,
}),
);
ws.send(
JSON.stringify({
event: "getGlobalSettings",
context,
}),
);
};
ws.onmessage = (event) => {
const json = JSON.parse(event.data);
if (json.event == "didReceiveSettings") {
actionSettingsFromServer = true;
actionSettings.set(json.payload.settings);
actionSettingsFromServer = false;
} else if (json.event == "didReceiveGlobalSettings") {
globalSettingsFromServer = true;
globalSettings.set(json.payload.settings);
globalSettingsFromServer = false;
}
eventTarget.dispatchEvent(new CustomEvent(json.event, { detail: json }));
};
ws.onerror = (event) => {
console.error("Encountered a WebSocket error:", event);
};
ws.onclose = () => {
console.error("WebSocket connection to OpenAction server closed");
};
} else {
console.error(
"Failed to connect to OpenAction server: connection details not provided",
);
}