Fix network disconnectivity issue.

This commit is contained in:
Zhongyi Tong
2017-06-01 19:33:56 +08:00
parent b0db81095a
commit 606e407aee
3 changed files with 42 additions and 39 deletions

View File

@@ -3,7 +3,6 @@ const path = require('path');
const electron = require('electron'); const electron = require('electron');
const {app} = require('electron'); const {app} = require('electron');
const ipc = require('electron').ipcMain; const ipc = require('electron').ipcMain;
const {dialog} = require('electron');
const electronLocalshortcut = require('electron-localshortcut'); const electronLocalshortcut = require('electron-localshortcut');
const Configstore = require('electron-config'); const Configstore = require('electron-config');
const isDev = require('electron-is-dev'); const isDev = require('electron-is-dev');
@@ -23,43 +22,6 @@ let mainWindow;
// Load this url in main window // Load this url in main window
const mainURL = 'file://' + path.join(__dirname, '../renderer', 'main.html'); const mainURL = 'file://' + path.join(__dirname, '../renderer', 'main.html');
function checkConnectivity() {
return dialog.showMessageBox({
title: 'Internet connection problem',
message: 'No internet available! Try again?',
type: 'warning',
buttons: ['Try again', 'Close'],
defaultId: 0
}, index => {
if (index === 0) {
mainWindow.webContents.reload();
mainWindow.webContents.send('destroytray');
}
if (index === 1) {
app.quit();
}
});
}
const connectivityERR = [
'ERR_INTERNET_DISCONNECTED',
'ERR_PROXY_CONNECTION_FAILED',
'ERR_CONNECTION_RESET',
'ERR_NOT_CONNECTED',
'ERR_NAME_NOT_RESOLVED'
];
// TODO
function checkConnection() {
// eslint-disable-next-line no-unused-vars
mainWindow.webContents.on('did-fail-load', (event, errorCode, errorDescription, validatedURL) => {
const hasConnectivityErr = (connectivityERR.indexOf(errorDescription) >= 0);
if (hasConnectivityErr) {
console.error('error', errorDescription);
checkConnectivity();
}
});
}
const isAlreadyRunning = app.makeSingleInstance(() => { const isAlreadyRunning = app.makeSingleInstance(() => {
if (mainWindow) { if (mainWindow) {
if (mainWindow.isMinimized()) { if (mainWindow.isMinimized()) {
@@ -222,7 +184,6 @@ app.on('ready', () => {
mainWindow.reload(); mainWindow.reload();
mainWindow.webContents.send('destroytray'); mainWindow.webContents.send('destroytray');
}); });
checkConnection();
ipc.on('reload-main', () => { ipc.on('reload-main', () => {
page.reload(); page.reload();

View File

@@ -6,6 +6,7 @@ const DomainUtil = require(__dirname + '/js/utils/domain-util.js');
const SystemUtil = require(__dirname + '/js/utils/system-util.js'); const SystemUtil = require(__dirname + '/js/utils/system-util.js');
const {linkIsInternal, skipImages} = require(__dirname + '/../main/link-helper'); const {linkIsInternal, skipImages} = require(__dirname + '/../main/link-helper');
const {shell, ipcRenderer} = require('electron'); const {shell, ipcRenderer} = require('electron');
const {app, dialog} = require('electron').remote;
class ServerManagerView { class ServerManagerView {
constructor() { constructor() {
@@ -185,6 +186,36 @@ class ServerManagerView {
$webView.addEventListener('dom-ready', () => { $webView.addEventListener('dom-ready', () => {
$webView.focus(); $webView.focus();
}); });
// eslint-disable-next-line no-unused-vars
$webView.addEventListener('did-fail-load', (event) => {
const {errorCode, errorDescription, validatedURL} = event;
const hasConnectivityErr = (this.systemUtil.connectivityERR.indexOf(errorDescription) >= 0);
if (hasConnectivityErr) {
console.error('error', errorDescription);
this.checkConnectivity();
}
});
}
checkConnectivity() {
return dialog.showMessageBox({
title: 'Internet connection problem',
message: 'No internet available! Try again?',
type: 'warning',
buttons: ['Try again', 'Close'],
defaultId: 0
}, index => {
if (index === 0) {
const activeWebview = document.getElementById(`webview-${this.activeTabIndex}`);
activeWebview.reload();
ipcRenderer.send('reload');
ipcRenderer.send('destroytray');
}
if (index === 1) {
app.quit();
}
});
} }
registerIpcs() { registerIpcs() {

View File

@@ -5,6 +5,17 @@ const {app} = require('electron').remote;
const os = require('os'); const os = require('os');
class SystemUtil { class SystemUtil {
constructor() {
this.connectivityERR = [
'ERR_INTERNET_DISCONNECTED',
'ERR_PROXY_CONNECTION_FAILED',
'ERR_CONNECTION_RESET',
'ERR_NOT_CONNECTED',
'ERR_NAME_NOT_RESOLVED',
'ERR_NETWORK_CHANGED'
];
}
getOS() { getOS() {
if (os.platform() === 'darwin') { if (os.platform() === 'darwin') {
return 'Mac'; return 'Mac';