@page "/shared/{token}"
@using PlaylistShared.Pwa.Components.SharedPlaylist
@using PlaylistShared.Shared.DTO
@using PlaylistShared.Shared.Enums
@using PlaylistShared.Pwa.Services
@using PlaylistShared.Shared.SharedPlaylist
@inject HttpClient Http
@inject ISnackbar Snackbar
@inject NavigationManager Navigation
@inject AuthenticationStateProvider AuthProvider
@inject IDialogService DialogService
@if (_loading)
{
}
else if (_playlist == null)
{
Плейлист не найден или у вас нет доступа
}
else
{
@if (_canAdd)
{
Добавление треков
}
}
@code {
[Parameter] public string Token { get; set; }
private TracksTable? _tracksTableRef;
private SharedPlaylistDto? _playlist;
private bool _loading = true;
private bool _isAuthenticated;
private bool _isCreator;
private bool _canPlay;
private bool _canAdd;
private bool _canRemove;
private UpdatePermissionsDto _editPermissions = new();
private bool _savingPermissions;
private string? _currentUserId;
private bool _isFavorite = false;
private bool _favoriteLoading = false;
private bool _tracksLoading;
private string _trackLink = "";
private bool _addingTrack;
protected override async Task OnInitializedAsync()
{
var authState = await AuthProvider.GetAuthenticationStateAsync();
_isAuthenticated = authState.User.Identity?.IsAuthenticated == true;
_currentUserId = authState.User.FindFirst(System.Security.Claims.ClaimTypes.NameIdentifier)?.Value;
await LoadPlaylist();
}
private async Task ConfigurePermissions()
{
if (_playlist is null)
{
_isCreator = false;
_canAdd = false;
_canRemove = false;
_canPlay = false;
}
else
{
_isCreator = _playlist.CreatorUserId.ToString() == _currentUserId;
_canAdd = _isCreator
|| _playlist.AddPermission == EditPermission.Everyone
|| (_playlist.AddPermission == EditPermission.AuthorizedOnly && _isAuthenticated);
_canRemove = _isCreator
|| _playlist.RemovePermission == EditPermission.Everyone
|| (_playlist.RemovePermission == EditPermission.AuthorizedOnly && _isAuthenticated);
_canPlay = _isCreator
|| _playlist.PlayPermission == ViewPermission.Everyone
|| (_playlist.PlayPermission == ViewPermission.AuthorizedOnly && _isAuthenticated);
if (_isCreator && _isAuthenticated)
{
_editPermissions = new UpdatePermissionsDto
{
ViewPermission = _playlist.ViewPermission,
AddPermission = _playlist.AddPermission,
RemovePermission = _playlist.RemovePermission,
PlayPermission = _playlist.PlayPermission,
};
}
}
}
private async Task LoadPlaylist()
{
try
{
var response = await Http.GetFromJsonAsync>($"/api/sharedplaylist/{Token}");
if (response?.Success == true)
{
_playlist = response.Data;
await ConfigurePermissions();
//await LoadTracks();
}
else
{
Snackbar.Add(response?.Error?.Message ?? "Не удалось загрузить плейлист", Severity.Error);
}
}
catch (Exception ex)
{
Snackbar.Add($"Ошибка: {ex.Message}", Severity.Error);
}
finally
{
_loading = false;
StateHasChanged();
}
}
private async Task LoadTracks()
{
if (_playlist == null) return;
if (_tracksTableRef == null) return;
_tracksLoading = true;
StateHasChanged();
await _tracksTableRef.Reload();
_tracksLoading = false;
StateHasChanged();
}
}