App.razor 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. @inherits ViewBase
  2. @code {
  3. [Inject]
  4. private FnzDataSetHelper DataSetHelper { get; set; }
  5. private bool IsLoading = true;
  6. private string LoadingErrorMessage;
  7. private ProgressBar ProgressBar1;
  8. private ProgressBar ProgressBar2;
  9. private ProgressBar ProgressBar3;
  10. private ProgressBar ProgressBar4;
  11. private SettingDialog dlgSetting;
  12. private enum ViewNames { Browse, Search, Playlists }
  13. private ViewNames CurrentView { get => LocalStorage.Get<ViewNames>(); set => LocalStorage.Set(value); }
  14. protected override async Task OnInitializedAsync()
  15. {
  16. if (CurrentView == 0) CurrentView = ViewNames.Browse;
  17. base.OnInitialized();
  18. await LoadData();
  19. }
  20. }
  21. <SettingDialog @ref="dlgSetting" ReloadData="async ()=>await LoadData()" />
  22. <div class="container">
  23. <a style="float:right" href="/classic-index">Back OLD Home Page</a>
  24. <h3>Blazor WASM UI</h3>
  25. <ul class="nav nav-tabs justify-content-center nav-fill" id="MainNavBar">
  26. @foreach (ViewNames item in Enum.GetValues(typeof(ViewNames)))
  27. {
  28. <li class="nav-item">
  29. <button class="nav-link @(item==CurrentView ?"active":"")" type="button" @onclick="()=>CurrentView=item">
  30. @item
  31. </button>
  32. </li>
  33. }
  34. <li class="nav-item" role="presentation">
  35. <button class="nav-link" type="button" role="tab" @onclick="()=>dlgSetting.Show()">
  36. <i class="bi bi-gear"></i>
  37. </button>
  38. </li>
  39. </ul>
  40. @if (IsLoading)
  41. {
  42. @if (LoadingErrorMessage != null)
  43. {
  44. <div class="p-3">
  45. <span class="bi bi-x-circle text-danger" role="status" />
  46. <span>@LoadingErrorMessage</span>
  47. </div>
  48. }
  49. else
  50. {
  51. <div class="p-3">
  52. <ProgressBar @ref="ProgressBar1" Throttle="500"></ProgressBar>
  53. </div>
  54. <div class="p-3">
  55. <ProgressBar @ref="ProgressBar2" Throttle="500"></ProgressBar>
  56. </div>
  57. <div class="p-3">
  58. <ProgressBar @ref="ProgressBar3" Throttle="500"></ProgressBar>
  59. </div>
  60. <div class="p-3">
  61. <ProgressBar @ref="ProgressBar4" Throttle="500"></ProgressBar>
  62. </div>
  63. }
  64. }
  65. @if (!IsLoading)
  66. {
  67. switch (CurrentView)
  68. {
  69. case ViewNames.Browse:
  70. <BrowseView></BrowseView>
  71. break;
  72. case ViewNames.Search:
  73. <SearchView></SearchView>
  74. break;
  75. case ViewNames.Playlists:
  76. <PlaylistView></PlaylistView>
  77. break;
  78. }
  79. }
  80. </div>
  81. @code {
  82. private async Task LoadData()
  83. {
  84. IsLoading = true;
  85. StateHasChanged();
  86. await Task.Delay(10);
  87. await ProgressBar1.SetProgress(0, "Waiting server ready");
  88. await ProgressBar2.SetProgress(0, "Pending load fileset");
  89. await ProgressBar3.SetProgress(0, "Pending load tags");
  90. await ProgressBar4.SetProgress(0, "Pending parse models");
  91. StateHasChanged();
  92. await Task.Delay(10);
  93. try
  94. {
  95. do
  96. {
  97. var r = await ApiClient.GetProgressAsync();
  98. await ProgressBar1.SetProgress((float)r.LoadedTags / r.TotalTrackCount, $"Waiting server ready {r.LoadedTags}/{r.TotalTrackCount}");
  99. if (r?.IsLoading == false)
  100. {
  101. await ProgressBar1.SetProgress(100, "Server ready");
  102. await ProgressBar1.ForceUpdate();
  103. break;
  104. }
  105. await Task.Delay(1000);
  106. } while (true);
  107. StateHasChanged();
  108. await Task.Delay(10);
  109. await DataSetHelper.InitFeModulesAsync(new[] { ProgressBar2, ProgressBar3, ProgressBar4, });
  110. StateHasChanged();
  111. await Task.Delay(500);
  112. IsLoading = false;
  113. }
  114. catch (Exception ex)
  115. {
  116. LoadingErrorMessage = ex.Message;
  117. }
  118. }
  119. }