Files
atom/packages/about/lib/main.js
2018-08-21 15:27:37 -07:00

97 lines
2.6 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
}
}
}