@@ -30,7 +30,6 @@ public sealed class MainViewModel : Screen, IShell
3030 {
3131 public static MainViewModel Instance { get ; set ; }
3232
33-
3433 private readonly BindableCollection < LocalNetworkInterface > _localNetworkInterfaces =
3534 new BindableCollection < LocalNetworkInterface > ( ) ;
3635
@@ -49,7 +48,7 @@ public sealed class MainViewModel : Screen, IShell
4948 private List < string > _plugins ;
5049 private DnsCryptProxyEntry _primaryResolver ;
5150 private string _primaryResolverTitle ;
52- private ObservableCollection < DnsCryptProxyEntry > _resolvers ;
51+ private List < DnsCryptProxyEntry > _resolvers ;
5352 private DnsCryptProxyEntry _secondaryResolver ;
5453 private string _secondaryResolverTitle ;
5554 private Language _selectedLanguage ;
@@ -99,6 +98,7 @@ private MainViewModel(IWindowManager windowManager, IEventAggregator eventAggreg
9998 MessageBoxButton . OK , BoxType . Error ) ;
10099 Environment . Exit ( 1 ) ;
101100 }
101+
102102 // do a simple check, if all needed files are available
103103 if ( ! ValidateDnsCryptProxyFolder ( ) )
104104 {
@@ -119,7 +119,7 @@ private MainViewModel(IWindowManager windowManager, IEventAggregator eventAggreg
119119 LocalizationEx . GetUiString ( "global_ipv6_disabled" , Thread . CurrentThread . CurrentCulture ) ) ;
120120 }
121121
122- _resolvers = new ObservableCollection < DnsCryptProxyEntry > ( ) ;
122+ _resolvers = new List < DnsCryptProxyEntry > ( ) ;
123123 _updateResolverListOnStart = _userData . UpdateResolverListOnStart ;
124124 _isWorkingOnPrimaryService = false ;
125125 _isWorkingOnSecondaryService = false ;
@@ -355,7 +355,7 @@ public bool IsOverlayVisible
355355 /// <summary>
356356 /// The list of loaded resolvers.
357357 /// </summary>
358- public ObservableCollection < DnsCryptProxyEntry > Resolvers
358+ public List < DnsCryptProxyEntry > Resolvers
359359 {
360360 get { return _resolvers ; }
361361 set
@@ -852,31 +852,31 @@ public async void AnalyseResolvers()
852852 try
853853 {
854854 IsAnalysing = true ;
855+ var tmpResolvers = new List < DnsCryptProxyEntry > ( ) ;
855856 await Task . Run ( ( ) =>
856857 {
857- var tmpResolvers = _resolvers . ToList ( ) ;
858- for ( var r = 0 ; r < tmpResolvers . Count ; r ++ )
858+ for ( var r = 0 ; r < _resolvers . Count ; r ++ )
859859 {
860- var dnsCryptProxyEntryExtra = AnalyseProxy . Analyse ( tmpResolvers [ r ] ) ;
860+ var dnsCryptProxyEntryExtra = AnalyseProxy . Analyse ( _resolvers [ r ] ) ;
861861 if ( dnsCryptProxyEntryExtra != null )
862862 {
863- tmpResolvers [ r ] . Extra = dnsCryptProxyEntryExtra ;
864- if ( ! dnsCryptProxyEntryExtra . Succeeded )
863+ if ( dnsCryptProxyEntryExtra . Succeeded && ( dnsCryptProxyEntryExtra . ResponseTime > 0 ) )
865864 {
866- tmpResolvers . RemoveAt ( r ) ;
865+ var dnsCryptProxyEntry = _resolvers [ r ] ;
866+ dnsCryptProxyEntry . Extra = dnsCryptProxyEntryExtra ;
867+ tmpResolvers . Add ( dnsCryptProxyEntry ) ;
867868 }
868869 }
869870 }
870871 tmpResolvers . Sort ( ( a , b ) => a . Extra . ResponseTime . CompareTo ( b . Extra . ResponseTime ) ) ;
871- Resolvers = new ObservableCollection < DnsCryptProxyEntry > ( tmpResolvers ) ;
872872 } ) . ConfigureAwait ( false ) ;
873+ Resolvers = tmpResolvers ;
873874 IsAnalysing = false ;
874875 }
875876 catch ( Exception )
876877 {
877878 IsAnalysing = false ;
878879 }
879- NotifyOfPropertyChange ( ( ) => Resolvers ) ;
880880 }
881881
882882 #region Helper
@@ -1000,13 +1000,14 @@ await Task.Run(() =>
10001000 DnsCryptProxyListManager . ReadProxyList ( proxyList , proxyListSignature , _userData . UseIpv6 ) ;
10011001 if ( dnsProxyList != null && dnsProxyList . Any ( ) )
10021002 {
1003- Resolvers . Clear ( ) ;
1003+ var tmpResolvers = new List < DnsCryptProxyEntry > ( ) ;
10041004 foreach ( var dnsProxy in dnsProxyList )
10051005 {
10061006 if (
10071007 dnsProxy . ProviderPublicKey . Equals (
10081008 PrimaryDnsCryptProxyManager . DnsCryptProxy . Parameter . ProviderKey ) )
10091009 {
1010+
10101011 _primaryResolver = dnsProxy ;
10111012 // restore the local port
10121013 _primaryResolver . LocalPort = PrimaryDnsCryptProxyManager . DnsCryptProxy . Parameter . LocalPort ;
@@ -1017,8 +1018,9 @@ await Task.Run(() =>
10171018 {
10181019 _secondaryResolver = dnsProxy ;
10191020 }
1020- Resolvers . Add ( dnsProxy ) ;
1021+ tmpResolvers . Add ( dnsProxy ) ;
10211022 }
1023+ Resolvers = tmpResolvers ;
10221024 }
10231025 }
10241026 else
0 commit comments