Skip to content

Commit 6c3083e

Browse files
committed
Handle file errors when saving a macro.
1 parent d286074 commit 6c3083e

File tree

3 files changed

+30
-14
lines changed

3 files changed

+30
-14
lines changed

src/BizHawk.Client.EmuHawk/tools/Macros/MacroInput.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,7 @@ private bool SaveMacroAs(MovieZone macro)
289289
return false;
290290
}
291291

292-
macro.Save(result);
292+
macro.Save(result); // ignore errors: This tool is going to be removed.
293293
Config!.RecentMacros.Add(result);
294294

295295
return true;

src/BizHawk.Client.EmuHawk/tools/Macros/MovieZone.cs

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -199,19 +199,25 @@ public void PlaceZone(IMovie movie, Config config)
199199
}
200200
}
201201

202-
public void Save(string fileName)
202+
public FileWriteResult Save(string fileName)
203203
{
204204
// Save the controller definition/LogKey
205205
// Save the controller name and player count. (Only for the user.)
206206
// Save whether or not the macro should use overlay input, and/or replace
207-
string[] header = new string[4];
208-
header[0] = InputKey;
209-
header[1] = _emulator.ControllerDefinition.Name;
210-
header[2] = _emulator.ControllerDefinition.PlayerCount.ToString();
211-
header[3] = $"{Overlay},{Replace}";
212-
213-
File.WriteAllLines(fileName, header);
214-
File.AppendAllLines(fileName, _log);
207+
208+
return FileWriter.Write(fileName, (fs) =>
209+
{
210+
using var writer = new StreamWriter(fs);
211+
writer.WriteLine(InputKey);
212+
writer.WriteLine(_emulator.ControllerDefinition.Name);
213+
writer.WriteLine(_emulator.ControllerDefinition.PlayerCount.ToString());
214+
writer.WriteLine($"{Overlay},{Replace}");
215+
216+
foreach (string line in _log)
217+
{
218+
writer.WriteLine(line);
219+
}
220+
});
215221
}
216222

217223
public MovieZone(string fileName, IDialogController dialogController, IEmulator emulator, IMovieSession movieSession, ToolManager tools)

src/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.MenuItems.cs

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -172,15 +172,25 @@ private void SaveSelectionToMacroMenuItem_Click(object sender, EventArgs e)
172172
if (file != null)
173173
{
174174
var selectionStart = TasView.SelectionStartIndex!.Value;
175-
new MovieZone(
175+
MovieZone macro = new(
176176
Emulator,
177177
Tools,
178178
MovieSession,
179179
start: selectionStart,
180-
length: TasView.SelectionEndIndex!.Value - selectionStart + 1)
181-
.Save(file.FullName);
180+
length: TasView.SelectionEndIndex!.Value - selectionStart + 1);
181+
FileWriteResult saveResult = macro.Save(file.FullName);
182182

183-
Config.RecentMacros.Add(file.FullName);
183+
if (saveResult.IsError)
184+
{
185+
DialogController.ShowMessageBox(
186+
$"Failed to save macro.\n{saveResult.UserFriendlyErrorMessage()}\n{saveResult.Exception.Message}",
187+
"Error",
188+
EMsgBoxIcon.Error);
189+
}
190+
else
191+
{
192+
Config.RecentMacros.Add(file.FullName);
193+
}
184194
}
185195
}
186196

0 commit comments

Comments
 (0)