Files
atom/packages/about/lib/main.js
2019-02-25 12:19:44 +01:00

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
}
}
}