Skip to content

Commit

Permalink
Add a bunch of exception handling (#253)
Browse files Browse the repository at this point in the history
  • Loading branch information
jonko0493 authored Jun 22, 2023
1 parent 8047998 commit e1e527e
Show file tree
Hide file tree
Showing 16 changed files with 1,632 additions and 1,263 deletions.
119 changes: 78 additions & 41 deletions src/SerialLoops.Lib/Build.cs
Original file line number Diff line number Diff line change
Expand Up @@ -74,13 +74,13 @@ private static bool DoBuild(string directory, Project project, Config config, IL
commandsIncSb.AppendLine(command.GetMacro());
}

tracker.Focus("Compressing Archives (dat.bin)", 3);
tracker.Focus("Loading Archives (dat.bin)", 3);
var dat = ArchiveFile<DataFile>.FromFile(Path.Combine(directory, "original", "archives", "dat.bin"), log);
tracker.Finished++;
tracker.CurrentlyLoading = "Compressing Archives (evt.bin)";
tracker.CurrentlyLoading = "Loading Archives (evt.bin)";
var evt = ArchiveFile<EventFile>.FromFile(Path.Combine(directory, "original", "archives", "evt.bin"), log);
tracker.Finished++;
tracker.CurrentlyLoading = "Compressing Archives (grp.bin)";
tracker.CurrentlyLoading = "Loading Archives (grp.bin)";
var grp = ArchiveFile<GraphicsFile>.FromFile(Path.Combine(directory, "original", "archives", "grp.bin"), log);

if (dat is null || evt is null || grp is null)
Expand Down Expand Up @@ -115,7 +115,7 @@ private static bool DoBuild(string directory, Project project, Config config, IL
{
if (Path.GetExtension(file).Equals(".png", StringComparison.OrdinalIgnoreCase))
{
ReplaceSingleGraphicsFile(grp, file, index);
ReplaceSingleGraphicsFile(grp, file, index, log);
}
else if (file.EndsWith("_pal.csv", StringComparison.OrdinalIgnoreCase))
{
Expand Down Expand Up @@ -216,51 +216,74 @@ private static void CopyToArchivesToIterativeOriginal(string newDataDir, string
tracker.Finished+= 3;
}

private static void ReplaceSingleGraphicsFile(ArchiveFile<GraphicsFile> grp, string filePath, int index)
private static void ReplaceSingleGraphicsFile(ArchiveFile<GraphicsFile> grp, string filePath, int index, ILogger log)
{
GraphicsFile grpFile = grp.Files.FirstOrDefault(f => f.Index == index);

if (index == 0xE50)
try
{
grpFile.InitializeFontFile();
}
GraphicsFile grpFile = grp.Files.FirstOrDefault(f => f.Index == index);

string paletteFile = Path.Combine(Path.GetDirectoryName(filePath), $"{Path.GetFileNameWithoutExtension(filePath)}_pal.csv");
if (File.Exists(paletteFile))
{
grpFile.SetPalette(File.ReadAllText(paletteFile).Split(',').Select(c => SKColor.Parse(c)).ToList());
}
if (index == 0xE50)
{
grpFile.InitializeFontFile();
}

string paletteFile = Path.Combine(Path.GetDirectoryName(filePath), $"{Path.GetFileNameWithoutExtension(filePath)}_pal.csv");
if (File.Exists(paletteFile))
{
grpFile.SetPalette(File.ReadAllText(paletteFile).Split(',').Select(c => SKColor.Parse(c)).ToList());
}

grpFile.SetImage(filePath);
grpFile.SetImage(filePath);

grp.Files[grp.Files.IndexOf(grpFile)] = grpFile;
grp.Files[grp.Files.IndexOf(grpFile)] = grpFile;
}
catch (Exception ex)
{
log.LogException($"Failed replacing graphics file {index} with file '{filePath}'", ex);
}
}

private static bool ReplaceSingleSourceFile(ArchiveFile<EventFile> archive, string filePath, int index, string devkitArm, string workingDirectory, ILogger log)
{
(string objFile, string binFile) = CompileSourceFile(filePath, devkitArm, workingDirectory, log);
if (!File.Exists(binFile))
try
{
(string objFile, string binFile) = CompileSourceFile(filePath, devkitArm, workingDirectory, log);
if (!File.Exists(binFile))
{
log.LogError($"Compiled file {binFile} does not exist!");
return false;
}
ReplaceSingleFile(archive, binFile, index, log);
File.Delete(objFile);
File.Delete(binFile);
return true;
}
catch (Exception ex)
{
log.LogError($"Compiled file {binFile} does not exist!");
log.LogException($"Failed replacing source file {index} in evt.bin with file '{filePath}'", ex);
return false;
}
ReplaceSingleFile(archive, binFile, index);
File.Delete(objFile);
File.Delete(binFile);
return true;
}
private static bool ReplaceSingleSourceFile(ArchiveFile<DataFile> archive, string filePath, int index, string devkitArm, string workingDirectory, ILogger log)
{
(string objFile, string binFile) = CompileSourceFile(filePath, devkitArm, workingDirectory, log);
if (!File.Exists(binFile))
try
{
log.LogError($"Compiled file {binFile} does not exist!");
(string objFile, string binFile) = CompileSourceFile(filePath, devkitArm, workingDirectory, log);
if (!File.Exists(binFile))
{
log.LogError($"Compiled file {binFile} does not exist!");
return false;
}
ReplaceSingleFile(archive, binFile, index, log);
File.Delete(objFile);
File.Delete(binFile);
return true;
}
catch (Exception ex)
{
log.LogException($"Failed replacing source file {index} in dat.bin with file '{filePath}'", ex);
return false;
}
ReplaceSingleFile(archive, binFile, index);
File.Delete(objFile);
File.Delete(binFile);
return true;
}

private static (string, string) CompileSourceFile(string filePath, string devkitArm, string workingDirectory, ILogger log)
Expand Down Expand Up @@ -322,19 +345,33 @@ private static (string, string) CompileSourceFile(string filePath, string devkit
return (objFile, binFile);
}

private static void ReplaceSingleFile(ArchiveFile<EventFile> archive, string filePath, int index)
private static void ReplaceSingleFile(ArchiveFile<EventFile> archive, string filePath, int index, ILogger log)
{
EventFile file = archive.Files.FirstOrDefault(f => f.Index == index);
file.Data = File.ReadAllBytes(filePath).ToList();
file.Edited = true;
archive.Files[archive.Files.IndexOf(file)] = file;
try
{
EventFile file = archive.Files.FirstOrDefault(f => f.Index == index);
file.Data = File.ReadAllBytes(filePath).ToList();
file.Edited = true;
archive.Files[archive.Files.IndexOf(file)] = file;
}
catch (Exception ex)
{
log.LogException($"Failed replacing source file {index} in evt.bin with file '{filePath}'", ex);
}
}
private static void ReplaceSingleFile(ArchiveFile<DataFile> archive, string filePath, int index)
private static void ReplaceSingleFile(ArchiveFile<DataFile> archive, string filePath, int index, ILogger log)
{
DataFile file = archive.Files.FirstOrDefault(f => f.Index == index);
file.Data = File.ReadAllBytes(filePath).ToList();
file.Edited = true;
archive.Files[archive.Files.IndexOf(file)] = file;
try
{
DataFile file = archive.Files.FirstOrDefault(f => f.Index == index);
file.Data = File.ReadAllBytes(filePath).ToList();
file.Edited = true;
archive.Files[archive.Files.IndexOf(file)] = file;
}
catch (Exception ex)
{
log.LogException($"Failed replacing source file {index} in dat.bin with file '{filePath}'", ex);
}
}
}
}
14 changes: 7 additions & 7 deletions src/SerialLoops.Lib/Config.cs
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ public static Config LoadConfig(ILogger log)
Config defaultConfig = GetDefault(log);
defaultConfig.ValidateConfig(log);
defaultConfig.ConfigPath = configJson;
defaultConfig.InitializeHacks();
defaultConfig.InitializeHacks(log);
IO.WriteStringFile(configJson, JsonSerializer.Serialize(defaultConfig), log);
return defaultConfig;
}
Expand All @@ -60,7 +60,7 @@ public static Config LoadConfig(ILogger log)
Config config = JsonSerializer.Deserialize<Config>(File.ReadAllText(configJson));
config.ValidateConfig(log);
config.ConfigPath = configJson;
config.InitializeHacks();
config.InitializeHacks(log);
return config;
}
catch (JsonException exc)
Expand All @@ -81,12 +81,12 @@ public void ValidateConfig(ILogger log)
}
}

