mirror of
https://github.com/ImranR98/Obtainium.git
synced 2025-08-01 05:10:15 +02:00
Support Direct APK Links (#1292)
This commit is contained in:
@@ -292,6 +292,10 @@
|
|||||||
"useVersionCodeAsOSVersion": "Use app versionCode as OS-detected version",
|
"useVersionCodeAsOSVersion": "Use app versionCode as OS-detected version",
|
||||||
"requestHeader": "Request header",
|
"requestHeader": "Request header",
|
||||||
"useLatestAssetDateAsReleaseDate": "Use latest asset upload as release date",
|
"useLatestAssetDateAsReleaseDate": "Use latest asset upload as release date",
|
||||||
|
"defaultPseudoVersioningMethod": "Default Pseudo-Versioning Method",
|
||||||
|
"partialAPKHash": "Partial APK Hash",
|
||||||
|
"APKLinkHash": "APK Link Hash",
|
||||||
|
"directAPKLink": "Direct APK Link",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Želite li ukloniti aplikaciju?",
|
"one": "Želite li ukloniti aplikaciju?",
|
||||||
"other": "Želite li ukloniti aplikacije?"
|
"other": "Želite li ukloniti aplikacije?"
|
||||||
|
@@ -292,6 +292,10 @@
|
|||||||
"useVersionCodeAsOSVersion": "Use app versionCode as OS-detected version",
|
"useVersionCodeAsOSVersion": "Use app versionCode as OS-detected version",
|
||||||
"requestHeader": "Request header",
|
"requestHeader": "Request header",
|
||||||
"useLatestAssetDateAsReleaseDate": "Use latest asset upload as release date",
|
"useLatestAssetDateAsReleaseDate": "Use latest asset upload as release date",
|
||||||
|
"defaultPseudoVersioningMethod": "Default Pseudo-Versioning Method",
|
||||||
|
"partialAPKHash": "Partial APK Hash",
|
||||||
|
"APKLinkHash": "APK Link Hash",
|
||||||
|
"directAPKLink": "Direct APK Link",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Odstranit Apku?",
|
"one": "Odstranit Apku?",
|
||||||
"other": "Odstranit Apky?"
|
"other": "Odstranit Apky?"
|
||||||
|
@@ -294,6 +294,10 @@
|
|||||||
"useVersionCodeAsOSVersion": "Verwende die Appversion als erkannte Version vom Betriebssystem",
|
"useVersionCodeAsOSVersion": "Verwende die Appversion als erkannte Version vom Betriebssystem",
|
||||||
"requestHeader": "Request Header",
|
"requestHeader": "Request Header",
|
||||||
"useLatestAssetDateAsReleaseDate": "Den letzten Asset-Upload als Veröffentlichungsdatum verwenden",
|
"useLatestAssetDateAsReleaseDate": "Den letzten Asset-Upload als Veröffentlichungsdatum verwenden",
|
||||||
|
"defaultPseudoVersioningMethod": "Default Pseudo-Versioning Method",
|
||||||
|
"partialAPKHash": "Partial APK Hash",
|
||||||
|
"APKLinkHash": "APK Link Hash",
|
||||||
|
"directAPKLink": "Direct APK Link",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "App entfernen?",
|
"one": "App entfernen?",
|
||||||
"other": "Apps entfernen?"
|
"other": "Apps entfernen?"
|
||||||
|
@@ -294,6 +294,10 @@
|
|||||||
"useVersionCodeAsOSVersion": "Use app versionCode as OS-detected version",
|
"useVersionCodeAsOSVersion": "Use app versionCode as OS-detected version",
|
||||||
"requestHeader": "Request header",
|
"requestHeader": "Request header",
|
||||||
"useLatestAssetDateAsReleaseDate": "Use latest asset upload as release date",
|
"useLatestAssetDateAsReleaseDate": "Use latest asset upload as release date",
|
||||||
|
"defaultPseudoVersioningMethod": "Default Pseudo-Versioning Method",
|
||||||
|
"partialAPKHash": "Partial APK Hash",
|
||||||
|
"APKLinkHash": "APK Link Hash",
|
||||||
|
"directAPKLink": "Direct APK Link",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Remove App?",
|
"one": "Remove App?",
|
||||||
"other": "Remove Apps?"
|
"other": "Remove Apps?"
|
||||||
|
@@ -292,6 +292,10 @@
|
|||||||
"useVersionCodeAsOSVersion": "Use app versionCode as OS-detected version",
|
"useVersionCodeAsOSVersion": "Use app versionCode as OS-detected version",
|
||||||
"requestHeader": "Request header",
|
"requestHeader": "Request header",
|
||||||
"useLatestAssetDateAsReleaseDate": "Use latest asset upload as release date",
|
"useLatestAssetDateAsReleaseDate": "Use latest asset upload as release date",
|
||||||
|
"defaultPseudoVersioningMethod": "Default Pseudo-Versioning Method",
|
||||||
|
"partialAPKHash": "Partial APK Hash",
|
||||||
|
"APKLinkHash": "APK Link Hash",
|
||||||
|
"directAPKLink": "Direct APK Link",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "¿Eliminar Aplicación?",
|
"one": "¿Eliminar Aplicación?",
|
||||||
"other": "¿Eliminar Aplicaciones?"
|
"other": "¿Eliminar Aplicaciones?"
|
||||||
|
@@ -292,6 +292,10 @@
|
|||||||
"useVersionCodeAsOSVersion": "استفاده کد نسخه برنامه به جای نسخه شناسایی شده توسط سیستم عامل استفاده کنید",
|
"useVersionCodeAsOSVersion": "استفاده کد نسخه برنامه به جای نسخه شناسایی شده توسط سیستم عامل استفاده کنید",
|
||||||
"requestHeader": "درخواست سطر بالایی",
|
"requestHeader": "درخواست سطر بالایی",
|
||||||
"useLatestAssetDateAsReleaseDate": "Use latest asset upload as release date",
|
"useLatestAssetDateAsReleaseDate": "Use latest asset upload as release date",
|
||||||
|
"defaultPseudoVersioningMethod": "Default Pseudo-Versioning Method",
|
||||||
|
"partialAPKHash": "Partial APK Hash",
|
||||||
|
"APKLinkHash": "APK Link Hash",
|
||||||
|
"directAPKLink": "Direct APK Link",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "برنامه حذف شود؟",
|
"one": "برنامه حذف شود؟",
|
||||||
"other": "برنامه ها حذف شوند؟"
|
"other": "برنامه ها حذف شوند؟"
|
||||||
|
@@ -292,6 +292,10 @@
|
|||||||
"useVersionCodeAsOSVersion": "Use app versionCode as OS-detected version",
|
"useVersionCodeAsOSVersion": "Use app versionCode as OS-detected version",
|
||||||
"requestHeader": "Request header",
|
"requestHeader": "Request header",
|
||||||
"useLatestAssetDateAsReleaseDate": "Use latest asset upload as release date",
|
"useLatestAssetDateAsReleaseDate": "Use latest asset upload as release date",
|
||||||
|
"defaultPseudoVersioningMethod": "Default Pseudo-Versioning Method",
|
||||||
|
"partialAPKHash": "Partial APK Hash",
|
||||||
|
"APKLinkHash": "APK Link Hash",
|
||||||
|
"directAPKLink": "Direct APK Link",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Supprimer l'application ?",
|
"one": "Supprimer l'application ?",
|
||||||
"other": "Supprimer les applications ?"
|
"other": "Supprimer les applications ?"
|
||||||
|
@@ -292,6 +292,10 @@
|
|||||||
"useVersionCodeAsOSVersion": "Az app versionCode használata a rendszer által észlelt verzióként",
|
"useVersionCodeAsOSVersion": "Az app versionCode használata a rendszer által észlelt verzióként",
|
||||||
"requestHeader": "Kérelem fejléc",
|
"requestHeader": "Kérelem fejléc",
|
||||||
"useLatestAssetDateAsReleaseDate": "Use latest asset upload as release date",
|
"useLatestAssetDateAsReleaseDate": "Use latest asset upload as release date",
|
||||||
|
"defaultPseudoVersioningMethod": "Default Pseudo-Versioning Method",
|
||||||
|
"partialAPKHash": "Partial APK Hash",
|
||||||
|
"APKLinkHash": "APK Link Hash",
|
||||||
|
"directAPKLink": "Direct APK Link",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Eltávolítja az alkalmazást?",
|
"one": "Eltávolítja az alkalmazást?",
|
||||||
"other": "Eltávolítja az alkalmazást?"
|
"other": "Eltávolítja az alkalmazást?"
|
||||||
|
@@ -292,6 +292,10 @@
|
|||||||
"useVersionCodeAsOSVersion": "Use app versionCode as OS-detected version",
|
"useVersionCodeAsOSVersion": "Use app versionCode as OS-detected version",
|
||||||
"requestHeader": "Request header",
|
"requestHeader": "Request header",
|
||||||
"useLatestAssetDateAsReleaseDate": "Use latest asset upload as release date",
|
"useLatestAssetDateAsReleaseDate": "Use latest asset upload as release date",
|
||||||
|
"defaultPseudoVersioningMethod": "Default Pseudo-Versioning Method",
|
||||||
|
"partialAPKHash": "Partial APK Hash",
|
||||||
|
"APKLinkHash": "APK Link Hash",
|
||||||
|
"directAPKLink": "Direct APK Link",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Rimuovere l'app?",
|
"one": "Rimuovere l'app?",
|
||||||
"other": "Rimuovere le app?"
|
"other": "Rimuovere le app?"
|
||||||
|
@@ -294,6 +294,10 @@
|
|||||||
"useVersionCodeAsOSVersion": "Use app versionCode as OS-detected version",
|
"useVersionCodeAsOSVersion": "Use app versionCode as OS-detected version",
|
||||||
"requestHeader": "Request header",
|
"requestHeader": "Request header",
|
||||||
"useLatestAssetDateAsReleaseDate": "Use latest asset upload as release date",
|
"useLatestAssetDateAsReleaseDate": "Use latest asset upload as release date",
|
||||||
|
"defaultPseudoVersioningMethod": "Default Pseudo-Versioning Method",
|
||||||
|
"partialAPKHash": "Partial APK Hash",
|
||||||
|
"APKLinkHash": "APK Link Hash",
|
||||||
|
"directAPKLink": "Direct APK Link",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "アプリを削除しますか?",
|
"one": "アプリを削除しますか?",
|
||||||
"other": "アプリを削除しますか?"
|
"other": "アプリを削除しますか?"
|
||||||
|
@@ -292,6 +292,10 @@
|
|||||||
"useVersionCodeAsOSVersion": "Use app versionCode as OS-detected version",
|
"useVersionCodeAsOSVersion": "Use app versionCode as OS-detected version",
|
||||||
"requestHeader": "Request header",
|
"requestHeader": "Request header",
|
||||||
"useLatestAssetDateAsReleaseDate": "Use latest asset upload as release date",
|
"useLatestAssetDateAsReleaseDate": "Use latest asset upload as release date",
|
||||||
|
"defaultPseudoVersioningMethod": "Default Pseudo-Versioning Method",
|
||||||
|
"partialAPKHash": "Partial APK Hash",
|
||||||
|
"APKLinkHash": "APK Link Hash",
|
||||||
|
"directAPKLink": "Direct APK Link",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "App verwijderen?",
|
"one": "App verwijderen?",
|
||||||
"other": "Apps verwijderen?"
|
"other": "Apps verwijderen?"
|
||||||
|
@@ -292,6 +292,10 @@
|
|||||||
"useVersionCodeAsOSVersion": "Use app versionCode as OS-detected version",
|
"useVersionCodeAsOSVersion": "Use app versionCode as OS-detected version",
|
||||||
"requestHeader": "Request header",
|
"requestHeader": "Request header",
|
||||||
"useLatestAssetDateAsReleaseDate": "Use latest asset upload as release date",
|
"useLatestAssetDateAsReleaseDate": "Use latest asset upload as release date",
|
||||||
|
"defaultPseudoVersioningMethod": "Default Pseudo-Versioning Method",
|
||||||
|
"partialAPKHash": "Partial APK Hash",
|
||||||
|
"APKLinkHash": "APK Link Hash",
|
||||||
|
"directAPKLink": "Direct APK Link",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Usunąć aplikację?",
|
"one": "Usunąć aplikację?",
|
||||||
"few": "Usunąć aplikacje?",
|
"few": "Usunąć aplikacje?",
|
||||||
|
@@ -292,6 +292,10 @@
|
|||||||
"useVersionCodeAsOSVersion": "Use app versionCode as OS-detected version",
|
"useVersionCodeAsOSVersion": "Use app versionCode as OS-detected version",
|
||||||
"requestHeader": "Request header",
|
"requestHeader": "Request header",
|
||||||
"useLatestAssetDateAsReleaseDate": "Use latest asset upload as release date",
|
"useLatestAssetDateAsReleaseDate": "Use latest asset upload as release date",
|
||||||
|
"defaultPseudoVersioningMethod": "Default Pseudo-Versioning Method",
|
||||||
|
"partialAPKHash": "Partial APK Hash",
|
||||||
|
"APKLinkHash": "APK Link Hash",
|
||||||
|
"directAPKLink": "Direct APK Link",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Remover aplicativo?",
|
"one": "Remover aplicativo?",
|
||||||
"other": "Remover aplicativos?"
|
"other": "Remover aplicativos?"
|
||||||
|
@@ -294,6 +294,10 @@
|
|||||||
"useVersionCodeAsOSVersion": "Use app versionCode as OS-detected version",
|
"useVersionCodeAsOSVersion": "Use app versionCode as OS-detected version",
|
||||||
"requestHeader": "Request header",
|
"requestHeader": "Request header",
|
||||||
"useLatestAssetDateAsReleaseDate": "Use latest asset upload as release date",
|
"useLatestAssetDateAsReleaseDate": "Use latest asset upload as release date",
|
||||||
|
"defaultPseudoVersioningMethod": "Default Pseudo-Versioning Method",
|
||||||
|
"partialAPKHash": "Partial APK Hash",
|
||||||
|
"APKLinkHash": "APK Link Hash",
|
||||||
|
"directAPKLink": "Direct APK Link",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Удалить приложение?",
|
"one": "Удалить приложение?",
|
||||||
"other": "Удалить приложения?"
|
"other": "Удалить приложения?"
|
||||||
|
@@ -278,6 +278,10 @@
|
|||||||
"useVersionCodeAsOSVersion": "Use app versionCode as OS-detected version",
|
"useVersionCodeAsOSVersion": "Use app versionCode as OS-detected version",
|
||||||
"requestHeader": "Request header",
|
"requestHeader": "Request header",
|
||||||
"useLatestAssetDateAsReleaseDate": "Use latest asset upload as release date",
|
"useLatestAssetDateAsReleaseDate": "Use latest asset upload as release date",
|
||||||
|
"defaultPseudoVersioningMethod": "Default Pseudo-Versioning Method",
|
||||||
|
"partialAPKHash": "Partial APK Hash",
|
||||||
|
"APKLinkHash": "APK Link Hash",
|
||||||
|
"directAPKLink": "Direct APK Link",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Ta Bort App?",
|
"one": "Ta Bort App?",
|
||||||
"other": "Ta Bort Appar?"
|
"other": "Ta Bort Appar?"
|
||||||
|
@@ -292,6 +292,10 @@
|
|||||||
"useVersionCodeAsOSVersion": "Use app versionCode as OS-detected version",
|
"useVersionCodeAsOSVersion": "Use app versionCode as OS-detected version",
|
||||||
"requestHeader": "Request header",
|
"requestHeader": "Request header",
|
||||||
"useLatestAssetDateAsReleaseDate": "Use latest asset upload as release date",
|
"useLatestAssetDateAsReleaseDate": "Use latest asset upload as release date",
|
||||||
|
"defaultPseudoVersioningMethod": "Default Pseudo-Versioning Method",
|
||||||
|
"partialAPKHash": "Partial APK Hash",
|
||||||
|
"APKLinkHash": "APK Link Hash",
|
||||||
|
"directAPKLink": "Direct APK Link",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Uygulamayı Kaldır?",
|
"one": "Uygulamayı Kaldır?",
|
||||||
"other": "Uygulamaları Kaldır?"
|
"other": "Uygulamaları Kaldır?"
|
||||||
|
@@ -290,6 +290,10 @@
|
|||||||
"root": "Root",
|
"root": "Root",
|
||||||
"shizukuBinderNotFound": "Shizuku chưa khởi động",
|
"shizukuBinderNotFound": "Shizuku chưa khởi động",
|
||||||
"useLatestAssetDateAsReleaseDate": "Use latest asset upload as release date",
|
"useLatestAssetDateAsReleaseDate": "Use latest asset upload as release date",
|
||||||
|
"defaultPseudoVersioningMethod": "Default Pseudo-Versioning Method",
|
||||||
|
"partialAPKHash": "Partial APK Hash",
|
||||||
|
"APKLinkHash": "APK Link Hash",
|
||||||
|
"directAPKLink": "Direct APK Link",
|
||||||
"removeAppQuestion":{
|
"removeAppQuestion":{
|
||||||
"one": "Gỡ ứng dụng?",
|
"one": "Gỡ ứng dụng?",
|
||||||
"other": "Gỡ ứng dụng?"
|
"other": "Gỡ ứng dụng?"
|
||||||
|
@@ -294,6 +294,10 @@
|
|||||||
"useVersionCodeAsOSVersion": "Use app versionCode as OS-detected version",
|
"useVersionCodeAsOSVersion": "Use app versionCode as OS-detected version",
|
||||||
"requestHeader": "Request header",
|
"requestHeader": "Request header",
|
||||||
"useLatestAssetDateAsReleaseDate": "Use latest asset upload as release date",
|
"useLatestAssetDateAsReleaseDate": "Use latest asset upload as release date",
|
||||||
|
"defaultPseudoVersioningMethod": "Default Pseudo-Versioning Method",
|
||||||
|
"partialAPKHash": "Partial APK Hash",
|
||||||
|
"APKLinkHash": "APK Link Hash",
|
||||||
|
"directAPKLink": "Direct APK Link",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "是否删除应用?",
|
"one": "是否删除应用?",
|
||||||
"other": "是否删除应用?"
|
"other": "是否删除应用?"
|
||||||
|
44
lib/app_sources/directAPKLink.dart
Normal file
44
lib/app_sources/directAPKLink.dart
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
|
import 'package:obtainium/app_sources/html.dart';
|
||||||
|
import 'package:obtainium/providers/source_provider.dart';
|
||||||
|
|
||||||
|
class DirectAPKLink extends AppSource {
|
||||||
|
HTML html = HTML();
|
||||||
|
|
||||||
|
DirectAPKLink() {
|
||||||
|
neverAutoSelect = true;
|
||||||
|
name = tr('directAPKLink');
|
||||||
|
additionalSourceAppSpecificSettingFormItems = html
|
||||||
|
.additionalSourceAppSpecificSettingFormItems
|
||||||
|
.where((element) => element
|
||||||
|
.where((element) => element.key == 'requestHeader')
|
||||||
|
.isNotEmpty)
|
||||||
|
.toList();
|
||||||
|
excludeCommonSettingKeys = [
|
||||||
|
'versionExtractionRegEx',
|
||||||
|
'matchGroupToUse',
|
||||||
|
'versionDetection',
|
||||||
|
'useVersionCodeAsOSVersion',
|
||||||
|
'apkFilterRegEx',
|
||||||
|
'autoApkFilterByArch'
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<APKDetails> getLatestAPKDetails(
|
||||||
|
String standardUrl,
|
||||||
|
Map<String, dynamic> additionalSettings,
|
||||||
|
) async {
|
||||||
|
var additionalSettingsNew =
|
||||||
|
getDefaultValuesFromFormItems(html.combinedAppSpecificSettingFormItems);
|
||||||
|
for (var s in additionalSettings.keys) {
|
||||||
|
if (additionalSettingsNew.containsKey(s)) {
|
||||||
|
additionalSettingsNew[s] = additionalSettings[s];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
additionalSettingsNew['defaultPseudoVersioningMethod'] = 'partialAPKHash';
|
||||||
|
additionalSettingsNew['directAPKLink'] = true;
|
||||||
|
additionalSettings['versionDetection'] = false;
|
||||||
|
return html.getLatestAPKDetails(standardUrl, additionalSettingsNew);
|
||||||
|
}
|
||||||
|
}
|
@@ -108,11 +108,7 @@ class HTML extends AppSource {
|
|||||||
[
|
[
|
||||||
GeneratedFormSwitch('versionExtractWholePage',
|
GeneratedFormSwitch('versionExtractWholePage',
|
||||||
label: tr('versionExtractWholePage'))
|
label: tr('versionExtractWholePage'))
|
||||||
],
|
]
|
||||||
[
|
|
||||||
GeneratedFormSwitch('supportFixedAPKURL',
|
|
||||||
defaultValue: true, label: tr('supportFixedAPKURL')),
|
|
||||||
],
|
|
||||||
];
|
];
|
||||||
var commonFormItems = [
|
var commonFormItems = [
|
||||||
[GeneratedFormSwitch('filterByLinkText', label: tr('filterByLinkText'))],
|
[GeneratedFormSwitch('filterByLinkText', label: tr('filterByLinkText'))],
|
||||||
@@ -172,6 +168,16 @@ class HTML extends AppSource {
|
|||||||
'User-Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36'
|
'User-Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36'
|
||||||
}
|
}
|
||||||
])
|
])
|
||||||
|
],
|
||||||
|
[
|
||||||
|
GeneratedFormDropdown(
|
||||||
|
'defaultPseudoVersioningMethod',
|
||||||
|
[
|
||||||
|
MapEntry('partialAPKHash', tr('partialAPKHash')),
|
||||||
|
MapEntry('APKLinkHash', tr('APKLinkHash'))
|
||||||
|
],
|
||||||
|
label: tr('defaultPseudoVersioningMethod'),
|
||||||
|
defaultValue: 'partialAPKHash')
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@@ -286,17 +292,25 @@ class HTML extends AppSource {
|
|||||||
currentUrl = intLinks.last.key;
|
currentUrl = intLinks.last.key;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var uri = Uri.parse(currentUrl);
|
var uri = Uri.parse(currentUrl);
|
||||||
Response res = await sourceRequest(currentUrl, additionalSettings);
|
List<MapEntry<String, String>> links = [];
|
||||||
var links = await grabLinksCommon(res, additionalSettings);
|
String versionExtractionWholePageString = currentUrl;
|
||||||
|
if (additionalSettings['directAPKLink'] != true) {
|
||||||
|
Response res = await sourceRequest(currentUrl, additionalSettings);
|
||||||
|
versionExtractionWholePageString =
|
||||||
|
res.body.split('\r\n').join('\n').split('\n').join('\\n');
|
||||||
|
links = await grabLinksCommon(res, additionalSettings);
|
||||||
|
|
||||||
if ((additionalSettings['apkFilterRegEx'] as String?)?.isNotEmpty == true) {
|
if ((additionalSettings['apkFilterRegEx'] as String?)?.isNotEmpty ==
|
||||||
var reg = RegExp(additionalSettings['apkFilterRegEx']);
|
true) {
|
||||||
links = links.where((element) => reg.hasMatch(element.key)).toList();
|
var reg = RegExp(additionalSettings['apkFilterRegEx']);
|
||||||
}
|
links = links.where((element) => reg.hasMatch(element.key)).toList();
|
||||||
if (links.isEmpty) {
|
}
|
||||||
throw NoReleasesError();
|
if (links.isEmpty) {
|
||||||
|
throw NoReleasesError();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
links = [MapEntry(currentUrl, currentUrl)];
|
||||||
}
|
}
|
||||||
var rel = links.last.key;
|
var rel = links.last.key;
|
||||||
String? version;
|
String? version;
|
||||||
@@ -304,11 +318,12 @@ class HTML extends AppSource {
|
|||||||
additionalSettings['versionExtractionRegEx'] as String?,
|
additionalSettings['versionExtractionRegEx'] as String?,
|
||||||
additionalSettings['matchGroupToUse'] as String?,
|
additionalSettings['matchGroupToUse'] as String?,
|
||||||
additionalSettings['versionExtractWholePage'] == true
|
additionalSettings['versionExtractWholePage'] == true
|
||||||
? res.body.split('\r\n').join('\n').split('\n').join('\\n')
|
? versionExtractionWholePageString
|
||||||
: rel);
|
: rel);
|
||||||
version ??= additionalSettings['supportFixedAPKURL'] != true
|
version ??=
|
||||||
? rel.hashCode.toString()
|
additionalSettings['defaultPseudoVersioningMethod'] == 'APKLinkHash'
|
||||||
: (await checkPartialDownloadHashDynamc(rel)).toString();
|
? rel.hashCode.toString()
|
||||||
|
: (await checkPartialDownloadHashDynamc(rel)).toString();
|
||||||
return APKDetails(version, [rel].map((e) => MapEntry(e, e)).toList(),
|
return APKDetails(version, [rel].map((e) => MapEntry(e, e)).toList(),
|
||||||
AppNames(uri.host, tr('app')));
|
AppNames(uri.host, tr('app')));
|
||||||
}
|
}
|
||||||
|
@@ -11,6 +11,7 @@ import 'package:obtainium/app_sources/apkmirror.dart';
|
|||||||
import 'package:obtainium/app_sources/apkpure.dart';
|
import 'package:obtainium/app_sources/apkpure.dart';
|
||||||
import 'package:obtainium/app_sources/aptoide.dart';
|
import 'package:obtainium/app_sources/aptoide.dart';
|
||||||
import 'package:obtainium/app_sources/codeberg.dart';
|
import 'package:obtainium/app_sources/codeberg.dart';
|
||||||
|
import 'package:obtainium/app_sources/directAPKLink.dart';
|
||||||
import 'package:obtainium/app_sources/fdroid.dart';
|
import 'package:obtainium/app_sources/fdroid.dart';
|
||||||
import 'package:obtainium/app_sources/fdroidrepo.dart';
|
import 'package:obtainium/app_sources/fdroidrepo.dart';
|
||||||
import 'package:obtainium/app_sources/github.dart';
|
import 'package:obtainium/app_sources/github.dart';
|
||||||
@@ -112,6 +113,12 @@ appJSONCompatibilityModifiers(Map<String, dynamic> json) {
|
|||||||
additionalSettings['versionDetection'] = false;
|
additionalSettings['versionDetection'] = false;
|
||||||
additionalSettings['releaseDateAsVersion'] = true;
|
additionalSettings['releaseDateAsVersion'] = true;
|
||||||
}
|
}
|
||||||
|
// Convert bool style pseudo version method to dropdown style
|
||||||
|
if (originalAdditionalSettings['supportFixedAPKURL'] == true) {
|
||||||
|
additionalSettings['defaultPseudoVersioningMethod'] = 'partialAPKHash';
|
||||||
|
} else if (originalAdditionalSettings['supportFixedAPKURL'] == false) {
|
||||||
|
additionalSettings['defaultPseudoVersioningMethod'] = 'APKLinkHash';
|
||||||
|
}
|
||||||
// Ensure additionalSettings are correctly typed
|
// Ensure additionalSettings are correctly typed
|
||||||
for (var item in formItems) {
|
for (var item in formItems) {
|
||||||
if (additionalSettings[item.key] != null) {
|
if (additionalSettings[item.key] != null) {
|
||||||
@@ -391,6 +398,7 @@ abstract class AppSource {
|
|||||||
bool neverAutoSelect = false;
|
bool neverAutoSelect = false;
|
||||||
bool showReleaseDateAsVersionToggle = false;
|
bool showReleaseDateAsVersionToggle = false;
|
||||||
bool versionDetectionDisallowed = false;
|
bool versionDetectionDisallowed = false;
|
||||||
|
List<String> excludeCommonSettingKeys = [];
|
||||||
|
|
||||||
AppSource() {
|
AppSource() {
|
||||||
name = runtimeType.toString();
|
name = runtimeType.toString();
|
||||||
@@ -536,6 +544,13 @@ abstract class AppSource {
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
additionalAppSpecificSourceAgnosticSettingFormItemsNeverUseDirectly =
|
||||||
|
additionalAppSpecificSourceAgnosticSettingFormItemsNeverUseDirectly
|
||||||
|
.map((e) => e
|
||||||
|
.where((ee) => !excludeCommonSettingKeys.contains(ee.key))
|
||||||
|
.toList())
|
||||||
|
.where((e) => e.isNotEmpty)
|
||||||
|
.toList();
|
||||||
if (versionDetectionDisallowed) {
|
if (versionDetectionDisallowed) {
|
||||||
overrideAdditionalAppSpecificSourceAgnosticSettingSwitch(
|
overrideAdditionalAppSpecificSourceAgnosticSettingSwitch(
|
||||||
'versionDetection',
|
'versionDetection',
|
||||||
@@ -715,6 +730,7 @@ class SourceProvider {
|
|||||||
WhatsApp(),
|
WhatsApp(),
|
||||||
TelegramApp(),
|
TelegramApp(),
|
||||||
NeutronCode(),
|
NeutronCode(),
|
||||||
|
DirectAPKLink(),
|
||||||
HTML() // This should ALWAYS be the last option as they are tried in order
|
HTML() // This should ALWAYS be the last option as they are tried in order
|
||||||
];
|
];
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user