@raydiant/playlist-window-manager 0.27.3-rc.1 → 0.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/BrowserViewRenderer.d.ts +1 -0
- package/build/BrowserViewRenderer.js +7 -0
- package/build/BrowserWindowRenderer.js +2 -2
- package/build/PresentationWindow.js +4 -2
- package/build/preload.js +2 -32
- package/package.json +1 -1
- package/src/BrowserViewRenderer.ts +11 -0
- package/src/BrowserWindowRenderer.ts +2 -2
- package/src/PresentationWindow.ts +4 -2
- package/src/preload.ts +2 -42
|
@@ -13,6 +13,7 @@ export default class BrowserViewRenderer implements PresentationWindowRenderer {
|
|
|
13
13
|
removeWindow(windowId: string): Promise<void>;
|
|
14
14
|
sendMessageString(windowId: string, message: string): void;
|
|
15
15
|
sendMessageObject(windowId: string, type: string, payload?: any): void;
|
|
16
|
+
sendOnlineStatus(windowId: string, isOnline: boolean): void;
|
|
16
17
|
muteWindow(windowId: string): void;
|
|
17
18
|
unMuteWindow(windowId: string): void;
|
|
18
19
|
private getWindow;
|
|
@@ -191,6 +191,13 @@ var BrowserViewRenderer = /** @class */ (function () {
|
|
|
191
191
|
}
|
|
192
192
|
window.view.webContents.send('electron-main', { type: type, payload: payload });
|
|
193
193
|
};
|
|
194
|
+
BrowserViewRenderer.prototype.sendOnlineStatus = function (windowId, isOnline) {
|
|
195
|
+
var window = this.getWindow(windowId);
|
|
196
|
+
if (!window) {
|
|
197
|
+
throw new Error("Failed to send isOnline status to window, missing window id '".concat(windowId, "'"));
|
|
198
|
+
}
|
|
199
|
+
window.view.webContents.send('online-status', isOnline);
|
|
200
|
+
};
|
|
194
201
|
BrowserViewRenderer.prototype.muteWindow = function (windowId) {
|
|
195
202
|
var window = this.getWindow(windowId);
|
|
196
203
|
if (!window) {
|
|
@@ -90,7 +90,7 @@ var BrowserWindowRenderer = /** @class */ (function () {
|
|
|
90
90
|
* This option fixes window not being able to take fullscreen leaving
|
|
91
91
|
* 1px gap at the right and bottom of the screen.
|
|
92
92
|
*/
|
|
93
|
-
|
|
93
|
+
resizable: false,
|
|
94
94
|
frame: this.opts.frame,
|
|
95
95
|
hasShadow: this.opts.hasShadow,
|
|
96
96
|
webPreferences: {
|
|
@@ -133,7 +133,7 @@ var BrowserWindowRenderer = /** @class */ (function () {
|
|
|
133
133
|
* This option fixes window not being able to take fullscreen leaving
|
|
134
134
|
* 1px gap at the right and bottom of the screen.
|
|
135
135
|
*/
|
|
136
|
-
|
|
136
|
+
resizable: false,
|
|
137
137
|
frame: this.opts.frame,
|
|
138
138
|
// NOTE: useWindowPool: true does not work with renderChildWindowsAsBrowserViews: false
|
|
139
139
|
// because the parent can't be changed after creating the BrowserWindow.
|
|
@@ -757,11 +757,13 @@ var PresentationWindow = /** @class */ (function () {
|
|
|
757
757
|
};
|
|
758
758
|
PresentationWindow.prototype.sendOnlineStatus = function (isOnline) {
|
|
759
759
|
var _a = this.options, windowId = _a.windowId, renderer = _a.renderer;
|
|
760
|
-
// Send online-status event.
|
|
761
|
-
// are bypassing Raydiant SDK message receivers
|
|
760
|
+
// Send online-status event. We are not using sendMessageObject since we
|
|
761
|
+
// are bypassing Raydiant SDK's message receivers and communicating directly
|
|
762
|
+
// with the preload script.
|
|
762
763
|
if (renderer.sendOnlineStatus) {
|
|
763
764
|
renderer.sendOnlineStatus(windowId, isOnline);
|
|
764
765
|
}
|
|
766
|
+
// Forward the event to the child window managers.
|
|
765
767
|
Object.values(this.windowManagers).forEach(function (wm) {
|
|
766
768
|
wm.sendOnlineStatus(isOnline);
|
|
767
769
|
});
|
package/build/preload.js
CHANGED
|
@@ -35,13 +35,10 @@ function makeWindowEvent(type) {
|
|
|
35
35
|
var isOnline = electron_1.ipcRenderer.sendSync('get-online-status');
|
|
36
36
|
// Listen for online status changes from the main process.
|
|
37
37
|
electron_1.ipcRenderer.on('online-status', function (_, nextIsOnline) {
|
|
38
|
-
console.log("Online status: ".concat(nextIsOnline));
|
|
39
38
|
if (nextIsOnline !== isOnline) {
|
|
40
|
-
console.log('Online status changed, updating navigator.onLine');
|
|
41
39
|
isOnline = nextIsOnline;
|
|
42
40
|
var events_1 = makeWindowEvent(isOnline ? 'online' : 'offline');
|
|
43
41
|
var listeners = isOnline ? onlineListeners : offlineListeners;
|
|
44
|
-
console.log("Running ".concat(isOnline ? 'online' : 'offline', " listeners, count: ").concat(listeners.size));
|
|
45
42
|
listeners.forEach(function (listener) {
|
|
46
43
|
if (typeof listener === 'function') {
|
|
47
44
|
listener(events_1);
|
|
@@ -57,21 +54,19 @@ electron_1.ipcRenderer.on('online-status', function (_, nextIsOnline) {
|
|
|
57
54
|
// when running on the device.
|
|
58
55
|
Object.defineProperty(navigator, 'onLine', {
|
|
59
56
|
get: function () {
|
|
60
|
-
console.log("navigator.onLine called, returning ".concat(isOnline));
|
|
61
57
|
return isOnline;
|
|
62
58
|
},
|
|
63
59
|
});
|
|
64
60
|
var offlineListeners = new Set();
|
|
65
61
|
var onlineListeners = new Set();
|
|
62
|
+
// Intercept online/offline add event listeners so we can call them when online status changes.
|
|
66
63
|
var originalAddEventListener = window.addEventListener.bind(window);
|
|
67
64
|
Object.defineProperty(window, 'addEventListener', {
|
|
68
65
|
value: function (type, listener) {
|
|
69
66
|
if (type === 'online') {
|
|
70
|
-
console.log("Intercepted online addEventListener");
|
|
71
67
|
onlineListeners.add(listener);
|
|
72
68
|
}
|
|
73
69
|
else if (type === 'offline') {
|
|
74
|
-
console.log("Intercepted offline addEventListener");
|
|
75
70
|
offlineListeners.add(listener);
|
|
76
71
|
}
|
|
77
72
|
else {
|
|
@@ -79,15 +74,14 @@ Object.defineProperty(window, 'addEventListener', {
|
|
|
79
74
|
}
|
|
80
75
|
},
|
|
81
76
|
});
|
|
77
|
+
// Intercept online/offline remove event listeners so we can remove our custom listeners.
|
|
82
78
|
var originalRemoveEventListener = window.removeEventListener.bind(window);
|
|
83
79
|
Object.defineProperty(window, 'removeEventListener', {
|
|
84
80
|
value: function (type, listener) {
|
|
85
81
|
if (type === 'online') {
|
|
86
|
-
console.log("Intercepted online removeEventListener");
|
|
87
82
|
onlineListeners.delete(listener);
|
|
88
83
|
}
|
|
89
84
|
else if (type === 'offline') {
|
|
90
|
-
console.log("Intercepted offline removeEventListener");
|
|
91
85
|
offlineListeners.delete(listener);
|
|
92
86
|
}
|
|
93
87
|
else {
|
|
@@ -95,27 +89,3 @@ Object.defineProperty(window, 'removeEventListener', {
|
|
|
95
89
|
}
|
|
96
90
|
},
|
|
97
91
|
});
|
|
98
|
-
// // TODO: Remove this (for local dev only).
|
|
99
|
-
// (window as any).simulateOnline = () => {
|
|
100
|
-
// isOnline = true;
|
|
101
|
-
// console.log(`Running online listeners, count: ${onlineListeners.size}`);
|
|
102
|
-
// onlineListeners.forEach((listener) => {
|
|
103
|
-
// if (typeof listener === 'function') {
|
|
104
|
-
// listener(makeWindowEvent('online'));
|
|
105
|
-
// } else if (listener.handleEvent) {
|
|
106
|
-
// listener.handleEvent(makeWindowEvent('online'));
|
|
107
|
-
// }
|
|
108
|
-
// });
|
|
109
|
-
// };
|
|
110
|
-
// // TODO: Remove this (for local dev only).
|
|
111
|
-
// (window as any).simulateOffline = () => {
|
|
112
|
-
// isOnline = false;
|
|
113
|
-
// console.log(`Running offline listeners, count: ${offlineListeners.size}`);
|
|
114
|
-
// offlineListeners.forEach((listener) => {
|
|
115
|
-
// if (typeof listener === 'function') {
|
|
116
|
-
// listener(makeWindowEvent('offline'));
|
|
117
|
-
// } else if (listener.handleEvent) {
|
|
118
|
-
// listener.handleEvent(makeWindowEvent('offline'));
|
|
119
|
-
// }
|
|
120
|
-
// });
|
|
121
|
-
// };
|
package/package.json
CHANGED
|
@@ -154,6 +154,17 @@ export default class BrowserViewRenderer implements PresentationWindowRenderer {
|
|
|
154
154
|
window.view.webContents.send('electron-main', { type, payload });
|
|
155
155
|
}
|
|
156
156
|
|
|
157
|
+
public sendOnlineStatus(windowId: string, isOnline: boolean) {
|
|
158
|
+
const window = this.getWindow(windowId);
|
|
159
|
+
if (!window) {
|
|
160
|
+
throw new Error(
|
|
161
|
+
`Failed to send isOnline status to window, missing window id '${windowId}'`
|
|
162
|
+
);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
window.view.webContents.send('online-status', isOnline);
|
|
166
|
+
}
|
|
167
|
+
|
|
157
168
|
public muteWindow(windowId: string) {
|
|
158
169
|
const window = this.getWindow(windowId);
|
|
159
170
|
if (!window) {
|
|
@@ -67,7 +67,7 @@ export default class BrowserWindowRenderer
|
|
|
67
67
|
* This option fixes window not being able to take fullscreen leaving
|
|
68
68
|
* 1px gap at the right and bottom of the screen.
|
|
69
69
|
*/
|
|
70
|
-
|
|
70
|
+
resizable: false,
|
|
71
71
|
frame: this.opts.frame,
|
|
72
72
|
hasShadow: this.opts.hasShadow,
|
|
73
73
|
webPreferences: {
|
|
@@ -119,7 +119,7 @@ export default class BrowserWindowRenderer
|
|
|
119
119
|
* This option fixes window not being able to take fullscreen leaving
|
|
120
120
|
* 1px gap at the right and bottom of the screen.
|
|
121
121
|
*/
|
|
122
|
-
|
|
122
|
+
resizable: false,
|
|
123
123
|
frame: this.opts.frame,
|
|
124
124
|
// NOTE: useWindowPool: true does not work with renderChildWindowsAsBrowserViews: false
|
|
125
125
|
// because the parent can't be changed after creating the BrowserWindow.
|
|
@@ -528,13 +528,15 @@ export default class PresentationWindow {
|
|
|
528
528
|
|
|
529
529
|
public sendOnlineStatus(isOnline: boolean) {
|
|
530
530
|
const { windowId, renderer } = this.options;
|
|
531
|
-
// Send online-status event. This Separate from sendMessageObject since we
|
|
532
|
-
// are bypassing Raydiant SDK message receivers.
|
|
533
531
|
|
|
532
|
+
// Send online-status event. We are not using sendMessageObject since we
|
|
533
|
+
// are bypassing Raydiant SDK's message receivers and communicating directly
|
|
534
|
+
// with the preload script.
|
|
534
535
|
if (renderer.sendOnlineStatus) {
|
|
535
536
|
renderer.sendOnlineStatus(windowId, isOnline);
|
|
536
537
|
}
|
|
537
538
|
|
|
539
|
+
// Forward the event to the child window managers.
|
|
538
540
|
Object.values(this.windowManagers).forEach((wm) => {
|
|
539
541
|
wm.sendOnlineStatus(isOnline);
|
|
540
542
|
});
|
package/src/preload.ts
CHANGED
|
@@ -50,21 +50,12 @@ let isOnline = ipcRenderer.sendSync('get-online-status');
|
|
|
50
50
|
ipcRenderer.on(
|
|
51
51
|
'online-status',
|
|
52
52
|
(_: IpcRendererEvent, nextIsOnline: boolean) => {
|
|
53
|
-
console.log(`Online status: ${nextIsOnline}`);
|
|
54
|
-
|
|
55
53
|
if (nextIsOnline !== isOnline) {
|
|
56
|
-
console.log('Online status changed, updating navigator.onLine');
|
|
57
54
|
isOnline = nextIsOnline;
|
|
58
55
|
|
|
59
56
|
const events = makeWindowEvent(isOnline ? 'online' : 'offline');
|
|
60
57
|
const listeners = isOnline ? onlineListeners : offlineListeners;
|
|
61
58
|
|
|
62
|
-
console.log(
|
|
63
|
-
`Running ${isOnline ? 'online' : 'offline'} listeners, count: ${
|
|
64
|
-
listeners.size
|
|
65
|
-
}`
|
|
66
|
-
);
|
|
67
|
-
|
|
68
59
|
listeners.forEach((listener) => {
|
|
69
60
|
if (typeof listener === 'function') {
|
|
70
61
|
listener(events);
|
|
@@ -81,7 +72,6 @@ ipcRenderer.on(
|
|
|
81
72
|
// when running on the device.
|
|
82
73
|
Object.defineProperty(navigator, 'onLine', {
|
|
83
74
|
get: () => {
|
|
84
|
-
console.log(`navigator.onLine called, returning ${isOnline}`);
|
|
85
75
|
return isOnline;
|
|
86
76
|
},
|
|
87
77
|
});
|
|
@@ -89,14 +79,13 @@ Object.defineProperty(navigator, 'onLine', {
|
|
|
89
79
|
const offlineListeners = new Set<EventListenerOrEventListenerObject>();
|
|
90
80
|
const onlineListeners = new Set<EventListenerOrEventListenerObject>();
|
|
91
81
|
|
|
82
|
+
// Intercept online/offline add event listeners so we can call them when online status changes.
|
|
92
83
|
const originalAddEventListener = window.addEventListener.bind(window);
|
|
93
84
|
Object.defineProperty(window, 'addEventListener', {
|
|
94
85
|
value: (type: string, listener: EventListenerOrEventListenerObject) => {
|
|
95
86
|
if (type === 'online') {
|
|
96
|
-
console.log(`Intercepted online addEventListener`);
|
|
97
87
|
onlineListeners.add(listener);
|
|
98
88
|
} else if (type === 'offline') {
|
|
99
|
-
console.log(`Intercepted offline addEventListener`);
|
|
100
89
|
offlineListeners.add(listener);
|
|
101
90
|
} else {
|
|
102
91
|
return originalAddEventListener(type, listener);
|
|
@@ -104,45 +93,16 @@ Object.defineProperty(window, 'addEventListener', {
|
|
|
104
93
|
},
|
|
105
94
|
});
|
|
106
95
|
|
|
96
|
+
// Intercept online/offline remove event listeners so we can remove our custom listeners.
|
|
107
97
|
const originalRemoveEventListener = window.removeEventListener.bind(window);
|
|
108
98
|
Object.defineProperty(window, 'removeEventListener', {
|
|
109
99
|
value: (type: string, listener: EventListenerOrEventListenerObject) => {
|
|
110
100
|
if (type === 'online') {
|
|
111
|
-
console.log(`Intercepted online removeEventListener`);
|
|
112
101
|
onlineListeners.delete(listener);
|
|
113
102
|
} else if (type === 'offline') {
|
|
114
|
-
console.log(`Intercepted offline removeEventListener`);
|
|
115
103
|
offlineListeners.delete(listener);
|
|
116
104
|
} else {
|
|
117
105
|
return originalRemoveEventListener(type, listener);
|
|
118
106
|
}
|
|
119
107
|
},
|
|
120
108
|
});
|
|
121
|
-
|
|
122
|
-
// // TODO: Remove this (for local dev only).
|
|
123
|
-
// (window as any).simulateOnline = () => {
|
|
124
|
-
// isOnline = true;
|
|
125
|
-
|
|
126
|
-
// console.log(`Running online listeners, count: ${onlineListeners.size}`);
|
|
127
|
-
// onlineListeners.forEach((listener) => {
|
|
128
|
-
// if (typeof listener === 'function') {
|
|
129
|
-
// listener(makeWindowEvent('online'));
|
|
130
|
-
// } else if (listener.handleEvent) {
|
|
131
|
-
// listener.handleEvent(makeWindowEvent('online'));
|
|
132
|
-
// }
|
|
133
|
-
// });
|
|
134
|
-
// };
|
|
135
|
-
|
|
136
|
-
// // TODO: Remove this (for local dev only).
|
|
137
|
-
// (window as any).simulateOffline = () => {
|
|
138
|
-
// isOnline = false;
|
|
139
|
-
|
|
140
|
-
// console.log(`Running offline listeners, count: ${offlineListeners.size}`);
|
|
141
|
-
// offlineListeners.forEach((listener) => {
|
|
142
|
-
// if (typeof listener === 'function') {
|
|
143
|
-
// listener(makeWindowEvent('offline'));
|
|
144
|
-
// } else if (listener.handleEvent) {
|
|
145
|
-
// listener.handleEvent(makeWindowEvent('offline'));
|
|
146
|
-
// }
|
|
147
|
-
// });
|
|
148
|
-
// };
|