mirror of
https://github.com/ImranR98/Obtainium.git
synced 2025-07-13 13:26:43 +02: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