55 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
66 */
77
8+ using DistillNET . Extensions ;
89using System ;
910using System . Collections . Generic ;
1011using System . Data ;
1112using System . Data . SQLite ;
1213using System . IO ;
14+ using System . Linq ;
1315using System . Threading . Tasks ;
1416
1517namespace DistillNET
@@ -76,10 +78,7 @@ public FilterDbCollection(string dbAbsolutePath, bool overwrite = true, bool use
7678
7779 ConfigureDatabase ( ) ;
7880
79- if ( isNew )
80- {
81- CreateTables ( ) ;
82- }
81+ CreateTables ( ) ;
8382
8483 m_globalKey = "global" ;
8584 }
@@ -360,6 +359,9 @@ private async Task<List<UrlFilter>> GetFiltersForDomain(string domain, bool isWh
360359 {
361360 var retVal = new List < UrlFilter > ( ) ;
362361
362+ var allPossibleVariations = GetAllPossibleSubdomains ( domain ) ;
363+
364+ using ( var tsx = m_connection . BeginTransaction ( ) )
363365 using ( var cmd = m_connection . CreateCommand ( ) )
364366 {
365367 switch ( isWhitelist )
@@ -378,22 +380,41 @@ private async Task<List<UrlFilter>> GetFiltersForDomain(string domain, bool isWh
378380 }
379381
380382 var domainSumParam = new SQLiteParameter ( "$domainId" , System . Data . DbType . String ) ;
381- domainSumParam . Value = domain ;
382383 cmd . Parameters . Add ( domainSumParam ) ;
383384
384- using ( var reader = await cmd . ExecuteReaderAsync ( ) )
385+ foreach ( var sub in allPossibleVariations )
385386 {
386- while ( await reader . ReadAsync ( ) )
387+ cmd . Parameters [ 0 ] . Value = sub ;
388+
389+ using ( var reader = await cmd . ExecuteReaderAsync ( ) )
387390 {
388- short catId = reader . GetInt16 ( 1 ) ;
389- retVal . Add ( ( UrlFilter ) m_ruleParser . ParseAbpFormattedRule ( reader . GetString ( 3 ) , catId ) ) ;
391+ while ( await reader . ReadAsync ( ) )
392+ {
393+ short catId = reader . GetInt16 ( 1 ) ;
394+ retVal . Add ( ( UrlFilter ) m_ruleParser . ParseAbpFormattedRule ( reader . GetString ( 3 ) , catId ) ) ;
395+ }
390396 }
391397 }
392398 }
393399
394400 return retVal ;
395401 }
396402
403+ private List < string > GetAllPossibleSubdomains ( string inputDomain )
404+ {
405+ var retVal = new List < string > ( ) { inputDomain } ;
406+ int subPos = inputDomain . IndexOfQuick ( '.' ) ;
407+
408+ while ( subPos != - 1 )
409+ {
410+ inputDomain = inputDomain . Substring ( subPos + 1 ) ;
411+ retVal . Add ( inputDomain ) ;
412+ subPos = inputDomain . IndexOfQuick ( '.' ) ;
413+ }
414+
415+ return retVal ;
416+ }
417+
397418 public List < Filter > GetFiltersForRequest ( Uri requestString , string referer = "" )
398419 {
399420 return null ;
0 commit comments