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
@@ -0,0 +1,89 @@
import { Injectable, inject, signal } from '@angular/core';
import { ExperimentalVlcRuntimeService } from '../../infrastructure/services/experimental-vlc-runtime.service';
const STORAGE_KEY_EXPERIMENTAL_MEDIA_SETTINGS = 'metoyou_experimental_media_settings';
export interface ExperimentalMediaSettings {
vlcJsPlaybackEnabled: boolean;
}
const DEFAULT_EXPERIMENTAL_MEDIA_SETTINGS: ExperimentalMediaSettings = {
vlcJsPlaybackEnabled: false
};
@Injectable({ providedIn: 'root' })
export class ExperimentalMediaSettingsService {
private readonly vlcRuntime = inject(ExperimentalVlcRuntimeService);
private readonly storedSettings = loadExperimentalMediaSettings();
readonly vlcJsPlaybackEnabled = signal(false);
readonly vlcJsRuntimeAvailable = signal(false);
readonly vlcJsRuntimeStatus = signal<'checking' | 'available' | 'missing'>('checking');
constructor() {
void this.refreshVlcRuntimeStatus();
}
setVlcJsPlaybackEnabled(enabled: boolean): void {
if (enabled && !this.vlcJsRuntimeAvailable()) {
this.vlcJsPlaybackEnabled.set(false);
saveExperimentalMediaSettings({ vlcJsPlaybackEnabled: false });
return;
}
const settings = saveExperimentalMediaSettings({
vlcJsPlaybackEnabled: enabled
});
this.vlcJsPlaybackEnabled.set(settings.vlcJsPlaybackEnabled);
}
async refreshVlcRuntimeStatus(): Promise<void> {
this.vlcJsRuntimeStatus.set('checking');
const available = await this.vlcRuntime.hasBundledRuntime();
this.vlcJsRuntimeAvailable.set(available);
this.vlcJsRuntimeStatus.set(available ? 'available' : 'missing');
this.vlcJsPlaybackEnabled.set(available && this.storedSettings.vlcJsPlaybackEnabled);
if (!available && this.storedSettings.vlcJsPlaybackEnabled) {
saveExperimentalMediaSettings({ vlcJsPlaybackEnabled: false });
}
}
}
function loadExperimentalMediaSettings(): ExperimentalMediaSettings {
try {
const raw = localStorage.getItem(STORAGE_KEY_EXPERIMENTAL_MEDIA_SETTINGS);
if (!raw) {
return { ...DEFAULT_EXPERIMENTAL_MEDIA_SETTINGS };
}
return normaliseExperimentalMediaSettings(JSON.parse(raw) as Partial<ExperimentalMediaSettings>);
} catch {
return { ...DEFAULT_EXPERIMENTAL_MEDIA_SETTINGS };
}
}
function saveExperimentalMediaSettings(patch: Partial<ExperimentalMediaSettings>): ExperimentalMediaSettings {
const nextSettings = normaliseExperimentalMediaSettings({
...loadExperimentalMediaSettings(),
...patch
});
try {
localStorage.setItem(STORAGE_KEY_EXPERIMENTAL_MEDIA_SETTINGS, JSON.stringify(nextSettings));
} catch {}
return nextSettings;
}
function normaliseExperimentalMediaSettings(raw: Partial<ExperimentalMediaSettings>): ExperimentalMediaSettings {
return {
vlcJsPlaybackEnabled: typeof raw.vlcJsPlaybackEnabled === 'boolean'
? raw.vlcJsPlaybackEnabled
: DEFAULT_EXPERIMENTAL_MEDIA_SETTINGS.vlcJsPlaybackEnabled
};
}