using System.IO; using System.Collections.Generic; namespace BizHawk.Emulation.DiscSystem { public class M3U_File { public static M3U_File Read(StreamReader sr) { M3U_File ret = new M3U_File(); return !ret.Parse(sr) ? null : ret; } bool Parse(StreamReader sr) { bool ext = false; int runtime = -1; string title = null; for (; ; ) { string line = sr.ReadLine(); if (line == null) break; if (line.StartsWith("#")) { if (line == "#EXTM3U") { ext = true; continue; } if (line.StartsWith("#EXTINF:")) { //TODO - maybe we shouldn't be so harsh. should probably add parse options. if (!ext) continue; line = line.Substring(8); int cidx = line.IndexOf(','); //don't know what to do with this, but its a comment, so ignore it if (cidx == -1) continue; runtime = int.Parse(line.Substring(0, cidx)); title = line.Substring(cidx); } //just a comment. ignore it continue; } else { var e = new Entry { Path = line, Runtime = runtime, Title = title }; Entries.Add(e); runtime = -1; title = null; } } //parse loop return true; } //Parse() public List Entries = new List(); public void Rebase(string basepath) { foreach (var e in Entries) { //don't change rooted paths if (Path.IsPathRooted(e.Path)) continue; //adjust relative paths e.Path = Path.Combine(basepath, e.Path); } } public class Entry { public string Path; /// /// if the title is null, it isn't set /// public string Title; /// /// if the runtime is -1, it isn't set /// public int Runtime; } } //class M3U_File }