From 929dccb75a1405737975d76648e015a3e7c00177 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Sat, 7 Oct 2017 23:07:10 -0400 Subject: reorganise repo structure --- .../Logging/ConsoleInterceptionManager.cs | 86 ---------------------- .../Framework/Logging/InterceptingTextWriter.cs | 63 ---------------- .../Framework/Logging/LogFileManager.cs | 57 -------------- 3 files changed, 206 deletions(-) delete mode 100644 src/StardewModdingAPI/Framework/Logging/ConsoleInterceptionManager.cs delete mode 100644 src/StardewModdingAPI/Framework/Logging/InterceptingTextWriter.cs delete mode 100644 src/StardewModdingAPI/Framework/Logging/LogFileManager.cs (limited to 'src/StardewModdingAPI/Framework/Logging') diff --git a/src/StardewModdingAPI/Framework/Logging/ConsoleInterceptionManager.cs b/src/StardewModdingAPI/Framework/Logging/ConsoleInterceptionManager.cs deleted file mode 100644 index b8f2c34e..00000000 --- a/src/StardewModdingAPI/Framework/Logging/ConsoleInterceptionManager.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System; - -namespace StardewModdingAPI.Framework.Logging -{ - /// Manages console output interception. - internal class ConsoleInterceptionManager : IDisposable - { - /********* - ** Properties - *********/ - /// The intercepting console writer. - private readonly InterceptingTextWriter Output; - - - /********* - ** Accessors - *********/ - /// Whether the current console supports color formatting. - public bool SupportsColor { get; } - - /// The event raised when a message is written to the console directly. - public event Action OnMessageIntercepted; - - - /********* - ** Public methods - *********/ - /// Construct an instance. - public ConsoleInterceptionManager() - { - // redirect output through interceptor - this.Output = new InterceptingTextWriter(Console.Out); - this.Output.OnMessageIntercepted += line => this.OnMessageIntercepted?.Invoke(line); - Console.SetOut(this.Output); - - // test color support - this.SupportsColor = this.TestColorSupport(); - } - - /// Get an exclusive lock and write to the console output without interception. - /// The action to perform within the exclusive write block. - public void ExclusiveWriteWithoutInterception(Action action) - { - lock (Console.Out) - { - try - { - this.Output.ShouldIntercept = false; - action(); - } - finally - { - this.Output.ShouldIntercept = true; - } - } - } - - /// Release all resources. - public void Dispose() - { - Console.SetOut(this.Output.Out); - this.Output.Dispose(); - } - - - /********* - ** private methods - *********/ - /// Test whether the current console supports color formatting. - private bool TestColorSupport() - { - try - { - this.ExclusiveWriteWithoutInterception(() => - { - Console.ForegroundColor = Console.ForegroundColor; - }); - return true; - } - catch (Exception) - { - return false; // Mono bug - } - } - } -} diff --git a/src/StardewModdingAPI/Framework/Logging/InterceptingTextWriter.cs b/src/StardewModdingAPI/Framework/Logging/InterceptingTextWriter.cs deleted file mode 100644 index 9ca61b59..00000000 --- a/src/StardewModdingAPI/Framework/Logging/InterceptingTextWriter.cs +++ /dev/null @@ -1,63 +0,0 @@ -using System; -using System.IO; -using System.Text; - -namespace StardewModdingAPI.Framework.Logging -{ - /// A text writer which allows intercepting output. - internal class InterceptingTextWriter : TextWriter - { - /********* - ** Accessors - *********/ - /// The underlying console output. - public TextWriter Out { get; } - - /// The character encoding in which the output is written. - public override Encoding Encoding => this.Out.Encoding; - - /// Whether to intercept console output. - public bool ShouldIntercept { get; set; } - - /// The event raised when a message is written to the console directly. - public event Action OnMessageIntercepted; - - - /********* - ** Public methods - *********/ - /// Construct an instance. - /// The underlying output writer. - public InterceptingTextWriter(TextWriter output) - { - this.Out = output; - } - - /// Writes a subarray of characters to the text string or stream. - /// The character array to write data from. - /// The character position in the buffer at which to start retrieving data. - /// The number of characters to write. - public override void Write(char[] buffer, int index, int count) - { - if (this.ShouldIntercept) - this.OnMessageIntercepted?.Invoke(new string(buffer, index, count).TrimEnd('\r', '\n')); - else - this.Out.Write(buffer, index, count); - } - - /// Writes a character to the text string or stream. - /// The character to write to the text stream. - /// Console log messages from the game should be caught by . This method passes through anything that bypasses that method for some reason, since it's better to show it to users than hide it from everyone. - public override void Write(char ch) - { - this.Out.Write(ch); - } - - /// Releases the unmanaged resources used by the and optionally releases the managed resources. - /// true to release both managed and unmanaged resources; false to release only unmanaged resources. - protected override void Dispose(bool disposing) - { - this.OnMessageIntercepted = null; - } - } -} diff --git a/src/StardewModdingAPI/Framework/Logging/LogFileManager.cs b/src/StardewModdingAPI/Framework/Logging/LogFileManager.cs deleted file mode 100644 index 8cfe0527..00000000 --- a/src/StardewModdingAPI/Framework/Logging/LogFileManager.cs +++ /dev/null @@ -1,57 +0,0 @@ -using System; -using System.IO; - -namespace StardewModdingAPI.Framework.Logging -{ - /// Manages reading and writing to log file. - internal class LogFileManager : IDisposable - { - /********* - ** Properties - *********/ - /// The underlying stream writer. - private readonly StreamWriter Stream; - - - /********* - ** Accessors - *********/ - /// The full path to the log file being written. - public string Path { get; } - - - /********* - ** Public methods - *********/ - /// Construct an instance. - /// The log file to write. - public LogFileManager(string path) - { - this.Path = path; - - // create log directory if needed - string logDir = System.IO.Path.GetDirectoryName(path); - if (logDir == null) - throw new ArgumentException($"The log path '{path}' is not valid."); - Directory.CreateDirectory(logDir); - - // open log file stream - this.Stream = new StreamWriter(path, append: false) { AutoFlush = true }; - } - - /// Write a message to the log. - /// The message to log. - public void WriteLine(string message) - { - // always use Windows-style line endings for convenience - // (Linux/Mac editors are fine with them, Windows editors often require them) - this.Stream.Write(message + "\r\n"); - } - - /// Release all resources. - public void Dispose() - { - this.Stream.Dispose(); - } - } -} -- cgit