mirror of
				https://github.com/ImranR98/Obtainium.git
				synced 2025-11-03 23:03:29 +01:00 
			
		
		
		
	Enable arch-based auto-filter for intermediate HTML links (#2162)
This commit is contained in:
		@@ -212,6 +212,10 @@ class HTML extends AppSource {
 | 
			
		||||
          required: true,
 | 
			
		||||
          additionalValidators: [(value) => regExValidator(value)])
 | 
			
		||||
    ],
 | 
			
		||||
    [
 | 
			
		||||
      GeneratedFormSwitch('autoApkFilterByArch',
 | 
			
		||||
          label: tr('autoApkFilterByArch'), defaultValue: false)
 | 
			
		||||
    ],
 | 
			
		||||
  ];
 | 
			
		||||
  HTML() {
 | 
			
		||||
    additionalSourceAppSpecificSettingFormItems = [
 | 
			
		||||
@@ -315,6 +319,10 @@ class HTML extends AppSource {
 | 
			
		||||
      if (intLinks.isEmpty) {
 | 
			
		||||
        throw NoReleasesError(note: currentUrl);
 | 
			
		||||
      } else {
 | 
			
		||||
        if (additionalSettings['intermediateLink'][i]['autoApkFilterByArch'] ==
 | 
			
		||||
            true) {
 | 
			
		||||
          intLinks = await filterApksByArch(intLinks);
 | 
			
		||||
        }
 | 
			
		||||
        currentUrl = intLinks.last.key;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -474,6 +474,23 @@ List<MapEntry<String, String>> getApkUrlsFromUrls(List<String> urls) =>
 | 
			
		||||
      return MapEntry(apkSegs.isNotEmpty ? apkSegs.last : segments.last, e);
 | 
			
		||||
    }).toList();
 | 
			
		||||
 | 
			
		||||
Future<List<MapEntry<String, String>>> filterApksByArch(
 | 
			
		||||
    List<MapEntry<String, String>> apkUrls) async {
 | 
			
		||||
  if (apkUrls.length > 1) {
 | 
			
		||||
    var abis = (await DeviceInfoPlugin().androidInfo).supportedAbis;
 | 
			
		||||
    for (var abi in abis) {
 | 
			
		||||
      var urls2 = apkUrls
 | 
			
		||||
          .where((element) => RegExp('.*$abi.*').hasMatch(element.key))
 | 
			
		||||
          .toList();
 | 
			
		||||
      if (urls2.isNotEmpty && urls2.length < apkUrls.length) {
 | 
			
		||||
        apkUrls = urls2;
 | 
			
		||||
        break;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  return apkUrls;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
getSourceRegex(List<String> hosts) {
 | 
			
		||||
  return '(${hosts.join('|').replaceAll('.', '\\.')})';
 | 
			
		||||
}
 | 
			
		||||
@@ -984,18 +1001,8 @@ class SourceProvider {
 | 
			
		||||
    if (apk.apkUrls.isEmpty && !trackOnly) {
 | 
			
		||||
      throw NoAPKError();
 | 
			
		||||
    }
 | 
			
		||||
    if (apk.apkUrls.length > 1 &&
 | 
			
		||||
        additionalSettings['autoApkFilterByArch'] == true) {
 | 
			
		||||
      var abis = (await DeviceInfoPlugin().androidInfo).supportedAbis;
 | 
			
		||||
      for (var abi in abis) {
 | 
			
		||||
        var urls2 = apk.apkUrls
 | 
			
		||||
            .where((element) => RegExp('.*$abi.*').hasMatch(element.key))
 | 
			
		||||
            .toList();
 | 
			
		||||
        if (urls2.isNotEmpty && urls2.length < apk.apkUrls.length) {
 | 
			
		||||
          apk.apkUrls = urls2;
 | 
			
		||||
          break;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    if (additionalSettings['autoApkFilterByArch'] == true) {
 | 
			
		||||
      apk.apkUrls = await filterApksByArch(apk.apkUrls);
 | 
			
		||||
    }
 | 
			
		||||
    var name = currentApp != null ? currentApp.name.trim() : '';
 | 
			
		||||
    name = name.isNotEmpty ? name : apk.names.name;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user