From 355450e82d20821010add4f02babc4627adcdb99 Mon Sep 17 00:00:00 2001 From: Imran Remtulla Date: Wed, 3 Jan 2024 19:28:45 -0500 Subject: [PATCH] Merge duplicate version extraction code into one function --- lib/app_sources/html.dart | 26 ++++------------- lib/providers/source_provider.dart | 46 ++++++++++++++++++------------ 2 files changed, 34 insertions(+), 38 deletions(-) diff --git a/lib/app_sources/html.dart b/lib/app_sources/html.dart index 5e66706..45c2048 100644 --- a/lib/app_sources/html.dart +++ b/lib/app_sources/html.dart @@ -252,26 +252,12 @@ class HTML extends AppSource { if (additionalSettings['supportFixedAPKURL'] != true) { version = rel.hashCode.toString(); } - var versionExtractionRegEx = - additionalSettings['versionExtractionRegEx'] as String?; - if (versionExtractionRegEx?.isNotEmpty == true) { - var match = RegExp(versionExtractionRegEx!).allMatches( - additionalSettings['versionExtractWholePage'] == true - ? res.body.split('\r\n').join('\n').split('\n').join('\\n') - : rel); - if (match.isEmpty) { - throw NoVersionError(); - } - String matchGroupString = - (additionalSettings['matchGroupToUse'] as String).trim(); - if (matchGroupString.isEmpty) { - matchGroupString = "0"; - } - version = match.last.group(int.parse(matchGroupString)); - if (version?.isNotEmpty != true) { - throw NoVersionError(); - } - } + version = extractVersion( + additionalSettings['versionExtractionRegEx'] as String?, + additionalSettings['matchGroupToUse'] as String?, + additionalSettings['versionExtractWholePage'] == true + ? res.body.split('\r\n').join('\n').split('\n').join('\\n') + : rel); rel = ensureAbsoluteUrl(rel, uri); version ??= (await checkDownloadHash(rel)).toString(); return APKDetails(version, [rel].map((e) => MapEntry(e, e)).toList(), diff --git a/lib/providers/source_provider.dart b/lib/providers/source_provider.dart index e0aa82b..fe18d22 100644 --- a/lib/providers/source_provider.dart +++ b/lib/providers/source_provider.dart @@ -603,6 +603,28 @@ bool isTempId(App app) { return RegExp('^[0-9]+\$').hasMatch(app.id); } +String? extractVersion(String? versionExtractionRegEx, String? matchGroupString, + String stringToCheck) { + if (versionExtractionRegEx?.isNotEmpty == true) { + String? version = stringToCheck; + var match = RegExp(versionExtractionRegEx!).allMatches(version); + if (match.isEmpty) { + throw NoVersionError(); + } + matchGroupString = matchGroupString?.trim() ?? ''; + if (matchGroupString.isEmpty) { + matchGroupString = "0"; + } + version = match.last.group(int.parse(matchGroupString)); + if (version?.isNotEmpty != true) { + throw NoVersionError(); + } + return version!; + } else { + return null; + } +} + class SourceProvider { // Add more source classes here so they are available via the service List get sources => [ @@ -705,24 +727,12 @@ class SourceProvider { if (source.runtimeType != HTML().runtimeType) { // HTML does it separately - var versionExtractionRegEx = - additionalSettings['versionExtractionRegEx'] as String?; - if (versionExtractionRegEx?.isNotEmpty == true) { - String? version = apk.version; - var match = RegExp(versionExtractionRegEx!).allMatches(apk.version); - if (match.isEmpty) { - throw NoVersionError(); - } - String matchGroupString = - (additionalSettings['matchGroupToUse'] as String).trim(); - if (matchGroupString.isEmpty) { - matchGroupString = "0"; - } - version = match.last.group(int.parse(matchGroupString)); - if (version?.isNotEmpty != true) { - throw NoVersionError(); - } - apk.version = version!; + String? extractedVersion = extractVersion( + additionalSettings['versionExtractionRegEx'] as String?, + additionalSettings['matchGroupToUse'] as String?, + apk.version); + if (extractedVersion != null) { + apk.version = extractedVersion; } }