private static void ExtractTrackNumbers(TrackInfo trackInfo, String content) { Int32 indexOfOpenParen = content.IndexOf('('); Int32 indexOfColon = content.LastIndexOf(':'); Int32 indexOfCloseParen = content.LastIndexOf(')'); if (indexOfOpenParen > 1 && indexOfColon > indexOfOpenParen + 1 && indexOfCloseParen > indexOfColon + 1) { String trackNum = content.Substring(0, indexOfOpenParen - 1); String mkvToolsTrackNum = content.Substring(indexOfColon + 2, indexOfCloseParen - (indexOfColon + 2)); trackInfo.TrackNumber = Int32.Parse(trackNum); trackInfo.MkvToolsTrackNumber = Int32.Parse(mkvToolsTrackNum); } }
private static List<TrackInfo> ExtractTrackInfo(TextReader reader) { List<TrackInfo> trackInfoList = new List<TrackInfo>(); TrackInfo trackInfo = new TrackInfo(); String line = reader.ReadLine(); while (LineLevel(line) > 2) { ParseTrackInfoLine(trackInfo, line); line = reader.ReadLine(); } trackInfoList.Add(trackInfo); if (line == trackStart) { trackInfoList.AddRange(ExtractTrackInfo(reader)); } return trackInfoList; }
private static void ParseTrackInfoLine(TrackInfo trackInfo, String line) { Int32 indexOfPlus = line.IndexOf('+'); Int32 indexOfColon = line.IndexOf(':'); if (indexOfPlus > -1 && indexOfColon > indexOfPlus && line.Length > indexOfColon + 2) { String key = line.Substring(indexOfPlus + 2, indexOfColon - (indexOfPlus + 2)); String content = line.Substring(indexOfColon + 2); switch (key) { case "Track number": ExtractTrackNumbers(trackInfo, content); break; case "Track type": trackInfo.TrackType = ExtracTrackType(content); break; case "Enabled": trackInfo.Enabled = ParseBoolean(content); break; case "Default flag": trackInfo.Default = ParseBoolean(content); break; case "Forced flag": trackInfo.Forced = ParseBoolean(content); break; case "Codec ID": trackInfo.Codec = content; break; case "Language": trackInfo.Language = content; break; case "Name": trackInfo.Name = content; break; } } }