/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the Source EULA. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import { IChannel } from 'vs/base/parts/ipc/common/ipc'; import { Event, Emitter } from 'vs/base/common/event'; import { IUpdateService, State } from 'vs/platform/update/common/update'; import { IMainProcessService } from 'vs/platform/ipc/electron-browser/mainProcessService'; import { ServiceIdentifier } from 'vs/platform/instantiation/common/instantiation'; export class UpdateService implements IUpdateService { _serviceBrand: ServiceIdentifier; private _onStateChange = new Emitter(); readonly onStateChange: Event = this._onStateChange.event; private _state: State = State.Uninitialized; get state(): State { return this._state; } private channel: IChannel; constructor(@IMainProcessService mainProcessService: IMainProcessService) { this.channel = mainProcessService.getChannel('update'); // always set this._state as the state changes this.onStateChange(state => this._state = state); this.channel.call('_getInitialState').then(state => { // fire initial state this._onStateChange.fire(state); // fire subsequent states as they come in from remote this.channel.listen('onStateChange')(state => this._onStateChange.fire(state)); }); } checkForUpdates(context: any): Promise { return this.channel.call('checkForUpdates', context); } downloadUpdate(): Promise { return this.channel.call('downloadUpdate'); } applyUpdate(): Promise { return this.channel.call('applyUpdate'); } quitAndInstall(): Promise { return this.channel.call('quitAndInstall'); } isLatestVersion(): Promise { return this.channel.call('isLatestVersion'); } }