99 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			99 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C#
		
	
	
	
|  | namespace SRDebugger | |||
|  | { | |||
|  |     using System; | |||
|  |     using Services; | |||
|  |     using SRF; | |||
|  | 
 | |||
|  |     public sealed class InfoEntry | |||
|  |     { | |||
|  |         public string Title { get; set; } | |||
|  | 
 | |||
|  |         public object Value | |||
|  |         { | |||
|  |             get | |||
|  |             { | |||
|  |                 try | |||
|  |                 { | |||
|  |                     return _valueGetter(); | |||
|  |                 } | |||
|  |                 catch (Exception e) | |||
|  |                 { | |||
|  |                     return "Error ({0})".Fmt(e.GetType().Name); | |||
|  |                 } | |||
|  |             } | |||
|  |         } | |||
|  | 
 | |||
|  |         public bool IsPrivate { get; private set; } | |||
|  | 
 | |||
|  |         private Func<object> _valueGetter; | |||
|  | 
 | |||
|  |         /// <summary> | |||
|  |         /// Create an <see cref="InfoEntry"/> instance with a getter function for the value. | |||
|  |         /// </summary> | |||
|  |         /// <param name="name">Name to display to the user.</param> | |||
|  |         /// <param name="getter">Getter method to acquire the latest value.</param> | |||
|  |         /// <param name="isPrivate">If true, will be excluded from the bug reporter system.</param> | |||
|  |         /// <returns>The created <see cref="InfoEntry"/> object.</returns> | |||
|  |         public static InfoEntry Create(string name, Func<object> getter, bool isPrivate = false) | |||
|  |         { | |||
|  |             return new InfoEntry | |||
|  |             { | |||
|  |                 Title = name, | |||
|  |                 _valueGetter = getter, | |||
|  |                 IsPrivate = isPrivate | |||
|  |             }; | |||
|  |         } | |||
|  | 
 | |||
|  |         /// <summary> | |||
|  |         /// Create an <see cref="InfoEntry"/> instance with a fixed value. | |||
|  |         /// </summary> | |||
|  |         /// <param name="name">Name to display to the user.</param> | |||
|  |         /// <param name="value">The value of the entry.</param> | |||
|  |         /// <param name="isPrivate">If true, will be excluded from the bug reporter system.</param> | |||
|  |         /// <returns>The created <see cref="InfoEntry"/> object.</returns> | |||
|  |         public static InfoEntry Create(string name, object value, bool isPrivate = false) | |||
|  |         { | |||
|  |             return new InfoEntry | |||
|  |             { | |||
|  |                 Title = name, | |||
|  |                 _valueGetter = () => value, | |||
|  |                 IsPrivate = isPrivate | |||
|  |             }; | |||
|  |         } | |||
|  |     } | |||
|  | } | |||
|  | 
 | |||
|  | namespace SRDebugger.Services | |||
|  | { | |||
|  |     using System.Collections.Generic; | |||
|  | 
 | |||
|  |     public interface ISystemInformationService | |||
|  |     { | |||
|  |         /// <summary> | |||
|  |         /// Get an IEnumerable with the available data categories for this system | |||
|  |         /// </summary> | |||
|  |         IEnumerable<string> GetCategories(); | |||
|  | 
 | |||
|  |         /// <summary> | |||
|  |         /// Get a list of information for a category | |||
|  |         /// </summary> | |||
|  |         /// <param name="category">Category name to fetch (get a list of these from GetCategories())</param> | |||
|  |         /// <returns></returns> | |||
|  |         IList<InfoEntry> GetInfo(string category); | |||
|  | 
 | |||
|  |         /// <summary> | |||
|  |         /// Add a piece of system information. | |||
|  |         /// </summary> | |||
|  |         /// <param name="category"></param> | |||
|  |         /// <param name="info"></param> | |||
|  |         void Add(InfoEntry info, string category = "Default"); | |||
|  | 
 | |||
|  |         /// <summary> | |||
|  |         /// Generate a report from all available system data (useful for sending with bug reports) | |||
|  |         /// </summary> | |||
|  |         /// <param name="includePrivate">Set to true to include identifying private information (usually you don't want this)</param> | |||
|  |         /// <returns>The generated report</returns> | |||
|  |         Dictionary<string, Dictionary<string, object>> CreateReport(bool includePrivate = false); | |||
|  |     } | |||
|  | } |