Skip to content

Commit c8af415

Browse files
committed
Handle file errors when saving a macro.
1 parent 214f53a commit c8af415

3 files changed

Lines changed: 30 additions & 14 deletions

File tree

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
@@ -198,19 +198,25 @@ public void PlaceZone(IMovie movie, Config config)
198198
}
199199
}
200200

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

216222
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)