From 90e92ef61f0808688abf638ee5cb941215c1586f Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Sat, 14 Jan 2017 15:05:38 -0500 Subject: fix error when the console doesn't support colour (#206) --- src/StardewModdingAPI/Framework/Monitor.cs | 28 +++++++++++++++++++++++++--- src/StardewModdingAPI/LogWriter.cs | 11 ++++++++--- 2 files changed, 33 insertions(+), 6 deletions(-) (limited to 'src/StardewModdingAPI') diff --git a/src/StardewModdingAPI/Framework/Monitor.cs b/src/StardewModdingAPI/Framework/Monitor.cs index 0989bb7e..b492e5c7 100644 --- a/src/StardewModdingAPI/Framework/Monitor.cs +++ b/src/StardewModdingAPI/Framework/Monitor.cs @@ -34,6 +34,9 @@ namespace StardewModdingAPI.Framework /********* ** Accessors *********/ + /// Whether the current console supports color codes. + internal static readonly bool ConsoleSupportsColor = Monitor.GetConsoleSupportsColor(); + /// Whether to show trace messages in the console. internal bool ShowTraceInConsole { get; set; } @@ -113,11 +116,30 @@ namespace StardewModdingAPI.Framework // log if (this.WriteToConsole && (this.ShowTraceInConsole || level != LogLevel.Trace)) { - Console.ForegroundColor = color; - Console.WriteLine(message); - Console.ResetColor(); + if (Monitor.ConsoleSupportsColor) + { + Console.ForegroundColor = color; + Console.WriteLine(message); + Console.ResetColor(); + } + else + Console.WriteLine(message); } this.LogFile.WriteLine(message); } + + /// Test whether the current console supports color formatting. + private static bool GetConsoleSupportsColor() + { + try + { + Console.ResetColor(); + return true; + } + catch (Exception) + { + return false; + } + } } } \ No newline at end of file diff --git a/src/StardewModdingAPI/LogWriter.cs b/src/StardewModdingAPI/LogWriter.cs index 058fa649..9c2ef515 100644 --- a/src/StardewModdingAPI/LogWriter.cs +++ b/src/StardewModdingAPI/LogWriter.cs @@ -42,9 +42,14 @@ namespace StardewModdingAPI string output = $"[{message.LogTime}] {message.Message}"; if (message.PrintConsole) { - Console.ForegroundColor = message.Colour; - Console.WriteLine(message); - Console.ForegroundColor = ConsoleColor.Gray; + if (Monitor.ConsoleSupportsColor) + { + Console.ForegroundColor = message.Colour; + Console.WriteLine(message); + Console.ResetColor(); + } + else + Console.WriteLine(message); } this.LogFile.WriteLine(output); } -- cgit