Fix private calls

This commit is contained in:
2026-05-17 15:14:52 +02:00
parent 0f6cb3ee77
commit e769a6ee4a
71 changed files with 5821 additions and 349 deletions

View File

@@ -103,6 +103,40 @@
</label>
</div>
</div>
<div class="rounded-lg border border-border bg-secondary/20 p-4">
<div class="flex items-center justify-between gap-4">
<div>
<p class="text-sm font-medium text-foreground">Experimental VLC.js playback</p>
@if (experimentalMedia.vlcJsRuntimeStatus() === 'checking') {
<p class="text-xs text-muted-foreground">Checking for a bundled VLC.js runtime...</p>
} @else if (experimentalMedia.vlcJsRuntimeAvailable()) {
<p class="text-xs text-muted-foreground">Offer a manual player for unsupported downloaded audio and video files.</p>
} @else {
<p class="text-xs text-muted-foreground">No VLC.js runtime is bundled. Unsupported desktop media can be opened in the system player.</p>
}
</div>
<label
class="relative inline-flex items-center"
[class.cursor-pointer]="experimentalMedia.vlcJsRuntimeAvailable()"
[class.cursor-not-allowed]="!experimentalMedia.vlcJsRuntimeAvailable()"
>
<input
type="checkbox"
[checked]="experimentalMedia.vlcJsPlaybackEnabled()"
[disabled]="!experimentalMedia.vlcJsRuntimeAvailable()"
(change)="onExperimentalVlcPlaybackChange($event)"
id="general-experimental-vlc-playback-toggle"
aria-label="Toggle experimental VLC.js playback"
class="sr-only peer"
/>
<div
class="w-10 h-5 bg-secondary rounded-full peer peer-checked:bg-primary peer-disabled:bg-muted/80 peer-disabled:after:bg-muted-foreground/40 peer-checked:after:translate-x-full after:content-[''] after:absolute after:top-0.5 after:left-[2px] after:bg-white after:rounded-full after:h-4 after:w-4 after:transition-all"
></div>
</label>
</div>
</div>
</div>
</section>
</div>

View File

@@ -12,6 +12,7 @@ import type { DesktopSettingsSnapshot } from '../../../../core/platform/electron
import { loadGeneralSettingsFromStorage, saveGeneralSettingsToStorage } from '../../../../infrastructure/persistence';
import { ElectronBridgeService } from '../../../../core/platform/electron/electron-bridge.service';
import { PlatformService } from '../../../../core/platform';
import { ExperimentalMediaSettingsService } from '../../../../domains/experimental-media/application/services/experimental-media-settings.service';
@Component({
selector: 'app-general-settings',
@@ -27,6 +28,7 @@ import { PlatformService } from '../../../../core/platform';
export class GeneralSettingsComponent {
private platform = inject(PlatformService);
private electronBridge = inject(ElectronBridgeService);
readonly experimentalMedia = inject(ExperimentalMediaSettingsService);
readonly isElectron = this.platform.isElectron;
reopenLastViewedChat = signal(true);
@@ -98,6 +100,13 @@ export class GeneralSettingsComponent {
}
}
onExperimentalVlcPlaybackChange(event: Event): void {
const input = event.target as HTMLInputElement;
this.experimentalMedia.setVlcJsPlaybackEnabled(!!input.checked);
input.checked = this.experimentalMedia.vlcJsPlaybackEnabled();
}
private async loadDesktopSettings(): Promise<void> {
const api = this.electronBridge.getApi();