ov-components: standardize device service usage and improve component styles

master
CSantosM 2026-01-27 15:39:09 +01:00
parent 7208cb3a65
commit 5edb36670b
9 changed files with 29 additions and 26 deletions

View File

@ -3,6 +3,7 @@
:host { :host {
display: flex; display: flex;
align-items: center; align-items: center;
height: 100%;
.audio-device-selector { .audio-device-selector {
@include shared.device-selector-base(); @include shared.device-selector-base();

View File

@ -1,12 +1,12 @@
import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core'; import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';
import { Subscription } from 'rxjs'; import { Subscription } from 'rxjs';
import { CustomDevice } from '../../../models/device.model'; import { CustomDevice } from '../../../models/device.model';
import { ILogger } from '../../../models/logger.model';
import { ParticipantModel } from '../../../models/participant.model';
import { DeviceService } from '../../../services/device/device.service'; import { DeviceService } from '../../../services/device/device.service';
import { LoggerService } from '../../../services/logger/logger.service';
import { ParticipantService } from '../../../services/participant/participant.service'; import { ParticipantService } from '../../../services/participant/participant.service';
import { StorageService } from '../../../services/storage/storage.service'; import { StorageService } from '../../../services/storage/storage.service';
import { ParticipantModel } from '../../../models/participant.model';
import { LoggerService } from '../../../services/logger/logger.service';
import { ILogger } from '../../../models/logger.model';
/** /**
* @internal * @internal

View File

@ -179,13 +179,14 @@
align-items: center; align-items: center;
gap: 6px; gap: 6px;
padding: 8px 12px; padding: 8px 12px;
background: rgba(255, 193, 7, 0.1); background: var(--ov-primary-action-color);
border: 1px solid rgba(255, 193, 7, 0.3); border: 1px solid var(--ov-warning-color, #ff9800);
border-radius: 8px; border-radius: 8px;
color: var(--ov-warning-color, #ff9800);
font-size: 12px; font-size: 12px;
color: var(--ov-text-primary-color);
.warning-icon { .warning-icon {
color: var(--ov-warning-color, #ff9800);
font-size: 16px; font-size: 16px;
width: 16px; width: 16px;
height: 16px; height: 16px;

View File

@ -3,6 +3,7 @@
:host { :host {
display: flex; display: flex;
align-items: center; align-items: center;
height: 100%;
.video-device-selector { .video-device-selector {
@include shared.device-selector-base(); @include shared.device-selector-base();

View File

@ -1,12 +1,12 @@
import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core'; import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';
import { Subscription } from 'rxjs'; import { Subscription } from 'rxjs';
import { CustomDevice } from '../../../models/device.model'; import { CustomDevice } from '../../../models/device.model';
import { ILogger } from '../../../models/logger.model';
import { ParticipantModel } from '../../../models/participant.model';
import { DeviceService } from '../../../services/device/device.service'; import { DeviceService } from '../../../services/device/device.service';
import { LoggerService } from '../../../services/logger/logger.service';
import { ParticipantService } from '../../../services/participant/participant.service'; import { ParticipantService } from '../../../services/participant/participant.service';
import { StorageService } from '../../../services/storage/storage.service'; import { StorageService } from '../../../services/storage/storage.service';
import { ParticipantModel } from '../../../models/participant.model';
import { LoggerService } from '../../../services/logger/logger.service';
import { ILogger } from '../../../models/logger.model';
/** /**
* @internal * @internal

View File

@ -436,7 +436,7 @@ export class ToolbarComponent implements OnInit, OnDestroy, AfterViewInit {
private panelService: PanelService, private panelService: PanelService,
private participantService: ParticipantService, private participantService: ParticipantService,
private openviduService: OpenViduService, private openviduService: OpenViduService,
private oVDevicesService: DeviceService, private deviceService: DeviceService,
private actionService: ActionService, private actionService: ActionService,
private loggerSrv: LoggerService, private loggerSrv: LoggerService,
private cd: ChangeDetectorRef, private cd: ChangeDetectorRef,
@ -517,8 +517,8 @@ export class ToolbarComponent implements OnInit, OnDestroy, AfterViewInit {
this.room = this.openviduService.getRoom(); this.room = this.openviduService.getRoom();
this.evalAndSetRoomName(this.libService.getRoomName()); this.evalAndSetRoomName(this.libService.getRoomName());
this.hasVideoDevices = this.oVDevicesService.hasVideoDeviceAvailable(); this.hasVideoDevices = this.deviceService.hasVideoDeviceAvailable();
this.hasAudioDevices = this.oVDevicesService.hasAudioDeviceAvailable(); this.hasAudioDevices = this.deviceService.hasAudioDeviceAvailable();
this.setupTemplates(); this.setupTemplates();
this.subscribeToToolbarDirectives(); this.subscribeToToolbarDirectives();

View File

@ -6,13 +6,13 @@ import { DeleteDialogComponent } from './components/dialogs/delete-recording.com
import { DialogTemplateComponent } from './components/dialogs/dialog.component'; import { DialogTemplateComponent } from './components/dialogs/dialog.component';
import { RecordingDialogComponent } from './components/dialogs/recording-dialog.component'; import { RecordingDialogComponent } from './components/dialogs/recording-dialog.component';
import { LayoutComponent } from './components/layout/layout.component'; import { LayoutComponent } from './components/layout/layout.component';
import { MediaElementComponent } from './components/media-element/media-element.component';
import { ChatPanelComponent } from './components/panel/chat-panel/chat-panel.component'; import { ChatPanelComponent } from './components/panel/chat-panel/chat-panel.component';
import { SessionComponent } from './components/session/session.component'; import { SessionComponent } from './components/session/session.component';
import { StreamComponent } from './components/stream/stream.component'; import { StreamComponent } from './components/stream/stream.component';
import { ToolbarComponent } from './components/toolbar/toolbar.component';
import { ToolbarMediaButtonsComponent } from './components/toolbar/toolbar-media-buttons/toolbar-media-buttons.component'; import { ToolbarMediaButtonsComponent } from './components/toolbar/toolbar-media-buttons/toolbar-media-buttons.component';
import { ToolbarPanelButtonsComponent } from './components/toolbar/toolbar-panel-buttons/toolbar-panel-buttons.component'; import { ToolbarPanelButtonsComponent } from './components/toolbar/toolbar-panel-buttons/toolbar-panel-buttons.component';
import { MediaElementComponent } from './components/media-element/media-element.component'; import { ToolbarComponent } from './components/toolbar/toolbar.component';
import { LinkifyPipe } from './pipes/linkify.pipe'; import { LinkifyPipe } from './pipes/linkify.pipe';
import { RemoteParticipantTracksPipe, TrackPublishedTypesPipe } from './pipes/participant.pipe'; import { RemoteParticipantTracksPipe, TrackPublishedTypesPipe } from './pipes/participant.pipe';
@ -39,15 +39,15 @@ import { BackgroundEffectsPanelComponent } from './components/panel/background-e
import { SettingsPanelComponent } from './components/panel/settings-panel/settings-panel.component'; import { SettingsPanelComponent } from './components/panel/settings-panel/settings-panel.component';
import { AudioDevicesComponent } from './components/settings/audio-devices/audio-devices.component'; import { AudioDevicesComponent } from './components/settings/audio-devices/audio-devices.component';
// import { CaptionsSettingComponent } from './components/settings/captions/captions.component'; // import { CaptionsSettingComponent } from './components/settings/captions/captions.component';
import { LandscapeWarningComponent } from './components/landscape-warning/landscape-warning.component';
import { LangSelectorComponent } from './components/settings/lang-selector/lang-selector.component'; import { LangSelectorComponent } from './components/settings/lang-selector/lang-selector.component';
import { ParticipantNameInputComponent } from './components/settings/participant-name-input/participant-name-input.component'; import { ParticipantNameInputComponent } from './components/settings/participant-name-input/participant-name-input.component';
import { ThemeSelectorComponent } from './components/settings/theme-selector/theme-selector.component';
import { VideoDevicesComponent } from './components/settings/video-devices/video-devices.component'; import { VideoDevicesComponent } from './components/settings/video-devices/video-devices.component';
import { VideoPosterComponent } from './components/video-poster/video-poster.component';
import { ApiDirectiveModule } from './directives/api/api.directive.module'; import { ApiDirectiveModule } from './directives/api/api.directive.module';
import { OpenViduComponentsDirectiveModule } from './directives/template/openvidu-components-angular.directive.module'; import { OpenViduComponentsDirectiveModule } from './directives/template/openvidu-components-angular.directive.module';
import { AppMaterialModule } from './openvidu-components-angular.material.module'; import { AppMaterialModule } from './openvidu-components-angular.material.module';
import { ThemeSelectorComponent } from './components/settings/theme-selector/theme-selector.component';
import { LandscapeWarningComponent } from './components/landscape-warning/landscape-warning.component';
import { VideoPosterComponent } from './components/video-poster/video-poster.component';
const publicComponents = [ const publicComponents = [
AdminDashboardComponent, AdminDashboardComponent,

View File

@ -1,6 +1,6 @@
import { OverlayContainer } from '@angular/cdk/overlay'; import { OverlayContainer } from '@angular/cdk/overlay';
import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'; import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';
import { ModuleWithProviders, NgModule, Provider, EnvironmentProviders } from '@angular/core'; import { EnvironmentProviders, ModuleWithProviders, NgModule, Provider } from '@angular/core';
import { CdkOverlayContainer } from './config/custom-cdk-overlay'; import { CdkOverlayContainer } from './config/custom-cdk-overlay';
import { OpenViduComponentsConfig } from './config/openvidu-components-angular.config'; import { OpenViduComponentsConfig } from './config/openvidu-components-angular.config';
@ -8,7 +8,6 @@ import { ActionService } from './services/action/action.service';
import { ChatService } from './services/chat/chat.service'; import { ChatService } from './services/chat/chat.service';
import { DeviceService } from './services/device/device.service'; import { DeviceService } from './services/device/device.service';
import { DocumentService } from './services/document/document.service'; import { DocumentService } from './services/document/document.service';
import { LayoutService } from './services/layout/layout.service';
import { LoggerService } from './services/logger/logger.service'; import { LoggerService } from './services/logger/logger.service';
import { OpenViduService } from './services/openvidu/openvidu.service'; import { OpenViduService } from './services/openvidu/openvidu.service';
import { PanelService } from './services/panel/panel.service'; import { PanelService } from './services/panel/panel.service';
@ -17,13 +16,13 @@ import { PlatformService } from './services/platform/platform.service';
import { RecordingService } from './services/recording/recording.service'; import { RecordingService } from './services/recording/recording.service';
import { StorageService } from './services/storage/storage.service'; import { StorageService } from './services/storage/storage.service';
import { VirtualBackgroundService } from './services/virtual-background/virtual-background.service';
import { BroadcastingService } from './services/broadcasting/broadcasting.service';
import { GlobalConfigService } from './services/config/global-config.service';
import { OpenViduComponentsConfigService } from './services/config/directive-config.service';
import { OpenViduComponentsUiModule } from './openvidu-components-angular-ui.module'; import { OpenViduComponentsUiModule } from './openvidu-components-angular-ui.module';
import { ViewportService } from './services/viewport/viewport.service'; import { BroadcastingService } from './services/broadcasting/broadcasting.service';
import { OpenViduComponentsConfigService } from './services/config/directive-config.service';
import { GlobalConfigService } from './services/config/global-config.service';
import { E2eeService } from './services/e2ee/e2ee.service'; import { E2eeService } from './services/e2ee/e2ee.service';
import { ViewportService } from './services/viewport/viewport.service';
import { VirtualBackgroundService } from './services/virtual-background/virtual-background.service';
@NgModule({ @NgModule({
imports: [OpenViduComponentsUiModule], imports: [OpenViduComponentsUiModule],

View File

@ -1,7 +1,7 @@
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { OpenViduComponentsConfigService } from '../config/directive-config.service';
import { Subject, takeUntil } from 'rxjs';
import { createKeyMaterialFromString, deriveKeys } from 'livekit-client'; import { createKeyMaterialFromString, deriveKeys } from 'livekit-client';
import { Subject, takeUntil } from 'rxjs';
import { OpenViduComponentsConfigService } from '../config/directive-config.service';
/** /**
* Independent E2EE Service for encrypting and decrypting text-based content * Independent E2EE Service for encrypting and decrypting text-based content
@ -12,6 +12,7 @@ import { createKeyMaterialFromString, deriveKeys } from 'livekit-client';
* - Uses deriveKeys from livekit-client for key derivation (HKDF) * - Uses deriveKeys from livekit-client for key derivation (HKDF)
* - Uses Web Crypto API (AES-GCM) for actual encryption/decryption * - Uses Web Crypto API (AES-GCM) for actual encryption/decryption
* - Generates random IV for each encryption operation * - Generates random IV for each encryption operation
* @internal
*/ */
@Injectable({ @Injectable({
providedIn: 'root', providedIn: 'root',