@@ -353,12 +353,38 @@ static void runSafe(Runnable runnable) {
353353
354354 static Stream <IOSVersion > getFirmwareList (String deviceIdentifier ) throws IOException {
355355 String url = "https://api.ipsw.me/v4/device/" + deviceIdentifier ;
356- return createVersionStream (Network .makeRequest (url ).getAsJsonObject ().getAsJsonArray ("firmwares" ));
356+ try {
357+ return createVersionStream (Network .makeRequest (url ).getAsJsonObject ().getAsJsonArray ("firmwares" ));
358+ } catch (IOException e ) {
359+ try {
360+ return getBetaHubList (deviceIdentifier , false );
361+ } catch (Exception ex ) {
362+ e .addSuppressed (ex );
363+ throw e ;
364+ }
365+ }
357366 }
358367
359368 static Stream <IOSVersion > getBetaList (String deviceIdentifier ) throws IOException {
360- String url = "https://api.m1sta.xyz/betas/" + deviceIdentifier ;
361- return createVersionStream (Network .makeRequest (url ).getAsJsonArray ());
369+ try {
370+ String url = "https://api.m1sta.xyz/betas/" + deviceIdentifier ;
371+ return createVersionStream (Network .makeRequest (url ).getAsJsonArray ());
372+ } catch (Exception e ) {
373+ try {
374+ return getBetaHubList (deviceIdentifier , true );
375+ } catch (Exception ex ) {
376+ e .addSuppressed (ex );
377+ throw e ;
378+ }
379+ }
380+ }
381+
382+ static Stream <IOSVersion > getBetaHubList (String deviceIdentifier , boolean betas ) throws IOException {
383+ String url = "https://www.betahub.cn/api/apple/firmwares/" + deviceIdentifier + "?type=" + (betas ? 2 : 1 );
384+ JsonArray firmwares = Network .makeRequest (url ).getAsJsonObject ().getAsJsonArray ("firmwares" );
385+ return StreamSupport .stream (firmwares .spliterator (), false )
386+ .map (JsonElement ::getAsJsonObject )
387+ .map (o -> new IOSVersion (o .get ("version" ).getAsString (), o .get ("build_id" ).getAsString (), o .get ("url" ).getAsString (), o .get ("signing" ).getAsInt () == 1 ));
362388 }
363389
364390 private static Stream <IOSVersion > createVersionStream (JsonArray array ) {
@@ -425,6 +451,7 @@ private static void extractManifestFromZip(String ipswUrl, Path extractTo) throw
425451 * <p>
426452 * Maybe replace with https://github.com/patrickfav/bytes-java ?
427453 */
454+ @ SuppressWarnings ("JavadocLinkAsPlainText" )
428455 public static String bytesToHex (byte [] byteArray , ByteOrder byteOrder ) {
429456 final char [] lookup = new char []{0x30 , 0x31 , 0x32 , 0x33 , 0x34 , 0x35 , 0x36 , 0x37 , 0x38 , 0x39 , 0x61 , 0x62 , 0x63 , 0x64 , 0x65 , 0x66 };
430457
0 commit comments