@@ -44,27 +44,39 @@ public static async Task<string> Scan()
4444 return result ;
4545 }
4646
47- public static Updates [ ] Parse ( string items ) // object sender, DownloadStringCompletedEventArgs e)
47+ public static Updates [ ] Parse ( string items )
4848 {
4949 isDownloadingUnityList = false ;
5050 //SetStatus("Downloading list of Unity versions ... done");
5151 var receivedList = items . Split ( new [ ] { Environment . NewLine } , StringSplitOptions . None ) ;
5252 if ( receivedList == null && receivedList . Length < 1 ) return null ;
5353 Array . Reverse ( receivedList ) ;
54- var updates = new List < Updates > ( ) ;
55- // parse into data, TODO remove duplicates
54+ var releases = new Dictionary < string , Updates > ( ) ;
55+ // parse into data
56+ string prevVersion = null ;
5657 for ( int i = 0 , len = receivedList . Length ; i < len ; i ++ )
5758 {
5859 var row = receivedList [ i ] . Split ( ',' ) ;
5960 var versionTemp = row [ 6 ] . Trim ( '"' ) ;
61+
6062 if ( versionTemp . Length < 1 ) continue ;
61- var u = new Updates ( ) ;
62- u . ReleaseDate = DateTime . ParseExact ( row [ 3 ] , "MM/dd/yyyy" , CultureInfo . InvariantCulture ) ;
63- u . Version = versionTemp ;
64- updates . Add ( u ) ;
63+ if ( prevVersion == versionTemp ) continue ;
64+
65+ if ( releases . ContainsKey ( versionTemp ) == false )
66+ {
67+ var u = new Updates ( ) ;
68+ u . ReleaseDate = DateTime . ParseExact ( row [ 3 ] , "MM/dd/yyyy" , CultureInfo . InvariantCulture ) ;
69+ u . Version = versionTemp ;
70+ releases . Add ( versionTemp , u ) ;
71+ }
72+
73+ prevVersion = versionTemp ;
6574 }
6675
67- return updates . ToArray ( ) ;
76+ // convert to array
77+ var results = new Updates [ releases . Count ] ;
78+ releases . Values . CopyTo ( results , 0 ) ;
79+ return results ;
6880 }
6981
7082 }
0 commit comments