mirror of
https://github.com/atom/atom.git
synced 2026-04-28 03:01:47 -04:00
152 lines
3.8 KiB
JavaScript
152 lines
3.8 KiB
JavaScript
const { Emitter, CompositeDisposable } = require('atom');
|
|
|
|
const Unsupported = 'unsupported';
|
|
const Idle = 'idle';
|
|
const CheckingForUpdate = 'checking';
|
|
const DownloadingUpdate = 'downloading';
|
|
const UpdateAvailableToInstall = 'update-available';
|
|
const UpToDate = 'no-update-available';
|
|
const ErrorState = 'error';
|
|
|
|
let UpdateManager = class UpdateManager {
|
|
constructor() {
|
|
this.emitter = new Emitter();
|
|
this.currentVersion = atom.getVersion();
|
|
this.availableVersion = atom.getVersion();
|
|
this.resetState();
|
|
this.listenForAtomEvents();
|
|
}
|
|
|
|
listenForAtomEvents() {
|
|
this.subscriptions = new CompositeDisposable();
|
|
|
|
this.subscriptions.add(
|
|
atom.autoUpdater.onDidBeginCheckingForUpdate(() => {
|
|
this.setState(CheckingForUpdate);
|
|
}),
|
|
atom.autoUpdater.onDidBeginDownloadingUpdate(() => {
|
|
this.setState(DownloadingUpdate);
|
|
}),
|
|
atom.autoUpdater.onDidCompleteDownloadingUpdate(({ releaseVersion }) => {
|
|
this.setAvailableVersion(releaseVersion);
|
|
}),
|
|
atom.autoUpdater.onUpdateNotAvailable(() => {
|
|
this.setState(UpToDate);
|
|
}),
|
|
atom.autoUpdater.onUpdateError(() => {
|
|
this.setState(ErrorState);
|
|
}),
|
|
atom.config.observe('core.automaticallyUpdate', value => {
|
|
this.autoUpdatesEnabled = value;
|
|
this.emitDidChange();
|
|
})
|
|
);
|
|
|
|
// TODO: When https://github.com/atom/electron/issues/4587 is closed we can add this support.
|
|
// atom.autoUpdater.onUpdateAvailable =>
|
|
// @find('.about-updates-item').removeClass('is-shown')
|
|
// @updateAvailable.addClass('is-shown')
|
|
}
|
|
|
|
dispose() {
|
|
this.subscriptions.dispose();
|
|
}
|
|
|
|
onDidChange(callback) {
|
|
return this.emitter.on('did-change', callback);
|
|
}
|
|
|
|
emitDidChange() {
|
|
this.emitter.emit('did-change');
|
|
}
|
|
|
|
getAutoUpdatesEnabled() {
|
|
return (
|
|
this.autoUpdatesEnabled && this.state !== UpdateManager.State.Unsupported
|
|
);
|
|
}
|
|
|
|
setAutoUpdatesEnabled(enabled) {
|
|
return atom.config.set('core.automaticallyUpdate', enabled);
|
|
}
|
|
|
|
getErrorMessage() {
|
|
return atom.autoUpdater.getErrorMessage();
|
|
}
|
|
|
|
getState() {
|
|
return this.state;
|
|
}
|
|
|
|
setState(state) {
|
|
this.state = state;
|
|
this.emitDidChange();
|
|
}
|
|
|
|
resetState() {
|
|
this.state = atom.autoUpdater.platformSupportsUpdates()
|
|
? atom.autoUpdater.getState()
|
|
: Unsupported;
|
|
this.emitDidChange();
|
|
}
|
|
|
|
getAvailableVersion() {
|
|
return this.availableVersion;
|
|
}
|
|
|
|
setAvailableVersion(version) {
|
|
this.availableVersion = version;
|
|
|
|
if (this.availableVersion !== this.currentVersion) {
|
|
this.state = UpdateAvailableToInstall;
|
|
} else {
|
|
this.state = UpToDate;
|
|
}
|
|
|
|
this.emitDidChange();
|
|
}
|
|
|
|
checkForUpdate() {
|
|
atom.autoUpdater.checkForUpdate();
|
|
}
|
|
|
|
restartAndInstallUpdate() {
|
|
atom.autoUpdater.restartAndInstallUpdate();
|
|
}
|
|
|
|
getReleaseNotesURLForCurrentVersion() {
|
|
return this.getReleaseNotesURLForVersion(this.currentVersion);
|
|
}
|
|
|
|
getReleaseNotesURLForAvailableVersion() {
|
|
return this.getReleaseNotesURLForVersion(this.availableVersion);
|
|
}
|
|
|
|
getReleaseNotesURLForVersion(appVersion) {
|
|
// Dev versions will not have a releases page
|
|
if (appVersion.indexOf('dev') > -1) {
|
|
return 'https://atom.io/releases';
|
|
}
|
|
|
|
if (!appVersion.startsWith('v')) {
|
|
appVersion = `v${appVersion}`;
|
|
}
|
|
|
|
const releaseRepo =
|
|
appVersion.indexOf('nightly') > -1 ? 'atom-nightly-releases' : 'atom';
|
|
return `https://github.com/atom/${releaseRepo}/releases/tag/${appVersion}`;
|
|
}
|
|
};
|
|
|
|
UpdateManager.State = {
|
|
Unsupported: Unsupported,
|
|
Idle: Idle,
|
|
CheckingForUpdate: CheckingForUpdate,
|
|
DownloadingUpdate: DownloadingUpdate,
|
|
UpdateAvailableToInstall: UpdateAvailableToInstall,
|
|
UpToDate: UpToDate,
|
|
Error: ErrorState
|
|
};
|
|
|
|
module.exports = UpdateManager;
|