BizHawk/BizHawk.Client.Common/movie/MovieHeader.cs

207 lines
3.8 KiB
C#
Raw Normal View History

using System.Collections.Generic;
using System.Text;
2013-10-25 00:59:34 +00:00
namespace BizHawk.Client.Common
{
public class MovieHeader : Dictionary<string, string>, IMovieHeader
2013-10-25 00:59:34 +00:00
{
2013-11-30 02:20:34 +00:00
public MovieHeader()
2013-10-25 00:59:34 +00:00
{
Comments = new List<string>();
Subtitles = new SubtitleList();
2013-11-30 02:20:34 +00:00
this[HeaderKeys.EMULATIONVERSION] = VersionInfo.GetEmuVersion();
this[HeaderKeys.MOVIEVERSION] = HeaderKeys.MovieVersion1;
this[HeaderKeys.PLATFORM] = Global.Emulator != null ? Global.Emulator.SystemId : string.Empty;
this[HeaderKeys.GAMENAME] = string.Empty;
this[HeaderKeys.AUTHOR] = string.Empty;
2013-11-30 02:20:34 +00:00
this[HeaderKeys.RERECORDS] = "0";
2013-10-25 00:59:34 +00:00
}
public List<string> Comments { get; private set; }
public SubtitleList Subtitles { get; private set; }
2013-11-30 02:20:34 +00:00
public string SavestateBinaryBase64Blob
{
get {
if (ContainsKey(HeaderKeys.SAVESTATEBINARYBASE64BLOB)) return this[HeaderKeys.SAVESTATEBINARYBASE64BLOB];
else return null;
}
set {
if (value == null) Remove(HeaderKeys.SAVESTATEBINARYBASE64BLOB);
else Add(HeaderKeys.SAVESTATEBINARYBASE64BLOB, value);
}
}
public string SyncSettingsJson
{
get
{
if (ContainsKey(HeaderKeys.SYNCSETTINGS))
{
return this[HeaderKeys.SYNCSETTINGS];
}
return string.Empty;
}
set
{
this[HeaderKeys.SYNCSETTINGS] = value;
}
}
2013-11-30 02:20:34 +00:00
public ulong Rerecords
{
get
2013-10-25 00:59:34 +00:00
{
2013-11-30 02:20:34 +00:00
if (!ContainsKey(HeaderKeys.RERECORDS))
{
this[HeaderKeys.RERECORDS] = "0";
}
return ulong.Parse(this[HeaderKeys.RERECORDS]);
2013-10-25 00:59:34 +00:00
}
2013-11-30 02:20:34 +00:00
set
{
this[HeaderKeys.RERECORDS] = value.ToString();
}
}
2013-10-25 00:59:34 +00:00
2013-11-30 02:20:34 +00:00
public bool StartsFromSavestate
{
get
{
if (ContainsKey(HeaderKeys.STARTSFROMSAVESTATE))
{
return bool.Parse(this[HeaderKeys.STARTSFROMSAVESTATE]);
}
return false;
2013-11-30 02:20:34 +00:00
}
set
{
if (value)
{
Add(HeaderKeys.STARTSFROMSAVESTATE, "True");
}
else
{
Remove(HeaderKeys.STARTSFROMSAVESTATE);
}
}
2013-10-25 00:59:34 +00:00
}
public string GameName
{
get
{
if (ContainsKey(HeaderKeys.GAMENAME))
{
return this[HeaderKeys.GAMENAME];
}
return string.Empty;
}
set
{
this[HeaderKeys.GAMENAME] = value;
}
}
public string SystemID
{
get
{
if (ContainsKey(HeaderKeys.PLATFORM))
{
return this[HeaderKeys.PLATFORM];
}
return string.Empty;
}
set
{
this[HeaderKeys.PLATFORM] = value;
}
}
public new string this[string key]
{
get
{
return this.ContainsKey(key) ? base[key] : string.Empty;
}
set
{
if (ContainsKey(key))
{
base[key] = value;
}
else
{
Add(key, value);
}
}
}
public new void Clear()
{
Comments.Clear();
Subtitles.Clear();
base.Clear();
}
public override string ToString()
{
var sb = new StringBuilder();
foreach (var kvp in this)
{
sb
.Append(kvp.Key)
.Append(' ')
.Append(kvp.Value)
.AppendLine();
}
sb.Append(Subtitles);
Comments.ForEach(comment => sb.AppendLine(comment));
return sb.ToString();
}
2013-11-30 02:20:34 +00:00
public bool ParseLineFromFile(string line)
2013-10-25 00:59:34 +00:00
{
if (!string.IsNullOrWhiteSpace(line))
2013-10-25 00:59:34 +00:00
{
2013-11-30 02:20:34 +00:00
var splitLine = line.Split(new[] { ' ' }, 2);
2014-05-18 16:47:19 +00:00
if (HeaderKeys.Contains(splitLine[0]) && !this.ContainsKey(splitLine[0]))
{
2013-11-30 02:20:34 +00:00
Add(splitLine[0], splitLine[1]);
}
else if (line.StartsWith("subtitle") || line.StartsWith("sub"))
{
2013-11-30 02:20:34 +00:00
Subtitles.AddFromString(line);
}
else if (line.StartsWith("comment"))
{
Comments.Add(line.Substring(8, line.Length - 8));
}
2013-11-30 02:20:34 +00:00
else if (line.StartsWith("|"))
2013-10-25 00:59:34 +00:00
{
return false;
}
2013-10-25 00:59:34 +00:00
}
return true;
}
}
}