44using System . Text ;
55using HandBrake . Interop ;
66using System . IO ;
7+ using VidCoder . Model ;
78using VidCoder . ViewModel ;
89
910namespace VidCoder . Services
1011{
1112 public class Logger : IDisposable , ILogger
1213 {
14+ private List < LogEntry > logEntries = new List < LogEntry > ( ) ;
1315 private StreamWriter logFile ;
1416 private bool disposed ;
15- private StringBuilder logBuilder ;
1617 private object logLock = new object ( ) ;
1718 private object disposeLock = new object ( ) ;
1819
20+ public event EventHandler < EventArgs < LogEntry > > EntryLogged ;
21+ public event EventHandler Cleared ;
22+
1923 public Logger ( )
2024 {
2125 HandBrakeUtils . MessageLogged += this . OnMessageLogged ;
@@ -30,31 +34,46 @@ public Logger()
3034 string logFilePath = Path . Combine ( logFolder , DateTime . UtcNow . ToString ( "yyyy-MM-dd HH-mm-ss" ) + ".txt" ) ;
3135 this . logFile = new StreamWriter ( logFilePath ) ;
3236
33- this . logBuilder = new StringBuilder ( ) ;
34- this . RecordMessage ( "## VidCoder " + Utilities . CurrentVersion + " (" + Utilities . Architecture + ")" ) ;
37+ var initialEntry = new LogEntry
38+ {
39+ LogType = LogType . Message ,
40+ Source = LogSource . VidCoder ,
41+ Text = "## VidCoder " + Utilities . CurrentVersion + " (" + Utilities . Architecture + ")"
42+ } ;
43+
44+ this . AddEntry ( initialEntry ) ;
3545 }
3646
37- public string LogText
47+ public List < LogEntry > LogEntries
3848 {
3949 get
4050 {
41- lock ( this . logLock )
42- {
43- return logBuilder . ToString ( ) ;
44- }
51+ return this . logEntries ;
4552 }
4653 }
4754
4855 public void Log ( string message )
4956 {
5057 string prefix = string . IsNullOrEmpty ( message ) ? string . Empty : "# " ;
5158
52- this . RecordMessage ( prefix + message ) ;
59+ var entry = new LogEntry
60+ {
61+ LogType = LogType . Message ,
62+ Source = LogSource . VidCoder ,
63+ Text = prefix + message
64+ } ;
65+
66+ this . AddEntry ( entry ) ;
5367 }
5468
5569 public void ClearLog ( )
5670 {
57- this . logBuilder . Clear ( ) ;
71+ this . LogEntries . Clear ( ) ;
72+
73+ if ( this . Cleared != null )
74+ {
75+ this . Cleared ( this , new EventArgs ( ) ) ;
76+ }
5877 }
5978
6079 /// <summary>
@@ -72,17 +91,7 @@ public void Dispose()
7291 }
7392 }
7493
75- private void OnMessageLogged ( object sender , MessageLoggedEventArgs e )
76- {
77- this . RecordMessage ( e . Message ) ;
78- }
79-
80- private void OnErrorLogged ( object sender , MessageLoggedEventArgs e )
81- {
82- this . RecordMessage ( "ERROR: " + e . Message ) ;
83- }
84-
85- private void RecordMessage ( string message )
94+ private void AddEntry ( LogEntry entry )
8695 {
8796 lock ( this . disposeLock )
8897 {
@@ -94,18 +103,40 @@ private void RecordMessage(string message)
94103
95104 lock ( this . logLock )
96105 {
97- this . logBuilder . Append ( message ) ;
98- this . logBuilder . Append ( Environment . NewLine ) ;
106+ this . LogEntries . Add ( entry ) ;
99107 }
100108
101- var logWindow = WindowManager . FindWindow ( typeof ( LogViewModel ) ) as LogViewModel ;
102- if ( logWindow != null )
109+ if ( this . EntryLogged != null )
103110 {
104- logWindow . RefreshLogs ( ) ;
111+ this . EntryLogged ( this , new EventArgs < LogEntry > ( entry ) ) ;
105112 }
106113
107- this . logFile . WriteLine ( message ) ;
114+ this . logFile . WriteLine ( entry . Text ) ;
108115 this . logFile . Flush ( ) ;
109116 }
117+
118+ private void OnMessageLogged ( object sender , MessageLoggedEventArgs e )
119+ {
120+ var entry = new LogEntry
121+ {
122+ LogType = LogType . Message ,
123+ Source = LogSource . HandBrake ,
124+ Text = e . Message
125+ } ;
126+
127+ this . AddEntry ( entry ) ;
128+ }
129+
130+ private void OnErrorLogged ( object sender , MessageLoggedEventArgs e )
131+ {
132+ var entry = new LogEntry
133+ {
134+ LogType = LogType . Error ,
135+ Source = LogSource . HandBrake ,
136+ Text = "ERROR: " + e . Message
137+ } ;
138+
139+ this . AddEntry ( entry ) ;
140+ }
110141 }
111142}
0 commit comments