diff --git a/lib/app_sources/html.dart b/lib/app_sources/html.dart index 2f01918..5e66706 100644 --- a/lib/app_sources/html.dart +++ b/lib/app_sources/html.dart @@ -1,5 +1,4 @@ import 'package:easy_localization/easy_localization.dart'; -import 'package:flutter/material.dart'; import 'package:html/parser.dart'; import 'package:http/http.dart'; import 'package:obtainium/components/generated_form.dart'; @@ -100,28 +99,6 @@ class HTML extends AppSource { } ]) ], - [ - GeneratedFormTextField('versionExtractionRegEx', - label: tr('versionExtractionRegEx'), - required: false, - additionalValidators: [(value) => regExValidator(value)]), - ], - [ - GeneratedFormTextField('matchGroupToUse', - label: tr('matchGroupToUse'), - required: false, - hint: '0', - textInputType: const TextInputType.numberWithOptions(), - additionalValidators: [ - (value) { - if (value?.isEmpty == true) { - value = null; - } - value ??= '0'; - return intValidator(value); - } - ]) - ], [ GeneratedFormSwitch('versionExtractWholePage', label: tr('versionExtractWholePage')) @@ -291,7 +268,7 @@ class HTML extends AppSource { matchGroupString = "0"; } version = match.last.group(int.parse(matchGroupString)); - if (version?.isEmpty == true) { + if (version?.isNotEmpty != true) { throw NoVersionError(); } } diff --git a/lib/providers/source_provider.dart b/lib/providers/source_provider.dart index ef0aa8d..e0aa82b 100644 --- a/lib/providers/source_provider.dart +++ b/lib/providers/source_provider.dart @@ -5,6 +5,7 @@ import 'dart:convert'; import 'package:device_info_plus/device_info_plus.dart'; import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; import 'package:html/dom.dart'; import 'package:http/http.dart'; import 'package:obtainium/app_sources/apkmirror.dart'; @@ -444,6 +445,28 @@ abstract class AppSource { label: tr('trackOnly'), ) ], + [ + GeneratedFormTextField('versionExtractionRegEx', + label: tr('versionExtractionRegEx'), + required: false, + additionalValidators: [(value) => regExValidator(value)]), + ], + [ + GeneratedFormTextField('matchGroupToUse', + label: tr('matchGroupToUse'), + required: false, + hint: '0', + textInputType: const TextInputType.numberWithOptions(), + additionalValidators: [ + (value) { + if (value?.isEmpty == true) { + value = null; + } + value ??= '0'; + return intValidator(value); + } + ]) + ], [ GeneratedFormDropdown( 'versionDetection', @@ -679,6 +702,30 @@ class SourceProvider { String standardUrl = source.standardizeUrl(url); APKDetails apk = await source.getLatestAPKDetails(standardUrl, additionalSettings); + + 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!; + } + } + if (additionalSettings['versionDetection'] == 'releaseDateAsVersion' && apk.releaseDate != null) { apk.version = apk.releaseDate!.microsecondsSinceEpoch.toString();