Enable arch-based auto-filter for intermediate HTML links (#2162)

This commit is contained in:
Imran Remtulla
2025-03-07 16:45:32 -05:00
parent 6c6f256976
commit 044bd7f8a0
2 changed files with 27 additions and 12 deletions

View File

@ -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;
}
}

View File

@ -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;