fix throwing error screen before loading update
This commit is contained in:
@@ -84,61 +84,76 @@ const applicationError = `
|
||||
|
||||
|
||||
const exposeContext = async () => {
|
||||
let version = await ipcRenderer.invoke("get-core-version");
|
||||
let appPath = await ipcRenderer.invoke("get-app-path");
|
||||
let arch = await ipcRenderer.invoke("get-arch");
|
||||
let deviceName = await ipcRenderer.invoke("device:name");
|
||||
let deviceId = await ipcRenderer.invoke("device:id");
|
||||
|
||||
setTimeout(() => {
|
||||
/**
|
||||
* Если после определенного таймаута приложение так и
|
||||
* не загрузилось, то считаем, что процесс завис,
|
||||
* и показываем экран ошибки. Так же отправляем
|
||||
* сигнал в main процесс, чтобы тот мог попытаться
|
||||
* откатить обновление.
|
||||
*/
|
||||
if(document.body.innerHTML.length < 100){
|
||||
document.body.innerHTML = applicationError;
|
||||
ipcRenderer.invoke("report-boot-process-failed");
|
||||
}
|
||||
}, 5000);
|
||||
|
||||
let downloadsPath = await ipcRenderer.invoke("get-downloads-path");
|
||||
if (process.contextIsolated) {
|
||||
try {
|
||||
contextBridge.exposeInMainWorld('electron', electronAPI)
|
||||
contextBridge.exposeInMainWorld('api', api)
|
||||
contextBridge.exposeInMainWorld('version', version);
|
||||
contextBridge.exposeInMainWorld('platform', process.platform);
|
||||
contextBridge.exposeInMainWorld('appPath', appPath);
|
||||
contextBridge.exposeInMainWorld('arch', arch);
|
||||
contextBridge.exposeInMainWorld('deviceName', deviceName);
|
||||
contextBridge.exposeInMainWorld('deviceId', deviceId);
|
||||
contextBridge.exposeInMainWorld('shell', {
|
||||
openExternal: (url: string) => {
|
||||
ipcRenderer.invoke('openExternal', url);
|
||||
},
|
||||
showItemInFolder: (fullPath: string) => {
|
||||
ipcRenderer.invoke('showItemInFolder', fullPath);
|
||||
}
|
||||
});
|
||||
contextBridge.exposeInMainWorld('downloadsPath', downloadsPath)
|
||||
} catch (error) {
|
||||
console.error(error)
|
||||
}
|
||||
} else {
|
||||
window.electron = electronAPI
|
||||
window.api = api
|
||||
window.version = version;
|
||||
window.platform = process.platform;
|
||||
window.appPath = appPath;
|
||||
window.arch = arch;
|
||||
window.shell = shell;
|
||||
window.downloadsPath = downloadsPath;
|
||||
window.deviceName = deviceName;
|
||||
window.deviceId = deviceId;
|
||||
}
|
||||
let version = await ipcRenderer.invoke("get-core-version");
|
||||
let appPath = await ipcRenderer.invoke("get-app-path");
|
||||
let arch = await ipcRenderer.invoke("get-arch");
|
||||
let deviceName = await ipcRenderer.invoke("device:name");
|
||||
let deviceId = await ipcRenderer.invoke("device:id");
|
||||
let interval : any = 0;
|
||||
|
||||
interval = setInterval(() => {
|
||||
/**
|
||||
* Если после определенного таймаута приложение так и
|
||||
* не загрузилось, то считаем, что процесс завис,
|
||||
* и показываем экран ошибки. Так же отправляем
|
||||
* сигнал в main процесс, чтобы тот мог попытаться
|
||||
* откатить обновление
|
||||
*/
|
||||
if (document.body.innerHTML.indexOf("preloadersignature") !== -1) {
|
||||
/**
|
||||
* Если сейчас показывается прелоадер, то не считаем
|
||||
* что обновление битое, так как само обновление еще не
|
||||
* загрузилось в приложение
|
||||
*/
|
||||
return;
|
||||
}
|
||||
if (document.body.innerHTML.length < 100) {
|
||||
/**
|
||||
* Приложение загружено, а прошло больше 5 секунд
|
||||
* с момента прелоадера, значит что-то пошло не так
|
||||
* и нужно показать экран ошибки
|
||||
*/
|
||||
document.body.innerHTML = applicationError;
|
||||
ipcRenderer.invoke("report-boot-process-failed");
|
||||
}
|
||||
clearInterval(interval);
|
||||
}, 5000);
|
||||
|
||||
let downloadsPath = await ipcRenderer.invoke("get-downloads-path");
|
||||
if (process.contextIsolated) {
|
||||
try {
|
||||
contextBridge.exposeInMainWorld('electron', electronAPI)
|
||||
contextBridge.exposeInMainWorld('api', api)
|
||||
contextBridge.exposeInMainWorld('version', version);
|
||||
contextBridge.exposeInMainWorld('platform', process.platform);
|
||||
contextBridge.exposeInMainWorld('appPath', appPath);
|
||||
contextBridge.exposeInMainWorld('arch', arch);
|
||||
contextBridge.exposeInMainWorld('deviceName', deviceName);
|
||||
contextBridge.exposeInMainWorld('deviceId', deviceId);
|
||||
contextBridge.exposeInMainWorld('shell', {
|
||||
openExternal: (url: string) => {
|
||||
ipcRenderer.invoke('openExternal', url);
|
||||
},
|
||||
showItemInFolder: (fullPath: string) => {
|
||||
ipcRenderer.invoke('showItemInFolder', fullPath);
|
||||
}
|
||||
});
|
||||
contextBridge.exposeInMainWorld('downloadsPath', downloadsPath)
|
||||
} catch (error) {
|
||||
console.error(error)
|
||||
}
|
||||
} else {
|
||||
window.electron = electronAPI
|
||||
window.api = api
|
||||
window.version = version;
|
||||
window.platform = process.platform;
|
||||
window.appPath = appPath;
|
||||
window.arch = arch;
|
||||
window.shell = shell;
|
||||
window.downloadsPath = downloadsPath;
|
||||
window.deviceName = deviceName;
|
||||
window.deviceId = deviceId;
|
||||
}
|
||||
}
|
||||
|
||||
exposeContext();
|
||||
Reference in New Issue
Block a user