Add cancel button to updater
This commit is contained in:
parent
c4240bd87f
commit
48f165c44f
|
@ -55,6 +55,11 @@ function UpdaterPage(props) {
|
||||||
now={props.progress}
|
now={props.progress}
|
||||||
label={`${props.progress}%`}
|
label={`${props.progress}%`}
|
||||||
/>
|
/>
|
||||||
|
<div className='pull-right'>
|
||||||
|
<Button
|
||||||
|
onClick={props.onClickCancel}
|
||||||
|
>{'Cancel'}</Button>
|
||||||
|
</div>
|
||||||
</Navbar> :
|
</Navbar> :
|
||||||
<Navbar
|
<Navbar
|
||||||
className='UpdaterPage-footer'
|
className='UpdaterPage-footer'
|
||||||
|
@ -93,6 +98,7 @@ UpdaterPage.propTypes = {
|
||||||
onClickReleaseNotes: propTypes.func.isRequired,
|
onClickReleaseNotes: propTypes.func.isRequired,
|
||||||
onClickRemind: propTypes.func.isRequired,
|
onClickRemind: propTypes.func.isRequired,
|
||||||
onClickSkip: propTypes.func.isRequired,
|
onClickSkip: propTypes.func.isRequired,
|
||||||
|
onClickCancel: propTypes.func.isRequired,
|
||||||
};
|
};
|
||||||
|
|
||||||
export default UpdaterPage;
|
export default UpdaterPage;
|
||||||
|
|
|
@ -48,5 +48,6 @@ storiesOf('UpdaterPage', module).
|
||||||
appName={appName}
|
appName={appName}
|
||||||
isDownloading={true}
|
isDownloading={true}
|
||||||
progress={0}
|
progress={0}
|
||||||
|
onClickCancel={action('clicked cancel')}
|
||||||
/>
|
/>
|
||||||
));
|
));
|
||||||
|
|
|
@ -53,6 +53,9 @@ class UpdaterPageContainer extends React.Component {
|
||||||
onClickDownload={() => {
|
onClickDownload={() => {
|
||||||
ipcRenderer.send('click-download');
|
ipcRenderer.send('click-download');
|
||||||
}}
|
}}
|
||||||
|
onClickCancel={() => {
|
||||||
|
ipcRenderer.send('click-cancel');
|
||||||
|
}}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,7 @@ import path from 'path';
|
||||||
import {app, BrowserWindow, dialog, ipcMain, shell} from 'electron';
|
import {app, BrowserWindow, dialog, ipcMain, shell} from 'electron';
|
||||||
|
|
||||||
import logger from 'electron-log';
|
import logger from 'electron-log';
|
||||||
import {autoUpdater} from 'electron-updater';
|
import {autoUpdater, CancellationToken} from 'electron-updater';
|
||||||
import semver from 'semver';
|
import semver from 'semver';
|
||||||
|
|
||||||
const INTERVAL_48_HOURS_IN_MS = 5 * 60 * 1000; // 5 min.
|
const INTERVAL_48_HOURS_IN_MS = 5 * 60 * 1000; // 5 min.
|
||||||
|
@ -55,7 +55,7 @@ function createUpdaterModal(parentWindow, options) {
|
||||||
}
|
}
|
||||||
modal.loadURL(updaterURL);
|
modal.loadURL(updaterURL);
|
||||||
|
|
||||||
for (const eventName of ['click-release-notes', 'click-skip', 'click-remind', 'click-install', 'click-download']) {
|
for (const eventName of ['click-release-notes', 'click-skip', 'click-remind', 'click-install', 'click-download', 'click-cancel']) {
|
||||||
const listener = createEventListener(modal, eventName);
|
const listener = createEventListener(modal, eventName);
|
||||||
ipcMain.on(eventName, listener);
|
ipcMain.on(eventName, listener);
|
||||||
modal.on('closed', () => {
|
modal.on('closed', () => {
|
||||||
|
@ -82,12 +82,12 @@ function isUpdateApplicable(now, skippedVersion, updateInfo) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function downloadAndInstall() {
|
function downloadAndInstall(cancellationToken) {
|
||||||
autoUpdater.on('update-downloaded', () => {
|
autoUpdater.on('update-downloaded', () => {
|
||||||
global.willAppQuit = true;
|
global.willAppQuit = true;
|
||||||
autoUpdater.quitAndInstall();
|
autoUpdater.quitAndInstall();
|
||||||
});
|
});
|
||||||
autoUpdater.downloadUpdate();
|
autoUpdater.downloadUpdate(cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
function initialize(appState, mainWindow, notifyOnly = false) {
|
function initialize(appState, mainWindow, notifyOnly = false) {
|
||||||
|
@ -96,6 +96,7 @@ function initialize(appState, mainWindow, notifyOnly = false) {
|
||||||
autoUpdater.on('error', (err) => {
|
autoUpdater.on('error', (err) => {
|
||||||
console.error('Error in autoUpdater:', err.message);
|
console.error('Error in autoUpdater:', err.message);
|
||||||
}).on('update-available', (info) => {
|
}).on('update-available', (info) => {
|
||||||
|
let cancellationToken = null;
|
||||||
if (isUpdateApplicable(new Date(), appState.skippedVersion, info)) {
|
if (isUpdateApplicable(new Date(), appState.skippedVersion, info)) {
|
||||||
updaterModal = createUpdaterModal(mainWindow, {
|
updaterModal = createUpdaterModal(mainWindow, {
|
||||||
linuxAppIcon: path.join(assetsDir, 'appicon.png'),
|
linuxAppIcon: path.join(assetsDir, 'appicon.png'),
|
||||||
|
@ -119,11 +120,15 @@ function initialize(appState, mainWindow, notifyOnly = false) {
|
||||||
updaterModal.send('progress', Math.floor(data.percent));
|
updaterModal.send('progress', Math.floor(data.percent));
|
||||||
console.log('progress:', data);
|
console.log('progress:', data);
|
||||||
});
|
});
|
||||||
downloadAndInstall();
|
cancellationToken = new CancellationToken();
|
||||||
|
downloadAndInstall(cancellationToken);
|
||||||
}).on('click-download', () => {
|
}).on('click-download', () => {
|
||||||
shell.openExternal('https://about.mattermost.com/download/#mattermostApps');
|
shell.openExternal('https://about.mattermost.com/download/#mattermostApps');
|
||||||
}).on('click-release-notes', () => {
|
}).on('click-release-notes', () => {
|
||||||
shell.openExternal(`https://github.com/mattermost/desktop/releases/v${info.version}`);
|
shell.openExternal(`https://github.com/mattermost/desktop/releases/v${info.version}`);
|
||||||
|
}).on('click-cancel', () => {
|
||||||
|
cancellationToken.cancel();
|
||||||
|
updaterModal.close();
|
||||||
});
|
});
|
||||||
updaterModal.focus();
|
updaterModal.focus();
|
||||||
} else if (autoUpdater.isManual) {
|
} else if (autoUpdater.isManual) {
|
||||||
|
|
Loading…
Reference in a new issue