Add invert option to apk filter regex

This commit is contained in:
Imran Remtulla
2024-01-19 23:22:00 -05:00
parent 99da1f8481
commit c31a1912a5
21 changed files with 43 additions and 16 deletions

View File

@@ -299,6 +299,7 @@
"pseudoVersionInUse": "A Pseudo-Version is in Use", "pseudoVersionInUse": "A Pseudo-Version is in Use",
"installed": "Installed", "installed": "Installed",
"latest": "Latest", "latest": "Latest",
"invertRegEx": "Invert regular expression",
"removeAppQuestion": { "removeAppQuestion": {
"one": "Želite li ukloniti aplikaciju?", "one": "Želite li ukloniti aplikaciju?",
"other": "Želite li ukloniti aplikacije?" "other": "Želite li ukloniti aplikacije?"

View File

@@ -299,6 +299,7 @@
"pseudoVersionInUse": "A Pseudo-Version is in Use", "pseudoVersionInUse": "A Pseudo-Version is in Use",
"installed": "Installed", "installed": "Installed",
"latest": "Latest", "latest": "Latest",
"invertRegEx": "Invert regular expression",
"removeAppQuestion": { "removeAppQuestion": {
"one": "Odstranit Apku?", "one": "Odstranit Apku?",
"other": "Odstranit Apky?" "other": "Odstranit Apky?"

View File

@@ -301,6 +301,7 @@
"pseudoVersionInUse": "A Pseudo-Version is in Use", "pseudoVersionInUse": "A Pseudo-Version is in Use",
"installed": "Installed", "installed": "Installed",
"latest": "Latest", "latest": "Latest",
"invertRegEx": "Invert regular expression",
"removeAppQuestion": { "removeAppQuestion": {
"one": "App entfernen?", "one": "App entfernen?",
"other": "Apps entfernen?" "other": "Apps entfernen?"

View File

@@ -301,6 +301,7 @@
"pseudoVersionInUse": "A Pseudo-Version is in Use", "pseudoVersionInUse": "A Pseudo-Version is in Use",
"installed": "Installed", "installed": "Installed",
"latest": "Latest", "latest": "Latest",
"invertRegEx": "Invert regular expression",
"removeAppQuestion": { "removeAppQuestion": {
"one": "Remove App?", "one": "Remove App?",
"other": "Remove Apps?" "other": "Remove Apps?"

View File

@@ -299,6 +299,7 @@
"pseudoVersionInUse": "A Pseudo-Version is in Use", "pseudoVersionInUse": "A Pseudo-Version is in Use",
"installed": "Installed", "installed": "Installed",
"latest": "Latest", "latest": "Latest",
"invertRegEx": "Invert regular expression",
"removeAppQuestion": { "removeAppQuestion": {
"one": "¿Eliminar Aplicación?", "one": "¿Eliminar Aplicación?",
"other": "¿Eliminar Aplicaciones?" "other": "¿Eliminar Aplicaciones?"

View File

@@ -299,6 +299,7 @@
"pseudoVersionInUse": "A Pseudo-Version is in Use", "pseudoVersionInUse": "A Pseudo-Version is in Use",
"installed": "Installed", "installed": "Installed",
"latest": "Latest", "latest": "Latest",
"invertRegEx": "Invert regular expression",
"removeAppQuestion": { "removeAppQuestion": {
"one": "برنامه حذف شود؟", "one": "برنامه حذف شود؟",
"other": "برنامه ها حذف شوند؟" "other": "برنامه ها حذف شوند؟"

View File

@@ -299,6 +299,7 @@
"pseudoVersionInUse": "A Pseudo-Version is in Use", "pseudoVersionInUse": "A Pseudo-Version is in Use",
"installed": "Installed", "installed": "Installed",
"latest": "Latest", "latest": "Latest",
"invertRegEx": "Invert regular expression",
"removeAppQuestion": { "removeAppQuestion": {
"one": "Supprimer l'application ?", "one": "Supprimer l'application ?",
"other": "Supprimer les applications ?" "other": "Supprimer les applications ?"

View File

@@ -299,6 +299,7 @@
"pseudoVersionInUse": "A Pseudo-Version is in Use", "pseudoVersionInUse": "A Pseudo-Version is in Use",
"installed": "Installed", "installed": "Installed",
"latest": "Latest", "latest": "Latest",
"invertRegEx": "Invert regular expression",
"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?"

View File

@@ -299,6 +299,7 @@
"pseudoVersionInUse": "A Pseudo-Version is in Use", "pseudoVersionInUse": "A Pseudo-Version is in Use",
"installed": "Installed", "installed": "Installed",
"latest": "Latest", "latest": "Latest",
"invertRegEx": "Invert regular expression",
"removeAppQuestion": { "removeAppQuestion": {
"one": "Rimuovere l'app?", "one": "Rimuovere l'app?",
"other": "Rimuovere le app?" "other": "Rimuovere le app?"

View File

@@ -301,6 +301,7 @@
"pseudoVersionInUse": "A Pseudo-Version is in Use", "pseudoVersionInUse": "A Pseudo-Version is in Use",
"installed": "Installed", "installed": "Installed",
"latest": "Latest", "latest": "Latest",
"invertRegEx": "Invert regular expression",
"removeAppQuestion": { "removeAppQuestion": {
"one": "アプリを削除しますか?", "one": "アプリを削除しますか?",
"other": "アプリを削除しますか?" "other": "アプリを削除しますか?"

View File

@@ -299,6 +299,7 @@
"pseudoVersionInUse": "A Pseudo-Version is in Use", "pseudoVersionInUse": "A Pseudo-Version is in Use",
"installed": "Installed", "installed": "Installed",
"latest": "Latest", "latest": "Latest",
"invertRegEx": "Invert regular expression",
"removeAppQuestion": { "removeAppQuestion": {
"one": "App verwijderen?", "one": "App verwijderen?",
"other": "Apps verwijderen?" "other": "Apps verwijderen?"

View File

@@ -299,6 +299,7 @@
"pseudoVersionInUse": "A Pseudo-Version is in Use", "pseudoVersionInUse": "A Pseudo-Version is in Use",
"installed": "Installed", "installed": "Installed",
"latest": "Latest", "latest": "Latest",
"invertRegEx": "Invert regular expression",
"removeAppQuestion": { "removeAppQuestion": {
"one": "Usunąć aplikację?", "one": "Usunąć aplikację?",
"few": "Usunąć aplikacje?", "few": "Usunąć aplikacje?",

View File

@@ -299,6 +299,7 @@
"pseudoVersionInUse": "A Pseudo-Version is in Use", "pseudoVersionInUse": "A Pseudo-Version is in Use",
"installed": "Installed", "installed": "Installed",
"latest": "Latest", "latest": "Latest",
"invertRegEx": "Invert regular expression",
"removeAppQuestion": { "removeAppQuestion": {
"one": "Remover aplicativo?", "one": "Remover aplicativo?",
"other": "Remover aplicativos?" "other": "Remover aplicativos?"

View File

@@ -301,6 +301,7 @@
"pseudoVersionInUse": "A Pseudo-Version is in Use", "pseudoVersionInUse": "A Pseudo-Version is in Use",
"installed": "Installed", "installed": "Installed",
"latest": "Latest", "latest": "Latest",
"invertRegEx": "Invert regular expression",
"removeAppQuestion": { "removeAppQuestion": {
"one": "Удалить приложение?", "one": "Удалить приложение?",
"other": "Удалить приложения?" "other": "Удалить приложения?"

View File

@@ -285,6 +285,7 @@
"pseudoVersionInUse": "A Pseudo-Version is in Use", "pseudoVersionInUse": "A Pseudo-Version is in Use",
"installed": "Installed", "installed": "Installed",
"latest": "Latest", "latest": "Latest",
"invertRegEx": "Invert regular expression",
"removeAppQuestion": { "removeAppQuestion": {
"one": "Ta Bort App?", "one": "Ta Bort App?",
"other": "Ta Bort Appar?" "other": "Ta Bort Appar?"

View File

@@ -299,6 +299,7 @@
"pseudoVersionInUse": "A Pseudo-Version is in Use", "pseudoVersionInUse": "A Pseudo-Version is in Use",
"installed": "Installed", "installed": "Installed",
"latest": "Latest", "latest": "Latest",
"invertRegEx": "Invert regular expression",
"removeAppQuestion": { "removeAppQuestion": {
"one": "Uygulamayı Kaldır?", "one": "Uygulamayı Kaldır?",
"other": "Uygulamaları Kaldır?" "other": "Uygulamaları Kaldır?"

View File

@@ -297,6 +297,7 @@
"pseudoVersionInUse": "A Pseudo-Version is in Use", "pseudoVersionInUse": "A Pseudo-Version is in Use",
"installed": "Installed", "installed": "Installed",
"latest": "Latest", "latest": "Latest",
"invertRegEx": "Invert regular expression",
"removeAppQuestion":{ "removeAppQuestion":{
"one": "Gỡ ứng dụng?", "one": "Gỡ ứng dụng?",
"other": "Gỡ ứng dụng?" "other": "Gỡ ứng dụng?"

View File

@@ -301,6 +301,7 @@
"pseudoVersionInUse": "A Pseudo-Version is in Use", "pseudoVersionInUse": "A Pseudo-Version is in Use",
"installed": "Installed", "installed": "Installed",
"latest": "Latest", "latest": "Latest",
"invertRegEx": "Invert regular expression",
"removeAppQuestion": { "removeAppQuestion": {
"one": "是否删除应用?", "one": "是否删除应用?",
"other": "是否删除应用?" "other": "是否删除应用?"

View File

@@ -382,11 +382,8 @@ class GitHub extends AppSource {
continue; continue;
} }
var apkUrls = getReleaseAPKUrls(releases[i]); var apkUrls = getReleaseAPKUrls(releases[i]);
if (additionalSettings['apkFilterRegEx'] != null) { apkUrls = filterApks(apkUrls, additionalSettings['apkFilterRegEx'],
var reg = RegExp(additionalSettings['apkFilterRegEx']); additionalSettings['invertAPKFilter']);
apkUrls =
apkUrls.where((element) => reg.hasMatch(element.key)).toList();
}
if (apkUrls.isEmpty && additionalSettings['trackOnly'] != true) { if (apkUrls.isEmpty && additionalSettings['trackOnly'] != true) {
continue; continue;
} }

View File

@@ -300,12 +300,8 @@ class HTML extends AppSource {
versionExtractionWholePageString = versionExtractionWholePageString =
res.body.split('\r\n').join('\n').split('\n').join('\\n'); res.body.split('\r\n').join('\n').split('\n').join('\\n');
links = await grabLinksCommon(res, additionalSettings); links = await grabLinksCommon(res, additionalSettings);
links = filterApks(links, additionalSettings['apkFilterRegEx'],
if ((additionalSettings['apkFilterRegEx'] as String?)?.isNotEmpty == additionalSettings['invertAPKFilter']);
true) {
var reg = RegExp(additionalSettings['apkFilterRegEx']);
links = links.where((element) => reg.hasMatch(element.key)).toList();
}
if (links.isEmpty) { if (links.isEmpty) {
throw NoReleasesError(); throw NoReleasesError();
} }

View File

@@ -504,6 +504,11 @@ abstract class AppSource {
} }
]) ])
], ],
[
GeneratedFormSwitch('invertAPKFilter',
label: '${tr('invertRegEx')} (${tr('filterAPKsByRegEx')})',
defaultValue: false)
],
[ [
GeneratedFormSwitch('autoApkFilterByArch', GeneratedFormSwitch('autoApkFilterByArch',
label: tr('autoApkFilterByArch'), defaultValue: true) label: tr('autoApkFilterByArch'), defaultValue: true)
@@ -708,6 +713,20 @@ String? extractVersion(String? versionExtractionRegEx, String? matchGroupString,
} }
} }
List<MapEntry<String, String>> filterApks(
List<MapEntry<String, String>> 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 { class SourceProvider {
// Add more source classes here so they are available via the service // Add more source classes here so they are available via the service
List<AppSource> get sources => [ List<AppSource> get sources => [
@@ -825,11 +844,8 @@ class SourceProvider {
apk.releaseDate != null) { apk.releaseDate != null) {
apk.version = apk.releaseDate!.microsecondsSinceEpoch.toString(); apk.version = apk.releaseDate!.microsecondsSinceEpoch.toString();
} }
if (additionalSettings['apkFilterRegEx'] != null) { apk.apkUrls = filterApks(apk.apkUrls, additionalSettings['apkFilterRegEx'],
var reg = RegExp(additionalSettings['apkFilterRegEx']); additionalSettings['invertAPKFilter']);
apk.apkUrls =
apk.apkUrls.where((element) => reg.hasMatch(element.key)).toList();
}
if (apk.apkUrls.isEmpty && !trackOnly) { if (apk.apkUrls.isEmpty && !trackOnly) {
throw NoAPKError(); throw NoAPKError();
} }