private void InitializeHacks()
private void InitializeHacks(ILogger log)
{
if (!Directory.Exists(HacksDirectory))
{
Directory.CreateDirectory(HacksDirectory);
IO.CopyFiles(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Sources", "Hacks"), HacksDirectory);
IO.CopyFiles(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Sources", "Hacks"), HacksDirectory, log);
File.Copy(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Sources", "hacks.json"), Path.Combine(HacksDirectory, "hacks.json"));
}

Expand All @@ -97,15 +97,15 @@ private void InitializeHacks()
IEnumerable<AsmHack> missingHacks = builtinHacks.Where(h => !Hacks.Contains(h));
if (missingHacks.Any())
{
IO.CopyFiles(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Sources", "Hacks"), HacksDirectory);
IO.CopyFiles(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Sources", "Hacks"), HacksDirectory, log);
Hacks.AddRange(missingHacks);
File.WriteAllText(Path.Combine(HacksDirectory, "hacks.json"), JsonSerializer.Serialize(Hacks));
}

IEnumerable<AsmHack> updatedHacks = builtinHacks.Where(h => !Hacks.FirstOrDefault(o => h.Name == o.Name)?.DeepEquals(h) ?? false);
if (updatedHacks.Any())
{
IO.CopyFiles(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Sources", "Hacks"), HacksDirectory);
IO.CopyFiles(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Sources", "Hacks"), HacksDirectory, log);
foreach (AsmHack updatedHack in updatedHacks)
{
Hacks[Hacks.FindIndex(h => h.Name == updatedHack.Name)] = updatedHack;
Expand Down Expand Up @@ -141,7 +141,7 @@ private static Config GetDefault(ILogger log)
{
emulatorPath = Path.Combine("/snap", "melonds", "current", "usr", "local", "bin", "melonDS");
}
if (!Directory.Exists(emulatorPath))
if (!Directory.Exists(emulatorPath) && !File.Exists(emulatorPath))
{
emulatorPath = "";
log.LogWarning("Valid emulator path not found in config.json.");
Expand Down
Loading

0 comments on commit e1e527e

Please sign in to comment.