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<TelemetryPrefsWithSources | null>; fetchTelemetryPrefs(): Promise<void>; updateTelemetryPrefs(prefs: Partial<TelemetryPrefs>): Promise<void>; } export class TelemetryModelImpl extends Disposable implements TelemetryModel { public readonly prefs: Observable<TelemetryPrefsWithSources | null> = Observable.create(this, null); private readonly _installAPI: InstallAPI = new InstallAPIImpl(getHomeUrl()); constructor(_appModel: AppModel) { super(); } public async fetchTelemetryPrefs(): Promise<void> { const prefs = await this._installAPI.getInstallPrefs(); bundleChanges(() => { this.prefs.set(prefs.telemetry); }); } public async updateTelemetryPrefs(prefs: Partial<TelemetryPrefs>): Promise<void> { await this._installAPI.updateInstallPrefs({telemetry: prefs}); await this.fetchTelemetryPrefs(); } }