diff --git a/assets/translations/br.json b/assets/translations/br.json index dac26f4..7a23ea5 100644 --- a/assets/translations/br.json +++ b/assets/translations/br.json @@ -252,6 +252,7 @@ "intermediateLinkNotFound": "Link intermediário não encontrado", "exemptFromBackgroundUpdates": "Isento de atualizações em segundo plano (se ativadas)", "bgUpdatesOnWiFiOnly": "Desative atualizações em segundo plano quando não estiver em WiFi", + "autoSelectHighestVersionCode": "Auto-select highest versionCode APK", "removeAppQuestion": { "one": "Remover App?", "other": "Remover Apps?" diff --git a/assets/translations/bs.json b/assets/translations/bs.json index 533ad5a..9813cd4 100644 --- a/assets/translations/bs.json +++ b/assets/translations/bs.json @@ -249,6 +249,7 @@ "verifyLatestTag": "Verify the 'latest' tag", "exemptFromBackgroundUpdates": "Exempt from background updates (if enabled)", "bgUpdatesOnWiFiOnly": "Disable background updates when not on WiFi", + "autoSelectHighestVersionCode": "Auto-select highest versionCode APK", "removeAppQuestion": { "one": "Želite li ukloniti aplikaciju?", "other": "Želite li ukloniti aplikacije?" diff --git a/assets/translations/de.json b/assets/translations/de.json index 7cb5b45..9d0de6a 100644 --- a/assets/translations/de.json +++ b/assets/translations/de.json @@ -249,6 +249,7 @@ "verifyLatestTag": "Überprüfe das 'latest' Tag", "exemptFromBackgroundUpdates": "Ausschluss von Hintergrundaktualisierungen (falls aktiviert)", "bgUpdatesOnWiFiOnly": "Hintergrundaktualisierungen deaktivieren, wenn kein WLAN vorhanden ist", + "autoSelectHighestVersionCode": "Auto-select highest versionCode APK", "removeAppQuestion": { "one": "App entfernen?", "other": "Apps entfernen?" diff --git a/assets/translations/en.json b/assets/translations/en.json index afb64d2..c157509 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -252,6 +252,7 @@ "intermediateLinkNotFound": "Intermediate link not found", "exemptFromBackgroundUpdates": "Exempt from background updates (if enabled)", "bgUpdatesOnWiFiOnly": "Disable background updates when not on WiFi", + "autoSelectHighestVersionCode": "Auto-select highest versionCode APK", "removeAppQuestion": { "one": "Remove App?", "other": "Remove Apps?" diff --git a/assets/translations/es.json b/assets/translations/es.json index 6c07acc..bf83959 100644 --- a/assets/translations/es.json +++ b/assets/translations/es.json @@ -249,6 +249,7 @@ "verifyLatestTag": "Verify the 'latest' tag", "exemptFromBackgroundUpdates": "Exempt from background updates (if enabled)", "bgUpdatesOnWiFiOnly": "Disable background updates when not on WiFi", + "autoSelectHighestVersionCode": "Auto-select highest versionCode APK", "removeAppQuestion": { "one": "¿Eliminar Aplicación?", "other": "¿Eliminar Aplicaciones?" diff --git a/assets/translations/fa.json b/assets/translations/fa.json index a35fb49..1866dd6 100644 --- a/assets/translations/fa.json +++ b/assets/translations/fa.json @@ -249,6 +249,7 @@ "verifyLatestTag": "Verify the 'latest' tag", "exemptFromBackgroundUpdates": "Exempt from background updates (if enabled)", "bgUpdatesOnWiFiOnly": "Disable background updates when not on WiFi", + "autoSelectHighestVersionCode": "Auto-select highest versionCode APK", "removeAppQuestion": { "one": "برنامه حذف شود؟", "other": "برنامه ها حذف شوند؟" diff --git a/assets/translations/fr.json b/assets/translations/fr.json index 83a1d60..e55ba3b 100644 --- a/assets/translations/fr.json +++ b/assets/translations/fr.json @@ -249,6 +249,7 @@ "verifyLatestTag": "Verify the 'latest' tag", "exemptFromBackgroundUpdates": "Exempt from background updates (if enabled)", "bgUpdatesOnWiFiOnly": "Disable background updates when not on WiFi", + "autoSelectHighestVersionCode": "Auto-select highest versionCode APK", "removeAppQuestion": { "one": "Supprimer l'application ?", "other": "Supprimer les applications ?" diff --git a/assets/translations/hu.json b/assets/translations/hu.json index 322543a..b7a75d9 100644 --- a/assets/translations/hu.json +++ b/assets/translations/hu.json @@ -248,6 +248,7 @@ "verifyLatestTag": "Ellenőrizze a „legújabb” címkét", "exemptFromBackgroundUpdates": "Mentes a háttérben történő frissítések alól (ha engedélyezett)", "bgUpdatesOnWiFiOnly": "Tiltsa le a háttérben frissítéseket, ha nincs Wi-Fi-n", + "autoSelectHighestVersionCode": "Auto-select highest versionCode APK", "removeAppQuestion": { "one": "Eltávolítja az alkalmazást?", "other": "Eltávolítja az alkalmazást?" diff --git a/assets/translations/it.json b/assets/translations/it.json index 210bce0..5d43a36 100644 --- a/assets/translations/it.json +++ b/assets/translations/it.json @@ -249,6 +249,7 @@ "verifyLatestTag": "Verify the 'latest' tag", "exemptFromBackgroundUpdates": "Exempt from background updates (if enabled)", "bgUpdatesOnWiFiOnly": "Disable background updates when not on WiFi", + "autoSelectHighestVersionCode": "Auto-select highest versionCode APK", "removeAppQuestion": { "one": "Rimuovere l'app?", "other": "Rimuovere le app?" diff --git a/assets/translations/ja.json b/assets/translations/ja.json index 5224933..0119f5d 100644 --- a/assets/translations/ja.json +++ b/assets/translations/ja.json @@ -250,6 +250,7 @@ "verifyLatestTag": "'latest'タグを確認する", "exemptFromBackgroundUpdates": "バックグラウンドアップデートを行わない (有効な場合)", "bgUpdatesOnWiFiOnly": "WiFiを使用していない場合,バックグラウンドアップデートを無効にする", + "autoSelectHighestVersionCode": "Auto-select highest versionCode APK", "removeAppQuestion": { "one": "アプリを削除しますか?", "other": "アプリを削除しますか?" diff --git a/assets/translations/pl.json b/assets/translations/pl.json index 0518562..f2495bf 100644 --- a/assets/translations/pl.json +++ b/assets/translations/pl.json @@ -255,6 +255,7 @@ "verifyLatestTag": "Zweryfikuj najnowszy tag", "exemptFromBackgroundUpdates": "Wyklucz z uaktualnień w tle (jeśli są włączone)", "bgUpdatesOnWiFiOnly": "Wyłącz aktualizacje w tle, gdy nie ma połączenia z Wi-Fi", + "autoSelectHighestVersionCode": "Auto-select highest versionCode APK", "removeAppQuestion": { "one": "Usunąć aplikację?", "few": "Usunąć aplikacje?", diff --git a/assets/translations/ru.json b/assets/translations/ru.json index 91c5572..e53644f 100644 --- a/assets/translations/ru.json +++ b/assets/translations/ru.json @@ -249,6 +249,7 @@ "verifyLatestTag": "Verify the 'latest' tag", "exemptFromBackgroundUpdates": "Exempt from background updates (if enabled)", "bgUpdatesOnWiFiOnly": "Disable background updates when not on WiFi", + "autoSelectHighestVersionCode": "Auto-select highest versionCode APK", "removeAppQuestion": { "one": "Удалить приложение?", "other": "Удалить приложения?" diff --git a/assets/translations/zh.json b/assets/translations/zh.json index 6ab56a0..0837f74 100644 --- a/assets/translations/zh.json +++ b/assets/translations/zh.json @@ -250,6 +250,7 @@ "verifyLatestTag": "验证“Latest”标签", "exemptFromBackgroundUpdates": "Exempt from background updates (if enabled)", "bgUpdatesOnWiFiOnly": "Disable background updates when not on WiFi", + "autoSelectHighestVersionCode": "Auto-select highest versionCode APK", "removeAppQuestion": { "one": "是否删除应用?", "other": "是否删除应用?" diff --git a/lib/app_sources/fdroid.dart b/lib/app_sources/fdroid.dart index 2f96fe7..ffee596 100644 --- a/lib/app_sources/fdroid.dart +++ b/lib/app_sources/fdroid.dart @@ -3,6 +3,7 @@ import 'dart:convert'; import 'package:easy_localization/easy_localization.dart'; import 'package:html/parser.dart'; import 'package:http/http.dart'; +import 'package:obtainium/components/generated_form.dart'; import 'package:obtainium/custom_errors.dart'; import 'package:obtainium/providers/source_provider.dart'; @@ -11,6 +12,12 @@ class FDroid extends AppSource { host = 'f-droid.org'; name = tr('fdroid'); canSearch = true; + additionalSourceAppSpecificSettingFormItems = [ + [ + GeneratedFormSwitch('autoSelectHighestVersionCode', + label: tr('autoSelectHighestVersionCode')) + ] + ]; } @override @@ -37,7 +44,8 @@ class FDroid extends AppSource { } APKDetails getAPKUrlsFromFDroidPackagesAPIResponse( - Response res, String apkUrlPrefix, String standardUrl) { + Response res, String apkUrlPrefix, String standardUrl, + {bool autoSelectHighestVersionCode = false}) { if (res.statusCode == 200) { List releases = jsonDecode(res.body)['packages'] ?? []; if (releases.isEmpty) { @@ -47,8 +55,12 @@ class FDroid extends AppSource { if (latestVersion == null) { throw NoVersionError(); } - List apkUrls = releases - .where((element) => element['versionName'] == latestVersion) + Iterable latestReleases = + releases.where((element) => element['versionName'] == latestVersion); + if (latestReleases.length > 1 && autoSelectHighestVersionCode) { + latestReleases = [latestReleases.first]; + } + List apkUrls = latestReleases .map((e) => '${apkUrlPrefix}_${e['versionCode']}.apk') .toList(); return APKDetails(latestVersion, getApkUrlsFromUrls(apkUrls), @@ -68,7 +80,9 @@ class FDroid extends AppSource { return getAPKUrlsFromFDroidPackagesAPIResponse( await sourceRequest('https://$host/api/v1/packages/$appId'), 'https://$host/repo/$appId', - standardUrl); + standardUrl, + autoSelectHighestVersionCode: + additionalSettings['autoSelectHighestVersionCode'] == true); } @override diff --git a/lib/app_sources/izzyondroid.dart b/lib/app_sources/izzyondroid.dart index d0fcfe8..f145bb8 100644 --- a/lib/app_sources/izzyondroid.dart +++ b/lib/app_sources/izzyondroid.dart @@ -3,8 +3,13 @@ import 'package:obtainium/custom_errors.dart'; import 'package:obtainium/providers/source_provider.dart'; class IzzyOnDroid extends AppSource { + late FDroid fd; + IzzyOnDroid() { host = 'android.izzysoft.de'; + fd = FDroid(); + additionalSourceAppSpecificSettingFormItems = + fd.additionalSourceAppSpecificSettingFormItems; } @override @@ -20,7 +25,7 @@ class IzzyOnDroid extends AppSource { @override Future tryInferringAppId(String standardUrl, {Map additionalSettings = const {}}) async { - return FDroid().tryInferringAppId(standardUrl); + return fd.tryInferringAppId(standardUrl); } @override @@ -29,10 +34,12 @@ class IzzyOnDroid extends AppSource { Map additionalSettings, ) async { String? appId = await tryInferringAppId(standardUrl); - return FDroid().getAPKUrlsFromFDroidPackagesAPIResponse( + return fd.getAPKUrlsFromFDroidPackagesAPIResponse( await sourceRequest( 'https://apt.izzysoft.de/fdroid/api/v1/packages/$appId'), 'https://android.izzysoft.de/frepo/$appId', - standardUrl); + standardUrl, + autoSelectHighestVersionCode: + additionalSettings['autoSelectHighestVersionCode'] == true); } } diff --git a/lib/main.dart b/lib/main.dart index 282048f..420ef9b 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -19,7 +19,7 @@ import 'package:easy_localization/src/easy_localization_controller.dart'; // ignore: implementation_imports import 'package:easy_localization/src/localization.dart'; -const String currentVersion = '0.14.8'; +const String currentVersion = '0.14.9'; const String currentReleaseTag = 'v$currentVersion-beta'; // KEEP THIS IN SYNC WITH GITHUB RELEASES diff --git a/pubspec.yaml b/pubspec.yaml index b3a239d..7bafa7f 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -17,7 +17,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # In Windows, build-name is used as the major, minor, and patch parts # of the product and file versions while build-number is used as the build suffix. -version: 0.14.8+200 # When changing this, update the tag in main() accordingly +version: 0.14.9+201 # When changing this, update the tag in main() accordingly environment: sdk: '>=2.18.2 <3.0.0'