mirror of
https://github.com/Kong/insomnia.git
synced 2026-04-21 14:47:46 -04:00
fix: restart the hidden window when it is stuck
This commit is contained in:
@@ -9,6 +9,7 @@ export interface HiddenBrowserWindowToMainBridgeAPI {
|
||||
onmessage: (listener: (data: any, callback: (result: any) => void) => void) => void;
|
||||
curlRequest: (options: any) => Promise<any>;
|
||||
readCurlResponse: (options: { bodyPath: string; bodyCompression: Compression }) => Promise<{ body: string; error: string }>;
|
||||
setBusy: (busy: boolean) => void;
|
||||
}
|
||||
const bridge: HiddenBrowserWindowToMainBridgeAPI = {
|
||||
onmessage: listener => {
|
||||
@@ -37,6 +38,7 @@ const bridge: HiddenBrowserWindowToMainBridgeAPI = {
|
||||
|
||||
curlRequest: options => ipcRenderer.invoke('curlRequest', options),
|
||||
readCurlResponse: options => ipcRenderer.invoke('readCurlResponse', options),
|
||||
setBusy: busy => ipcRenderer.send('set-hidden-window-busy-status', busy),
|
||||
};
|
||||
|
||||
if (process.contextIsolated) {
|
||||
|
||||
@@ -7,6 +7,7 @@ export interface HiddenBrowserWindowBridgeAPI {
|
||||
};
|
||||
|
||||
window.bridge.onmessage(async (data, callback) => {
|
||||
window.bridge.setBusy(true);
|
||||
console.log('[hidden-browser-window] recieved message', data);
|
||||
try {
|
||||
const timeout = data.context.timeout || 5000;
|
||||
@@ -20,6 +21,8 @@ window.bridge.onmessage(async (data, callback) => {
|
||||
} catch (err) {
|
||||
console.error('error', err);
|
||||
callback({ error: err.message });
|
||||
} finally {
|
||||
window.bridge.setBusy(false);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -38,6 +38,7 @@ const MINIMUM_HEIGHT = 400;
|
||||
|
||||
const browserWindows = new Map<'Insomnia' | 'HiddenBrowserWindow', ElectronBrowserWindow>();
|
||||
let localStorage: LocalStorage | null = null;
|
||||
let hiddenWindowIsBusy = false;
|
||||
|
||||
interface Bounds {
|
||||
height?: number;
|
||||
@@ -55,9 +56,31 @@ export async function createHiddenBrowserWindow() {
|
||||
invariant(mainWindow, 'MainWindow is not defined, please restart the app.');
|
||||
|
||||
console.log('[main] Registering the hidden window restarting handler');
|
||||
ipcMain.on('set-hidden-window-busy-status', (_, busyStatus) => {
|
||||
hiddenWindowIsBusy = busyStatus;
|
||||
});
|
||||
// when the main window runs a script
|
||||
// if the hidden window is down, start it
|
||||
ipcMain.handle('open-channel-to-hidden-browser-window', async event => {
|
||||
if (hiddenWindowIsBusy) {
|
||||
const runningHiddenWindow = browserWindows.get('HiddenBrowserWindow');
|
||||
if (runningHiddenWindow == null) {
|
||||
hiddenWindowIsBusy = false;
|
||||
} else {
|
||||
await new Promise<void>(resolve => {
|
||||
invariant(runningHiddenWindow, 'hiddenBrowserWindow is running');
|
||||
// overwrite the closed handler
|
||||
runningHiddenWindow.on('closed', () => {
|
||||
if (runningHiddenWindow) {
|
||||
console.log('[main] restarting hidden browser window:', runningHiddenWindow.id);
|
||||
browserWindows.delete('HiddenBrowserWindow');
|
||||
}
|
||||
resolve();
|
||||
});
|
||||
stopHiddenBrowserWindow();
|
||||
});
|
||||
}
|
||||
}
|
||||
if (browserWindows.get('HiddenBrowserWindow')) {
|
||||
return;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user