|
@@ -1,4 +1,4 @@
|
|
|
-@inherits ViewBase
|
|
|
+@inherits ViewBase
|
|
|
@code {
|
|
|
|
|
|
public static App Instance { get; private set; }
|
|
@@ -6,13 +6,13 @@
|
|
|
[Inject]
|
|
|
private FnzDataSetHelper DataSetHelper { get; set; }
|
|
|
|
|
|
- private bool IsLoading = true;
|
|
|
- private string LoadingErrorMessage;
|
|
|
+ private bool isLoading = true;
|
|
|
+ private string loadingErrorMessage;
|
|
|
|
|
|
- private ProgressBar ProgressBar1;
|
|
|
- private ProgressBar ProgressBar2;
|
|
|
- private ProgressBar ProgressBar3;
|
|
|
- private ProgressBar ProgressBar4;
|
|
|
+ private ProgressBar progressBar1;
|
|
|
+ private ProgressBar progressBar2;
|
|
|
+ private ProgressBar progressBar3;
|
|
|
+ private ProgressBar progressBar4;
|
|
|
|
|
|
private SettingDialog dlgSetting;
|
|
|
private PlaylistAddDialog dlgPlaylistAdd;
|
|
@@ -23,31 +23,19 @@
|
|
|
protected override async Task OnInitializedAsync()
|
|
|
{
|
|
|
Instance = this;
|
|
|
-
|
|
|
if (CurrentView == 0) CurrentView = ViewNames.Browse;
|
|
|
- base.OnInitialized();
|
|
|
+ await base.OnInitializedAsync();
|
|
|
await LoadData();
|
|
|
}
|
|
|
-
|
|
|
- protected override async Task OnAfterRenderAsync(bool firstRender)
|
|
|
- {
|
|
|
- await base.OnAfterRenderAsync(firstRender);
|
|
|
- }
|
|
|
-
|
|
|
}
|
|
|
|
|
|
<SettingDialog @ref="dlgSetting" ReloadData="async ()=>await LoadData()" />
|
|
|
|
|
|
+<div class="container" style="margin-bottom: @(BottomBarHeight)px">
|
|
|
|
|
|
-<div class="container">
|
|
|
- @if (RequestedPlay)
|
|
|
- {
|
|
|
- <div class="sticky-top" style="z-index: 4096">
|
|
|
- <audio @ref="AudioElement" src="@CurrentPlayingUrl" autoplay controls class="w-100" style="height: 30px;"></audio>
|
|
|
- </div>
|
|
|
- }
|
|
|
<a style="float: right" href="/classic-index">Back OLD Home Page</a>
|
|
|
<h3>Blazor WASM UI</h3>
|
|
|
+
|
|
|
<ul class="nav nav-tabs justify-content-center nav-fill" id="MainNavBar">
|
|
|
@foreach (ViewNames item in Enum.GetValues(typeof(ViewNames)))
|
|
|
{
|
|
@@ -64,33 +52,33 @@
|
|
|
</li>
|
|
|
</ul>
|
|
|
|
|
|
- @if (IsLoading)
|
|
|
+ @if (isLoading)
|
|
|
{
|
|
|
- @if (LoadingErrorMessage != null)
|
|
|
+ @if (loadingErrorMessage != null)
|
|
|
{
|
|
|
<div class="p-3">
|
|
|
<span class="bi bi-x-circle text-danger" role="status" />
|
|
|
- <span>@LoadingErrorMessage</span>
|
|
|
+ <span>@loadingErrorMessage</span>
|
|
|
</div>
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
<div class="p-3">
|
|
|
- <ProgressBar @ref="ProgressBar1" Throttle="500"></ProgressBar>
|
|
|
+ <ProgressBar @ref="progressBar1" Throttle="500"></ProgressBar>
|
|
|
</div>
|
|
|
<div class="p-3">
|
|
|
- <ProgressBar @ref="ProgressBar2" Throttle="500"></ProgressBar>
|
|
|
+ <ProgressBar @ref="progressBar2" Throttle="500"></ProgressBar>
|
|
|
</div>
|
|
|
<div class="p-3">
|
|
|
- <ProgressBar @ref="ProgressBar3" Throttle="500"></ProgressBar>
|
|
|
+ <ProgressBar @ref="progressBar3" Throttle="500"></ProgressBar>
|
|
|
</div>
|
|
|
<div class="p-3">
|
|
|
- <ProgressBar @ref="ProgressBar4" Throttle="500"></ProgressBar>
|
|
|
+ <ProgressBar @ref="progressBar4" Throttle="500"></ProgressBar>
|
|
|
</div>
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- @if (!IsLoading)
|
|
|
+ @if (!isLoading)
|
|
|
{
|
|
|
switch (CurrentView)
|
|
|
{
|
|
@@ -105,7 +93,7 @@
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
<PlaylistAddDialog @ref="dlgPlaylistAdd"></PlaylistAddDialog>
|
|
|
|
|
|
</div>
|
|
@@ -113,14 +101,14 @@
|
|
|
@code {
|
|
|
private async Task LoadData()
|
|
|
{
|
|
|
- IsLoading = true;
|
|
|
+ isLoading = true;
|
|
|
StateHasChanged();
|
|
|
await Task.Delay(10);
|
|
|
|
|
|
- await ProgressBar1.SetProgress(0, "Waiting server ready...", true);
|
|
|
- await ProgressBar2.SetProgress(0, "Pending load fileset...", true);
|
|
|
- await ProgressBar3.SetProgress(0, "Pending load tags...", true);
|
|
|
- await ProgressBar4.SetProgress(0, "Pending parse models...", true);
|
|
|
+ await progressBar1.SetProgress(0, "Waiting server ready...", true);
|
|
|
+ await progressBar2.SetProgress(0, "Pending load fileset...", true);
|
|
|
+ await progressBar3.SetProgress(0, "Pending load tags...", true);
|
|
|
+ await progressBar4.SetProgress(0, "Pending parse models...", true);
|
|
|
|
|
|
StateHasChanged();
|
|
|
await Task.Delay(10);
|
|
@@ -130,10 +118,10 @@
|
|
|
do
|
|
|
{
|
|
|
var r = await ApiClient.GetProgressAsync();
|
|
|
- await ProgressBar1.SetProgress((float)r.LoadedTags / r.TotalTrackCount, $"Waiting server ready {r.LoadedTags}/{r.TotalTrackCount}");
|
|
|
+ await progressBar1.SetProgress((float)r.LoadedTags / r.TotalTrackCount, $"Waiting server ready {r.LoadedTags}/{r.TotalTrackCount}");
|
|
|
if (r?.IsLoading == false)
|
|
|
{
|
|
|
- await ProgressBar1.SetProgress(100, "Waiting server ready...OK", true);
|
|
|
+ await progressBar1.SetProgress(100, "Waiting server ready...OK", true);
|
|
|
break;
|
|
|
}
|
|
|
await Task.Delay(1000);
|
|
@@ -142,32 +130,95 @@
|
|
|
StateHasChanged();
|
|
|
await Task.Delay(10);
|
|
|
|
|
|
- await DataSetHelper.InitFeModulesAsync(new[] { ProgressBar2, ProgressBar3, ProgressBar4, });
|
|
|
+ await DataSetHelper.InitFeModulesAsync(new[] { progressBar2, progressBar3, progressBar4, });
|
|
|
|
|
|
StateHasChanged();
|
|
|
await Task.Delay(500);
|
|
|
|
|
|
- IsLoading = false;
|
|
|
+ isLoading = false;
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
- LoadingErrorMessage = ex.Message;
|
|
|
+ loadingErrorMessage = ex.Message;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ public void ShowAddTrackToPlaylistDialog(FeTrack track) => dlgPlaylistAdd.Show(track);
|
|
|
+}
|
|
|
+
|
|
|
+@if (requestedPlay)
|
|
|
+{
|
|
|
+ <style>
|
|
|
+ .bottom-bar {
|
|
|
+ pointer-events: none;
|
|
|
+ }
|
|
|
+
|
|
|
+ .bottom-bar *:not(div) {
|
|
|
+ pointer-events: auto;
|
|
|
+ }
|
|
|
+ </style>
|
|
|
+ <FnzDiv @ref="bottomBar" class="fixed-bottom bottom-bar" style="z-index: 4096;">
|
|
|
+ <div class="row">
|
|
|
+ <div class="col-5">
|
|
|
+ <video @ref="audioElement" src="@currentPlayingUrl" autoplay controls class="w-100 m-0 p-0" @onloadeddata="@PlayerLoaded"></video>
|
|
|
+ </div>
|
|
|
+ <div class="col-2 d-flex align-items-end">
|
|
|
+ <div class="btn-group dropup">
|
|
|
+ <button class="align-bottom btn btn-secondary dropdown-toggle p-2" type="button" data-bs-toggle="dropdown">
|
|
|
+ <i class="bi bi-card-list"></i>
|
|
|
+ </button>
|
|
|
+ <div class="dropdown-menu">
|
|
|
+ <div class="text-center"><a class="btn-link" @onclick="@StopAndClose">Stop and close</a></div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ </div>
|
|
|
+ @*<div class="col-2 d-flex align-items-end">
|
|
|
+ <button class="btn btn-secondary p-2" type="button">
|
|
|
+ <i class="bi bi-chevron-bar-left"></i>
|
|
|
+ </button>
|
|
|
+ </div>
|
|
|
+ <div class="col-2 d-flex align-items-end">
|
|
|
+ <button class="btn btn-secondary p-2" type="button">
|
|
|
+ <i class="bi bi-chevron-bar-right"></i>
|
|
|
+ </button>
|
|
|
+ </div>*@
|
|
|
+ </div>
|
|
|
+ </FnzDiv>
|
|
|
}
|
|
|
|
|
|
@code {
|
|
|
- private bool RequestedPlay = false;
|
|
|
- private ElementReference AudioElement;
|
|
|
- private string CurrentPlayingUrl;
|
|
|
+ public Action BottomBarHeightChanged;
|
|
|
+ public int BottomBarHeight { get; private set; }
|
|
|
+
|
|
|
+ private bool requestedPlay;
|
|
|
+ private ElementReference audioElement;
|
|
|
+ private string currentPlayingUrl;
|
|
|
+ private FnzDiv bottomBar;
|
|
|
|
|
|
public void PlayTrack(FeTrack track) => PlayTrack(track.Path);
|
|
|
public void PlayTrack(string path)
|
|
|
{
|
|
|
- CurrentPlayingUrl = path;
|
|
|
- RequestedPlay = true;
|
|
|
+ currentPlayingUrl = path;
|
|
|
+ requestedPlay = true;
|
|
|
StateHasChanged();
|
|
|
}
|
|
|
|
|
|
- public void ShowAddTrackToPlaylistDialog(FeTrack track) => dlgPlaylistAdd.Show(track);
|
|
|
+ private async Task PlayerLoaded(EventArgs args)
|
|
|
+ {
|
|
|
+ BottomBarHeight = bottomBar == null ? 0 : await bottomBar.GetClientHeight();
|
|
|
+ StateHasChanged();
|
|
|
+ BottomBarHeightChanged?.Invoke();
|
|
|
+ }
|
|
|
+
|
|
|
+ private void StopAndClose()
|
|
|
+ {
|
|
|
+ currentPlayingUrl = null;
|
|
|
+ StateHasChanged();
|
|
|
+ requestedPlay = false;
|
|
|
+ StateHasChanged();
|
|
|
+ BottomBarHeight = 0;
|
|
|
+ StateHasChanged();
|
|
|
+ BottomBarHeightChanged?.Invoke();
|
|
|
+ }
|
|
|
}
|