This commit is contained in:
parent
5a1c082236
commit
a0ace2a7a2
|
@ -0,0 +1,102 @@
|
|||
using System;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
using System.Globalization;
|
||||
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();
|
||||
if (!ret.Parse(sr))
|
||||
return null;
|
||||
else return 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 shouldnt be so harsh. should probably add parse options.
|
||||
if (!ext) continue;
|
||||
|
||||
line = line.Substring(8);
|
||||
int cidx = line.IndexOf(',');
|
||||
|
||||
//dont 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<Entry> Entries = new List<Entry>();
|
||||
|
||||
public void Rebase(string basepath)
|
||||
{
|
||||
foreach (var e in Entries)
|
||||
{
|
||||
//dont 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;
|
||||
|
||||
/// <summary>
|
||||
/// if the title is null, it isn't set
|
||||
/// </summary>
|
||||
public string Title;
|
||||
|
||||
/// <summary>
|
||||
/// if the runtime is -1, it isn't set
|
||||
/// </summary>
|
||||
public int Runtime;
|
||||
}
|
||||
|
||||
} //class M3U_File
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue