diff --git a/BizHawk.Client.Common/BizHawk.Client.Common.csproj b/BizHawk.Client.Common/BizHawk.Client.Common.csproj
index c46492a6e5..1328f3bccb 100644
--- a/BizHawk.Client.Common/BizHawk.Client.Common.csproj
+++ b/BizHawk.Client.Common/BizHawk.Client.Common.csproj
@@ -148,6 +148,7 @@
+
diff --git a/BizHawk.Client.Common/movie/MovieLoader.cs b/BizHawk.Client.Common/movie/MovieLoader.cs
new file mode 100644
index 0000000000..867752e514
--- /dev/null
+++ b/BizHawk.Client.Common/movie/MovieLoader.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+
+namespace BizHawk.Client.Common
+{
+ public static class MovieLoader
+ {
+ public static IMovie Load(string path)
+ {
+ // TODO: open the file and determine the format, and instantiate the appropriate implementation
+ // Currently we just assume it is a bkm implementation
+ return new Movie(path);
+ }
+ }
+}
diff --git a/BizHawk.Client.Common/movie/bk2/Movie2.cs b/BizHawk.Client.Common/movie/bk2/Movie2.cs
index b41b2a29f9..494803c25d 100644
--- a/BizHawk.Client.Common/movie/bk2/Movie2.cs
+++ b/BizHawk.Client.Common/movie/bk2/Movie2.cs
@@ -128,6 +128,19 @@ namespace BizHawk.Client.Common
}
}
+ public string Hash
+ {
+ get
+ {
+ throw new NotImplementedException();
+ }
+
+ set
+ {
+ throw new NotImplementedException();
+ }
+ }
+
public bool IsActive
{
get { return _mode != Moviemode.Inactive; }
diff --git a/BizHawk.Client.Common/movie/bkm/Movie.cs b/BizHawk.Client.Common/movie/bkm/Movie.cs
index ab83a47f5e..2136dbd713 100644
--- a/BizHawk.Client.Common/movie/bkm/Movie.cs
+++ b/BizHawk.Client.Common/movie/bkm/Movie.cs
@@ -47,12 +47,12 @@ namespace BizHawk.Client.Common
public SubtitleList Subtitles
{
- get { return (Header as MovieHeader).Subtitles; }
+ get { return Header.Subtitles; }
}
public IList Comments
{
- get { return (Header as MovieHeader).Comments; }
+ get { return Header.Comments; }
}
public string SyncSettingsJson
@@ -72,12 +72,12 @@ namespace BizHawk.Client.Common
{
get
{
- return (Header as MovieHeader).SavestateBinaryBase64Blob;
+ return Header.SavestateBinaryBase64Blob;
}
set
{
- (Header as MovieHeader).SavestateBinaryBase64Blob = value;
+ Header.SavestateBinaryBase64Blob = value;
}
}
@@ -85,12 +85,12 @@ namespace BizHawk.Client.Common
{
get
{
- return (Header as MovieHeader).Rerecords;
+ return Header.Rerecords;
}
set
{
- (Header as MovieHeader).Rerecords = value;
+ Header.Rerecords = value;
}
}
@@ -98,12 +98,12 @@ namespace BizHawk.Client.Common
{
get
{
- return (Header as MovieHeader).StartsFromSavestate;
+ return Header.StartsFromSavestate;
}
set
{
- (Header as MovieHeader).StartsFromSavestate = value;
+ Header.StartsFromSavestate = value;
}
}
@@ -111,12 +111,12 @@ namespace BizHawk.Client.Common
{
get
{
- return (Header as MovieHeader).GameName;
+ return Header.GameName;
}
set
{
- (Header as MovieHeader).GameName = value;
+ Header.GameName = value;
}
}
@@ -124,12 +124,25 @@ namespace BizHawk.Client.Common
{
get
{
- return (Header as MovieHeader).SystemID;
+ return Header.SystemID;
}
set
{
- (Header as MovieHeader).SystemID = value;
+ Header.SystemID = value;
+ }
+ }
+
+ public string Hash
+ {
+ get
+ {
+ return Header[HeaderKeys.SHA1];
+ }
+
+ set
+ {
+ Header[HeaderKeys.SHA1] = value;
}
}
@@ -420,8 +433,11 @@ namespace BizHawk.Client.Common
line = sbLine.ToString();
if (string.IsNullOrWhiteSpace(line) || Header.ParseLineFromFile(line))
+ {
continue;
- (Header as MovieHeader).Comments.Add(line);
+ }
+
+ Header.Comments.Add(line);
}
}
@@ -475,7 +491,7 @@ namespace BizHawk.Client.Common
}
else
{
- (Header as MovieHeader).Comments.Add(line);
+ Header.Comments.Add(line);
}
}
}
diff --git a/BizHawk.Client.Common/movie/interfaces/IMovie.cs b/BizHawk.Client.Common/movie/interfaces/IMovie.cs
index 359bd7d722..c1b3a390de 100644
--- a/BizHawk.Client.Common/movie/interfaces/IMovie.cs
+++ b/BizHawk.Client.Common/movie/interfaces/IMovie.cs
@@ -63,7 +63,7 @@ namespace BizHawk.Client.Common
bool StartsFromSavestate { get; set; }
string GameName { get; set; }
string SystemID { get; set; }
-
+ string Hash { get; set; }
#endregion
#region File Handling API
diff --git a/BizHawk.Client.Common/movie/tasproj/TasMovie.cs b/BizHawk.Client.Common/movie/tasproj/TasMovie.cs
index 1b2221c8f3..b105408115 100644
--- a/BizHawk.Client.Common/movie/tasproj/TasMovie.cs
+++ b/BizHawk.Client.Common/movie/tasproj/TasMovie.cs
@@ -88,12 +88,12 @@ namespace BizHawk.Client.Common
public SubtitleList Subtitles
{
- get { return (Header as MovieHeader).Subtitles; }
+ get { return Header.Subtitles; }
}
public IList Comments
{
- get { return (Header as MovieHeader).Comments; }
+ get { return Header.Comments; }
}
public string SyncSettingsJson
@@ -113,12 +113,12 @@ namespace BizHawk.Client.Common
{
get
{
- return (Header as MovieHeader).SavestateBinaryBase64Blob;
+ return Header.SavestateBinaryBase64Blob;
}
set
{
- (Header as MovieHeader).SavestateBinaryBase64Blob = value;
+ Header.SavestateBinaryBase64Blob = value;
}
}
@@ -126,12 +126,12 @@ namespace BizHawk.Client.Common
{
get
{
- return (Header as MovieHeader).Rerecords;
+ return Header.Rerecords;
}
set
{
- (Header as MovieHeader).Rerecords = value;
+ Header.Rerecords = value;
}
}
@@ -139,12 +139,12 @@ namespace BizHawk.Client.Common
{
get
{
- return (Header as MovieHeader).StartsFromSavestate;
+ return Header.StartsFromSavestate;
}
set
{
- (Header as MovieHeader).StartsFromSavestate = value;
+ Header.StartsFromSavestate = value;
}
}
@@ -152,12 +152,12 @@ namespace BizHawk.Client.Common
{
get
{
- return (Header as MovieHeader).GameName;
+ return Header.GameName;
}
set
{
- (Header as MovieHeader).GameName = value;
+ Header.GameName = value;
}
}
@@ -165,12 +165,25 @@ namespace BizHawk.Client.Common
{
get
{
- return (Header as MovieHeader).SystemID;
+ return Header.SystemID;
}
set
{
- (Header as MovieHeader).SystemID = value;
+ Header.SystemID = value;
+ }
+ }
+
+ public string Hash
+ {
+ get
+ {
+ return Header[HeaderKeys.SHA1];
+ }
+
+ set
+ {
+ Header[HeaderKeys.SHA1] = value;
}
}
@@ -401,7 +414,7 @@ namespace BizHawk.Client.Common
string line;
while ((line = tr.ReadLine()) != null)
if (!Header.ParseLineFromFile(line))
- (Header as MovieHeader).Comments.Add(line);
+ Header.Comments.Add(line);
});
bl.GetLump(BinaryStateLump.Input, true,
delegate(TextReader tr)
diff --git a/BizHawk.Client.EmuHawk/movie/PlayMovie.cs b/BizHawk.Client.EmuHawk/movie/PlayMovie.cs
index c117665ce8..ecbef37f81 100644
--- a/BizHawk.Client.EmuHawk/movie/PlayMovie.cs
+++ b/BizHawk.Client.EmuHawk/movie/PlayMovie.cs
@@ -145,16 +145,17 @@ namespace BizHawk.Client.EmuHawk
return null;
}
- private Movie PreLoadMovieFile(HawkFile hf, bool force)
+ private IMovie PreLoadMovieFile(HawkFile hf, bool force)
{
- var movie = new Movie(hf.CanonicalFullPath);
+ // Movies 2.0 TODO: don't cast and find a way to load this stuff with only IMovie!
+ var movie = (MovieLoader.Load(hf.CanonicalFullPath) as Movie);
try
{
movie.PreLoadText(hf);
// Don't do this from browse
- if (movie.Header[HeaderKeys.SHA1] == Global.Game.Hash ||
+ if (movie.Hash == Global.Game.Hash ||
Global.Config.PlayMovie_MatchHash == false || force)
{
return movie;