FnzDataSet.cs 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. using FNZCM.BlazorWasm.Helpers;
  2. using FNZCM.BlazorWasm.Models;
  3. using FNZCM.Shared.Helpers;
  4. using FNZCM.Shared.MediaModels;
  5. namespace FNZCM.BlazorWasm
  6. {
  7. internal static class FnzDataSet
  8. {
  9. public static FeTrack[] AllTracks { get; set; }
  10. public static FeTrackSet[] AllTracksSet { get; set; }
  11. public static FeDisc[] AllDisc { get; set; }
  12. public static FeLibrary[] AllLibrary { get; set; }
  13. public static void InitFeModules2(string apiBase, Dictionary<string, Library> Libraries, Dictionary<string, MediaTag> MediaTags)
  14. {
  15. var lstAllTrack = new List<FeTrack>();
  16. var lstAllTrackSet = new List<FeTrackSet>();
  17. var lstAllDisc = new List<FeDisc>();
  18. var lstAllLibrry = new List<FeLibrary>();
  19. foreach (var lib in Libraries.OrderBy(p => p.Key))
  20. {
  21. var feLib = new FeLibrary
  22. {
  23. Key = lib.Key,
  24. Name = lib.Value.Name,
  25. };
  26. lstAllLibrry.Add(feLib);
  27. var lstDiscOfLib = new List<FeDisc>();
  28. foreach (var disc in lib.Value.Discs.OrderByDescending(p => p.Key))
  29. {
  30. var feDisc = new FeDisc
  31. {
  32. LibKey = lib.Key,
  33. Lib = feLib,
  34. Key = disc.Key,
  35. Name = disc.Value.Name,
  36. CoverPath = $"{apiBase}/cover/{lib.Key.UrlEscape()}/{disc.Key.UrlEscape()}/cover.jpg",
  37. };
  38. lstAllDisc.Add(feDisc);
  39. lstDiscOfLib.Add(feDisc);
  40. // BK
  41. if (disc.Value.Bks?.Any() == true)
  42. {
  43. var feBkOfDisc = new List<FeBk>();
  44. foreach (var item in disc.Value.Bks.OrderBy(p=>p.Key))
  45. {
  46. feBkOfDisc.Add(new FeBk
  47. {
  48. Key = item.Key,
  49. Name = item.Value,
  50. Path = $"{apiBase}/bk/{lib.Key.UrlEscape()}/{disc.Key.UrlEscape()}/{item.Key.UrlEscape()}",
  51. });
  52. }
  53. feDisc.Bks = feBkOfDisc.ToArray();
  54. }
  55. // Trask Set
  56. var lstTrackSetOfDisc = new List<FeTrackSet>();
  57. // Trask Set Main
  58. {
  59. var feTsMain = new FeTrackSet
  60. {
  61. LibKey = lib.Key,
  62. Lib = feLib,
  63. DiscKey = disc.Key,
  64. Disc = feDisc,
  65. Key = "main",
  66. Name = "Main",
  67. M3U8Path = $"{apiBase}/list/{lib.Key.UrlEscape()}/{disc.Key.UrlEscape()}/playlist.m3u8",
  68. };
  69. lstAllTrackSet.Add(feTsMain);
  70. lstTrackSetOfDisc.Add(feTsMain);
  71. var lstTracksOfTsMain = new List<FeTrack>();
  72. foreach (var t in disc.Value.MainTracks.OrderBy(p => p.Key))
  73. {
  74. var fet = new FeTrack
  75. {
  76. LibKey = lib.Key,
  77. Lib = feLib,
  78. DiscKey = disc.Key,
  79. Disc = feDisc,
  80. TrackSetKey = "main",
  81. TrackSet = feTsMain,
  82. Key = t.Key,
  83. Name = t.Value,
  84. Path = $"{apiBase}/media/{lib.Key.UrlEscape()}/{disc.Key.UrlEscape()}/{t.Key.UrlEscape()}",
  85. Tag = MediaTags.GetEx($"/media/{lib.Key}/{disc.Key}/{t.Key}")
  86. };
  87. lstAllTrack.Add(fet);
  88. lstTracksOfTsMain.Add(fet);
  89. }
  90. feTsMain.Tracks = lstTracksOfTsMain.ToArray();
  91. feTsMain.TotalBytes = feTsMain.Tracks.Sum(p => p.Tag?.Length ?? 0);
  92. feTsMain.TotalDuration = feTsMain.Tracks.Sum(p => p.Tag?.Duration ?? 0);
  93. }
  94. // Trask Set Sub
  95. {
  96. foreach (var tSubSet in disc.Value.SubTracks.OrderBy(p => p.Key))
  97. {
  98. var feTsSub = new FeTrackSet
  99. {
  100. LibKey = lib.Key,
  101. Lib = feLib,
  102. DiscKey = disc.Key,
  103. Disc = feDisc,
  104. Key = tSubSet.Key,
  105. Name = tSubSet.Value.Name,
  106. M3U8Path = $"{apiBase}/list/{lib.Key.UrlEscape()}/{disc.Key.UrlEscape()}/{tSubSet.Key.UrlEscape()}/playlist.m3u8",
  107. };
  108. lstAllTrackSet.Add(feTsSub);
  109. lstTrackSetOfDisc.Add(feTsSub);
  110. var lstTracksOfTsSub = new List<FeTrack>();
  111. foreach (var t in tSubSet.Value.Tracks.OrderBy(p => p.Key))
  112. {
  113. var fet = new FeTrack
  114. {
  115. LibKey = lib.Key,
  116. Lib = feLib,
  117. DiscKey = disc.Key,
  118. Disc = feDisc,
  119. TrackSetKey = tSubSet.Key,
  120. TrackSet = feTsSub,
  121. Key = t.Key,
  122. Name = t.Value,
  123. Path = $"{apiBase}/media/{lib.Key.UrlEscape()}/{disc.Key.UrlEscape()}/{tSubSet.Key.UrlEscape()}/{t.Key.UrlEscape()}",
  124. Tag = MediaTags.GetEx($"/media/{lib.Key}/{disc.Key}/{tSubSet.Key}/{t.Key}"),
  125. };
  126. lstAllTrack.Add(fet);
  127. lstTracksOfTsSub.Add(fet);
  128. }
  129. feTsSub.Tracks = lstTracksOfTsSub.ToArray();
  130. feTsSub.TotalBytes = feTsSub.Tracks.Sum(p => p.Tag?.Length ?? 0);
  131. feTsSub.TotalDuration = feTsSub.Tracks.Sum(p => p.Tag?.Duration ?? 0);
  132. }// end foreach sub track set
  133. }
  134. feDisc.TrackSets = lstTrackSetOfDisc.ToArray();
  135. }// end foreach disc
  136. feLib.Discs = lstDiscOfLib.ToArray();
  137. var lstCatalogOfLib = new List<FeLibraryCatalog>();
  138. var trackSetKeys = feLib.Discs.SelectMany(p => p.TrackSets.Select(q => q.Key)).Distinct().ToArray();
  139. foreach (var tsKey in trackSetKeys)
  140. {
  141. var cat = new FeLibraryCatalog
  142. {
  143. Name = tsKey.ToUpper(),
  144. PlaylistPath = tsKey == "main"
  145. ? $"{apiBase}/lib_list/{lib.Key.UrlEscape()}/playlist.m3u8"
  146. : $"{apiBase}/lib_list/{lib.Key.UrlEscape()}/{tsKey.UrlEscape()}/playlist.m3u8",
  147. TotalBytes = feLib.Discs
  148. .Sum(p => p.TrackSets
  149. .Where(p => p.Key == tsKey)
  150. .Sum(q => q.Tracks
  151. .Sum(r => r.Tag?.Length ?? 0)
  152. )
  153. ),
  154. TotalDuration = feLib.Discs
  155. .Sum(p => p.TrackSets
  156. .Where(p => p.Key == tsKey)
  157. .Sum(q => q.Tracks
  158. .Sum(r => r.Tag?.Duration ?? 0)
  159. )
  160. ),
  161. };
  162. lstCatalogOfLib.Add(cat);
  163. }
  164. feLib.Catalogs = lstCatalogOfLib.ToArray();
  165. }// end foreach lib
  166. AllTracks = lstAllTrack.ToArray();
  167. AllTracksSet = lstAllTrackSet.ToArray();
  168. AllDisc = lstAllDisc.ToArray();
  169. AllLibrary = lstAllLibrry.ToArray();
  170. }
  171. }
  172. }