refactor: stricter domain: screen-share

This commit is contained in:
2026-04-11 14:42:12 +02:00
parent a6bdac1a25
commit 3fb5515c3a
6 changed files with 19 additions and 16 deletions

View File

@@ -9,11 +9,14 @@ The mixed live-stream workspace is intentionally not part of this domain. It liv
``` ```
screen-share/ screen-share/
├── application/ ├── application/
│ ├── screen-share.facade.ts Proxy to RealtimeSessionFacade for screen share signals and methods │ ├── facades/
│ │ └── screen-share.facade.ts Proxy to RealtimeSessionFacade for screen share signals and methods
│ └── services/
│ └── screen-share-source-picker.service.ts Electron desktop source picker (Promise-based open/confirm/cancel) │ └── screen-share-source-picker.service.ts Electron desktop source picker (Promise-based open/confirm/cancel)
├── domain/ ├── domain/
│ └── screen-share.config.ts Quality presets and types (re-exported from shared-kernel) │ └── constants/
│ └── screen-share.constants.ts Quality presets and types (re-exported from shared-kernel)
├── feature/ ├── feature/
│ ├── screen-share-quality-dialog/ Quality preset picker before capture │ ├── screen-share-quality-dialog/ Quality preset picker before capture
@@ -30,7 +33,7 @@ graph TD
SSF[ScreenShareFacade] SSF[ScreenShareFacade]
Picker[ScreenShareSourcePickerService] Picker[ScreenShareSourcePickerService]
RSF[RealtimeSessionFacade] RSF[RealtimeSessionFacade]
Config[screen-share.config] Config[screen-share.constants]
Viewer[ScreenShareViewerComponent] Viewer[ScreenShareViewerComponent]
Workspace[VoiceWorkspaceComponent] Workspace[VoiceWorkspaceComponent]
@@ -39,12 +42,12 @@ graph TD
Workspace --> SSF Workspace --> SSF
Picker --> Config Picker --> Config
click SSF "application/screen-share.facade.ts" "Proxy to RealtimeSessionFacade" _blank click SSF "application/facades/screen-share.facade.ts" "Proxy to RealtimeSessionFacade" _blank
click Picker "application/screen-share-source-picker.service.ts" "Electron source picker" _blank click Picker "application/services/screen-share-source-picker.service.ts" "Electron source picker" _blank
click RSF "../../infrastructure/realtime/realtime-session.service.ts" "Low-level WebRTC composition root" _blank click RSF "../../infrastructure/realtime/realtime-session.service.ts" "Low-level WebRTC composition root" _blank
click Viewer "feature/screen-share-viewer/screen-share-viewer.component.ts" "Single-stream player" _blank click Viewer "feature/screen-share-viewer/screen-share-viewer.component.ts" "Single-stream player" _blank
click Workspace "../../features/room/voice-workspace/voice-workspace.component.ts" "Room-level live stream workspace" _blank click Workspace "../../features/room/voice-workspace/voice-workspace.component.ts" "Room-level live stream workspace" _blank
click Config "domain/screen-share.config.ts" "Quality presets" _blank click Config "domain/constants/screen-share.constants.ts" "Quality presets" _blank
``` ```
## Starting a screen share ## Starting a screen share

View File

@@ -1,6 +1,6 @@
import { Injectable, inject } from '@angular/core'; import { Injectable, inject } from '@angular/core';
import { RealtimeSessionFacade } from '../../../core/realtime'; import { RealtimeSessionFacade } from '../../../../core/realtime';
import { ScreenShareStartOptions } from '../domain/screen-share.config'; import { ScreenShareStartOptions } from '../../domain/constants/screen-share.constants';
@Injectable({ providedIn: 'root' }) @Injectable({ providedIn: 'root' })
export class ScreenShareFacade { export class ScreenShareFacade {

View File

@@ -3,8 +3,8 @@ import {
computed, computed,
signal signal
} from '@angular/core'; } from '@angular/core';
import { loadVoiceSettingsFromStorage, saveVoiceSettingsToStorage } from '../../voice-session'; import { loadVoiceSettingsFromStorage, saveVoiceSettingsToStorage } from '../../../voice-session';
import { ELECTRON_ENTIRE_SCREEN_SOURCE_NAME } from '../domain/screen-share.config'; import { ELECTRON_ENTIRE_SCREEN_SOURCE_NAME } from '../../domain/constants/screen-share.constants';
export type ScreenShareSourceKind = 'screen' | 'window'; export type ScreenShareSourceKind = 'screen' | 'window';

View File

@@ -7,7 +7,7 @@ import {
type ScreenShareQualityPreset, type ScreenShareQualityPreset,
type ScreenShareStartOptions, type ScreenShareStartOptions,
type ScreenShareQuality type ScreenShareQuality
} from '../../../shared-kernel'; } from '../../../../shared-kernel';
export { export {
DEFAULT_SCREEN_SHARE_QUALITY, DEFAULT_SCREEN_SHARE_QUALITY,

View File

@@ -19,7 +19,7 @@ import {
lucideMonitor lucideMonitor
} from '@ng-icons/lucide'; } from '@ng-icons/lucide';
import { ScreenShareFacade } from '../../application/screen-share.facade'; import { ScreenShareFacade } from '../../application/facades/screen-share.facade';
import { selectOnlineUsers } from '../../../../store/users/users.selectors'; import { selectOnlineUsers } from '../../../../store/users/users.selectors';
import { User } from '../../../../shared-kernel'; import { User } from '../../../../shared-kernel';
import { DEFAULT_VOLUME } from '../../../../core/constants'; import { DEFAULT_VOLUME } from '../../../../core/constants';

View File

@@ -1,6 +1,6 @@
export * from './application/screen-share.facade'; export * from './application/facades/screen-share.facade';
export * from './application/screen-share-source-picker.service'; export * from './application/services/screen-share-source-picker.service';
export * from './domain/screen-share.config'; export * from './domain/constants/screen-share.constants';
// Feature components // Feature components
export { ScreenShareViewerComponent } from './feature/screen-share-viewer/screen-share-viewer.component'; export { ScreenShareViewerComponent } from './feature/screen-share-viewer/screen-share-viewer.component';