using FNZCM.BlazorWasm.Helpers; using FNZCM.BlazorWasm.Models; using FNZCM.Shared.Helpers; using FNZCM.Shared.MediaModels; namespace FNZCM.BlazorWasm { internal static class FnzDataSet { public static FeTrack[] AllTracks { get; set; } public static FeTrackSet[] AllTracksSet { get; set; } public static FeDisc[] AllDisc { get; set; } public static FeLibrary[] AllLibrary { get; set; } public static void InitFeModules2(string apiBase, Dictionary Libraries, Dictionary MediaTags) { var lstAllTrack = new List(); var lstAllTrackSet = new List(); var lstAllDisc = new List(); var lstAllLibrry = new List(); foreach (var lib in Libraries.OrderBy(p => p.Key)) { var feLib = new FeLibrary { Key = lib.Key, Name = lib.Value.Name, }; lstAllLibrry.Add(feLib); var lstDiscOfLib = new List(); foreach (var disc in lib.Value.Discs.OrderByDescending(p => p.Key)) { var feDisc = new FeDisc { LibKey = lib.Key, Lib = feLib, Key = disc.Key, Name = disc.Value.Name, CoverPath = $"{apiBase}/cover/{lib.Key.UrlEscape()}/{disc.Key.UrlEscape()}/cover.jpg", }; lstAllDisc.Add(feDisc); lstDiscOfLib.Add(feDisc); // BK if (disc.Value.Bks?.Any() == true) { var feBkOfDisc = new List(); foreach (var item in disc.Value.Bks.OrderBy(p=>p.Key)) { feBkOfDisc.Add(new FeBk { Key = item.Key, Name = item.Value, Path = $"{apiBase}/bk/{lib.Key.UrlEscape()}/{disc.Key.UrlEscape()}/{item.Key.UrlEscape()}", }); } feDisc.Bks = feBkOfDisc.ToArray(); } // Trask Set var lstTrackSetOfDisc = new List(); // Trask Set Main { var feTsMain = new FeTrackSet { LibKey = lib.Key, Lib = feLib, DiscKey = disc.Key, Disc = feDisc, Key = "main", Name = "Main", M3U8Path = $"{apiBase}/list/{lib.Key.UrlEscape()}/{disc.Key.UrlEscape()}/playlist.m3u8", }; lstAllTrackSet.Add(feTsMain); lstTrackSetOfDisc.Add(feTsMain); var lstTracksOfTsMain = new List(); foreach (var t in disc.Value.MainTracks.OrderBy(p => p.Key)) { var fet = new FeTrack { LibKey = lib.Key, Lib = feLib, DiscKey = disc.Key, Disc = feDisc, TrackSetKey = "main", TrackSet = feTsMain, Key = t.Key, Name = t.Value, Path = $"{apiBase}/media/{lib.Key.UrlEscape()}/{disc.Key.UrlEscape()}/{t.Key.UrlEscape()}", Tag = MediaTags.GetEx($"/media/{lib.Key}/{disc.Key}/{t.Key}") }; lstAllTrack.Add(fet); lstTracksOfTsMain.Add(fet); } feTsMain.Tracks = lstTracksOfTsMain.ToArray(); feTsMain.TotalBytes = feTsMain.Tracks.Sum(p => p.Tag?.Length ?? 0); feTsMain.TotalDuration = feTsMain.Tracks.Sum(p => p.Tag?.Duration ?? 0); } // Trask Set Sub { foreach (var tSubSet in disc.Value.SubTracks.OrderBy(p => p.Key)) { var feTsSub = new FeTrackSet { LibKey = lib.Key, Lib = feLib, DiscKey = disc.Key, Disc = feDisc, Key = tSubSet.Key, Name = tSubSet.Value.Name, M3U8Path = $"{apiBase}/list/{lib.Key.UrlEscape()}/{disc.Key.UrlEscape()}/{tSubSet.Key.UrlEscape()}/playlist.m3u8", }; lstAllTrackSet.Add(feTsSub); lstTrackSetOfDisc.Add(feTsSub); var lstTracksOfTsSub = new List(); foreach (var t in tSubSet.Value.Tracks.OrderBy(p => p.Key)) { var fet = new FeTrack { LibKey = lib.Key, Lib = feLib, DiscKey = disc.Key, Disc = feDisc, TrackSetKey = tSubSet.Key, TrackSet = feTsSub, Key = t.Key, Name = t.Value, Path = $"{apiBase}/media/{lib.Key.UrlEscape()}/{disc.Key.UrlEscape()}/{tSubSet.Key.UrlEscape()}/{t.Key.UrlEscape()}", Tag = MediaTags.GetEx($"/media/{lib.Key}/{disc.Key}/{tSubSet.Key}/{t.Key}"), }; lstAllTrack.Add(fet); lstTracksOfTsSub.Add(fet); } feTsSub.Tracks = lstTracksOfTsSub.ToArray(); feTsSub.TotalBytes = feTsSub.Tracks.Sum(p => p.Tag?.Length ?? 0); feTsSub.TotalDuration = feTsSub.Tracks.Sum(p => p.Tag?.Duration ?? 0); }// end foreach sub track set } feDisc.TrackSets = lstTrackSetOfDisc.ToArray(); }// end foreach disc feLib.Discs = lstDiscOfLib.ToArray(); var lstCatalogOfLib = new List(); var trackSetKeys = feLib.Discs.SelectMany(p => p.TrackSets.Select(q => q.Key)).Distinct().ToArray(); foreach (var tsKey in trackSetKeys) { var cat = new FeLibraryCatalog { Name = tsKey.ToUpper(), PlaylistPath = tsKey == "main" ? $"{apiBase}/lib_list/{lib.Key.UrlEscape()}/playlist.m3u8" : $"{apiBase}/lib_list/{lib.Key.UrlEscape()}/{tsKey.UrlEscape()}/playlist.m3u8", TotalBytes = feLib.Discs .Sum(p => p.TrackSets .Where(p => p.Key == tsKey) .Sum(q => q.Tracks .Sum(r => r.Tag?.Length ?? 0) ) ), TotalDuration = feLib.Discs .Sum(p => p.TrackSets .Where(p => p.Key == tsKey) .Sum(q => q.Tracks .Sum(r => r.Tag?.Duration ?? 0) ) ), }; lstCatalogOfLib.Add(cat); } feLib.Catalogs = lstCatalogOfLib.ToArray(); }// end foreach lib AllTracks = lstAllTrack.ToArray(); AllTracksSet = lstAllTrackSet.ToArray(); AllDisc = lstAllDisc.ToArray(); AllLibrary = lstAllLibrry.ToArray(); } } }