fix добавление трека

This commit is contained in:
FrigaT
2026-04-15 19:06:24 +03:00
parent 50ed75b413
commit cbb0cb8c8e
2 changed files with 33 additions and 55 deletions

View File

@@ -37,10 +37,10 @@
Breakpoint="Breakpoint.Sm" Breakpoint="Breakpoint.Sm"
Loading="@_isSearching"> Loading="@_isSearching">
<RowTemplate> <RowTemplate>
<MudTd Style="width: 100%;"> <MudTd Class="pa-1" Style="width: 100%;">
<TrackItem Track="@context" PlaylistShareToken="@ShareToken" /> <TrackItem Track="@context" PlaylistShareToken="@ShareToken" />
</MudTd> </MudTd>
<MudTd> <MudTd Class="pa-1">
<MudToggleIconButton Toggled="@ExistingTrackIds.Contains(context.TrackId)" <MudToggleIconButton Toggled="@ExistingTrackIds.Contains(context.TrackId)"
Icon="@Icons.Material.Filled.AddCircle" Icon="@Icons.Material.Filled.AddCircle"
Color="@Color.Primary" Color="@Color.Primary"
@@ -145,11 +145,11 @@
{ {
await RemoveTrackById(track.TrackId); await RemoveTrackById(track.TrackId);
await OnTrackRemoved.InvokeAsync(); await OnTrackRemoved.InvokeAsync();
Snackbar.Add($"Трек \"{track.Title}\" удален", Severity.Success); Snackbar.Add($"Трек \"{track.Title}\" удален", Severity.Success, c => c.SnackbarVariant = Variant.Outlined);
} }
catch (Exception ex) catch (Exception ex)
{ {
Snackbar.Add($"Ошибка добавления: {ex.Message}", Severity.Error); Snackbar.Add($"{ex.Message}", Severity.Error);
ExistingTrackIds.Add(track.TrackId); ExistingTrackIds.Add(track.TrackId);
} }
finally finally
@@ -158,6 +158,21 @@
} }
} }
private async Task RemoveTrackById(string trackId)
{
var request = new UpdateTrackListRequest { TrackIds = new List<string> { trackId } };
var response = await Http.PostAsJsonAsync($"/api/sharedplaylist/{ShareToken}/remove-tracks", request);
if (response.IsSuccessStatusCode)
{
await OnTrackAdded.InvokeAsync(); // уведомляем родителя, что список треков изменился
}
else
{
var error = await response.Content.ReadFromJsonAsync<ApiResponse<object>>();
throw new Exception(error?.Error?.Message ?? "Ошибка удаления трека");
}
}
private async Task AddTrack(YandexTrack track) private async Task AddTrack(YandexTrack track)
{ {
if (ExistingTrackIds.Contains(track.TrackId)) return; if (ExistingTrackIds.Contains(track.TrackId)) return;
@@ -167,11 +182,11 @@
{ {
await AddTrackById(track.TrackId); await AddTrackById(track.TrackId);
await OnTrackAdded.InvokeAsync(); await OnTrackAdded.InvokeAsync();
Snackbar.Add($"Трек \"{track.Title}\" добавлен", Severity.Success); Snackbar.Add($"Трек \"{track.Title}\" добавлен", Severity.Success, c => c.SnackbarVariant = Variant.Outlined);
} }
catch (Exception ex) catch (Exception ex)
{ {
Snackbar.Add($"Ошибка добавления: {ex.Message}", Severity.Error); Snackbar.Add($"{ex.Message}", Severity.Error);
ExistingTrackIds.Remove(track.TrackId); ExistingTrackIds.Remove(track.TrackId);
} }
finally finally
@@ -181,8 +196,6 @@
} }
private async Task AddTrackById(string trackId) private async Task AddTrackById(string trackId)
{
try
{ {
var request = new UpdateTrackListRequest { TrackIds = new List<string> { trackId } }; var request = new UpdateTrackListRequest { TrackIds = new List<string> { trackId } };
var response = await Http.PostAsJsonAsync($"/api/sharedplaylist/{ShareToken}/add-tracks", request); var response = await Http.PostAsJsonAsync($"/api/sharedplaylist/{ShareToken}/add-tracks", request);
@@ -193,42 +206,7 @@
else else
{ {
var error = await response.Content.ReadFromJsonAsync<ApiResponse<object>>(); var error = await response.Content.ReadFromJsonAsync<ApiResponse<object>>();
Snackbar.Add(error?.Error?.Message ?? "Ошибка добавления трека", Severity.Error); throw new Exception(error?.Error?.Message ?? "Ошибка добавления трека");
}
}
catch (Exception ex)
{
Snackbar.Add($"Ошибка: {ex.Message}", Severity.Error);
}
finally
{
StateHasChanged();
}
}
private async Task RemoveTrackById(string trackId)
{
try
{
var request = new UpdateTrackListRequest { TrackIds = new List<string> { trackId } };
var response = await Http.PostAsJsonAsync($"/api/sharedplaylist/{ShareToken}/remove-tracks", request);
if (response.IsSuccessStatusCode)
{
await OnTrackAdded.InvokeAsync(); // уведомляем родителя, что список треков изменился
}
else
{
var error = await response.Content.ReadFromJsonAsync<ApiResponse<object>>();
Snackbar.Add(error?.Error?.Message ?? "Ошибка удаления трека", Severity.Error);
}
}
catch (Exception ex)
{
Snackbar.Add($"Ошибка: {ex.Message}", Severity.Error);
}
finally
{
StateHasChanged();
} }
} }

View File

@@ -45,12 +45,12 @@
Breakpoint="Breakpoint.Sm" Breakpoint="Breakpoint.Sm"
Loading="@_tracksLoading"> Loading="@_tracksLoading">
<RowTemplate> <RowTemplate>
<MudTd Style="width: 100%;"> <MudTd Class="pa-1" Style="width: 100%;">
<TrackItem Track="@context" PlaylistShareToken="Token" CanPlay="@_canPlay" /> <TrackItem Track="@context" PlaylistShareToken="@Token" CanPlay="@_canPlay" />
</MudTd> </MudTd>
@if (_canRemove) @if (_canRemove)
{ {
<MudTd> <MudTd Class="pa-1">
<MudIconButton Icon="@Icons.Material.Filled.Delete" Color="Color.Error" OnClick="() => RemoveTrack(context)" /> <MudIconButton Icon="@Icons.Material.Filled.Delete" Color="Color.Error" OnClick="() => RemoveTrack(context)" />
</MudTd> </MudTd>
} }
@@ -70,7 +70,7 @@
</MudCardHeader> </MudCardHeader>
<MudCardContent Class="flex-grow-1 d-flex flex-column" Style="overflow: hidden;"> <MudCardContent Class="flex-grow-1 d-flex flex-column" Style="overflow: hidden;">
<AddTrackSection ShareToken="Token" OnTrackAdded="LoadTracks" OnTrackRemoved="LoadTracks" ExistingTrackIds="_existingTrackIds" /> <AddTrackSection ShareToken="@Token" OnTrackAdded="LoadTracks" OnTrackRemoved="LoadTracks" ExistingTrackIds="_existingTrackIds" />
</MudCardContent> </MudCardContent>
</MudCard> </MudCard>
} }