diff --git a/BizHawk.MultiClient/MainForm.cs b/BizHawk.MultiClient/MainForm.cs index 4d563db72a..2c2743526d 100644 --- a/BizHawk.MultiClient/MainForm.cs +++ b/BizHawk.MultiClient/MainForm.cs @@ -367,10 +367,9 @@ namespace BizHawk.MultiClient private void LoadMoviesFromRecent(string movie) { - bool r; - Movie m = new Movie(movie, MOVIEMODE.PLAY, out r); + Movie m = new Movie(movie, MOVIEMODE.PLAY); - if (!r) + if (!m.Loaded) { Global.Sound.StopSound(); DialogResult result = MessageBox.Show("Could not open " + movie + "\nRemove from list?", "File not found", MessageBoxButtons.YesNo, MessageBoxIcon.Error); diff --git a/BizHawk.MultiClient/Sound.cs b/BizHawk.MultiClient/Sound.cs index cc84205f6a..a1c457c27c 100644 --- a/BizHawk.MultiClient/Sound.cs +++ b/BizHawk.MultiClient/Sound.cs @@ -14,7 +14,7 @@ namespace BizHawk.MultiClient private byte[] SoundBuffer; private const int BufferSize = 4410 * 2 * 2; // 1/10th of a second, 2 bytes per sample, 2 channels; //private int SoundBufferPosition; //TODO: use this - bool needDiscard; + public bool needDiscard; private BufferedAsync semisync = new BufferedAsync(); diff --git a/BizHawk.MultiClient/movie/Movie.cs b/BizHawk.MultiClient/movie/Movie.cs index db4b3cab4f..92b267849a 100644 --- a/BizHawk.MultiClient/movie/Movie.cs +++ b/BizHawk.MultiClient/movie/Movie.cs @@ -10,8 +10,6 @@ namespace BizHawk.MultiClient public enum MOVIEMODE { INACTIVE, PLAY, RECORD, FINISHED }; public class Movie { - //TODO: preloaded flag + use it to make checks before doing things that require the movie to be loaded - public MovieHeader Header = new MovieHeader(); public SubtitleList Subtitles = new SubtitleList(); public bool MakeBackup = true; //make backup before altering movie @@ -20,39 +18,13 @@ namespace BizHawk.MultiClient public string Filename { get; private set; } public MOVIEMODE Mode { get; private set; } public int Rerecords { get; private set; } - public int Frames { get; private set; } //Only used when a movie is preloaded + private int Frames; private MovieLog Log = new MovieLog(); private int lastLog; public bool StartsFromSavestate { get; private set; } - - /// - /// Allows checking if file exists - /// - /// - /// - /// - public Movie(string filename, MOVIEMODE m, out bool exists) - { - FileInfo f = new FileInfo(filename); - if (!f.Exists) - { - filename = ""; - exists = false; - } - else - { - Filename = filename; - exists = true; - } - Mode = m; - lastLog = 0; - Rerecords = 0; - IsText = true; - Frames = 0; - StartsFromSavestate = false; - } + public bool Loaded { get; private set; } public Movie(string filename, MOVIEMODE m) { @@ -63,15 +35,17 @@ namespace BizHawk.MultiClient IsText = true; Frames = 0; StartsFromSavestate = false; + Loaded = false; } public Movie() { - Filename = ""; //Note: note this must be populated before playing movie + Filename = ""; Mode = MOVIEMODE.INACTIVE; IsText = true; Frames = 0; StartsFromSavestate = false; + Loaded = false; } public string GetSysID() @@ -85,7 +59,10 @@ namespace BizHawk.MultiClient } public int Length() { - return Log.Length(); + if (Loaded) + return Log.Length(); + else + return Frames; } public void StopMovie() @@ -150,6 +127,7 @@ namespace BizHawk.MultiClient public void WriteMovie() { + if (!Loaded) return; if (Filename == "") return; Directory.CreateDirectory(new FileInfo(Filename).Directory.FullName); if (IsText) @@ -160,6 +138,7 @@ namespace BizHawk.MultiClient public void WriteBackup() { + if (!Loaded) return; if (Filename == "") return; Directory.CreateDirectory(new FileInfo(Filename).Directory.FullName); string BackupName = Filename; @@ -195,7 +174,10 @@ namespace BizHawk.MultiClient var file = new FileInfo(Filename); if (file.Exists == false) + { + Loaded = false; return false; + } else { Header.Clear(); @@ -212,30 +194,11 @@ namespace BizHawk.MultiClient { continue; } - else if (str.Contains(MovieHeader.EMULATIONVERSION)) - { - str = ParseHeader(str, MovieHeader.EMULATIONVERSION); - Header.AddHeaderLine(MovieHeader.EMULATIONVERSION, str); - } - else if (str.Contains(MovieHeader.MOVIEVERSION)) - { - str = ParseHeader(str, MovieHeader.MOVIEVERSION); - Header.AddHeaderLine(MovieHeader.MOVIEVERSION, str); - } - else if (str.Contains(MovieHeader.PLATFORM)) - { - str = ParseHeader(str, MovieHeader.PLATFORM); - Header.AddHeaderLine(MovieHeader.PLATFORM, str); - } - else if (str.Contains(MovieHeader.GAMENAME)) - { - str = ParseHeader(str, MovieHeader.GAMENAME); - Header.AddHeaderLine(MovieHeader.GAMENAME, str); - } - else if (str.Contains(MovieHeader.RERECORDS)) + + + if (str.Contains(MovieHeader.RERECORDS)) { str = ParseHeader(str, MovieHeader.RERECORDS); - Header.AddHeaderLine(MovieHeader.RERECORDS, str); try { Rerecords = int.Parse(str); @@ -245,32 +208,20 @@ namespace BizHawk.MultiClient Rerecords = 0; } } - else if (str.Contains(MovieHeader.AUTHOR)) - { - str = ParseHeader(str, MovieHeader.AUTHOR); - Header.AddHeaderLine(MovieHeader.AUTHOR, str); - } - else if (str.ToUpper().Contains(MovieHeader.GUID)) - { - str = ParseHeader(str, MovieHeader.GUID); - Header.AddHeaderLine(MovieHeader.GUID, str); - } else if (str.Contains(MovieHeader.STARTSFROMSAVESTATE)) { str = ParseHeader(str, MovieHeader.STARTSFROMSAVESTATE); - Header.AddHeaderLine(MovieHeader.STARTSFROMSAVESTATE, str); - //NOTE: This can't get removed in favor of the MovieHeader function! Must refactor if (str == "1") StartsFromSavestate = true; } - else if (str.StartsWith("subtitle") || str.StartsWith("sub")) + + if (Header.AddHeaderFromLine(str)) + continue; + + if (str.StartsWith("subtitle") || str.StartsWith("sub")) { Subtitles.AddSubtitle(str); } - else if (str.StartsWith("comment")) - { - Header.Comments.Add(str); - } else if (str[0] == '|') { Log.AddFrame(str); @@ -281,7 +232,7 @@ namespace BizHawk.MultiClient } } } - + Loaded = true; return true; } @@ -292,6 +243,7 @@ namespace BizHawk.MultiClient /// public bool PreLoadText() { + Loaded = false; var file = new FileInfo(Filename); if (file.Exists == false) @@ -315,14 +267,11 @@ namespace BizHawk.MultiClient } else if (Header.AddHeaderFromLine(str)) continue; - else if (str.StartsWith("subtitle") || str.StartsWith("sub")) + + if (str.StartsWith("subtitle") || str.StartsWith("sub")) { Subtitles.AddSubtitle(str); } - else if (str.StartsWith("comment")) - { - Header.Comments.Add(str.Substring(8, str.Length - 8)); - } else if (str[0] == '|') { int line = str.Length + 1; @@ -348,8 +297,12 @@ namespace BizHawk.MultiClient public bool LoadMovie() { var file = new FileInfo(Filename); - if (file.Exists == false) return false; //TODO: methods like writemovie will fail, some internal flag needs to prevent this - //TODO: must determine if file is text or binary + if (file.Exists == false) + { + Loaded = false; + return false; + } + return LoadText(); } @@ -521,6 +474,7 @@ namespace BizHawk.MultiClient return -1; //Hack //This function will compare the movie data to the savestate movie data to see if they match //TODO: Will eventually check header data too such as GUI + /* MovieLog l = new MovieLog(); string line; while (true) @@ -542,6 +496,7 @@ namespace BizHawk.MultiClient return x; } return -1; + */ } public int CompareTo(Movie Other, string parameter) @@ -657,10 +612,6 @@ namespace BizHawk.MultiClient return 0; } - - - - private string ParseHeader(string line, string headerName) { string str;