From 3766d4e01045cd004f2b56f39ac189b98e3c75f1 Mon Sep 17 00:00:00 2001 From: daniel-c-harvey Date: Fri, 5 Sep 2025 22:27:12 -0400 Subject: [PATCH] Front End - MudBlazor Theme Manager tryout - Navigation bar rework - Icons and styles rework - Track Gallery & Card layout redesign for SPA - Track Player bottom bar --- DeepDrftWeb.Client/Controls/AppNavLink.razor | 12 + .../Controls/AppNavLink.razor.cs | 12 + .../Controls/AppNavLink.razor.css | 1 + .../Controls/AudioPlayerBar.razor | 51 ++++ .../Controls/AudioPlayerBar.razor.cs | 257 ++++++++++++++++++ .../Controls/AudioPlayerBar.razor.css | 10 + .../{TrackPlayer.razor => TrackCard.razor} | 25 +- .../Controls/TrackCard.razor.cs | 24 ++ .../Controls/TrackPlayer.razor.cs | 29 -- .../Controls/TracksGallery.razor | 4 +- .../Controls/TracksGallery.razor.cs | 19 ++ .../Controls/TracksGallery.razor.css | 5 + DeepDrftWeb.Client/DeepDrftWeb.Client.csproj | 7 + DeepDrftWeb.Client/Layout/MainLayout.razor | 52 ++-- DeepDrftWeb.Client/Layout/NavMenu.razor | 12 +- DeepDrftWeb.Client/Pages/TracksView.razor | 77 +++--- DeepDrftWeb.Client/Pages/TracksView.razor.css | 28 ++ DeepDrftWeb.Client/_Imports.razor | 1 + DeepDrftWeb/Components/App.razor | 8 +- DeepDrftWeb/wwwroot/deepdrft-logo.ico | Bin 0 -> 67646 bytes 20 files changed, 522 insertions(+), 112 deletions(-) create mode 100644 DeepDrftWeb.Client/Controls/AppNavLink.razor create mode 100644 DeepDrftWeb.Client/Controls/AppNavLink.razor.cs create mode 100644 DeepDrftWeb.Client/Controls/AppNavLink.razor.css create mode 100644 DeepDrftWeb.Client/Controls/AudioPlayerBar.razor create mode 100644 DeepDrftWeb.Client/Controls/AudioPlayerBar.razor.cs create mode 100644 DeepDrftWeb.Client/Controls/AudioPlayerBar.razor.css rename DeepDrftWeb.Client/Controls/{TrackPlayer.razor => TrackCard.razor} (78%) create mode 100644 DeepDrftWeb.Client/Controls/TrackCard.razor.cs delete mode 100644 DeepDrftWeb.Client/Controls/TrackPlayer.razor.cs create mode 100644 DeepDrftWeb.Client/Controls/TracksGallery.razor.css create mode 100644 DeepDrftWeb.Client/Pages/TracksView.razor.css create mode 100644 DeepDrftWeb/wwwroot/deepdrft-logo.ico diff --git a/DeepDrftWeb.Client/Controls/AppNavLink.razor b/DeepDrftWeb.Client/Controls/AppNavLink.razor new file mode 100644 index 0000000..f06fff0 --- /dev/null +++ b/DeepDrftWeb.Client/Controls/AppNavLink.razor @@ -0,0 +1,12 @@ + + @if (Icon != null) + { + + } + + @if (ChildContent != null) + { + @ChildContent + } + + \ No newline at end of file diff --git a/DeepDrftWeb.Client/Controls/AppNavLink.razor.cs b/DeepDrftWeb.Client/Controls/AppNavLink.razor.cs new file mode 100644 index 0000000..1fc9fa8 --- /dev/null +++ b/DeepDrftWeb.Client/Controls/AppNavLink.razor.cs @@ -0,0 +1,12 @@ +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Routing; + +namespace DeepDrftWeb.Client.Controls; + +public partial class AppNavLink : ComponentBase +{ + [Parameter] public required string Href { get; set; } + [Parameter] public NavLinkMatch? Match { get; set; } + [Parameter] public string? Icon { get; set; } + [Parameter] public RenderFragment? ChildContent { get; set; } +} \ No newline at end of file diff --git a/DeepDrftWeb.Client/Controls/AppNavLink.razor.css b/DeepDrftWeb.Client/Controls/AppNavLink.razor.css new file mode 100644 index 0000000..5f28270 --- /dev/null +++ b/DeepDrftWeb.Client/Controls/AppNavLink.razor.css @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/DeepDrftWeb.Client/Controls/AudioPlayerBar.razor b/DeepDrftWeb.Client/Controls/AudioPlayerBar.razor new file mode 100644 index 0000000..6733bd4 --- /dev/null +++ b/DeepDrftWeb.Client/Controls/AudioPlayerBar.razor @@ -0,0 +1,51 @@ + + + + + + + @if (IsLoaded) + { + + } + + + @FormatTime(CurrentTime) / @FormatTime(Duration) + + + + + +
+ + +
+
+ @if (!string.IsNullOrEmpty(ErrorMessage)) + { + + @ErrorMessage + + } +
+
\ No newline at end of file diff --git a/DeepDrftWeb.Client/Controls/AudioPlayerBar.razor.cs b/DeepDrftWeb.Client/Controls/AudioPlayerBar.razor.cs new file mode 100644 index 0000000..6939e42 --- /dev/null +++ b/DeepDrftWeb.Client/Controls/AudioPlayerBar.razor.cs @@ -0,0 +1,257 @@ +using Microsoft.AspNetCore.Components; +using DeepDrftWeb.Client.Services; +using MudBlazor; + +namespace DeepDrftWeb.Client.Controls; + +public partial class AudioPlayerBar : ComponentBase, IAsyncDisposable +{ + [Parameter] public string? AudioUrl { get; set; } + [Parameter] public bool ShowLoadProgress { get; set; } = true; + [Parameter] public EventCallback OnProgressChanged { get; set; } + [Parameter] public EventCallback OnPlaybackEnded { get; set; } + + [Inject] public required AudioInteropService AudioInterop { get; set; } + + private string PlayerId = Guid.NewGuid().ToString(); + private bool IsLoaded = false; + private bool IsPlaying = false; + private bool IsPaused = false; + private double CurrentTime = 0; + private double Duration = 0; + private double Volume = 0.8; + private double LoadProgress = 0; + private string? ErrorMessage; + private Timer? progressTimer; + + protected override async Task OnInitializedAsync() + { + var result = await AudioInterop.CreatePlayerAsync(PlayerId); + if (!result.Success) + { + ErrorMessage = $"Failed to initialize audio player: {result.Error}"; + return; + } + + await AudioInterop.SetOnProgressCallbackAsync(PlayerId, OnProgress); + await AudioInterop.SetOnEndCallbackAsync(PlayerId, OnPlaybackEnd); + await AudioInterop.SetOnLoadProgressCallbackAsync(PlayerId, OnLoadProgress); + + await AudioInterop.SetVolumeAsync(PlayerId, Volume); + } + + protected override async Task OnParametersSetAsync() + { + if (IsLoaded) return; + + try + { + AudioLoadResult? loadResult = null; + + if (!string.IsNullOrEmpty(AudioUrl)) + { + loadResult = await AudioInterop.LoadAudioFromUrlAsync(PlayerId, AudioUrl); + } + + if (loadResult?.Success == true) + { + IsLoaded = true; + Duration = loadResult.Duration; + LoadProgress = loadResult.LoadProgress; + ErrorMessage = null; + StateHasChanged(); + } + else + { + ErrorMessage = $"Failed to load audio: {loadResult?.Error ?? "No audio source provided"}"; + } + } + catch (Exception ex) + { + ErrorMessage = $"Error loading audio: {ex.Message}"; + } + } + + private async Task TogglePlayPause() + { + if (!IsLoaded) return; + + try + { + AudioOperationResult result; + + if (IsPlaying) + { + result = await AudioInterop.PauseAsync(PlayerId); + if (result.Success) + { + IsPlaying = false; + IsPaused = true; + } + } + else + { + result = await AudioInterop.PlayAsync(PlayerId); + if (result.Success) + { + IsPlaying = true; + IsPaused = false; + } + } + + if (!result.Success) + { + ErrorMessage = $"Playback error: {result.Error}"; + } + else + { + ErrorMessage = null; + } + } + catch (Exception ex) + { + ErrorMessage = $"Error controlling playback: {ex.Message}"; + } + + StateHasChanged(); + } + + private async Task Stop() + { + if (!IsLoaded) return; + + try + { + var result = await AudioInterop.StopAsync(PlayerId); + if (result.Success) + { + IsPlaying = false; + IsPaused = false; + CurrentTime = 0; + ErrorMessage = null; + } + else + { + ErrorMessage = $"Stop error: {result.Error}"; + } + } + catch (Exception ex) + { + ErrorMessage = $"Error stopping playback: {ex.Message}"; + } + + StateHasChanged(); + } + + private async Task OnSeek(double position) + { + if (!IsLoaded) return; + + try + { + var result = await AudioInterop.SeekAsync(PlayerId, position); + if (result.Success) + { + CurrentTime = position; + ErrorMessage = null; + } + else + { + ErrorMessage = $"Seek error: {result.Error}"; + } + } + catch (Exception ex) + { + ErrorMessage = $"Error seeking: {ex.Message}"; + } + + StateHasChanged(); + } + + private async Task OnVolumeChange(double volume) + { + Volume = volume; + + if (IsLoaded) + { + try + { + var result = await AudioInterop.SetVolumeAsync(PlayerId, volume); + if (!result.Success) + { + ErrorMessage = $"Volume error: {result.Error}"; + StateHasChanged(); + } + } + catch (Exception ex) + { + ErrorMessage = $"Error setting volume: {ex.Message}"; + StateHasChanged(); + } + } + } + + private async Task OnProgress(double currentTime) + { + CurrentTime = currentTime; + if (OnProgressChanged.HasDelegate) + { + await OnProgressChanged.InvokeAsync(currentTime); + } + await InvokeAsync(StateHasChanged); + } + + private async Task OnPlaybackEnd() + { + IsPlaying = false; + IsPaused = false; + CurrentTime = 0; + + if (OnPlaybackEnded.HasDelegate) + { + await OnPlaybackEnded.InvokeAsync(); + } + + await InvokeAsync(StateHasChanged); + } + + private async Task OnLoadProgress(double progress) + { + LoadProgress = progress; + await InvokeAsync(StateHasChanged); + } + + private string GetPlayIcon() + { + return IsPlaying ? Icons.Material.Filled.Pause : Icons.Material.Filled.PlayArrow; + } + + private string GetVolumeIcon() + { + if (Volume == 0) return Icons.Material.Filled.VolumeOff; + if (Volume < 0.5) return Icons.Material.Filled.VolumeDown; + return Icons.Material.Filled.VolumeUp; + } + + private static string FormatTime(double seconds) + { + var timeSpan = TimeSpan.FromSeconds(seconds); + return timeSpan.ToString(timeSpan.TotalHours >= 1 ? @"h\:mm\:ss" : @"m\:ss"); + } + + private void ClearError() + { + ErrorMessage = null; + StateHasChanged(); + } + + public async ValueTask DisposeAsync() + { + progressTimer?.Dispose(); + + if (IsLoaded) + { + await AudioInterop.DisposePlayerAsync(PlayerId); + } + } +} \ No newline at end of file diff --git a/DeepDrftWeb.Client/Controls/AudioPlayerBar.razor.css b/DeepDrftWeb.Client/Controls/AudioPlayerBar.razor.css new file mode 100644 index 0000000..feff813 --- /dev/null +++ b/DeepDrftWeb.Client/Controls/AudioPlayerBar.razor.css @@ -0,0 +1,10 @@ +.bottom-bar { + justify-self: center; + max-width: 1800px; + position: fixed; + bottom: 0; + left: var(--mud-drawer-width-left); + right: 0; + margin: 0 1.5rem 1.5rem 1.5rem; + z-index: 1000; +} \ No newline at end of file diff --git a/DeepDrftWeb.Client/Controls/TrackPlayer.razor b/DeepDrftWeb.Client/Controls/TrackCard.razor similarity index 78% rename from DeepDrftWeb.Client/Controls/TrackPlayer.razor rename to DeepDrftWeb.Client/Controls/TrackCard.razor index f7b265a..d85255d 100644 --- a/DeepDrftWeb.Client/Controls/TrackPlayer.razor +++ b/DeepDrftWeb.Client/Controls/TrackCard.razor @@ -1,10 +1,10 @@  - @if (!string.IsNullOrEmpty(Track?.ImagePath)) + @if (!string.IsNullOrEmpty(TrackModel?.ImagePath)) {
@@ -25,45 +25,45 @@ Color="Color.Surface" Style="margin-bottom: 4px;" Class="text-truncate"> - @Track?.TrackName + @TrackModel?.TrackName - @Track?.Artist + @TrackModel?.Artist
- @if (!string.IsNullOrEmpty(Track?.Album)) + @if (!string.IsNullOrEmpty(TrackModel?.Album)) { - @Track.Album + @TrackModel.Album } - @if (!string.IsNullOrEmpty(Track?.Genre)) + @if (!string.IsNullOrEmpty(TrackModel?.Genre)) { - @Track.Genre + @TrackModel.Genre }
- @if (Track?.ReleaseDate.HasValue == true) + @if (TrackModel?.ReleaseDate.HasValue == true) { - @Track.ReleaseDate.Value.Year + @TrackModel.ReleaseDate.Value.Year } else @@ -73,9 +73,8 @@ - + StartIcon="@PlayPauseIcon" + OnClick="@PlayClick"/>
diff --git a/DeepDrftWeb.Client/Controls/TrackCard.razor.cs b/DeepDrftWeb.Client/Controls/TrackCard.razor.cs new file mode 100644 index 0000000..1db47fb --- /dev/null +++ b/DeepDrftWeb.Client/Controls/TrackCard.razor.cs @@ -0,0 +1,24 @@ +using Microsoft.AspNetCore.Components; +using DeepDrftModels.Entities; +using DeepDrftWeb.Client.Clients; +using MudBlazor; + +namespace DeepDrftWeb.Client.Controls; + +public partial class TrackCard : ComponentBase +{ + [Parameter] public required TrackEntity TrackModel { get; set; } + [Parameter] public EventCallback OnPlay { get; set; } + + private bool _isPlaying = false; + private string PlayPauseIcon => _isPlaying ? Icons.Material.Filled.MusicNote : Icons.Material.Filled.PlayArrow; + + private async Task PlayClick() + { + if (!_isPlaying) + { + _isPlaying = true; + await OnPlay.InvokeAsync(); + } + } +} \ No newline at end of file diff --git a/DeepDrftWeb.Client/Controls/TrackPlayer.razor.cs b/DeepDrftWeb.Client/Controls/TrackPlayer.razor.cs deleted file mode 100644 index 566034d..0000000 --- a/DeepDrftWeb.Client/Controls/TrackPlayer.razor.cs +++ /dev/null @@ -1,29 +0,0 @@ -using Microsoft.AspNetCore.Components; -using DeepDrftModels.Entities; -using DeepDrftWeb.Client.Clients; -using MudBlazor; - -namespace DeepDrftWeb.Client.Controls; - -public partial class TrackPlayer : ComponentBase -{ - [Parameter] public required TrackEntity Track { get; set; } - [Inject] public required TrackMediaClient Client { get; set; } - - private Stream? _audioStream = null; - private bool _isPlaying = false; - private string _playPauseIcon => _isPlaying ? Icons.Material.Filled.Pause : Icons.Material.Filled.PlayArrow; - private async Task HandlePlayClick() - { - if (_audioStream == null) - { - _audioStream = await Client.GetTrackMedia(Track.EntryKey); - PlayAudio(); - } - } - - private void PlayAudio() - { - throw new NotImplementedException(); - } -} \ No newline at end of file diff --git a/DeepDrftWeb.Client/Controls/TracksGallery.razor b/DeepDrftWeb.Client/Controls/TracksGallery.razor index a6d1ba6..564e158 100644 --- a/DeepDrftWeb.Client/Controls/TracksGallery.razor +++ b/DeepDrftWeb.Client/Controls/TracksGallery.razor @@ -1,10 +1,10 @@ - + @foreach (var track in Tracks) {
- +
} diff --git a/DeepDrftWeb.Client/Controls/TracksGallery.razor.cs b/DeepDrftWeb.Client/Controls/TracksGallery.razor.cs index 4fffc55..73056bd 100644 --- a/DeepDrftWeb.Client/Controls/TracksGallery.razor.cs +++ b/DeepDrftWeb.Client/Controls/TracksGallery.razor.cs @@ -1,9 +1,28 @@ using Microsoft.AspNetCore.Components; using DeepDrftModels.Entities; +using DeepDrftWeb.Client.Clients; namespace DeepDrftWeb.Client.Controls; public partial class TracksGallery : ComponentBase { + private Stream? _audioStream = null; [Parameter] public IEnumerable Tracks { get; set; } = Enumerable.Empty(); + + [Inject] public required TrackMediaClient Client { get; set; } + + private async Task HandlePlayClick(TrackEntity track) + { + if (_audioStream == null) + { + _audioStream = await Client.GetTrackMedia(track.EntryKey); + PlayAudio(); + } + } + + private void PlayAudio() + { + throw new NotImplementedException(); + } + } \ No newline at end of file diff --git a/DeepDrftWeb.Client/Controls/TracksGallery.razor.css b/DeepDrftWeb.Client/Controls/TracksGallery.razor.css new file mode 100644 index 0000000..9ac440b --- /dev/null +++ b/DeepDrftWeb.Client/Controls/TracksGallery.razor.css @@ -0,0 +1,5 @@ +.tracks-gallery-container { + padding: 16px; + height: 100%; + box-sizing: border-box; +} \ No newline at end of file diff --git a/DeepDrftWeb.Client/DeepDrftWeb.Client.csproj b/DeepDrftWeb.Client/DeepDrftWeb.Client.csproj index af5ab3c..06b458c 100644 --- a/DeepDrftWeb.Client/DeepDrftWeb.Client.csproj +++ b/DeepDrftWeb.Client/DeepDrftWeb.Client.csproj @@ -13,10 +13,17 @@ + + + + true + + + diff --git a/DeepDrftWeb.Client/Layout/MainLayout.razor b/DeepDrftWeb.Client/Layout/MainLayout.razor index f82b129..b908487 100644 --- a/DeepDrftWeb.Client/Layout/MainLayout.razor +++ b/DeepDrftWeb.Client/Layout/MainLayout.razor @@ -1,21 +1,22 @@ @inherits LayoutComponentBase - + - - - Application - - - - - + + + + + + - - + + + + + @Body @@ -30,18 +31,21 @@ @code { private bool _drawerOpen = true; private bool _isDarkMode = true; - private MudTheme? _theme = null; + // private MudTheme? _theme = null; protected override void OnInitialized() { base.OnInitialized(); - - _theme = new() + _themeManager = new ThemeManagerTheme { - PaletteLight = _lightPalette, - PaletteDark = _darkPalette, - LayoutProperties = new LayoutProperties() + Theme = + { + PaletteDark = _darkPalette, + PaletteLight = _lightPalette + } }; + + StateHasChanged(); } private void DrawerToggle() @@ -53,6 +57,20 @@ { _isDarkMode = !_isDarkMode; } + + private ThemeManagerTheme _themeManager; + public bool _themeManagerOpen = false; + + void OpenThemeManager(bool value) + { + _themeManagerOpen = value; + } + + void UpdateTheme(ThemeManagerTheme value) + { + _themeManager = value; + StateHasChanged(); + } private readonly PaletteLight _lightPalette = new() { diff --git a/DeepDrftWeb.Client/Layout/NavMenu.razor b/DeepDrftWeb.Client/Layout/NavMenu.razor index 30a1ecb..9c06af9 100644 --- a/DeepDrftWeb.Client/Layout/NavMenu.razor +++ b/DeepDrftWeb.Client/Layout/NavMenu.razor @@ -1,8 +1,8 @@ - - - Home - Track Gallery - Audio Test - +@using DeepDrftWeb.Client.Controls + +Home +Track Gallery +Audio Test + diff --git a/DeepDrftWeb.Client/Pages/TracksView.razor b/DeepDrftWeb.Client/Pages/TracksView.razor index 16a86c2..ec6cfd4 100644 --- a/DeepDrftWeb.Client/Pages/TracksView.razor +++ b/DeepDrftWeb.Client/Pages/TracksView.razor @@ -1,46 +1,37 @@ @page "/tracks" -@using DeepDrftModels.DTOs -@using DeepDrftModels.Entities + @using DeepDrftWeb.Client.Controls -

Track Gallery

- -@if (ViewModel.Page != null) -{ - @* *@ - @* *@ - @* Name *@ - @* Artist *@ - @* Album *@ - @* Genre *@ - @* Released *@ - @* Actions *@ - @* *@ - @* *@ - @* @context.TrackName *@ - @* @context.Artist *@ - @* @context.Album *@ - @* @context.Genre *@ - @* @context.ReleaseDate *@ - @* *@ - @* View *@ - @* *@ - @* *@ - @* *@ - - - - - - -} -else -{ - - - -} +DeepDrft Track Gallery + +
+
+ @if (ViewModel.Page != null) + { +
+ +
+ +
+ + + +
+ } + else + { +
+ +
+
+ +
+ } +
+ + +
\ No newline at end of file diff --git a/DeepDrftWeb.Client/Pages/TracksView.razor.css b/DeepDrftWeb.Client/Pages/TracksView.razor.css new file mode 100644 index 0000000..f816847 --- /dev/null +++ b/DeepDrftWeb.Client/Pages/TracksView.razor.css @@ -0,0 +1,28 @@ +.tracks-page-wrapper { + display: flex; + flex-direction: column; + height: calc(100dvh - 64px); /* Subtract app bar height (pt-16 = 4rem = 64px) */ + margin: -16px; /* Counteract MudMainContent padding */ + padding-top: 16px; /* Restore top padding for spacing */ +} + +.tracks-view-container { + display: flex; + flex-direction: column; + flex: 1 1 auto; + min-height: 0; + overflow: hidden; + padding: 0 16px; /* Horizontal padding only */ +} + +.tracks-content { + flex: 1 1 auto; + overflow-y: scroll; + min-height: 0; + padding-top: 16px; +} + +.tracks-pagination { + flex: 0 0 auto; + padding: 8px 0; +} \ No newline at end of file diff --git a/DeepDrftWeb.Client/_Imports.razor b/DeepDrftWeb.Client/_Imports.razor index 3aa70bc..de75392 100644 --- a/DeepDrftWeb.Client/_Imports.razor +++ b/DeepDrftWeb.Client/_Imports.razor @@ -8,3 +8,4 @@ @using Microsoft.JSInterop @using MudBlazor @using MudBlazor.Services +@using MudBlazor.ThemeManager diff --git a/DeepDrftWeb/Components/App.razor b/DeepDrftWeb/Components/App.razor index 3affce3..b1043d3 100644 --- a/DeepDrftWeb/Components/App.razor +++ b/DeepDrftWeb/Components/App.razor @@ -4,11 +4,15 @@ - + + + + + - + diff --git a/DeepDrftWeb/wwwroot/deepdrft-logo.ico b/DeepDrftWeb/wwwroot/deepdrft-logo.ico new file mode 100644 index 0000000000000000000000000000000000000000..52b5d0ad0b53b311985ae476176a73d1eb35d3f7 GIT binary patch literal 67646 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�nF^Vs5Pt29ri+w9=(0tZG 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 literal 0 HcmV?d00001