mirror of
https://github.com/atom/atom.git
synced 2026-01-14 17:38:03 -05:00
182 lines
5.4 KiB
JavaScript
182 lines
5.4 KiB
JavaScript
const etch = require('etch');
|
|
const EtchComponent = require('../etch-component');
|
|
const UpdateManager = require('../update-manager');
|
|
|
|
const $ = etch.dom;
|
|
|
|
module.exports = class UpdateView extends EtchComponent {
|
|
constructor(props) {
|
|
super(props);
|
|
|
|
if (
|
|
this.props.updateManager.getAutoUpdatesEnabled() &&
|
|
this.props.updateManager.getState() === UpdateManager.State.Idle
|
|
) {
|
|
this.props.updateManager.checkForUpdate();
|
|
}
|
|
}
|
|
|
|
handleAutoUpdateCheckbox(e) {
|
|
atom.config.set('core.automaticallyUpdate', e.target.checked);
|
|
}
|
|
|
|
shouldUpdateActionButtonBeDisabled() {
|
|
let { state } = this.props.updateManager;
|
|
return (
|
|
state === UpdateManager.State.CheckingForUpdate ||
|
|
state === UpdateManager.State.DownloadingUpdate
|
|
);
|
|
}
|
|
|
|
executeUpdateAction() {
|
|
if (
|
|
this.props.updateManager.state ===
|
|
UpdateManager.State.UpdateAvailableToInstall
|
|
) {
|
|
this.props.updateManager.restartAndInstallUpdate();
|
|
} else {
|
|
this.props.updateManager.checkForUpdate();
|
|
}
|
|
}
|
|
|
|
renderUpdateStatus() {
|
|
let updateStatus = '';
|
|
|
|
switch (this.props.updateManager.state) {
|
|
case UpdateManager.State.Idle:
|
|
updateStatus = $.div(
|
|
{
|
|
className:
|
|
'about-updates-item is-shown about-default-update-message'
|
|
},
|
|
this.props.updateManager.getAutoUpdatesEnabled()
|
|
? 'Atom will check for updates automatically'
|
|
: 'Automatic updates are disabled please check manually'
|
|
);
|
|
break;
|
|
case UpdateManager.State.CheckingForUpdate:
|
|
updateStatus = $.div(
|
|
{ className: 'about-updates-item app-checking-for-updates' },
|
|
$.span(
|
|
{ className: 'about-updates-label icon icon-search' },
|
|
'Checking for updates...'
|
|
)
|
|
);
|
|
break;
|
|
case UpdateManager.State.DownloadingUpdate:
|
|
updateStatus = $.div(
|
|
{ className: 'about-updates-item app-downloading-update' },
|
|
$.span({ className: 'loading loading-spinner-tiny inline-block' }),
|
|
$.span({ className: 'about-updates-label' }, 'Downloading update')
|
|
);
|
|
break;
|
|
case UpdateManager.State.UpdateAvailableToInstall:
|
|
updateStatus = $.div(
|
|
{ className: 'about-updates-item app-update-available-to-install' },
|
|
$.span(
|
|
{ className: 'about-updates-label icon icon-squirrel' },
|
|
'New update'
|
|
),
|
|
$.span(
|
|
{ className: 'about-updates-version' },
|
|
this.props.availableVersion
|
|
),
|
|
$.a(
|
|
{
|
|
className: 'about-updates-release-notes',
|
|
onclick: this.props.viewUpdateReleaseNotes
|
|
},
|
|
'Release Notes'
|
|
)
|
|
);
|
|
break;
|
|
case UpdateManager.State.UpToDate:
|
|
updateStatus = $.div(
|
|
{ className: 'about-updates-item app-up-to-date' },
|
|
$.span({ className: 'icon icon-check' }),
|
|
$.span(
|
|
{ className: 'about-updates-label is-strong' },
|
|
'Atom is up to date!'
|
|
)
|
|
);
|
|
break;
|
|
case UpdateManager.State.Unsupported:
|
|
updateStatus = $.div(
|
|
{ className: 'about-updates-item app-unsupported' },
|
|
$.span(
|
|
{ className: 'about-updates-label is-strong' },
|
|
'Your system does not support automatic updates'
|
|
),
|
|
$.a(
|
|
{
|
|
className: 'about-updates-instructions',
|
|
onclick: this.props.viewUpdateInstructions
|
|
},
|
|
'How to update'
|
|
)
|
|
);
|
|
break;
|
|
case UpdateManager.State.Error:
|
|
updateStatus = $.div(
|
|
{ className: 'about-updates-item app-update-error' },
|
|
$.span({ className: 'icon icon-x' }),
|
|
$.span(
|
|
{ className: 'about-updates-label app-error-message is-strong' },
|
|
this.props.updateManager.getErrorMessage()
|
|
)
|
|
);
|
|
break;
|
|
}
|
|
|
|
return updateStatus;
|
|
}
|
|
|
|
render() {
|
|
return $.div(
|
|
{ className: 'about-updates group-start' },
|
|
$.div(
|
|
{ className: 'about-updates-box' },
|
|
$.div({ className: 'about-updates-status' }, this.renderUpdateStatus()),
|
|
$.button(
|
|
{
|
|
className: 'btn about-update-action-button',
|
|
disabled: this.shouldUpdateActionButtonBeDisabled(),
|
|
onclick: this.executeUpdateAction.bind(this),
|
|
style: {
|
|
display:
|
|
this.props.updateManager.state ===
|
|
UpdateManager.State.Unsupported
|
|
? 'none'
|
|
: 'block'
|
|
}
|
|
},
|
|
this.props.updateManager.state === 'update-available'
|
|
? 'Restart and install'
|
|
: 'Check now'
|
|
)
|
|
),
|
|
$.div(
|
|
{
|
|
className: 'about-auto-updates',
|
|
style: {
|
|
display:
|
|
this.props.updateManager.state === UpdateManager.State.Unsupported
|
|
? 'none'
|
|
: 'block'
|
|
}
|
|
},
|
|
$.label(
|
|
{},
|
|
$.input({
|
|
className: 'input-checkbox',
|
|
type: 'checkbox',
|
|
checked: this.props.updateManager.getAutoUpdatesEnabled(),
|
|
onchange: this.handleAutoUpdateCheckbox.bind(this)
|
|
}),
|
|
$.span({}, 'Automatically download updates')
|
|
)
|
|
)
|
|
);
|
|
}
|
|
};
|