From c31a1912a5770169dce859df9d294a298593f12f Mon Sep 17 00:00:00 2001 From: Imran Remtulla Date: Fri, 19 Jan 2024 23:22:00 -0500 Subject: [PATCH] Add invert option to apk filter regex --- 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/nl.json | 1 + assets/translations/pl.json | 1 + assets/translations/pt.json | 1 + assets/translations/ru.json | 1 + assets/translations/sv.json | 1 + assets/translations/tr.json | 1 + assets/translations/vi.json | 1 + assets/translations/zh.json | 1 + lib/app_sources/github.dart | 7 ++----- lib/app_sources/html.dart | 8 ++------ lib/providers/source_provider.dart | 26 +++++++++++++++++++++----- 21 files changed, 43 insertions(+), 16 deletions(-) diff --git a/assets/translations/bs.json b/assets/translations/bs.json index 132c2aa..c68ac07 100644 --- a/assets/translations/bs.json +++ b/assets/translations/bs.json @@ -299,6 +299,7 @@ "pseudoVersionInUse": "A Pseudo-Version is in Use", "installed": "Installed", "latest": "Latest", + "invertRegEx": "Invert regular expression", "removeAppQuestion": { "one": "Želite li ukloniti aplikaciju?", "other": "Želite li ukloniti aplikacije?" diff --git a/assets/translations/cs.json b/assets/translations/cs.json index 92b5fef..9dfac99 100644 --- a/assets/translations/cs.json +++ b/assets/translations/cs.json @@ -299,6 +299,7 @@ "pseudoVersionInUse": "A Pseudo-Version is in Use", "installed": "Installed", "latest": "Latest", + "invertRegEx": "Invert regular expression", "removeAppQuestion": { "one": "Odstranit Apku?", "other": "Odstranit Apky?" diff --git a/assets/translations/de.json b/assets/translations/de.json index d2abb03..fe843d4 100644 --- a/assets/translations/de.json +++ b/assets/translations/de.json @@ -301,6 +301,7 @@ "pseudoVersionInUse": "A Pseudo-Version is in Use", "installed": "Installed", "latest": "Latest", + "invertRegEx": "Invert regular expression", "removeAppQuestion": { "one": "App entfernen?", "other": "Apps entfernen?" diff --git a/assets/translations/en.json b/assets/translations/en.json index 7f801e1..e17fd51 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -301,6 +301,7 @@ "pseudoVersionInUse": "A Pseudo-Version is in Use", "installed": "Installed", "latest": "Latest", + "invertRegEx": "Invert regular expression", "removeAppQuestion": { "one": "Remove App?", "other": "Remove Apps?" diff --git a/assets/translations/es.json b/assets/translations/es.json index d8d2d8b..9b3601e 100644 --- a/assets/translations/es.json +++ b/assets/translations/es.json @@ -299,6 +299,7 @@ "pseudoVersionInUse": "A Pseudo-Version is in Use", "installed": "Installed", "latest": "Latest", + "invertRegEx": "Invert regular expression", "removeAppQuestion": { "one": "¿Eliminar Aplicación?", "other": "¿Eliminar Aplicaciones?" diff --git a/assets/translations/fa.json b/assets/translations/fa.json index 4d35fc9..439d540 100644 --- a/assets/translations/fa.json +++ b/assets/translations/fa.json @@ -299,6 +299,7 @@ "pseudoVersionInUse": "A Pseudo-Version is in Use", "installed": "Installed", "latest": "Latest", + "invertRegEx": "Invert regular expression", "removeAppQuestion": { "one": "برنامه حذف شود؟", "other": "برنامه ها حذف شوند؟" diff --git a/assets/translations/fr.json b/assets/translations/fr.json index 6d17bd1..2524274 100644 --- a/assets/translations/fr.json +++ b/assets/translations/fr.json @@ -299,6 +299,7 @@ "pseudoVersionInUse": "A Pseudo-Version is in Use", "installed": "Installed", "latest": "Latest", + "invertRegEx": "Invert regular expression", "removeAppQuestion": { "one": "Supprimer l'application ?", "other": "Supprimer les applications ?" diff --git a/assets/translations/hu.json b/assets/translations/hu.json index ba7940a..37388f2 100644 --- a/assets/translations/hu.json +++ b/assets/translations/hu.json @@ -299,6 +299,7 @@ "pseudoVersionInUse": "A Pseudo-Version is in Use", "installed": "Installed", "latest": "Latest", + "invertRegEx": "Invert regular expression", "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 1a8205b..179fa00 100644 --- a/assets/translations/it.json +++ b/assets/translations/it.json @@ -299,6 +299,7 @@ "pseudoVersionInUse": "A Pseudo-Version is in Use", "installed": "Installed", "latest": "Latest", + "invertRegEx": "Invert regular expression", "removeAppQuestion": { "one": "Rimuovere l'app?", "other": "Rimuovere le app?" diff --git a/assets/translations/ja.json b/assets/translations/ja.json index c15b127..375a286 100644 --- a/assets/translations/ja.json +++ b/assets/translations/ja.json @@ -301,6 +301,7 @@ "pseudoVersionInUse": "A Pseudo-Version is in Use", "installed": "Installed", "latest": "Latest", + "invertRegEx": "Invert regular expression", "removeAppQuestion": { "one": "アプリを削除しますか?", "other": "アプリを削除しますか?" diff --git a/assets/translations/nl.json b/assets/translations/nl.json index e8b13cf..25c50ec 100644 --- a/assets/translations/nl.json +++ b/assets/translations/nl.json @@ -299,6 +299,7 @@ "pseudoVersionInUse": "A Pseudo-Version is in Use", "installed": "Installed", "latest": "Latest", + "invertRegEx": "Invert regular expression", "removeAppQuestion": { "one": "App verwijderen?", "other": "Apps verwijderen?" diff --git a/assets/translations/pl.json b/assets/translations/pl.json index 7ed2a48..323a737 100644 --- a/assets/translations/pl.json +++ b/assets/translations/pl.json @@ -299,6 +299,7 @@ "pseudoVersionInUse": "A Pseudo-Version is in Use", "installed": "Installed", "latest": "Latest", + "invertRegEx": "Invert regular expression", "removeAppQuestion": { "one": "Usunąć aplikację?", "few": "Usunąć aplikacje?", diff --git a/assets/translations/pt.json b/assets/translations/pt.json index 9169f95..fcd899f 100644 --- a/assets/translations/pt.json +++ b/assets/translations/pt.json @@ -299,6 +299,7 @@ "pseudoVersionInUse": "A Pseudo-Version is in Use", "installed": "Installed", "latest": "Latest", + "invertRegEx": "Invert regular expression", "removeAppQuestion": { "one": "Remover aplicativo?", "other": "Remover aplicativos?" diff --git a/assets/translations/ru.json b/assets/translations/ru.json index dbbaaaf..3f12321 100644 --- a/assets/translations/ru.json +++ b/assets/translations/ru.json @@ -301,6 +301,7 @@ "pseudoVersionInUse": "A Pseudo-Version is in Use", "installed": "Installed", "latest": "Latest", + "invertRegEx": "Invert regular expression", "removeAppQuestion": { "one": "Удалить приложение?", "other": "Удалить приложения?" diff --git a/assets/translations/sv.json b/assets/translations/sv.json index eb91710..404fa9d 100644 --- a/assets/translations/sv.json +++ b/assets/translations/sv.json @@ -285,6 +285,7 @@ "pseudoVersionInUse": "A Pseudo-Version is in Use", "installed": "Installed", "latest": "Latest", + "invertRegEx": "Invert regular expression", "removeAppQuestion": { "one": "Ta Bort App?", "other": "Ta Bort Appar?" diff --git a/assets/translations/tr.json b/assets/translations/tr.json index 1d1720a..debb8cf 100644 --- a/assets/translations/tr.json +++ b/assets/translations/tr.json @@ -299,6 +299,7 @@ "pseudoVersionInUse": "A Pseudo-Version is in Use", "installed": "Installed", "latest": "Latest", + "invertRegEx": "Invert regular expression", "removeAppQuestion": { "one": "Uygulamayı Kaldır?", "other": "Uygulamaları Kaldır?" diff --git a/assets/translations/vi.json b/assets/translations/vi.json index c8f9c5f..eb90c3c 100644 --- a/assets/translations/vi.json +++ b/assets/translations/vi.json @@ -297,6 +297,7 @@ "pseudoVersionInUse": "A Pseudo-Version is in Use", "installed": "Installed", "latest": "Latest", + "invertRegEx": "Invert regular expression", "removeAppQuestion":{ "one": "Gỡ ứng dụng?", "other": "Gỡ ứng dụng?" diff --git a/assets/translations/zh.json b/assets/translations/zh.json index 2c5470c..391c429 100644 --- a/assets/translations/zh.json +++ b/assets/translations/zh.json @@ -301,6 +301,7 @@ "pseudoVersionInUse": "A Pseudo-Version is in Use", "installed": "Installed", "latest": "Latest", + "invertRegEx": "Invert regular expression", "removeAppQuestion": { "one": "是否删除应用?", "other": "是否删除应用?" diff --git a/lib/app_sources/github.dart b/lib/app_sources/github.dart index e510014..151e159 100644 --- a/lib/app_sources/github.dart +++ b/lib/app_sources/github.dart @@ -382,11 +382,8 @@ class GitHub extends AppSource { continue; } var apkUrls = getReleaseAPKUrls(releases[i]); - if (additionalSettings['apkFilterRegEx'] != null) { - var reg = RegExp(additionalSettings['apkFilterRegEx']); - apkUrls = - apkUrls.where((element) => reg.hasMatch(element.key)).toList(); - } + apkUrls = filterApks(apkUrls, additionalSettings['apkFilterRegEx'], + additionalSettings['invertAPKFilter']); if (apkUrls.isEmpty && additionalSettings['trackOnly'] != true) { continue; } diff --git a/lib/app_sources/html.dart b/lib/app_sources/html.dart index fdb94a0..db413ec 100644 --- a/lib/app_sources/html.dart +++ b/lib/app_sources/html.dart @@ -300,12 +300,8 @@ class HTML extends AppSource { versionExtractionWholePageString = res.body.split('\r\n').join('\n').split('\n').join('\\n'); links = await grabLinksCommon(res, additionalSettings); - - if ((additionalSettings['apkFilterRegEx'] as String?)?.isNotEmpty == - true) { - var reg = RegExp(additionalSettings['apkFilterRegEx']); - links = links.where((element) => reg.hasMatch(element.key)).toList(); - } + links = filterApks(links, additionalSettings['apkFilterRegEx'], + additionalSettings['invertAPKFilter']); if (links.isEmpty) { throw NoReleasesError(); } diff --git a/lib/providers/source_provider.dart b/lib/providers/source_provider.dart index b1a7242..7930840 100644 --- a/lib/providers/source_provider.dart +++ b/lib/providers/source_provider.dart @@ -504,6 +504,11 @@ abstract class AppSource { } ]) ], + [ + GeneratedFormSwitch('invertAPKFilter', + label: '${tr('invertRegEx')} (${tr('filterAPKsByRegEx')})', + defaultValue: false) + ], [ GeneratedFormSwitch('autoApkFilterByArch', label: tr('autoApkFilterByArch'), defaultValue: true) @@ -708,6 +713,20 @@ String? extractVersion(String? versionExtractionRegEx, String? matchGroupString, } } +List> filterApks( + List> apkUrls, + String? apkFilterRegEx, + bool? invert) { + if (apkFilterRegEx?.isNotEmpty == true) { + var reg = RegExp(apkFilterRegEx!); + apkUrls = apkUrls.where((element) { + var hasMatch = reg.hasMatch(element.key); + return invert == true ? !hasMatch : hasMatch; + }).toList(); + } + return apkUrls; +} + class SourceProvider { // Add more source classes here so they are available via the service List get sources => [ @@ -825,11 +844,8 @@ class SourceProvider { apk.releaseDate != null) { apk.version = apk.releaseDate!.microsecondsSinceEpoch.toString(); } - if (additionalSettings['apkFilterRegEx'] != null) { - var reg = RegExp(additionalSettings['apkFilterRegEx']); - apk.apkUrls = - apk.apkUrls.where((element) => reg.hasMatch(element.key)).toList(); - } + apk.apkUrls = filterApks(apk.apkUrls, additionalSettings['apkFilterRegEx'], + additionalSettings['invertAPKFilter']); if (apk.apkUrls.isEmpty && !trackOnly) { throw NoAPKError(); }