File size: 1,478 Bytes
68d7816 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | import { createDecorator, type ServiceIdentifier } from '#/_base/di/instantiation';
import { Disposable } from '#/_base/di/lifecycle';
import { LifecycleScope } from '#/app/scopes';
import { ScopeActivation, registerScopedService } from '#/_base/di/scope';
import { IConfigService } from '#/app/config/config';
import {
setConfiguredMaxImageEdgePx,
setConfiguredReadImageByteBudget,
} from '#/agent/media/image-compress';
import { IMAGE_SECTION, type ImageConfig } from './configSection';
export interface IImageConfigBridge {
readonly _serviceBrand: undefined;
}
export const IImageConfigBridge: ServiceIdentifier<IImageConfigBridge> =
createDecorator<IImageConfigBridge>('imageConfigBridge');
export class ImageConfigBridge extends Disposable implements IImageConfigBridge {
declare readonly _serviceBrand: undefined;
constructor(@IConfigService private readonly config: IConfigService) {
super();
this.push(this.config.get<ImageConfig>(IMAGE_SECTION));
this._register(
this.config.onDidSectionChange((e) => {
if (e.domain === IMAGE_SECTION) {
this.push(e.value as ImageConfig);
}
}),
);
}
private push(image: ImageConfig | undefined): void {
setConfiguredMaxImageEdgePx(image?.maxEdgePx);
setConfiguredReadImageByteBudget(image?.readByteBudget);
}
}
registerScopedService(
LifecycleScope.Agent,
IImageConfigBridge,
ImageConfigBridge,
ScopeActivation.OnScopeCreated,
'media',
);
|