103 lines
2.0 KiB
C#
103 lines
2.0 KiB
C#
![]() |
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
|
|||
|
}
|
|||
|
|
|||
|
|