@@ -147,74 +147,75 @@ protected FirmwarePackage(
147147 /// <param name="verbosity">VerbosityLevel to use when outputting progress and error messages.</param>
148148 /// <returns>List of <see cref="CloudSmithPackageDetail"/> with details on target firmware packages.</returns>
149149 public static List < CloudSmithPackageDetail > GetTargetList (
150- bool communityTargets ,
151- bool preview ,
152- SupportedPlatform ? platform ,
153- VerbosityLevel verbosity )
150+ bool communityTargets ,
151+ bool preview ,
152+ SupportedPlatform ? platform ,
153+ VerbosityLevel verbosity )
154154 {
155155 string repoName = communityTargets ? CommunityTargetsRepo : preview ? RefTargetsDevRepo : RefTargetsStableRepo ;
156156
157157 // NOTE: the query seems to be the opposite, it should be LESS THAN.
158158 // this has been reported to Cloudsmith and it's being checked. Maybe need to revisit this if changes are made in their API.
159159 // Because new stable releases are published on a regular basis and preview very rarely, we query for stable versions published in past month and preview versions published during the past 6 months.
160- string requestUri = $ "{ repoName } /?page_size=500&q=uploaded:'>{ ( preview ? "6" : "1" ) } month ago' { ( platform . HasValue ? "AND tag:" + platform . Value : "" ) } ";
160+ // This is a paged query with page size 100 to improve performance.
161+ string requestUri = $ "{ repoName } /?page_size=100&q=uploaded:'>{ ( preview ? "6" : "1" ) } month ago' { ( platform . HasValue ? "AND tag:" + platform . Value : "" ) } ";
161162
162163 List < CloudSmithPackageDetail > targetPackages = [ ] ;
164+ int page = 1 ;
165+ bool morePages = true ;
163166
164- if ( verbosity > VerbosityLevel . Normal )
167+ while ( morePages )
165168 {
166- OutputWriter . ForegroundColor = ConsoleColor . White ;
167-
168- OutputWriter . Write ( $ "Listing { platform } targets from '{ repoName } ' repository") ;
169-
170- if ( ! communityTargets )
169+ if ( verbosity > VerbosityLevel . Normal )
171170 {
172- if ( preview )
173- {
174- OutputWriter . Write ( " [PREVIEW]" ) ;
175- }
176- else
171+ OutputWriter . ForegroundColor = ConsoleColor . White ;
172+ OutputWriter . Write ( $ "Listing { platform } targets from '{ repoName } ' repository, page { page } ...") ;
173+
174+ if ( ! communityTargets )
177175 {
178- OutputWriter . Write ( " [STABLE]" ) ;
176+ if ( preview )
177+ {
178+ OutputWriter . Write ( " [PREVIEW]" ) ;
179+ }
180+ else
181+ {
182+ OutputWriter . Write ( " [STABLE]" ) ;
183+ }
179184 }
180- }
181185
182- OutputWriter . WriteLine ( "..." ) ;
183- }
184-
185- HttpResponseMessage response = s_cloudsmithClient . GetAsync ( requestUri ) . GetAwaiter ( ) . GetResult ( ) ;
186+ OutputWriter . WriteLine ( "..." ) ;
187+ }
186188
187- string responseBody = response . Content . ReadAsStringAsync ( ) . GetAwaiter ( ) . GetResult ( ) ;
189+ HttpResponseMessage response = s_cloudsmithClient . GetAsync ( $ "{ requestUri } &page={ page } ") . GetAwaiter ( ) . GetResult ( ) ;
190+ string responseBody = response . Content . ReadAsStringAsync ( ) . GetAwaiter ( ) . GetResult ( ) ;
188191
189- // check for empty array
190- if ( responseBody == "[]" )
191- {
192- if ( verbosity > VerbosityLevel . Quiet )
192+ if ( responseBody == "[]" || responseBody . Contains ( "\" Invalid page.\" " ) )
193193 {
194- OutputWriter . WriteLine ( "" ) ;
194+ morePages = false ;
195+ continue ;
195196 }
196197
197- // can't find this target
198- return targetPackages ;
198+ var options = new JsonSerializerOptions
199+ {
200+ PropertyNameCaseInsensitive = true ,
201+ } ;
202+
203+ List < CloudSmithPackageDetailJson > deserializedPackages = JsonSerializer . Deserialize < List < CloudSmithPackageDetailJson > > ( responseBody , options ) ;
204+ targetPackages . AddRange ( from p in deserializedPackages
205+ select new CloudSmithPackageDetail ( )
206+ {
207+ Name = p . Name ,
208+ Version = p . Version ,
209+ Platform = p . Tags ? . Info is null
210+ ? null
211+ : ( from t in p . Tags . Info
212+ where s_supportedPlatforms . Contains ( t )
213+ select t ) . FirstOrDefault ( ) ,
214+ } ) ;
215+
216+ page ++ ;
199217 }
200218
201- var options = new JsonSerializerOptions
202- {
203- PropertyNameCaseInsensitive = true ,
204- } ;
205-
206- List < CloudSmithPackageDetailJson > deserializedPackages = JsonSerializer . Deserialize < List < CloudSmithPackageDetailJson > > ( responseBody , options ) ;
207- targetPackages . AddRange ( from p in deserializedPackages
208- select new CloudSmithPackageDetail ( )
209- {
210- Name = p . Name ,
211- Version = p . Version ,
212- Platform = p . Tags ? . Info is null
213- ? null
214- : ( from t in p . Tags . Info
215- where s_supportedPlatforms . Contains ( t )
216- select t ) . FirstOrDefault ( ) ,
217- } ) ;
218219 return targetPackages ;
219220 }
220221
0 commit comments