Сохранение громкости плеера

This commit is contained in:
FrigaT
2026-04-14 14:52:46 +03:00
parent 9e8bb0db75
commit 68887284c1
4 changed files with 43 additions and 7 deletions

View File

@@ -59,6 +59,7 @@
[Inject] protected IJSRuntime JS { get; set; } = null!; [Inject] protected IJSRuntime JS { get; set; } = null!;
[Inject] private TokenStorage TokenStorage { get; set; } = null!; [Inject] private TokenStorage TokenStorage { get; set; } = null!;
[Inject] private PlayerStorage PlayerStorage { get; set; } = null!;
[Inject] private AuthenticationStateProvider AuthProvider { get; set; } = null!; [Inject] private AuthenticationStateProvider AuthProvider { get; set; } = null!;
[Inject] private ISnackbar Snackbar { get; set; } = null!; [Inject] private ISnackbar Snackbar { get; set; } = null!;
@@ -76,6 +77,8 @@
if (firstRender) if (firstRender)
{ {
await EnsureAudioModuleAsync(); await EnsureAudioModuleAsync();
await ChangeVolume(await PlayerStorage.GetVolumeAsync());
StateHasChanged();
} }
} }
@@ -226,6 +229,8 @@
var volume = value / 100; var volume = value / 100;
await _audioElement.InvokeVoidAsync("setVolume", volume); await _audioElement.InvokeVoidAsync("setVolume", volume);
_isMuted = false; _isMuted = false;
_currentVolume = value;
await PlayerStorage.SetVolumeAsync(value);
StateHasChanged(); StateHasChanged();
} }
catch (Exception ex) catch (Exception ex)

View File

@@ -21,6 +21,7 @@ internal class Program
}); });
builder.Services.AddScoped<TokenStorage>(); builder.Services.AddScoped<TokenStorage>();
builder.Services.AddScoped<PlayerStorage>();
builder.Services.AddScoped<AuthStateProvider>(); builder.Services.AddScoped<AuthStateProvider>();
builder.Services.AddScoped<AuthenticationStateProvider>(sp => sp.GetRequiredService<AuthStateProvider>()); builder.Services.AddScoped<AuthenticationStateProvider>(sp => sp.GetRequiredService<AuthStateProvider>());
builder.Services.AddScoped<ApiClient>(); builder.Services.AddScoped<ApiClient>();

View File

@@ -0,0 +1,30 @@
using Microsoft.JSInterop;
namespace PlaylistShared.Pwa.Services;
public class PlayerStorage
{
private readonly IJSRuntime _js;
private const string VolumeKey = "audio_player_volume";
public PlayerStorage(IJSRuntime js) => _js = js;
public async Task SetVolumeAsync(double volume)
{
await _js.InvokeVoidAsync("localStorage.setItem", VolumeKey, volume);
}
public async Task<double> GetVolumeAsync()
{
var volume = await _js.InvokeAsync<string>("localStorage.getItem", VolumeKey);
if (double.TryParse(volume, out var result))
{
result = Math.Clamp(result, 0, 100);
return result;
}
return 0;
}
}