@@ -39,61 +39,72 @@ public bool HasUpdates()
3939
4040 /// <summary>
4141 /// Retrieves info about the individual updates.
42+ /// Synchronous wrapper; do not call from the UI thread. Prefer <see cref="GetUpdateInfoAsync"/>.
4243 /// </summary>
4344 /// <returns></returns>
44- public ModUpdate [ ] GetUpdateInfo ( )
45+ public ModUpdate [ ] GetUpdateInfo ( ) => Task . Run ( GetUpdateInfoAsync ) . GetAwaiter ( ) . GetResult ( ) ;
46+
47+ /// <summary>
48+ /// Retrieves info about the individual updates without blocking the calling thread.
49+ /// </summary>
50+ /// <returns></returns>
51+ public async Task < ModUpdate [ ] > GetUpdateInfoAsync ( )
4552 {
4653 if ( _updates != null )
4754 return _updates ;
4855
49- _updates = new ModUpdate [ ManagerModResultPairs . Count ] ;
50- Task . Run ( async ( ) =>
56+ var updates = new ModUpdate [ ManagerModResultPairs . Count ] ;
57+ for ( var x = 0 ; x < ManagerModResultPairs . Count ; x ++ )
5158 {
52- for ( var x = 0 ; x < ManagerModResultPairs . Count ; x ++ )
59+ var resultPairs = ManagerModResultPairs [ x ] ;
60+ var modName = resultPairs . ModTuple . Config . ModName ;
61+ var modId = resultPairs . ModTuple . Config . ModId ;
62+ var oldVersion = resultPairs . ModTuple . Config . ModVersion ;
63+ var newVersion = resultPairs . Result . LastVersion ;
64+ var resolver = resultPairs . Manager . Resolver ;
65+ var updateSize = ( long ) 0 ;
66+ string ? changelog = null ;
67+
68+ if ( resolver is IPackageResolverDownloadSize hasDownloadSize )
5369 {
54- var resultPairs = ManagerModResultPairs [ x ] ;
55- var modName = resultPairs . ModTuple . Config . ModName ;
56- var modId = resultPairs . ModTuple . Config . ModId ;
57- var oldVersion = resultPairs . ModTuple . Config . ModVersion ;
58- var newVersion = resultPairs . Result . LastVersion ;
59- var resolver = ( ( IPackageResolverDownloadSize ) resultPairs . Manager . Resolver ) ;
60- var updateSize = ( long ) 0 ;
61- string ? changelog = null ;
62-
6370 try
6471 {
65- updateSize = await resolver . GetDownloadFileSizeAsync ( newVersion ! , resultPairs . ModTuple . GetVerificationInfo ( ) ) ;
72+ updateSize = await hasDownloadSize . GetDownloadFileSizeAsync ( newVersion ! , resultPairs . ModTuple . GetVerificationInfo ( ) ) . ConfigureAwait ( false ) ;
6673 }
6774 catch ( Exception ) { /* Ignored */ }
75+ }
6876
69- // Get changelog from supported resolver.
70- if ( resolver is IPackageResolverGetLatestReleaseMetadata getMetadata )
77+ // Get changelog from supported resolver.
78+ if ( resolver is IPackageResolverGetLatestReleaseMetadata getMetadata )
79+ {
80+ try
7181 {
72- try
73- {
74- var releaseMetadata = await getMetadata . GetReleaseMetadataAsync ( default ) ;
75- var extraData = releaseMetadata ? . GetExtraData < ReleaseMetadataExtraData > ( ) ;
76- if ( extraData != null )
77- changelog = extraData . Changelog ;
78- }
79- catch ( Exception ) { /* Ignored */ }
82+ var releaseMetadata = await getMetadata . GetReleaseMetadataAsync ( default ) . ConfigureAwait ( false ) ;
83+ var extraData = releaseMetadata ? . GetExtraData < ReleaseMetadataExtraData > ( ) ;
84+ if ( extraData != null )
85+ changelog = extraData . Changelog ;
8086 }
87+ catch ( Exception ) { /* Ignored */ }
88+ }
8189
82- // NuGet has special case, since it doesn't support release metadata but supports changelogs in nuspec.
83- if ( string . IsNullOrEmpty ( changelog ) && resolver is NuGetUpdateResolver nugetResolver )
90+ // NuGet has special case, since it doesn't support release metadata but supports changelogs in nuspec.
91+ if ( string . IsNullOrEmpty ( changelog ) && resolver is NuGetUpdateResolver nugetResolver )
92+ {
93+ try
8494 {
8595 var copiedSettings = nugetResolver . GetResolverSettings ( ) ;
8696 var repository = NugetRepository . FromSourceUrl ( copiedSettings . NugetRepository ! . SourceUrl ) ;
87- var reader = await repository . DownloadNuspecReaderAsync ( new PackageIdentity ( copiedSettings . PackageId , newVersion ! ) ) ;
97+ var reader = await repository . DownloadNuspecReaderAsync ( new PackageIdentity ( copiedSettings . PackageId , newVersion ! ) ) . ConfigureAwait ( false ) ;
8898 if ( reader != null )
8999 changelog = reader ? . GetReleaseNotes ( ) ;
90100 }
91-
92- _updates [ x ] = new ModUpdate ( modId , NuGetVersion . Parse ( oldVersion ) , newVersion ! , updateSize , changelog , modName ) ;
101+ catch ( Exception ) { /* Ignored */ }
93102 }
94103
95- } ) . Wait ( ) ;
104+ updates [ x ] = new ModUpdate ( modId , NuGetVersion . Parse ( oldVersion ) , newVersion ! , updateSize , changelog , modName ) ;
105+ }
96106
107+ _updates = updates ;
97108 return _updates ;
98109 }
99110
0 commit comments