UNPKG

@sussudio/platform

Version:

Internal APIs for VS Code's service injection the base services.

87 lines (86 loc) 3.87 kB
/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? (desc = Object.getOwnPropertyDescriptor(target, key)) : desc, d; if (typeof Reflect === 'object' && typeof Reflect.decorate === 'function') r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if ((d = decorators[i])) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __param = (this && this.__param) || function (paramIndex, decorator) { return function (target, key) { decorator(target, key, paramIndex); }; }; import { Emitter } from '@sussudio/base/common/event.mjs'; import { MutableDisposable } from '@sussudio/base/common/lifecycle.mjs'; import { IMainProcessService } from '../../ipc/electron-sandbox/services.mjs'; import { ILogService } from '../../log/common/log.mjs'; import { AbstractUserDataProfileStorageService, IUserDataProfileStorageService, } from '../common/userDataProfileStorageService.mjs'; import { isProfileUsingDefaultStorage, IStorageService } from '../../storage/common/storage.mjs'; import { ApplicationStorageDatabaseClient, ProfileStorageDatabaseClient } from '../../storage/common/storageIpc.mjs'; import { IUserDataProfilesService, reviveProfile } from '../common/userDataProfile.mjs'; import { registerSingleton } from '../../instantiation/common/extensions.mjs'; let UserDataProfileStorageService = class UserDataProfileStorageService extends AbstractUserDataProfileStorageService { mainProcessService; _onDidChange; onDidChange; constructor(mainProcessService, userDataProfilesService, storageService, logService) { super(storageService); this.mainProcessService = mainProcessService; const channel = mainProcessService.getChannel('profileStorageListener'); const disposable = this._register(new MutableDisposable()); this._onDidChange = this._register( new Emitter({ // Start listening to profile storage changes only when someone is listening onWillAddFirstListener: () => { disposable.value = channel.listen('onDidChange')((e) => { logService.trace('profile storage changes', e); this._onDidChange.fire({ targetChanges: e.targetChanges.map((profile) => reviveProfile(profile, userDataProfilesService.profilesHome.scheme), ), valueChanges: e.valueChanges.map((e) => ({ ...e, profile: reviveProfile(e.profile, userDataProfilesService.profilesHome.scheme), })), }); }); }, // Stop listening to profile storage changes when no one is listening onDidRemoveLastListener: () => (disposable.value = undefined), }), ); this.onDidChange = this._onDidChange.event; } async createStorageDatabase(profile) { const storageChannel = this.mainProcessService.getChannel('storage'); return isProfileUsingDefaultStorage(profile) ? new ApplicationStorageDatabaseClient(storageChannel) : new ProfileStorageDatabaseClient(storageChannel, profile); } }; UserDataProfileStorageService = __decorate( [ __param(0, IMainProcessService), __param(1, IUserDataProfilesService), __param(2, IStorageService), __param(3, ILogService), ], UserDataProfileStorageService, ); export { UserDataProfileStorageService }; registerSingleton(IUserDataProfileStorageService, UserDataProfileStorageService, 1 /* InstantiationType.Delayed */);