import {AppModel, getHomeUrl} from 'app/client/models/AppModel'; import {TelemetryPrefs} from 'app/common/Install'; import {InstallAPI, InstallAPIImpl, TelemetryPrefsWithSources} from 'app/common/InstallAPI'; import {bundleChanges, Disposable, Observable} from 'grainjs'; export interface TelemetryModel { /** Telemetry preferences (e.g. the current telemetry level). */ readonly prefs: Observable; fetchTelemetryPrefs(): Promise; updateTelemetryPrefs(prefs: Partial): Promise; } export class TelemetryModelImpl extends Disposable implements TelemetryModel { public readonly prefs: Observable = Observable.create(this, null); private readonly _installAPI: InstallAPI = new InstallAPIImpl(getHomeUrl()); constructor(_appModel: AppModel) { super(); } public async fetchTelemetryPrefs(): Promise { const prefs = await this._installAPI.getInstallPrefs(); bundleChanges(() => { this.prefs.set(prefs.telemetry); }); } public async updateTelemetryPrefs(prefs: Partial): Promise { await this._installAPI.updateInstallPrefs({telemetry: prefs}); await this.fetchTelemetryPrefs(); } }