From b423a2af521d605a1fe8280d4e85a159cd36e4a7 Mon Sep 17 00:00:00 2001 From: Imran Remtulla Date: Fri, 22 Sep 2023 00:22:54 -0400 Subject: [PATCH 1/6] Change a default F-Droid Source option --- lib/app_sources/fdroid.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/app_sources/fdroid.dart b/lib/app_sources/fdroid.dart index f2dd3f9..13f5006 100644 --- a/lib/app_sources/fdroid.dart +++ b/lib/app_sources/fdroid.dart @@ -25,7 +25,7 @@ class FDroid extends AppSource { ], [ GeneratedFormSwitch('trySelectingSuggestedVersionCode', - label: tr('trySelectingSuggestedVersionCode'), defaultValue: true) + label: tr('trySelectingSuggestedVersionCode')) ], [ GeneratedFormSwitch('autoSelectHighestVersionCode', From c10a63e76e81772854303e39582b2360b6e05efc Mon Sep 17 00:00:00 2001 From: Imran Remtulla Date: Sat, 23 Sep 2023 12:48:21 -0400 Subject: [PATCH 2/6] Add GitHub "don't sort" toggle (#925) --- assets/translations/bs.json | 1 + assets/translations/cs.json | 1 + assets/translations/de.json | 1 + assets/translations/en.json | 1 + assets/translations/es.json | 1 + assets/translations/fa.json | 1 + assets/translations/fr.json | 1 + assets/translations/hu.json | 1 + assets/translations/it.json | 1 + assets/translations/ja.json | 1 + assets/translations/pl.json | 1 + assets/translations/pt.json | 1 + assets/translations/ru.json | 1 + assets/translations/zh.json | 1 + lib/app_sources/github.dart | 57 ++++++++++++++++++++----------------- lib/app_sources/html.dart | 2 +- 16 files changed, 46 insertions(+), 27 deletions(-) diff --git a/assets/translations/bs.json b/assets/translations/bs.json index 7352027..b6c60be 100644 --- a/assets/translations/bs.json +++ b/assets/translations/bs.json @@ -255,6 +255,7 @@ "autoExportOnChanges": "Auto-export on changes", "filterVersionsByRegEx": "Filter Versions by Regular Expression", "trySelectingSuggestedVersionCode": "Try selecting suggested versionCode APK", + "dontSortReleasesList": "Retain release order from API", "removeAppQuestion": { "one": "Želite li ukloniti aplikaciju?", "other": "Želite li ukloniti aplikacije?" diff --git a/assets/translations/cs.json b/assets/translations/cs.json index 88fb2e7..bf1d18a 100644 --- a/assets/translations/cs.json +++ b/assets/translations/cs.json @@ -258,6 +258,7 @@ "autoExportOnChanges": "Automatický export při změnách", "filterVersionsByRegEx": "Filtrovat verze podle regulárního výrazu", "trySelectingSuggestedVersionCode": "Zkusit vybrat navrhovaný kód verze APK", + "dontSortReleasesList": "Retain release order from API", "removeAppQuestion": { "one": "Odstranit Apku?", "other": "Odstranit Apky?" diff --git a/assets/translations/de.json b/assets/translations/de.json index 33975f8..b21756f 100644 --- a/assets/translations/de.json +++ b/assets/translations/de.json @@ -255,6 +255,7 @@ "autoExportOnChanges": "Automatischer Export bei Änderung", "filterVersionsByRegEx": "Versionen nach regulären Ausdrücken filtern", "trySelectingSuggestedVersionCode": "Versuchen, die vorgeschlagene APK-Code-Version auszuwählen", + "dontSortReleasesList": "Retain release order from API", "removeAppQuestion": { "one": "App entfernen?", "other": "Apps entfernen?" diff --git a/assets/translations/en.json b/assets/translations/en.json index 6e782f9..a496fa1 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -258,6 +258,7 @@ "autoExportOnChanges": "Auto-export on changes", "filterVersionsByRegEx": "Filter Versions by Regular Expression", "trySelectingSuggestedVersionCode": "Try selecting suggested versionCode APK", + "dontSortReleasesList": "Retain release order from API", "removeAppQuestion": { "one": "Remove App?", "other": "Remove Apps?" diff --git a/assets/translations/es.json b/assets/translations/es.json index aefea28..3689bbf 100644 --- a/assets/translations/es.json +++ b/assets/translations/es.json @@ -255,6 +255,7 @@ "autoExportOnChanges": "Auto-export on changes", "filterVersionsByRegEx": "Filter Versions by Regular Expression", "trySelectingSuggestedVersionCode": "Try selecting suggested versionCode APK", + "dontSortReleasesList": "Retain release order from API", "removeAppQuestion": { "one": "¿Eliminar Aplicación?", "other": "¿Eliminar Aplicaciones?" diff --git a/assets/translations/fa.json b/assets/translations/fa.json index 9c62c43..6a15b9d 100644 --- a/assets/translations/fa.json +++ b/assets/translations/fa.json @@ -255,6 +255,7 @@ "autoExportOnChanges": "Auto-export on changes", "filterVersionsByRegEx": "Filter Versions by Regular Expression", "trySelectingSuggestedVersionCode": "Try selecting suggested versionCode APK", + "dontSortReleasesList": "Retain release order from API", "removeAppQuestion": { "one": "برنامه حذف شود؟", "other": "برنامه ها حذف شوند؟" diff --git a/assets/translations/fr.json b/assets/translations/fr.json index 33e9fb6..7bf0e32 100644 --- a/assets/translations/fr.json +++ b/assets/translations/fr.json @@ -255,6 +255,7 @@ "autoExportOnChanges": "Auto-export on changes", "filterVersionsByRegEx": "Filter Versions by Regular Expression", "trySelectingSuggestedVersionCode": "Try selecting suggested versionCode APK", + "dontSortReleasesList": "Retain release order from API", "removeAppQuestion": { "one": "Supprimer l'application ?", "other": "Supprimer les applications ?" diff --git a/assets/translations/hu.json b/assets/translations/hu.json index 1a8ee3e..bab012d 100644 --- a/assets/translations/hu.json +++ b/assets/translations/hu.json @@ -254,6 +254,7 @@ "autoExportOnChanges": "Auto-exportálás a változások után", "filterVersionsByRegEx": "Verziók szűrése reguláris kifejezéssel", "trySelectingSuggestedVersionCode": "Próbálja ki a javasolt verziókódú APK-t", + "dontSortReleasesList": "Retain release order from API", "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 b805fc5..fad6392 100644 --- a/assets/translations/it.json +++ b/assets/translations/it.json @@ -255,6 +255,7 @@ "autoExportOnChanges": "Auto-export on changes", "filterVersionsByRegEx": "Filter Versions by Regular Expression", "trySelectingSuggestedVersionCode": "Try selecting suggested versionCode APK", + "dontSortReleasesList": "Retain release order from API", "removeAppQuestion": { "one": "Rimuovere l'app?", "other": "Rimuovere le app?" diff --git a/assets/translations/ja.json b/assets/translations/ja.json index be3e9c8..ec91884 100644 --- a/assets/translations/ja.json +++ b/assets/translations/ja.json @@ -258,6 +258,7 @@ "autoExportOnChanges": "変更があった際に自動でエクスポートする", "filterVersionsByRegEx": "正規表現でバージョンをフィルタリングする", "trySelectingSuggestedVersionCode": "提案されたバージョンコードのAPKを選択する", + "dontSortReleasesList": "Retain release order from API", "removeAppQuestion": { "one": "アプリを削除しますか?", "other": "アプリを削除しますか?" diff --git a/assets/translations/pl.json b/assets/translations/pl.json index 661a85b..4e8bd5c 100644 --- a/assets/translations/pl.json +++ b/assets/translations/pl.json @@ -261,6 +261,7 @@ "autoExportOnChanges": "Automatyczny eksport po wprowadzeniu zmian", "filterVersionsByRegEx": "Filtruj wersje według wyrażenia regularnego", "trySelectingSuggestedVersionCode": "Spróbuj wybierać sugerowany kod wersji APK", + "dontSortReleasesList": "Retain release order from API", "removeAppQuestion": { "one": "Usunąć aplikację?", "few": "Usunąć aplikacje?", diff --git a/assets/translations/pt.json b/assets/translations/pt.json index a083e20..d0e9809 100644 --- a/assets/translations/pt.json +++ b/assets/translations/pt.json @@ -258,6 +258,7 @@ "autoExportOnChanges": "Auto-export on changes", "filterVersionsByRegEx": "Filter Versions by Regular Expression", "trySelectingSuggestedVersionCode": "Try selecting suggested versionCode APK", + "dontSortReleasesList": "Retain release order from API", "removeAppQuestion": { "one": "Remover App?", "other": "Remover Apps?" diff --git a/assets/translations/ru.json b/assets/translations/ru.json index 9db80ce..982641a 100644 --- a/assets/translations/ru.json +++ b/assets/translations/ru.json @@ -255,6 +255,7 @@ "autoExportOnChanges": "Auto-export on changes", "filterVersionsByRegEx": "Filter Versions by Regular Expression", "trySelectingSuggestedVersionCode": "Try selecting suggested versionCode APK", + "dontSortReleasesList": "Retain release order from API", "removeAppQuestion": { "one": "Удалить приложение?", "other": "Удалить приложения?" diff --git a/assets/translations/zh.json b/assets/translations/zh.json index 1057515..cea5130 100644 --- a/assets/translations/zh.json +++ b/assets/translations/zh.json @@ -256,6 +256,7 @@ "autoExportOnChanges": "Auto-export on changes", "filterVersionsByRegEx": "Filter Versions by Regular Expression", "trySelectingSuggestedVersionCode": "Try selecting suggested versionCode APK", + "dontSortReleasesList": "Retain release order from API", "removeAppQuestion": { "one": "是否删除应用?", "other": "是否删除应用?" diff --git a/lib/app_sources/github.dart b/lib/app_sources/github.dart index e3ceb41..56a31fd 100644 --- a/lib/app_sources/github.dart +++ b/lib/app_sources/github.dart @@ -72,9 +72,10 @@ class GitHub extends AppSource { } ]) ], + [GeneratedFormSwitch('verifyLatestTag', label: tr('verifyLatestTag'))], [ - GeneratedFormSwitch('verifyLatestTag', - label: tr('verifyLatestTag'), defaultValue: false) + GeneratedFormSwitch('dontSortReleasesList', + label: tr('dontSortReleasesList')) ] ]; @@ -230,6 +231,8 @@ class GitHub extends AppSource { ? additionalSettings['filterReleaseNotesByRegEx'] : null; bool verifyLatestTag = additionalSettings['verifyLatestTag'] == true; + bool dontSortReleasesList = + additionalSettings['dontSortReleasesList'] == true; String? latestTag; if (verifyLatestTag) { var temp = requestUrl.split('?'); @@ -265,32 +268,34 @@ class GitHub extends AppSource { rel?['published_at'] != null ? DateTime.parse(rel['published_at']) : null; - releases.sort((a, b) { - // See #478 and #534 - if (a == b) { - return 0; - } else if (a == null) { - return -1; - } else if (b == null) { - return 1; - } else { - var nameA = a['tag_name'] ?? a['name']; - var nameB = b['tag_name'] ?? b['name']; - var stdFormats = findStandardFormatsForVersion(nameA, true) - .intersection(findStandardFormatsForVersion(nameB, true)); - if (stdFormats.isNotEmpty) { - var reg = RegExp(stdFormats.first); - var matchA = reg.firstMatch(nameA); - var matchB = reg.firstMatch(nameB); - return compareAlphaNumeric( - (nameA as String).substring(matchA!.start, matchA.end), - (nameB as String).substring(matchB!.start, matchB.end)); + if (dontSortReleasesList) { + releases.sort((a, b) { + // See #478 and #534 + if (a == b) { + return 0; + } else if (a == null) { + return -1; + } else if (b == null) { + return 1; } else { - return (getReleaseDateFromRelease(a) ?? DateTime(1)) - .compareTo(getReleaseDateFromRelease(b) ?? DateTime(0)); + var nameA = a['tag_name'] ?? a['name']; + var nameB = b['tag_name'] ?? b['name']; + var stdFormats = findStandardFormatsForVersion(nameA, true) + .intersection(findStandardFormatsForVersion(nameB, true)); + if (stdFormats.isNotEmpty) { + var reg = RegExp(stdFormats.first); + var matchA = reg.firstMatch(nameA); + var matchB = reg.firstMatch(nameB); + return compareAlphaNumeric( + (nameA as String).substring(matchA!.start, matchA.end), + (nameB as String).substring(matchB!.start, matchB.end)); + } else { + return (getReleaseDateFromRelease(a) ?? DateTime(1)) + .compareTo(getReleaseDateFromRelease(b) ?? DateTime(0)); + } } - } - }); + }); + } if (latestTag != null && releases.isNotEmpty && latestTag != diff --git a/lib/app_sources/html.dart b/lib/app_sources/html.dart index c2ff364..5522c62 100644 --- a/lib/app_sources/html.dart +++ b/lib/app_sources/html.dart @@ -107,7 +107,7 @@ class HTML extends AppSource { [ GeneratedFormTextField('intermediateLinkRegex', label: tr('intermediateLinkRegex'), - hint: '([0-9]+\.)*[0-9]+/\$', + hint: '([0-9]+.)*[0-9]+/\$', required: false, additionalValidators: [(value) => regExValidator(value)]) ], From 6ac8ad543c179b1f8bf64caa323efc5e84b69174 Mon Sep 17 00:00:00 2001 From: Imran Remtulla Date: Sat, 23 Sep 2023 13:16:51 -0400 Subject: [PATCH 3/6] Better IzzyOnDroid support (#926) --- lib/app_sources/fdroid.dart | 151 ++++++++++++++++--------------- lib/app_sources/izzyondroid.dart | 15 ++- 2 files changed, 87 insertions(+), 79 deletions(-) diff --git a/lib/app_sources/fdroid.dart b/lib/app_sources/fdroid.dart index 13f5006..1201062 100644 --- a/lib/app_sources/fdroid.dart +++ b/lib/app_sources/fdroid.dart @@ -57,81 +57,6 @@ class FDroid extends AppSource { return Uri.parse(standardUrl).pathSegments.last; } - APKDetails getAPKUrlsFromFDroidPackagesAPIResponse( - Response res, String apkUrlPrefix, String standardUrl, - {bool autoSelectHighestVersionCode = false, - bool trySelectingSuggestedVersionCode = false, - String? filterVersionsByRegEx}) { - if (res.statusCode == 200) { - var response = jsonDecode(res.body); - List releases = response['packages'] ?? []; - if (releases.isEmpty) { - throw NoReleasesError(); - } - String? version; - Iterable releaseChoices = []; - // Grab the versionCode suggested if the user chose to do that - // Only do so at this stage if the user has no release filter - if (trySelectingSuggestedVersionCode && - response['suggestedVersionCode'] != null && - filterVersionsByRegEx == null) { - var suggestedReleases = releases.where((element) => - element['versionCode'] == response['suggestedVersionCode']); - if (suggestedReleases.isNotEmpty) { - releaseChoices = suggestedReleases; - version = suggestedReleases.first['versionName']; - } - } - // Apply the release filter if any - if (filterVersionsByRegEx != null) { - version = null; - releaseChoices = []; - for (var i = 0; i < releases.length; i++) { - if (RegExp(filterVersionsByRegEx) - .hasMatch(releases[i]['versionName'])) { - version = releases[i]['versionName']; - } - } - if (version == null) { - throw NoVersionError(); - } - } - // Default to the highest version - version ??= releases[0]['versionName']; - if (version == null) { - throw NoVersionError(); - } - // If a suggested release was not already picked, pick all those with the selected version - if (releaseChoices.isEmpty) { - releaseChoices = - releases.where((element) => element['versionName'] == version); - } - // For the remaining releases, use the toggles to auto-select one if possible - if (releaseChoices.length > 1) { - if (autoSelectHighestVersionCode) { - releaseChoices = [releaseChoices.first]; - } else if (trySelectingSuggestedVersionCode && - response['suggestedVersionCode'] != null) { - var suggestedReleases = releaseChoices.where((element) => - element['versionCode'] == response['suggestedVersionCode']); - if (suggestedReleases.isNotEmpty) { - releaseChoices = suggestedReleases; - } - } - } - if (releaseChoices.isEmpty) { - throw NoReleasesError(); - } - List apkUrls = releaseChoices - .map((e) => '${apkUrlPrefix}_${e['versionCode']}.apk') - .toList(); - return APKDetails(version, getApkUrlsFromUrls(apkUrls), - AppNames(name, Uri.parse(standardUrl).pathSegments.last)); - } else { - throw getObtainiumHttpError(res); - } - } - @override Future getLatestAPKDetails( String standardUrl, @@ -143,6 +68,7 @@ class FDroid extends AppSource { await sourceRequest('https://$host/api/v1/packages/$appId'), 'https://$host/repo/$appId', standardUrl, + name, autoSelectHighestVersionCode: additionalSettings['autoSelectHighestVersionCode'] == true, trySelectingSuggestedVersionCode: @@ -185,3 +111,78 @@ class FDroid extends AppSource { } } } + +APKDetails getAPKUrlsFromFDroidPackagesAPIResponse( + Response res, String apkUrlPrefix, String standardUrl, String sourceName, + {bool autoSelectHighestVersionCode = false, + bool trySelectingSuggestedVersionCode = false, + String? filterVersionsByRegEx}) { + if (res.statusCode == 200) { + var response = jsonDecode(res.body); + List releases = response['packages'] ?? []; + if (releases.isEmpty) { + throw NoReleasesError(); + } + String? version; + Iterable releaseChoices = []; + // Grab the versionCode suggested if the user chose to do that + // Only do so at this stage if the user has no release filter + if (trySelectingSuggestedVersionCode && + response['suggestedVersionCode'] != null && + filterVersionsByRegEx == null) { + var suggestedReleases = releases.where((element) => + element['versionCode'] == response['suggestedVersionCode']); + if (suggestedReleases.isNotEmpty) { + releaseChoices = suggestedReleases; + version = suggestedReleases.first['versionName']; + } + } + // Apply the release filter if any + if (filterVersionsByRegEx != null) { + version = null; + releaseChoices = []; + for (var i = 0; i < releases.length; i++) { + if (RegExp(filterVersionsByRegEx) + .hasMatch(releases[i]['versionName'])) { + version = releases[i]['versionName']; + } + } + if (version == null) { + throw NoVersionError(); + } + } + // Default to the highest version + version ??= releases[0]['versionName']; + if (version == null) { + throw NoVersionError(); + } + // If a suggested release was not already picked, pick all those with the selected version + if (releaseChoices.isEmpty) { + releaseChoices = + releases.where((element) => element['versionName'] == version); + } + // For the remaining releases, use the toggles to auto-select one if possible + if (releaseChoices.length > 1) { + if (autoSelectHighestVersionCode) { + releaseChoices = [releaseChoices.first]; + } else if (trySelectingSuggestedVersionCode && + response['suggestedVersionCode'] != null) { + var suggestedReleases = releaseChoices.where((element) => + element['versionCode'] == response['suggestedVersionCode']); + if (suggestedReleases.isNotEmpty) { + releaseChoices = suggestedReleases; + } + } + } + if (releaseChoices.isEmpty) { + throw NoReleasesError(); + } + List apkUrls = releaseChoices + .map((e) => '${apkUrlPrefix}_${e['versionCode']}.apk') + .toList(); + return APKDetails(version, getApkUrlsFromUrls(apkUrls), + AppNames(sourceName, Uri.parse(standardUrl).pathSegments.last)); + } else { + throw getObtainiumHttpError(res); + } +} diff --git a/lib/app_sources/izzyondroid.dart b/lib/app_sources/izzyondroid.dart index 8f801db..66624bc 100644 --- a/lib/app_sources/izzyondroid.dart +++ b/lib/app_sources/izzyondroid.dart @@ -6,16 +6,22 @@ class IzzyOnDroid extends AppSource { late FDroid fd; IzzyOnDroid() { - host = 'android.izzysoft.de'; + host = 'izzysoft.de'; fd = FDroid(); additionalSourceAppSpecificSettingFormItems = fd.additionalSourceAppSpecificSettingFormItems; + allowSubDomains = true; } @override String sourceSpecificStandardizeURL(String url) { - RegExp standardUrlRegEx = RegExp('^https?://$host/repo/apk/[^/]+'); - RegExpMatch? match = standardUrlRegEx.firstMatch(url.toLowerCase()); + RegExp standardUrlRegExA = RegExp('^https?://android.$host/repo/apk/[^/]+'); + RegExpMatch? match = standardUrlRegExA.firstMatch(url.toLowerCase()); + if (match == null) { + RegExp standardUrlRegExB = + RegExp('^https?://apt.$host/fdroid/index/apk/[^/]+'); + match = standardUrlRegExB.firstMatch(url.toLowerCase()); + } if (match == null) { throw InvalidURLError(name); } @@ -34,11 +40,12 @@ class IzzyOnDroid extends AppSource { Map additionalSettings, ) async { String? appId = await tryInferringAppId(standardUrl); - return fd.getAPKUrlsFromFDroidPackagesAPIResponse( + return getAPKUrlsFromFDroidPackagesAPIResponse( await sourceRequest( 'https://apt.izzysoft.de/fdroid/api/v1/packages/$appId'), 'https://android.izzysoft.de/frepo/$appId', standardUrl, + name, autoSelectHighestVersionCode: additionalSettings['autoSelectHighestVersionCode'] == true, trySelectingSuggestedVersionCode: From af5377d2eba2aeaf4d127a2ed89952667d51526b Mon Sep 17 00:00:00 2001 From: Imran Remtulla Date: Sat, 23 Sep 2023 13:21:48 -0400 Subject: [PATCH 4/6] Allow 'm.' subdomain for APKPure --- lib/app_sources/apkpure.dart | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/app_sources/apkpure.dart b/lib/app_sources/apkpure.dart index 15ca098..b40d39f 100644 --- a/lib/app_sources/apkpure.dart +++ b/lib/app_sources/apkpure.dart @@ -21,6 +21,7 @@ parseDateTimeMMMddCommayyyy(String? dateString) { class APKPure extends AppSource { APKPure() { host = 'apkpure.com'; + allowSubDomains = true; } @override @@ -28,7 +29,7 @@ class APKPure extends AppSource { RegExp standardUrlRegExB = RegExp('^https?://m.$host/+[^/]+/+[^/]+'); RegExpMatch? match = standardUrlRegExB.firstMatch(url.toLowerCase()); if (match != null) { - url = 'https://$host/${Uri.parse(url).path}'; + url = 'https://$host${Uri.parse(url).path}'; } RegExp standardUrlRegExA = RegExp('^https?://$host/+[^/]+/+[^/]+'); match = standardUrlRegExA.firstMatch(url.toLowerCase()); From 68d4083708007f18cc533b969c0eddffd42d543e Mon Sep 17 00:00:00 2001 From: Imran Remtulla Date: Sat, 23 Sep 2023 13:31:27 -0400 Subject: [PATCH 5/6] Added HTML reverse sorting (#915) + translatable strings (#916) --- assets/translations/bs.json | 4 ++++ assets/translations/cs.json | 4 ++++ assets/translations/de.json | 4 ++++ assets/translations/en.json | 4 ++++ assets/translations/es.json | 4 ++++ assets/translations/fa.json | 4 ++++ assets/translations/fr.json | 4 ++++ assets/translations/hu.json | 4 ++++ assets/translations/it.json | 4 ++++ assets/translations/ja.json | 4 ++++ assets/translations/pl.json | 4 ++++ assets/translations/pt.json | 4 ++++ assets/translations/ru.json | 4 ++++ assets/translations/zh.json | 4 ++++ lib/app_sources/html.dart | 4 ++++ lib/pages/settings.dart | 9 +++------ 16 files changed, 63 insertions(+), 6 deletions(-) diff --git a/assets/translations/bs.json b/assets/translations/bs.json index b6c60be..5ddd49f 100644 --- a/assets/translations/bs.json +++ b/assets/translations/bs.json @@ -256,6 +256,10 @@ "filterVersionsByRegEx": "Filter Versions by Regular Expression", "trySelectingSuggestedVersionCode": "Try selecting suggested versionCode APK", "dontSortReleasesList": "Retain release order from API", + "reverseSort": "Reverse sorting", + "debugMenu": "Debug Menu", + "bgTaskStarted": "Background task started - check logs.", + "runBgCheckNow": "Run Background Update Check Now", "removeAppQuestion": { "one": "Želite li ukloniti aplikaciju?", "other": "Želite li ukloniti aplikacije?" diff --git a/assets/translations/cs.json b/assets/translations/cs.json index bf1d18a..0aceed9 100644 --- a/assets/translations/cs.json +++ b/assets/translations/cs.json @@ -259,6 +259,10 @@ "filterVersionsByRegEx": "Filtrovat verze podle regulárního výrazu", "trySelectingSuggestedVersionCode": "Zkusit vybrat navrhovaný kód verze APK", "dontSortReleasesList": "Retain release order from API", + "reverseSort": "Reverse sorting", + "debugMenu": "Debug Menu", + "bgTaskStarted": "Background task started - check logs.", + "runBgCheckNow": "Run Background Update Check Now", "removeAppQuestion": { "one": "Odstranit Apku?", "other": "Odstranit Apky?" diff --git a/assets/translations/de.json b/assets/translations/de.json index b21756f..462f3a4 100644 --- a/assets/translations/de.json +++ b/assets/translations/de.json @@ -256,6 +256,10 @@ "filterVersionsByRegEx": "Versionen nach regulären Ausdrücken filtern", "trySelectingSuggestedVersionCode": "Versuchen, die vorgeschlagene APK-Code-Version auszuwählen", "dontSortReleasesList": "Retain release order from API", + "reverseSort": "Reverse sorting", + "debugMenu": "Debug Menu", + "bgTaskStarted": "Background task started - check logs.", + "runBgCheckNow": "Run Background Update Check Now", "removeAppQuestion": { "one": "App entfernen?", "other": "Apps entfernen?" diff --git a/assets/translations/en.json b/assets/translations/en.json index a496fa1..a283052 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -259,6 +259,10 @@ "filterVersionsByRegEx": "Filter Versions by Regular Expression", "trySelectingSuggestedVersionCode": "Try selecting suggested versionCode APK", "dontSortReleasesList": "Retain release order from API", + "reverseSort": "Reverse sorting", + "debugMenu": "Debug Menu", + "bgTaskStarted": "Background task started - check logs.", + "runBgCheckNow": "Run Background Update Check Now", "removeAppQuestion": { "one": "Remove App?", "other": "Remove Apps?" diff --git a/assets/translations/es.json b/assets/translations/es.json index 3689bbf..c1231fe 100644 --- a/assets/translations/es.json +++ b/assets/translations/es.json @@ -256,6 +256,10 @@ "filterVersionsByRegEx": "Filter Versions by Regular Expression", "trySelectingSuggestedVersionCode": "Try selecting suggested versionCode APK", "dontSortReleasesList": "Retain release order from API", + "reverseSort": "Reverse sorting", + "debugMenu": "Debug Menu", + "bgTaskStarted": "Background task started - check logs.", + "runBgCheckNow": "Run Background Update Check Now", "removeAppQuestion": { "one": "¿Eliminar Aplicación?", "other": "¿Eliminar Aplicaciones?" diff --git a/assets/translations/fa.json b/assets/translations/fa.json index 6a15b9d..c35bc60 100644 --- a/assets/translations/fa.json +++ b/assets/translations/fa.json @@ -256,6 +256,10 @@ "filterVersionsByRegEx": "Filter Versions by Regular Expression", "trySelectingSuggestedVersionCode": "Try selecting suggested versionCode APK", "dontSortReleasesList": "Retain release order from API", + "reverseSort": "Reverse sorting", + "debugMenu": "Debug Menu", + "bgTaskStarted": "Background task started - check logs.", + "runBgCheckNow": "Run Background Update Check Now", "removeAppQuestion": { "one": "برنامه حذف شود؟", "other": "برنامه ها حذف شوند؟" diff --git a/assets/translations/fr.json b/assets/translations/fr.json index 7bf0e32..7e0d414 100644 --- a/assets/translations/fr.json +++ b/assets/translations/fr.json @@ -256,6 +256,10 @@ "filterVersionsByRegEx": "Filter Versions by Regular Expression", "trySelectingSuggestedVersionCode": "Try selecting suggested versionCode APK", "dontSortReleasesList": "Retain release order from API", + "reverseSort": "Reverse sorting", + "debugMenu": "Debug Menu", + "bgTaskStarted": "Background task started - check logs.", + "runBgCheckNow": "Run Background Update Check Now", "removeAppQuestion": { "one": "Supprimer l'application ?", "other": "Supprimer les applications ?" diff --git a/assets/translations/hu.json b/assets/translations/hu.json index bab012d..ff1c68f 100644 --- a/assets/translations/hu.json +++ b/assets/translations/hu.json @@ -255,6 +255,10 @@ "filterVersionsByRegEx": "Verziók szűrése reguláris kifejezéssel", "trySelectingSuggestedVersionCode": "Próbálja ki a javasolt verziókódú APK-t", "dontSortReleasesList": "Retain release order from API", + "reverseSort": "Reverse sorting", + "debugMenu": "Debug Menu", + "bgTaskStarted": "Background task started - check logs.", + "runBgCheckNow": "Run Background Update Check Now", "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 fad6392..3f3fc40 100644 --- a/assets/translations/it.json +++ b/assets/translations/it.json @@ -256,6 +256,10 @@ "filterVersionsByRegEx": "Filter Versions by Regular Expression", "trySelectingSuggestedVersionCode": "Try selecting suggested versionCode APK", "dontSortReleasesList": "Retain release order from API", + "reverseSort": "Reverse sorting", + "debugMenu": "Debug Menu", + "bgTaskStarted": "Background task started - check logs.", + "runBgCheckNow": "Run Background Update Check Now", "removeAppQuestion": { "one": "Rimuovere l'app?", "other": "Rimuovere le app?" diff --git a/assets/translations/ja.json b/assets/translations/ja.json index ec91884..4f6c398 100644 --- a/assets/translations/ja.json +++ b/assets/translations/ja.json @@ -259,6 +259,10 @@ "filterVersionsByRegEx": "正規表現でバージョンをフィルタリングする", "trySelectingSuggestedVersionCode": "提案されたバージョンコードのAPKを選択する", "dontSortReleasesList": "Retain release order from API", + "reverseSort": "Reverse sorting", + "debugMenu": "Debug Menu", + "bgTaskStarted": "Background task started - check logs.", + "runBgCheckNow": "Run Background Update Check Now", "removeAppQuestion": { "one": "アプリを削除しますか?", "other": "アプリを削除しますか?" diff --git a/assets/translations/pl.json b/assets/translations/pl.json index 4e8bd5c..6001dbc 100644 --- a/assets/translations/pl.json +++ b/assets/translations/pl.json @@ -262,6 +262,10 @@ "filterVersionsByRegEx": "Filtruj wersje według wyrażenia regularnego", "trySelectingSuggestedVersionCode": "Spróbuj wybierać sugerowany kod wersji APK", "dontSortReleasesList": "Retain release order from API", + "reverseSort": "Reverse sorting", + "debugMenu": "Debug Menu", + "bgTaskStarted": "Background task started - check logs.", + "runBgCheckNow": "Run Background Update Check Now", "removeAppQuestion": { "one": "Usunąć aplikację?", "few": "Usunąć aplikacje?", diff --git a/assets/translations/pt.json b/assets/translations/pt.json index d0e9809..6e26a2e 100644 --- a/assets/translations/pt.json +++ b/assets/translations/pt.json @@ -259,6 +259,10 @@ "filterVersionsByRegEx": "Filter Versions by Regular Expression", "trySelectingSuggestedVersionCode": "Try selecting suggested versionCode APK", "dontSortReleasesList": "Retain release order from API", + "reverseSort": "Reverse sorting", + "debugMenu": "Debug Menu", + "bgTaskStarted": "Background task started - check logs.", + "runBgCheckNow": "Run Background Update Check Now", "removeAppQuestion": { "one": "Remover App?", "other": "Remover Apps?" diff --git a/assets/translations/ru.json b/assets/translations/ru.json index 982641a..f9b78c0 100644 --- a/assets/translations/ru.json +++ b/assets/translations/ru.json @@ -256,6 +256,10 @@ "filterVersionsByRegEx": "Filter Versions by Regular Expression", "trySelectingSuggestedVersionCode": "Try selecting suggested versionCode APK", "dontSortReleasesList": "Retain release order from API", + "reverseSort": "Reverse sorting", + "debugMenu": "Debug Menu", + "bgTaskStarted": "Background task started - check logs.", + "runBgCheckNow": "Run Background Update Check Now", "removeAppQuestion": { "one": "Удалить приложение?", "other": "Удалить приложения?" diff --git a/assets/translations/zh.json b/assets/translations/zh.json index cea5130..fc8a11d 100644 --- a/assets/translations/zh.json +++ b/assets/translations/zh.json @@ -257,6 +257,10 @@ "filterVersionsByRegEx": "Filter Versions by Regular Expression", "trySelectingSuggestedVersionCode": "Try selecting suggested versionCode APK", "dontSortReleasesList": "Retain release order from API", + "reverseSort": "Reverse sorting", + "debugMenu": "Debug Menu", + "bgTaskStarted": "Background task started - check logs.", + "runBgCheckNow": "Run Background Update Check Now", "removeAppQuestion": { "one": "是否删除应用?", "other": "是否删除应用?" diff --git a/lib/app_sources/html.dart b/lib/app_sources/html.dart index 5522c62..60fc32d 100644 --- a/lib/app_sources/html.dart +++ b/lib/app_sources/html.dart @@ -93,6 +93,7 @@ class HTML extends AppSource { GeneratedFormSwitch('sortByFileNamesNotLinks', label: tr('sortByFileNamesNotLinks')) ], + [GeneratedFormSwitch('reverseSort', label: tr('reverseSort'))], [ GeneratedFormTextField('customLinkFilterRegex', label: tr('customLinkFilterRegex'), @@ -195,6 +196,9 @@ class HTML extends AppSource { ? compareAlphaNumeric(a.split('/').where((e) => e.isNotEmpty).last, b.split('/').where((e) => e.isNotEmpty).last) : compareAlphaNumeric(a, b)); + if (additionalSettings['reverseSort'] == true) { + links = links.reversed.toList(); + } if ((additionalSettings['apkFilterRegEx'] as String?)?.isNotEmpty == true) { var reg = RegExp(additionalSettings['apkFilterRegEx']); diff --git a/lib/pages/settings.dart b/lib/pages/settings.dart index ec3d1d9..02237de 100644 --- a/lib/pages/settings.dart +++ b/lib/pages/settings.dart @@ -558,7 +558,7 @@ class _SettingsPageState extends State { Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - const Flexible(child: Text('Debug Menu')), + Flexible(child: Text(tr('debugMenu'))), Switch( value: settingsProvider.showDebugOpts, onChanged: (value) { @@ -577,12 +577,9 @@ class _SettingsPageState extends State { const Duration(seconds: 0), bgUpdateCheckAlarmId + 200, bgUpdateCheck); - showError( - 'Background task started - check logs.', - context); + showError(tr('bgTaskStarted'), context); }, - child: - const Text('Run Background Update Check Now')) + child: Text(tr('runBgCheckNow'))) ], ), ]), From 9658a65661e6bcd6bd22c6025b34e5c6387e8a8e Mon Sep 17 00:00:00 2001 From: Imran Remtulla Date: Sat, 23 Sep 2023 13:36:46 -0400 Subject: [PATCH 6/6] Upgrade packages, increment version --- lib/main.dart | 2 +- pubspec.lock | 24 ++++++++++++------------ pubspec.yaml | 2 +- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 22b9f36..2012280 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.18'; +const String currentVersion = '0.14.19'; const String currentReleaseTag = 'v$currentVersion-beta'; // KEEP THIS IN SYNC WITH GITHUB RELEASES diff --git a/pubspec.lock b/pubspec.lock index 33758ce..a027ead 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -46,10 +46,10 @@ packages: dependency: transitive description: name: archive - sha256: e0902a06f0e00414e4e3438a084580161279f137aeb862274710f29ec10cf01e + sha256: "20071638cbe4e5964a427cfa0e86dce55d060bc7d82d56f3554095d7239a8765" url: "https://pub.dev" source: hosted - version: "3.3.9" + version: "3.4.2" args: dependency: transitive description: @@ -386,10 +386,10 @@ packages: dependency: transitive description: name: image - sha256: a72242c9a0ffb65d03de1b7113bc4e189686fc07c7147b8b41811d0dd0e0d9bf + sha256: "6e703d5e2f8c63fb31a77753915c1ec8baebde8088844e0d29f71b8f0b108888" url: "https://pub.dev" source: hosted - version: "4.0.17" + version: "4.1.0" intl: dependency: transitive description: @@ -546,10 +546,10 @@ packages: dependency: transitive description: name: permission_handler_android - sha256: f23cfe9af0d49c6b9fd8a8b09f7b3301ca7e346204939b5afef4404d36d2608f + sha256: f2543a236584a5e8be79076f858022f100ce690e31530e6fa4c32ac94f276d3a url: "https://pub.dev" source: hosted - version: "11.0.1" + version: "11.0.3" permission_handler_apple: dependency: transitive description: @@ -903,26 +903,26 @@ packages: dependency: transitive description: name: webview_flutter_wkwebview - sha256: d2f7241849582da80b79acb03bb936422412ce5c0c79fb5f6a1de5421a5aecc4 + sha256: "485af05f2c5f83c7f78c20e236b170ad02df7153b299ae9917345be43871d29f" url: "https://pub.dev" source: hosted - version: "3.7.4" + version: "3.8.0" win32: dependency: transitive description: name: win32 - sha256: "9e82a402b7f3d518fb9c02d0e9ae45952df31b9bf34d77baf19da2de03fc2aaa" + sha256: c97defd418eef4ec88c0d1652cdce84b9f7b63dd7198e266d06ac1710d527067 url: "https://pub.dev" source: hosted - version: "5.0.7" + version: "5.0.8" win32_registry: dependency: transitive description: name: win32_registry - sha256: e4506d60b7244251bc59df15656a3093501c37fb5af02105a944d73eb95be4c9 + sha256: "41fd8a189940d8696b1b810efb9abcf60827b6cbfab90b0c43e8439e3a39d85a" url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "1.1.2" xdg_directories: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 15efb86..1a1b034 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.18+210 # When changing this, update the tag in main() accordingly +version: 0.14.19+211 # When changing this, update the tag in main() accordingly environment: sdk: '>=3.0.0 <4.0.0'