private DialogResult Command_Display_Error(string tryingToDoWhat, string objectsThatFailed = null, Exception ex = null,
string message = null) {
//TODO: Better error dialog
var errorType = "";
if (ex is PatchException) {
errorType = "A patch was invalid, incompatible, or caused an error.";
} else if (ex is IOException) {
errorType = "Related to reading/writing files.";
} else if (ex is ApplicationException) {
errorType = "An application error.";
} else if (ex != null) {
errorType = "A system error or some sort of bug.";
}
var errorString = "An error has occurred,\r\n";
errorString += tryingToDoWhat.IsNullOrWhitespace() ? "" : $"While trying to: {tryingToDoWhat}\r\n";
errorString += errorType.IsNullOrWhitespace() ? "" : $"Error type: {errorType} ({ex?.GetType().Name})\r\n";
errorString += ex == null ? "" : $"Internal message: {ex.Message}\r\n";
errorString += objectsThatFailed.IsNullOrWhitespace() ? "" : $"Object(s) that failed: {objectsThatFailed}\r\n";
errorString += message.IsNullOrWhitespace() ? "" : $"{message}\r\n";
Logger.Error(ex, errorString);
return MessageBox.Show(errorString, "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
}