@@ -81,6 +81,8 @@ public PocsagControl(ISharpControl control)
8181
8282 this . modeSelector . SelectedIndex = this . modeSelector . FindStringExact ( this . Settings . SelectedMode ) ;
8383
84+ this . textBoxFilter . Text = this . Settings . Filter ;
85+
8486 this . checkBoxDeDuplicate . Click +=
8587 ( object sender , EventArgs e ) =>
8688 {
@@ -126,6 +128,11 @@ public PocsagControl(ISharpControl control)
126128 this . processor . ChangeMode ( value ) ;
127129 } ;
128130
131+ this . textBoxFilter . TextChanged += ( object sender , EventArgs e ) =>
132+ {
133+ this . Settings . Filter = this . textBoxFilter . Text ;
134+ } ;
135+
129136 this . UpdateMultilineMode ( ) ;
130137 }
131138
@@ -150,7 +157,7 @@ private string CsvifyText(string source)
150157 return result ;
151158 }
152159
153- private void LogMessage ( MessageBase message )
160+ private void LogMessage ( MessageBase message , string fileNameSuffix = "" )
154161 {
155162 var directory = "sdrs-log" ;
156163
@@ -159,7 +166,7 @@ private void LogMessage(MessageBase message)
159166 Directory . CreateDirectory ( directory ) ;
160167 }
161168
162- var filename = DateTime . Now . ToString ( "yyyy-MM-dd" ) + ".csv" ;
169+ var filename = DateTime . Now . ToString ( "yyyy-MM-dd" ) + fileNameSuffix + ".csv" ;
163170
164171 var path = $ "{ directory } /{ filename } ";
165172
@@ -204,26 +211,57 @@ private void MessageReceived(MessageBase message)
204211 return ;
205212 }
206213
214+ var filter = this . Settings . Filter ;
215+ var filterOn = ! string . IsNullOrWhiteSpace ( filter ) ;
216+ var filterMatched = false ;
217+
218+ if ( filterOn )
219+ {
220+ var filterElements = filter . Split ( "," ) ;
221+
222+ foreach ( var filterElement in filterElements )
223+ {
224+ if ( message . Address . Contains ( filterElement , StringComparison . InvariantCultureIgnoreCase ) || message . Payload . Contains ( filterElement , StringComparison . InvariantCultureIgnoreCase ) )
225+ {
226+ filterMatched = true ;
227+ break ;
228+ }
229+ }
230+ }
231+
232+ var messageValidForFilter = filterOn && filterMatched ;
233+
207234 int firstDisplayed = this . dataGridView1 . FirstDisplayedScrollingRowIndex ;
208235 int displayed = this . dataGridView1 . DisplayedRowCount ( true ) ;
209236 int lastVisible = ( firstDisplayed + displayed ) - 1 ;
210237 int lastIndex = this . dataGridView1 . RowCount - 1 ;
211238
212- this . bindingList . Add ( message ) ;
213-
214- while ( this . bindingList . Count > 1000 )
239+ if ( messageValidForFilter || ! filterOn )
215240 {
216- this . bindingList . RemoveAt ( 0 ) ;
217- }
241+ this . bindingList . Add ( message ) ;
218242
219- if ( lastVisible == lastIndex )
220- {
221- this . dataGridView1 . FirstDisplayedScrollingRowIndex = firstDisplayed + 1 ;
243+ while ( this . bindingList . Count > 1000 )
244+ {
245+ this . bindingList . RemoveAt ( 0 ) ;
246+ }
247+
248+ if ( lastVisible == lastIndex )
249+ {
250+ this . dataGridView1 . FirstDisplayedScrollingRowIndex = firstDisplayed + 1 ;
251+ }
222252 }
223253
254+
224255 if ( this . Settings . Logging )
225256 {
257+ // log everything to main log
226258 this . LogMessage ( message ) ;
259+
260+ // log filtered stuff to filtered log
261+ if ( messageValidForFilter )
262+ {
263+ this . LogMessage ( message , "-filtered" ) ;
264+ }
227265 }
228266 } ) ,
229267 new object [ ] { message } ) ;
0 commit comments