mirror of
https://github.com/atom/atom.git
synced 2026-01-14 01:18:01 -05:00
110 lines
2.7 KiB
JavaScript
110 lines
2.7 KiB
JavaScript
const { CompositeDisposable } = require('atom');
|
|
const semver = require('semver');
|
|
const UpdateManager = require('./update-manager');
|
|
const About = require('./about');
|
|
const StatusBarView = require('./components/about-status-bar');
|
|
let updateManager;
|
|
|
|
// The local storage key for the available update version.
|
|
const AvailableUpdateVersion = 'about:version-available';
|
|
const AboutURI = 'atom://about';
|
|
|
|
module.exports = {
|
|
activate() {
|
|
this.subscriptions = new CompositeDisposable();
|
|
|
|
this.createModel();
|
|
|
|
let availableVersion = window.localStorage.getItem(AvailableUpdateVersion);
|
|
if (
|
|
atom.getReleaseChannel() === 'dev' ||
|
|
(availableVersion && semver.lte(availableVersion, atom.getVersion()))
|
|
) {
|
|
this.clearUpdateState();
|
|
}
|
|
|
|
this.subscriptions.add(
|
|
updateManager.onDidChange(() => {
|
|
if (
|
|
updateManager.getState() ===
|
|
UpdateManager.State.UpdateAvailableToInstall
|
|
) {
|
|
window.localStorage.setItem(
|
|
AvailableUpdateVersion,
|
|
updateManager.getAvailableVersion()
|
|
);
|
|
this.showStatusBarIfNeeded();
|
|
}
|
|
})
|
|
);
|
|
|
|
this.subscriptions.add(
|
|
atom.commands.add('atom-workspace', 'about:clear-update-state', () => {
|
|
this.clearUpdateState();
|
|
})
|
|
);
|
|
},
|
|
|
|
deactivate() {
|
|
this.model.destroy();
|
|
if (this.statusBarTile) this.statusBarTile.destroy();
|
|
|
|
if (updateManager) {
|
|
updateManager.dispose();
|
|
updateManager = undefined;
|
|
}
|
|
},
|
|
|
|
clearUpdateState() {
|
|
window.localStorage.removeItem(AvailableUpdateVersion);
|
|
},
|
|
|
|
consumeStatusBar(statusBar) {
|
|
this.statusBar = statusBar;
|
|
this.showStatusBarIfNeeded();
|
|
},
|
|
|
|
deserializeAboutView(state) {
|
|
if (!this.model) {
|
|
this.createModel();
|
|
}
|
|
|
|
return this.model.deserialize(state);
|
|
},
|
|
|
|
createModel() {
|
|
updateManager = updateManager || new UpdateManager();
|
|
|
|
this.model = new About({
|
|
uri: AboutURI,
|
|
currentAtomVersion: atom.getVersion(),
|
|
currentElectronVersion: process.versions.electron,
|
|
currentChromeVersion: process.versions.chrome,
|
|
currentNodeVersion: process.version,
|
|
updateManager: updateManager
|
|
});
|
|
},
|
|
|
|
isUpdateAvailable() {
|
|
let availableVersion = window.localStorage.getItem(AvailableUpdateVersion);
|
|
return availableVersion && semver.gt(availableVersion, atom.getVersion());
|
|
},
|
|
|
|
showStatusBarIfNeeded() {
|
|
if (this.isUpdateAvailable() && this.statusBar) {
|
|
let statusBarView = new StatusBarView();
|
|
|
|
if (this.statusBarTile) {
|
|
this.statusBarTile.destroy();
|
|
}
|
|
|
|
this.statusBarTile = this.statusBar.addRightTile({
|
|
item: statusBarView,
|
|
priority: -100
|
|
});
|
|
|
|
return this.statusBarTile;
|
|
}
|
|
}
|
|
};
|