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;