From c10a63e76e81772854303e39582b2360b6e05efc Mon Sep 17 00:00:00 2001 From: Imran Remtulla Date: Sat, 23 Sep 2023 12:48:21 -0400 Subject: [PATCH] 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)]) ],