diff --git a/BizHawk.Client.Common/BizHawk.Client.Common.csproj b/BizHawk.Client.Common/BizHawk.Client.Common.csproj index 723997de06..c46492a6e5 100644 --- a/BizHawk.Client.Common/BizHawk.Client.Common.csproj +++ b/BizHawk.Client.Common/BizHawk.Client.Common.csproj @@ -141,7 +141,6 @@ - diff --git a/BizHawk.Client.Common/lua/EmuLuaLibrary.Movie.cs b/BizHawk.Client.Common/lua/EmuLuaLibrary.Movie.cs index a11b66297d..bd55b1aa4a 100644 --- a/BizHawk.Client.Common/lua/EmuLuaLibrary.Movie.cs +++ b/BizHawk.Client.Common/lua/EmuLuaLibrary.Movie.cs @@ -123,7 +123,7 @@ namespace BizHawk.Client.Common )] public static string RerecordCount() { - return Global.MovieSession.Movie.Header.Rerecords.ToString(); + return Global.MovieSession.Movie.Rerecords.ToString(); } [LuaMethodAttributes( diff --git a/BizHawk.Client.Common/movie/MovieImport.cs b/BizHawk.Client.Common/movie/MovieImport.cs index d71be56f30..eb19d3f2ac 100644 --- a/BizHawk.Client.Common/movie/MovieImport.cs +++ b/BizHawk.Client.Common/movie/MovieImport.cs @@ -419,13 +419,14 @@ namespace BizHawk.Client.Common // Try to parse the re-record count as an integer, defaulting to 0 if it fails. try { - rerecordCount = int.Parse(ParseHeader(line, "rerecordCount")); + rerecordCount = int.Parse(ParseHeader(line, "rerecordCount")); } catch { - rerecordCount = 0; + rerecordCount = 0; } - m.Header.Rerecords = (ulong)rerecordCount; + + m.Rerecords = (ulong)rerecordCount; } else if (line.ToLower().StartsWith("guid")) { @@ -582,7 +583,7 @@ namespace BizHawk.Client.Common uint frameCount = r.ReadUInt32(); // 010 4-byte little-endian unsigned int: rerecord count uint rerecordCount = r.ReadUInt32(); - m.Header.Rerecords = rerecordCount; + m.Rerecords = rerecordCount; /* 018 4-byte little-endian unsigned int: offset to the savestate inside file The savestate offset is . The savestate offset should be @@ -828,7 +829,7 @@ namespace BizHawk.Client.Common loaded, the number is 0. Famtasia however displays "1" in such case. It always adds 1 to the number found in the file. */ - m.Header.Rerecords = rerecordCount + 1; + m.Rerecords = rerecordCount + 1; // 00E 2-byte little-endian unsigned int: unknown, set to 0000 r.ReadInt16(); // 010 64-byte zero-terminated emulator identifier string @@ -933,7 +934,7 @@ namespace BizHawk.Client.Common m.Comments.Add(EMULATIONORIGIN + " Gens"); // 010 4-byte little-endian unsigned int: rerecord count uint rerecordCount = r.ReadUInt32(); - m.Header.Rerecords = rerecordCount; + m.Rerecords = rerecordCount; // 014 ASCII-encoded controller config for player 1. '3' or '6'. string player1Config = r.ReadStringFixedAscii(1); // 015 ASCII-encoded controller config for player 2. '3' or '6'. @@ -1203,7 +1204,7 @@ namespace BizHawk.Client.Common { rerecordCount = 0; } - m.Header.Rerecords = (ulong)rerecordCount; + m.Rerecords = (ulong)rerecordCount; hf.Unbind(); } else if (item.Name.EndsWith(".sha256")) @@ -1298,7 +1299,7 @@ namespace BizHawk.Client.Common m.Header[HeaderKeys.GAMENAME] = gameName; // 070 uint32 Re-record Count uint rerecordCount = r.ReadUInt32(); - m.Header.Rerecords = (ulong)rerecordCount; + m.Rerecords = (ulong)rerecordCount; // 074 5-byte Console indicator (pce, ngp, pcfx, wswan) string platform = NullTerminated(r.ReadStringFixedAscii(5)); Dictionary> platforms = new Dictionary> @@ -1411,7 +1412,7 @@ namespace BizHawk.Client.Common uint frameCount = r.ReadUInt32(); // 000c: 4-byte little endian unsigned int: rerecord count uint rerecordCount = r.ReadUInt32(); - m.Header.Rerecords = rerecordCount; + m.Rerecords = rerecordCount; // 0010: 4-byte little endian flag: begin from reset? uint reset = r.ReadUInt32(); if (reset == 0) @@ -1674,7 +1675,7 @@ namespace BizHawk.Client.Common m.Header[HeaderKeys.PAL] = pal.ToString(); // 004 4-byte little-endian unsigned int: rerecord count uint rerecordCount = r.ReadUInt32(); - m.Header.Rerecords = rerecordCount; + m.Rerecords = rerecordCount; /* 008 4-byte little-endian unsigned int: length of movie description 00C (variable) null-terminated UTF-8 text, movie description (currently not implemented) @@ -1774,7 +1775,7 @@ namespace BizHawk.Client.Common uint uid = r.ReadUInt32(); // 00C 4-byte little-endian unsigned int: rerecord count - m.Header.Rerecords = r.ReadUInt32(); + m.Rerecords = r.ReadUInt32(); // 010 4-byte little-endian unsigned int: number of frames uint frameCount = r.ReadUInt32(); // 014 1-byte flags "controller mask" @@ -2034,7 +2035,7 @@ namespace BizHawk.Client.Common uint frameCount = r.ReadUInt32(); // 010 4-byte little-endian unsigned int: rerecord count uint rerecordCount = r.ReadUInt32(); - m.Header.Rerecords = rerecordCount; + m.Rerecords = rerecordCount; // 014 1-byte flags: (movie start flags) byte flags = r.ReadByte(); // bit 0: if "1", movie starts from an embedded "quicksave" snapshot @@ -2334,7 +2335,7 @@ namespace BizHawk.Client.Common r.ReadBytes(2); // 01C 4-byte little-endian integer: rerecord count uint rerecordCount = r.ReadUInt32(); - m.Header.Rerecords = rerecordCount; + m.Rerecords = rerecordCount; /* 020 BYTE RenderMethod 0=POST_ALL,1=PRE_ALL @@ -2521,7 +2522,7 @@ namespace BizHawk.Client.Common uint frameCount = r.ReadUInt32(); // 00D 4-byte little-endian unsigned int: number of rerecords uint rerecordCount = r.ReadUInt32(); - m.Header.Rerecords = rerecordCount; + m.Rerecords = rerecordCount; // 011 4-byte little-endian unsigned int: number of frames removed by rerecord r.ReadBytes(4); // 015 4-byte little-endian unsigned int: number of frames advanced step by step diff --git a/BizHawk.Client.Common/movie/bk2/Movie2.cs b/BizHawk.Client.Common/movie/bk2/Movie2.cs index 83a2cf2274..b41b2a29f9 100644 --- a/BizHawk.Client.Common/movie/bk2/Movie2.cs +++ b/BizHawk.Client.Common/movie/bk2/Movie2.cs @@ -21,15 +21,14 @@ namespace BizHawk.Client.Common public Movie2(string filename, bool startsFromSavestate = false) : this(startsFromSavestate) { - Header.Rerecords = 0; + Rerecords = 0; Filename = filename; } public Movie2(bool startsFromSavestate = false) { - Header = new MovieHeader2(); Filename = string.Empty; - Header.StartsFromSavestate = startsFromSavestate; + StartsFromSavestate = startsFromSavestate; IsCountingRerecords = true; _mode = Moviemode.Inactive; @@ -39,9 +38,8 @@ namespace BizHawk.Client.Common #region Implementation public string PreferredExtension { get { return "bk2"; } } - public bool IsCountingRerecords { get; set; } - public IMovieHeader Header { get; private set; } + public SubtitleList Subtitles { get { throw new NotImplementedException(); } @@ -78,6 +76,58 @@ namespace BizHawk.Client.Common } } + public ulong Rerecords + { + get + { + throw new NotImplementedException(); + } + + set + { + throw new NotImplementedException(); + } + } + + public bool StartsFromSavestate + { + get + { + throw new NotImplementedException(); + } + + set + { + throw new NotImplementedException(); + } + } + + public string GameName + { + get + { + throw new NotImplementedException(); + } + + set + { + throw new NotImplementedException(); + } + } + + public string SystemID + { + get + { + throw new NotImplementedException(); + } + + set + { + throw new NotImplementedException(); + } + } + public bool IsActive { get { return _mode != Moviemode.Inactive; } diff --git a/BizHawk.Client.Common/movie/bk2/MovieHeader2.cs b/BizHawk.Client.Common/movie/bk2/MovieHeader2.cs index 98673ab41f..ffc072c37a 100644 --- a/BizHawk.Client.Common/movie/bk2/MovieHeader2.cs +++ b/BizHawk.Client.Common/movie/bk2/MovieHeader2.cs @@ -5,172 +5,8 @@ using System.Text; namespace BizHawk.Client.Common { - public class MovieHeader2 : IMovieHeader + public class MovieHeader2 { - public ulong Rerecords - { - get - { - throw new NotImplementedException(); - } - set - { - throw new NotImplementedException(); - } - } - - public bool StartsFromSavestate - { - get - { - throw new NotImplementedException(); - } - set - { - throw new NotImplementedException(); - } - } - - public string SavestateBinaryBase64Blob - { - get - { - throw new NotImplementedException(); - } - set - { - throw new NotImplementedException(); - } - } - - public string GameName - { - get - { - throw new NotImplementedException(); - } - set - { - throw new NotImplementedException(); - } - } - - public string SystemID - { - get - { - throw new NotImplementedException(); - } - set - { - throw new NotImplementedException(); - } - } - - public bool ParseLineFromFile(string line) - { - throw new NotImplementedException(); - } - - public void Add(string key, string value) - { - throw new NotImplementedException(); - } - - public bool ContainsKey(string key) - { - throw new NotImplementedException(); - } - - public ICollection Keys - { - get { throw new NotImplementedException(); } - } - - public bool Remove(string key) - { - throw new NotImplementedException(); - } - - public bool TryGetValue(string key, out string value) - { - throw new NotImplementedException(); - } - - public ICollection Values - { - get { throw new NotImplementedException(); } - } - - public string this[string key] - { - get - { - throw new NotImplementedException(); - } - set - { - throw new NotImplementedException(); - } - } - - public void Add(KeyValuePair item) - { - throw new NotImplementedException(); - } - - public void Clear() - { - throw new NotImplementedException(); - } - - public bool Contains(KeyValuePair item) - { - throw new NotImplementedException(); - } - - public void CopyTo(KeyValuePair[] array, int arrayIndex) - { - throw new NotImplementedException(); - } - - public int Count - { - get { throw new NotImplementedException(); } - } - - public bool IsReadOnly - { - get { throw new NotImplementedException(); } - } - - public bool Remove(KeyValuePair item) - { - throw new NotImplementedException(); - } - - public IEnumerator> GetEnumerator() - { - throw new NotImplementedException(); - } - - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() - { - throw new NotImplementedException(); - } - - #region Won't implement - - public SubtitleList Subtitles - { - get { throw new NotImplementedException(); } - } - - public List Comments - { - get { throw new NotImplementedException(); } - } - - #endregion + } } diff --git a/BizHawk.Client.Common/movie/bkm/Movie.cs b/BizHawk.Client.Common/movie/bkm/Movie.cs index 773734d336..ab83a47f5e 100644 --- a/BizHawk.Client.Common/movie/bkm/Movie.cs +++ b/BizHawk.Client.Common/movie/bkm/Movie.cs @@ -24,7 +24,7 @@ namespace BizHawk.Client.Common public Movie(string filename, bool startsFromSavestate = false) : this(startsFromSavestate) { - Header.Rerecords = 0; + Rerecords = 0; Filename = filename; Loaded = !string.IsNullOrWhiteSpace(filename); } @@ -34,7 +34,7 @@ namespace BizHawk.Client.Common Header = new MovieHeader(); Filename = string.Empty; _preloadFramecount = 0; - Header.StartsFromSavestate = startsFromSavestate; + StartsFromSavestate = startsFromSavestate; IsCountingRerecords = true; _mode = Moviemode.Inactive; @@ -79,14 +79,66 @@ namespace BizHawk.Client.Common { (Header as MovieHeader).SavestateBinaryBase64Blob = value; } - } + } + + public ulong Rerecords + { + get + { + return (Header as MovieHeader).Rerecords; + } + + set + { + (Header as MovieHeader).Rerecords = value; + } + } + + public bool StartsFromSavestate + { + get + { + return (Header as MovieHeader).StartsFromSavestate; + } + + set + { + (Header as MovieHeader).StartsFromSavestate = value; + } + } + + public string GameName + { + get + { + return (Header as MovieHeader).GameName; + } + + set + { + (Header as MovieHeader).GameName = value; + } + } + + public string SystemID + { + get + { + return (Header as MovieHeader).SystemID; + } + + set + { + (Header as MovieHeader).SystemID = value; + } + } public string PreferredExtension { get { return "bkm"; } } // TODO: delete me public static string Extension { get { return "bkm"; } } - public IMovieHeader Header { get; private set; } + public MovieHeader Header { get; private set; } public string Filename { get; set; } public bool IsCountingRerecords { get; set; } @@ -151,7 +203,7 @@ namespace BizHawk.Client.Common // If Starting a new recording requires clearing sram it shoudl be done at a higher layer and not rely on all IMovies doing this // Haven't removed it yet because I coudln't guarantee that power-on movies coudl live without it // And the immediate fire is that Savestate movies are breaking - if (!Header.StartsFromSavestate) // && Global.Emulator.SystemId != "WSWAN") + if (!StartsFromSavestate) { Global.Emulator.ClearSaveRam(); } @@ -169,7 +221,7 @@ namespace BizHawk.Client.Common public void StartNewPlayback() { // See StartNewRecording for details as to why this savestate check is here - if (!Header.StartsFromSavestate) // && Global.Emulator.SystemId != "WSWAN") + if (!StartsFromSavestate) { Global.Emulator.ClearSaveRam(); } @@ -688,7 +740,7 @@ namespace BizHawk.Client.Common if (IsCountingRerecords) { - Header.Rerecords++; + Rerecords++; } return true; diff --git a/BizHawk.Client.Common/movie/bkm/MovieHeader.cs b/BizHawk.Client.Common/movie/bkm/MovieHeader.cs index bc54b8eb3c..ff6b7efed7 100644 --- a/BizHawk.Client.Common/movie/bkm/MovieHeader.cs +++ b/BizHawk.Client.Common/movie/bkm/MovieHeader.cs @@ -3,7 +3,7 @@ using System.Text; namespace BizHawk.Client.Common { - public class MovieHeader : Dictionary, IMovieHeader + public class MovieHeader : Dictionary { public MovieHeader() { diff --git a/BizHawk.Client.Common/movie/interfaces/IMovie.cs b/BizHawk.Client.Common/movie/interfaces/IMovie.cs index a189604436..359bd7d722 100644 --- a/BizHawk.Client.Common/movie/interfaces/IMovie.cs +++ b/BizHawk.Client.Common/movie/interfaces/IMovie.cs @@ -55,10 +55,14 @@ namespace BizHawk.Client.Common /// string SyncSettingsJson { get; set; } - IMovieHeader Header { get; } + // TODO: document these SubtitleList Subtitles { get; } IList Comments { get; } string SavestateBinaryBase64Blob { get; set; } + ulong Rerecords { get; set; } + bool StartsFromSavestate { get; set; } + string GameName { get; set; } + string SystemID { get; set; } #endregion diff --git a/BizHawk.Client.Common/movie/interfaces/IMovieHeader.cs b/BizHawk.Client.Common/movie/interfaces/IMovieHeader.cs deleted file mode 100644 index 263b3935d1..0000000000 --- a/BizHawk.Client.Common/movie/interfaces/IMovieHeader.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Collections.Generic; - -namespace BizHawk.Client.Common -{ - public interface IMovieHeader : IDictionary - { - ulong Rerecords { get; set; } - bool StartsFromSavestate { get; set; } - string GameName { get; set; } - string SystemID { get; set; } - - /// - /// Receives a line and attempts to add as a header - /// - /// - /// The line of text loaded from a movie file. - /// - /// - /// returns false if not a useable header line - /// - bool ParseLineFromFile(string line); - } -} diff --git a/BizHawk.Client.Common/movie/tasproj/TasMovie.cs b/BizHawk.Client.Common/movie/tasproj/TasMovie.cs index 03b4fd3588..1b2221c8f3 100644 --- a/BizHawk.Client.Common/movie/tasproj/TasMovie.cs +++ b/BizHawk.Client.Common/movie/tasproj/TasMovie.cs @@ -122,9 +122,61 @@ namespace BizHawk.Client.Common } } + public ulong Rerecords + { + get + { + return (Header as MovieHeader).Rerecords; + } + + set + { + (Header as MovieHeader).Rerecords = value; + } + } + + public bool StartsFromSavestate + { + get + { + return (Header as MovieHeader).StartsFromSavestate; + } + + set + { + (Header as MovieHeader).StartsFromSavestate = value; + } + } + + public string GameName + { + get + { + return (Header as MovieHeader).GameName; + } + + set + { + (Header as MovieHeader).GameName = value; + } + } + + public string SystemID + { + get + { + return (Header as MovieHeader).SystemID; + } + + set + { + (Header as MovieHeader).SystemID = value; + } + } + public string Filename { get; set; } - public IMovieHeader Header { get; private set; } + public MovieHeader Header { get; private set; } public bool IsActive { @@ -372,7 +424,7 @@ namespace BizHawk.Client.Common } }); - if (Header.StartsFromSavestate) + if (StartsFromSavestate) { // should we raise some sort of error if there's a savestate in the archive but Header.StartsFromSavestate is false? bl.GetCoreState( @@ -417,7 +469,7 @@ namespace BizHawk.Client.Common { bs.PutLump(BinaryStateLump.Movieheader, (tw) => tw.WriteLine(Header.ToString())); bs.PutLump(BinaryStateLump.Input, (tw) => tw.WriteLine(GetInputLog())); - if (Header.StartsFromSavestate) + if (StartsFromSavestate) { #if true bs.PutLump(BinaryStateLump.CorestateText, (tw) => Global.Emulator.SaveStateText(tw)); diff --git a/BizHawk.Client.EmuHawk/DisplayManager/OSDManager.cs b/BizHawk.Client.EmuHawk/DisplayManager/OSDManager.cs index f3868d0184..ebb629f921 100644 --- a/BizHawk.Client.EmuHawk/DisplayManager/OSDManager.cs +++ b/BizHawk.Client.EmuHawk/DisplayManager/OSDManager.cs @@ -319,7 +319,7 @@ namespace BizHawk.Client.EmuHawk { if (Global.MovieSession.Movie.IsActive) { - return "Rerecord Count: " + Global.MovieSession.Movie.Header.Rerecords; + return "Rerecord Count: " + Global.MovieSession.Movie.Rerecords; } return string.Empty; diff --git a/BizHawk.Client.EmuHawk/MainForm.Movie.cs b/BizHawk.Client.EmuHawk/MainForm.Movie.cs index 9d84bfe46c..508edbee67 100644 --- a/BizHawk.Client.EmuHawk/MainForm.Movie.cs +++ b/BizHawk.Client.EmuHawk/MainForm.Movie.cs @@ -41,11 +41,13 @@ namespace BizHawk.Client.EmuHawk if (!record && Global.Emulator.SystemId == "NES") // For NES we need special logic since the movie will drive which core to load { // If either is specified use that, else use whatever is currently set - if (Global.MovieSession.Movie.Header[HeaderKeys.CORE] == quicknesName) + // Movies 2.0 TODO + if ((Global.MovieSession.Movie as Movie).Header[HeaderKeys.CORE] == quicknesName) { Global.Config.NES_InQuickNES = true; } - else if (Global.MovieSession.Movie.Header[HeaderKeys.CORE] == neshawkName) + // Movies 2.0 TODO + else if ((Global.MovieSession.Movie as Movie).Header[HeaderKeys.CORE] == neshawkName) { Global.Config.NES_InQuickNES = false; } @@ -75,7 +77,7 @@ namespace BizHawk.Client.EmuHawk Global.Config.RecentMovies.Add(movie.Filename); } - if (Global.MovieSession.Movie.Header.StartsFromSavestate) + if (Global.MovieSession.Movie.StartsFromSavestate) { var state = Convert.FromBase64String(Global.MovieSession.Movie.SavestateBinaryBase64Blob); Global.Emulator.LoadStateBinary(new BinaryReader(new MemoryStream(state))); @@ -155,7 +157,7 @@ namespace BizHawk.Client.EmuHawk if (Global.MovieSession.Movie.IsActive) { LoadRom(CurrentlyOpenRom); - if (Global.MovieSession.Movie.Header.StartsFromSavestate) + if (Global.MovieSession.Movie.StartsFromSavestate) { var state = Convert.FromBase64String(Global.MovieSession.Movie.SavestateBinaryBase64Blob); Global.Emulator.LoadStateBinary(new BinaryReader(new MemoryStream(state))); diff --git a/BizHawk.Client.EmuHawk/movie/PlayMovie.cs b/BizHawk.Client.EmuHawk/movie/PlayMovie.cs index 7926bfa2a2..c117665ce8 100644 --- a/BizHawk.Client.EmuHawk/movie/PlayMovie.cs +++ b/BizHawk.Client.EmuHawk/movie/PlayMovie.cs @@ -53,12 +53,12 @@ namespace BizHawk.Client.EmuHawk if (column == 1) // System { - text = _movieList[index].Header.SystemID; + text = _movieList[index].SystemID; } if (column == 2) // Game { - text = _movieList[index].Header.GameName; + text = _movieList[index].GameName; } if (column == 3) // Time @@ -188,7 +188,7 @@ namespace BizHawk.Client.EmuHawk // Pull out matching names for (var i = 0; i < _movieList.Count; i++) { - if (PathManager.FilesystemSafeName(Global.Game) == _movieList[i].Header.GameName) + if (PathManager.FilesystemSafeName(Global.Game) == _movieList[i].GameName) { indices.Add(i); } @@ -340,8 +340,8 @@ namespace BizHawk.Client.EmuHawk { copyStr .Append(_movieList[index].Filename).Append('\t') - .Append(_movieList[index].Header.SystemID).Append('\t') - .Append(_movieList[index].Header.GameName).Append('\t') + .Append(_movieList[index].SystemID).Append('\t') + .Append(_movieList[index].GameName).Append('\t') .Append(_movieList[index].Time.ToString(@"hh\:mm\:ss\.fff")) .AppendLine(); @@ -372,8 +372,8 @@ namespace BizHawk.Client.EmuHawk { _movieList = _movieList .OrderByDescending(x => Path.GetFileName(x.Filename)) - .ThenBy(x => x.Header.SystemID) - .ThenBy(x => x.Header.GameName) + .ThenBy(x => x.SystemID) + .ThenBy(x => x.GameName) .ThenBy(x => x.FrameCount) .ToList(); } @@ -381,8 +381,8 @@ namespace BizHawk.Client.EmuHawk { _movieList = _movieList .OrderBy(x => Path.GetFileName(x.Filename)) - .ThenBy(x => x.Header.SystemID) - .ThenBy(x => x.Header.GameName) + .ThenBy(x => x.SystemID) + .ThenBy(x => x.GameName) .ThenBy(x => x.FrameCount) .ToList(); } @@ -391,18 +391,18 @@ namespace BizHawk.Client.EmuHawk if (_sortReverse) { _movieList = _movieList - .OrderByDescending(x => x.Header.SystemID) + .OrderByDescending(x => x.SystemID) .ThenBy(x => Path.GetFileName(x.Filename)) - .ThenBy(x => x.Header.GameName) + .ThenBy(x => x.GameName) .ThenBy(x => x.FrameCount) .ToList(); } else { _movieList = _movieList - .OrderBy(x => x.Header.SystemID) + .OrderBy(x => x.SystemID) .ThenBy(x => Path.GetFileName(x.Filename)) - .ThenBy(x => x.Header.GameName) + .ThenBy(x => x.GameName) .ThenBy(x => x.FrameCount) .ToList(); } @@ -411,18 +411,18 @@ namespace BizHawk.Client.EmuHawk if (_sortReverse) { _movieList = _movieList - .OrderByDescending(x => x.Header.GameName) + .OrderByDescending(x => x.GameName) .ThenBy(x => Path.GetFileName(x.Filename)) - .ThenBy(x => x.Header.SystemID) + .ThenBy(x => x.SystemID) .ThenBy(x => x.FrameCount) .ToList(); } else { _movieList = _movieList - .OrderBy(x => x.Header.GameName) + .OrderBy(x => x.GameName) .ThenBy(x => Path.GetFileName(x.Filename)) - .ThenBy(x => x.Header.SystemID) + .ThenBy(x => x.SystemID) .ThenBy(x => x.FrameCount) .ToList(); } @@ -433,7 +433,7 @@ namespace BizHawk.Client.EmuHawk _movieList = _movieList .OrderByDescending(x => x.FrameCount) .ThenBy(x => Path.GetFileName(x.Filename)) - .ThenBy(x => x.Header.SystemID) + .ThenBy(x => x.SystemID) .ThenBy(x => x.FrameCount) .ToList(); } @@ -442,8 +442,8 @@ namespace BizHawk.Client.EmuHawk _movieList = _movieList .OrderBy(x => x.FrameCount) .ThenBy(x => Path.GetFileName(x.Filename)) - .ThenBy(x => x.Header.SystemID) - .ThenBy(x => x.Header.GameName) + .ThenBy(x => x.SystemID) + .ThenBy(x => x.GameName) .ToList(); } break; @@ -469,7 +469,8 @@ namespace BizHawk.Client.EmuHawk var firstIndex = MovieView.SelectedIndices[0]; MovieView.ensureVisible(firstIndex); - foreach (var kvp in _movieList[firstIndex].Header) + // Movies 2.0 TODO - what responsibility should a mvoie implementation have here? + foreach (var kvp in (_movieList[firstIndex] as Movie).Header) { var item = new ListViewItem(kvp.Key); item.SubItems.Add(kvp.Value);