Compare commits

..

2 Commits

Author SHA1 Message Date
FrigaT
38af6174fa Добавлена очистка событий 2026-04-27 09:03:32 +03:00
FrigaT
2fe20c804a Добавлен лкальный фильтеринг треков 2026-04-24 12:09:50 +03:00
2 changed files with 51 additions and 6 deletions

View File

@@ -6,6 +6,8 @@
@inject AuthenticationStateProvider AuthProvider @inject AuthenticationStateProvider AuthProvider
@inject ISnackbar Snackbar @inject ISnackbar Snackbar
@inject HttpClient Http @inject HttpClient Http
@implements IDisposable
@implements IAsyncDisposable
<MudStack Spacing="1" Row AlignItems="AlignItems.Center" Wrap="Wrap.NoWrap"> <MudStack Spacing="1" Row AlignItems="AlignItems.Center" Wrap="Wrap.NoWrap">
<!-- Кнопки управления --> <!-- Кнопки управления -->
@@ -291,6 +293,13 @@
{ {
try try
{ {
AudioPlayerService.OnLoadAndPlayRequested -= OnServiceLoadAndPlay;
AudioPlayerService.OnPlayRequested -= OnServicePlay;
AudioPlayerService.OnPauseRequested -= OnServicePause;
AudioPlayerService.OnSeekRequested -= OnServiceSeek;
AudioPlayerService.OnVolumeChangeRequested -= OnServiceVolumeChange;
AudioPlayerService.OnStateChanged -= OnServiceStateChanged;
if (_audioElement != null) if (_audioElement != null)
await _audioElement.DisposeAsync(); await _audioElement.DisposeAsync();
if (_audioModule != null) if (_audioModule != null)
@@ -298,4 +307,9 @@
} }
catch { } catch { }
} }
public void Dispose()
{
DisposeAsync().AsTask().Wait();
}
} }

View File

@@ -214,6 +214,13 @@
} }
</MudStack> </MudStack>
</MudStack> </MudStack>
<MudTextField @bind-Value="_playlistFilterText"
Placeholder="Фильтр треков..."
Adornment="Adornment.Start"
AdornmentIcon="@Icons.Material.Filled.Search"
Variant="Variant.Text"
FullWidth
Class="mb-2" />
} }
}; };
@@ -231,7 +238,7 @@
} }
else else
{ {
<MudTable Items="@_tracks" <MudTable Items="@FilteredPlaylistTracks"
Hover Hover
Elevation="0" Elevation="0"
Breakpoint="Breakpoint.None" Breakpoint="Breakpoint.None"
@@ -388,7 +395,14 @@
@if (_searchResult?.Tracks != null) @if (_searchResult?.Tracks != null)
{ {
<MudText Typo="Typo.h6" Class="mt-4 mb-2 ml-2">Треки</MudText> <MudText Typo="Typo.h6" Class="mt-4 mb-2 ml-2">Треки</MudText>
<MudTable Items="@_searchResult.Tracks" <MudTextField @bind-Value="_searchFilterText"
Placeholder="Фильтр треков..."
Adornment="Adornment.Start"
AdornmentIcon="@Icons.Material.Filled.Search"
Variant="Variant.Text"
FullWidth
Class="mb-2" />
<MudTable Items="@FilteredSearchTracks"
Hover Hover
Elevation="0" Elevation="0"
Style="min-height: 0;" Style="min-height: 0;"
@@ -457,6 +471,16 @@
private bool _loading = true; private bool _loading = true;
/// <summary>Состояние: Происходит загрузка треков плейлиста.</summary> /// <summary>Состояние: Происходит загрузка треков плейлиста.</summary>
private bool _tracksLoading = true; private bool _tracksLoading = true;
/// <summary>Текст фильтра для треков плейлиста</summary>
private string _playlistFilterText = "";
private List<YandexTrack> FilteredPlaylistTracks =>
string.IsNullOrWhiteSpace(_playlistFilterText)
? _tracks
: _tracks.Where(t => t.Title.Contains(_playlistFilterText, StringComparison.InvariantCultureIgnoreCase) ||
t.Artists.Any(a => a.Name.Contains(_playlistFilterText, StringComparison.InvariantCultureIgnoreCase)))
.ToList();
/******************************** /********************************
* Вкладка добавления треков * Вкладка добавления треков
@@ -471,9 +495,17 @@
private MudTextField<string> _searchField; private MudTextField<string> _searchField;
/// <summary>Результат поиска.</summary> /// <summary>Результат поиска.</summary>
private YandexSearchResult? _searchResult = null; private YandexSearchResult? _searchResult = null;
/// <summary>Текст фильтра для результатов поиска</summary>
private string _searchFilterText = "";
private List<YandexTrack> FilteredSearchTracks =>
string.IsNullOrWhiteSpace(_searchFilterText) || _searchResult?.Tracks == null
? _searchResult?.Tracks ?? new List<YandexTrack>()
: _searchResult.Tracks.Where(t => t.Title.Contains(_searchFilterText, StringComparison.InvariantCultureIgnoreCase) ||
t.Artists.Any(a => a.Name.Contains(_searchFilterText, StringComparison.InvariantCultureIgnoreCase)))
.ToList();
/******************************** /********************************
* Вкладка добавления треков * Контекстные кнопки
*********************************/ *********************************/
/// <summary>Признак, что альбом в фаворитах.</summary> /// <summary>Признак, что альбом в фаворитах.</summary>
private bool _isFavorite; private bool _isFavorite;
@@ -620,7 +652,6 @@
await RemoveTrack(track); await RemoveTrack(track);
} }
#region Добавление/удаление трека #region Добавление/удаление трека
/// <summary>Добавление трека.</summary> /// <summary>Добавление трека.</summary>
@@ -933,7 +964,7 @@
} }
#endregion #endregion
#region Поделитьсы ссылкой #region Поделиться ссылкой
/// <summary> Поделиться ссылкой </summary> /// <summary> Поделиться ссылкой </summary>
private async Task SharePlaylist() private async Task SharePlaylist()
{ {