diff --git a/src/Misc/Commands.cs b/src/Misc/Commands.cs index babed1d..8ff9ea6 100644 --- a/src/Misc/Commands.cs +++ b/src/Misc/Commands.cs @@ -303,11 +303,18 @@ namespace mpvnet public static void CycleAudio() { + if (!App.MediaInfo) + Core.UpdateTrackData(); + var tracks = Core.MediaTracks.Where(track => track.Type == "a").ToArray(); - var externalTracks = Core.GetExternalTracks().Where(track => track.Type == "a"); + + if (App.MediaInfo) + { + var externalTracks = Core.GetExternalTracks().Where(track => track.Type == "a"); - if (externalTracks.Count() > 0) - tracks = tracks.Concat(externalTracks).ToArray(); + if (externalTracks.Count() > 0) + tracks = tracks.Concat(externalTracks).ToArray(); + } int len = tracks.Length; @@ -425,11 +432,18 @@ namespace mpvnet public static void ShowAudioTracks() => App.InvokeOnMainThread(() => { - var tracks = Core.MediaTracks.Where(track => track.Type == "a").ToArray(); - var externalTracks = Core.GetExternalTracks().Where(track => track.Type == "a"); + if (!App.MediaInfo) + Core.UpdateTrackData(); - if (externalTracks.Count() > 0) - tracks = tracks.Concat(externalTracks).ToArray(); + var tracks = Core.MediaTracks.Where(track => track.Type == "a").ToArray(); + + if (App.MediaInfo) + { + var externalTracks = Core.GetExternalTracks().Where(track => track.Type == "a"); + + if (externalTracks.Count() > 0) + tracks = tracks.Concat(externalTracks).ToArray(); + } if (tracks.Length < 1) { @@ -463,11 +477,18 @@ namespace mpvnet public static void ShowSubtitleTracks() => App.InvokeOnMainThread(() => { - var tracks = Core.MediaTracks.Where(track => track.Type == "s").ToArray(); - var externalTracks = Core.GetExternalTracks().Where(track => track.Type == "s"); + if (!App.MediaInfo) + Core.UpdateTrackData(); - if (externalTracks.Count() > 0) - tracks = tracks.Concat(externalTracks).ToArray(); + var tracks = Core.MediaTracks.Where(track => track.Type == "s").ToArray(); + + if (App.MediaInfo) + { + var externalTracks = Core.GetExternalTracks().Where(track => track.Type == "s"); + + if (externalTracks.Count() > 0) + tracks = tracks.Concat(externalTracks).ToArray(); + } if (tracks.Length < 1) { diff --git a/src/Misc/MainForm.cs b/src/Misc/MainForm.cs index faa75a7..a4c6527 100644 --- a/src/Misc/MainForm.cs +++ b/src/Misc/MainForm.cs @@ -227,6 +227,9 @@ namespace mpvnet void UpdateMenu() { + if (!App.MediaInfo) + Core.UpdateTrackData(); + lock (Core.MediaTracks) { var trackMenuItem = FindMenuItem("Track"); @@ -240,18 +243,21 @@ namespace mpvnet var vidTracks = Core.MediaTracks.Where(track => track.Type == "v"); var ediTracks = Core.MediaTracks.Where(track => track.Type == "e"); - var externalTracks = Core.GetExternalTracks(); - - if (externalTracks.Count > 0) + if (App.MediaInfo) { - var exAudTracks = externalTracks.Where(track => track.Type == "a"); - var exSubTracks = externalTracks.Where(track => track.Type == "s"); + var externalTracks = Core.GetExternalTracks(); - if (exAudTracks.Count() > 0) - audTracks = audTracks.Concat(exAudTracks); + if (externalTracks.Count > 0) + { + var exAudTracks = externalTracks.Where(track => track.Type == "a"); + var exSubTracks = externalTracks.Where(track => track.Type == "s"); - if (exSubTracks.Count() > 0) - subTracks = subTracks.Concat(exSubTracks); + if (exAudTracks.Count() > 0) + audTracks = audTracks.Concat(exAudTracks); + + if (exSubTracks.Count() > 0) + subTracks = subTracks.Concat(exSubTracks); + } } foreach (MediaTrack track in vidTracks) diff --git a/src/Misc/Player.cs b/src/Misc/Player.cs index b392022..5ff7f6c 100644 --- a/src/Misc/Player.cs +++ b/src/Misc/Player.cs @@ -541,8 +541,8 @@ namespace mpvnet VideoSizeAutoResetEvent.Set(); } - App.RunTask(new Action(() => ReadMetaData())); - //Debug.WriteLine("################# " + GetPropertyString("media-title")); + if (App.MediaInfo) + App.RunTask(new Action(() => UpdateTrackDataUsingMediaInfo())); App.RunTask(new Action(() => { if (path.Contains("://")) @@ -1412,7 +1412,7 @@ namespace mpvnet Add(track, GetPropertyString($"track-list/{i}/codec").ToUpperEx()); Add(track, GetPropertyInt($"track-list/{i}/audio-channels") + " channels"); Add(track, "External"); - Add(track, $"{title}"); + Add(track, title); track.Text = "A: " + track.Text.Trim(' ', ','); track.Type = "a"; track.ID = GetPropertyInt($"track-list/{i}/id"); @@ -1424,7 +1424,7 @@ namespace mpvnet Add(track, GetLanguage(GetPropertyString($"track-list/{i}/lang"))); Add(track, GetPropertyString($"track-list/{i}/codec").ToUpperEx()); Add(track, "External"); - Add(track, $"{title}"); + Add(track, title); track.Text = "S: " + track.Text.Trim(' ', ','); track.Type = "s"; track.ID = GetPropertyInt($"track-list/{i}/id"); @@ -1436,18 +1436,7 @@ namespace mpvnet return tracks; } - void ReadMetaData() - { - if (App.MediaInfo) - ReadMetaDataUsingMediaInfo(); - else - { - ReadMetaDataUsingMediaInfo(); - ReadMetaDataUsingMpv(); - } - } - - void ReadMetaDataUsingMpv() + public void UpdateTrackData() { string path = GetPropertyString("path"); @@ -1457,14 +1446,17 @@ namespace mpvnet lock (MediaTracks) { - //MediaTracks.Clear(); + MediaTracks.Clear(); int trackListCount = GetPropertyInt("track-list/count"); for (int i = 0; i < trackListCount; i++) { string type = GetPropertyString($"track-list/{i}/type"); - string test = GetPropertyString($"track-list"); + string filename = GetPropertyString($"filename/no-ext"); + string title = GetPropertyString($"track-list/{i}/title").Replace(filename, ""); + + title = Regex.Replace(title, @"^[\._\-]", "").Replace("_", "__"); if (type == "video") { @@ -1472,7 +1464,7 @@ namespace mpvnet Add(track, GetPropertyString($"track-list/{i}/codec").ToUpperEx()); Add(track, GetPropertyString($"track-list/{i}/demux-w") + "x" + GetPropertyString($"track-list/{i}/demux-h")); Add(track, GetPropertyString($"track-list/{i}/demux-fps").Replace(".000000", "") + " FPS"); - Add(track, GetPropertyBool($"track-list/{i}/default") ? "Default" : ""); + Add(track, GetPropertyBool($"track-list/{i}/default") ? "Default" : null); track.Text = "V: " + track.Text.Trim(' ', ','); track.Type = "v"; track.ID = GetPropertyInt($"track-list/{i}/id"); @@ -1480,25 +1472,15 @@ namespace mpvnet } else if (type == "audio") { - //Add(track, mi.GetAudio(i, "Language/String")); - //Add(track, mi.GetAudio(i, "Format")); - //Add(track, mi.GetAudio(i, "Format_Profile")); - //Add(track, mi.GetAudio(i, "BitRate/String")); - //Add(track, mi.GetAudio(i, "Channel(s)/String")); - //Add(track, mi.GetAudio(i, "SamplingRate/String")); - - //Add(track, mi.GetAudio(i, "Forced") == "Yes" ? "Forced" : ""); - //Add(track, mi.GetAudio(i, "Default") == "Yes" ? "Default" : ""); - - //Add(track, mi.GetAudio(i, "Title")); - MediaTrack track = new MediaTrack(); Add(track, GetLanguage(GetPropertyString($"track-list/{i}/lang"))); Add(track, GetPropertyString($"track-list/{i}/codec").ToUpperEx()); Add(track, GetPropertyInt($"track-list/{i}/audio-channels") + " channels"); Add(track, GetPropertyInt($"track-list/{i}/demux-samplerate") + " Hz"); - Add(track, GetPropertyBool($"track-list/{i}/forced") ? "Forced" : ""); - Add(track, GetPropertyBool($"track-list/{i}/default") ? "Default" : ""); + Add(track, GetPropertyBool($"track-list/{i}/forced") ? "Forced" : null); + Add(track, GetPropertyBool($"track-list/{i}/default") ? "Default" : null); + Add(track, GetPropertyBool($"track-list/{i}/external") ? "External" : null); + Add(track, title); track.Text = "A: " + track.Text.Trim(' ', ','); track.Type = "a"; track.ID = GetPropertyInt($"track-list/{i}/id"); @@ -1506,108 +1488,54 @@ namespace mpvnet } else if (type == "sub") { - //MediaTrack track = new MediaTrack(); - //Add(track, GetLanguage(GetPropertyString($"track-list/{i}/lang"))); - //track.Text = "S: " + track.Text.Trim(' ', ','); - //track.Type = "s"; - //track.ID = GetPropertyInt($"track-list/{i}/id"); - //MediaTracks.Add(track); + MediaTrack track = new MediaTrack(); + Add(track, GetLanguage(GetPropertyString($"track-list/{i}/lang"))); + Add(track, GetPropertyString($"track-list/{i}/codec").ToUpperEx()); + Add(track, GetPropertyBool($"track-list/{i}/forced") ? "Forced" : null); + Add(track, GetPropertyBool($"track-list/{i}/default") ? "Default" : null); + Add(track, GetPropertyBool($"track-list/{i}/external") ? "External" : null); + Add(track, title); + track.Text = "S: " + track.Text.Trim(' ', ','); + track.Type = "s"; + track.ID = GetPropertyInt($"track-list/{i}/id"); + MediaTracks.Add(track); } } - //using (MediaInfo mi = new MediaInfo(path)) - //{ - // int videoCount = mi.GetCount(MediaInfoStreamKind.Video); + int editionCount = GetPropertyInt("edition-list/count"); - // for (int i = 0; i < videoCount; i++) - // { - // MediaTrack track = new MediaTrack(); - // Add(track, mi.GetVideo(i, "Format")); - // Add(track, mi.GetVideo(i, "Format_Profile")); - // Add(track, mi.GetVideo(i, "Width") + "x" + mi.GetVideo(i, "Height")); - // Add(track, mi.GetVideo(i, "FrameRate") + " FPS"); - // Add(track, mi.GetVideo(i, "Language/String")); - // Add(track, mi.GetVideo(i, "Forced") == "Yes" ? "Forced" : ""); - // Add(track, mi.GetVideo(i, "Default") == "Yes" ? "Default" : ""); - // Add(track, mi.GetVideo(i, "Title")); - // track.Text = "V: " + track.Text.Trim(' ', ','); - // track.Type = "v"; - // track.ID = i + 1; - // MediaTracks.Add(track); - // } - - // int audioCount = mi.GetCount(MediaInfoStreamKind.Audio); - - // for (int i = 0; i < audioCount; i++) - // { - // MediaTrack track = new MediaTrack(); - // Add(track, mi.GetAudio(i, "Language/String")); - // Add(track, mi.GetAudio(i, "Format")); - // Add(track, mi.GetAudio(i, "Format_Profile")); - // Add(track, mi.GetAudio(i, "BitRate/String")); - // Add(track, mi.GetAudio(i, "Channel(s)/String")); - // Add(track, mi.GetAudio(i, "SamplingRate/String")); - // Add(track, mi.GetAudio(i, "Forced") == "Yes" ? "Forced" : ""); - // Add(track, mi.GetAudio(i, "Default") == "Yes" ? "Default" : ""); - // Add(track, mi.GetAudio(i, "Title")); - // track.Text = "A: " + track.Text.Trim(' ', ','); - // track.Type = "a"; - // track.ID = i + 1; - // MediaTracks.Add(track); - // } - - // int subCount = mi.GetCount(MediaInfoStreamKind.Text); - - // for (int i = 0; i < subCount; i++) - // { - // MediaTrack track = new MediaTrack(); - // Add(track, mi.GetText(i, "Language/String")); - // Add(track, mi.GetText(i, "Format")); - // Add(track, mi.GetText(i, "Format_Profile")); - // Add(track, mi.GetText(i, "Forced") == "Yes" ? "Forced" : ""); - // Add(track, mi.GetText(i, "Default") == "Yes" ? "Default" : ""); - // Add(track, mi.GetText(i, "Title")); - // track.Text = "S: " + track.Text.Trim(' ', ','); - // track.Type = "s"; - // track.ID = i + 1; - // MediaTracks.Add(track); - // } - - // int editionCount = GetPropertyInt("edition-list/count"); - - // for (int i = 0; i < editionCount; i++) - // { - // string title = GetPropertyString($"edition-list/{i}/title"); - // if (string.IsNullOrEmpty(title)) - // title = "Edition " + i; - // MediaTrack track = new MediaTrack(); - // track.Text = "E: " + title; - // track.Type = "e"; - // track.ID = i; - // MediaTracks.Add(track); - // } - //} + for (int i = 0; i < editionCount; i++) + { + string title = GetPropertyString($"edition-list/{i}/title"); + if (string.IsNullOrEmpty(title)) + title = "Edition " + i; + MediaTrack track = new MediaTrack(); + track.Text = "E: " + title; + track.Type = "e"; + track.ID = i; + MediaTracks.Add(track); + } } - //lock (Chapters) - //{ - // Chapters.Clear(); - // int count = GetPropertyInt("chapter-list/count"); + lock (Chapters) + { + Chapters.Clear(); + int count = GetPropertyInt("chapter-list/count"); - // for (int x = 0; x < count; x++) - // { - // string text = GetPropertyString($"chapter-list/{x}/title"); - // double time = GetPropertyDouble($"chapter-list/{x}/time"); + for (int x = 0; x < count; x++) + { + string text = GetPropertyString($"chapter-list/{x}/title"); + double time = GetPropertyDouble($"chapter-list/{x}/time"); - // if (string.IsNullOrEmpty(text)) - // text = "Chapter " + (x + 1); + if (string.IsNullOrEmpty(text)) + text = "Chapter " + (x + 1); - // Chapters.Add(new KeyValuePair(text, time)); - // } - //} + Chapters.Add(new KeyValuePair(text, time)); + } + } } - void ReadMetaDataUsingMediaInfo() + public void UpdateTrackDataUsingMediaInfo() { string path = GetPropertyString("path");