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',
);