Fix app single instance lock (#385)
This commit is contained in:
parent
48a529dd51
commit
fdfbad68e2
1 changed files with 40 additions and 34 deletions
|
@ -84,16 +84,6 @@ const installExtensions = async () => {
|
||||||
.catch(console.log);
|
.catch(console.log);
|
||||||
};
|
};
|
||||||
|
|
||||||
const singleInstance = app.requestSingleInstanceLock();
|
|
||||||
|
|
||||||
if (!singleInstance) {
|
|
||||||
app.quit();
|
|
||||||
} else {
|
|
||||||
app.on('second-instance', () => {
|
|
||||||
mainWindow?.show();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const RESOURCES_PATH = app.isPackaged
|
const RESOURCES_PATH = app.isPackaged
|
||||||
? path.join(process.resourcesPath, 'assets')
|
? path.join(process.resourcesPath, 'assets')
|
||||||
: path.join(__dirname, '../../assets');
|
: path.join(__dirname, '../../assets');
|
||||||
|
@ -666,31 +656,47 @@ const FONT_HEADERS = [
|
||||||
'font/woff2',
|
'font/woff2',
|
||||||
];
|
];
|
||||||
|
|
||||||
app.whenReady()
|
const singleInstance = app.requestSingleInstanceLock();
|
||||||
.then(() => {
|
|
||||||
protocol.handle('feishin', async (request) => {
|
|
||||||
const filePath = `file://${request.url.slice('feishin://'.length)}`;
|
|
||||||
const response = await net.fetch(filePath);
|
|
||||||
const contentType = response.headers.get('content-type');
|
|
||||||
|
|
||||||
if (!contentType || !FONT_HEADERS.includes(contentType)) {
|
if (!singleInstance) {
|
||||||
getMainWindow()?.webContents.send('custom-font-error', filePath);
|
app.quit();
|
||||||
|
} else {
|
||||||
return new Response(null, {
|
app.on('second-instance', () => {
|
||||||
status: 403,
|
if (mainWindow) {
|
||||||
statusText: 'Forbidden',
|
if (mainWindow.isMinimized()) {
|
||||||
});
|
mainWindow.restore();
|
||||||
}
|
}
|
||||||
|
|
||||||
return response;
|
mainWindow.focus();
|
||||||
});
|
}
|
||||||
|
});
|
||||||
|
|
||||||
createWindow();
|
app.whenReady()
|
||||||
createTray();
|
.then(() => {
|
||||||
app.on('activate', () => {
|
protocol.handle('feishin', async (request) => {
|
||||||
// On macOS it's common to re-create a window in the app when the
|
const filePath = `file://${request.url.slice('feishin://'.length)}`;
|
||||||
// dock icon is clicked and there are no other windows open.
|
const response = await net.fetch(filePath);
|
||||||
if (mainWindow === null) createWindow();
|
const contentType = response.headers.get('content-type');
|
||||||
});
|
|
||||||
})
|
if (!contentType || !FONT_HEADERS.includes(contentType)) {
|
||||||
.catch(console.log);
|
getMainWindow()?.webContents.send('custom-font-error', filePath);
|
||||||
|
|
||||||
|
return new Response(null, {
|
||||||
|
status: 403,
|
||||||
|
statusText: 'Forbidden',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return response;
|
||||||
|
});
|
||||||
|
|
||||||
|
createWindow();
|
||||||
|
createTray();
|
||||||
|
app.on('activate', () => {
|
||||||
|
// On macOS it's common to re-create a window in the app when the
|
||||||
|
// dock icon is clicked and there are no other windows open.
|
||||||
|
if (mainWindow === null) createWindow();
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.catch(console.log);
|
||||||
|
}
|
||||||
|
|
Reference in a new issue