mirror of
				https://github.com/ImranR98/Obtainium.git
				synced 2025-10-31 05:23:28 +01:00 
			
		
		
		
	Added prev. rel. and regex title filter support to APKMirror
This commit is contained in:
		| @@ -1,7 +1,9 @@ | |||||||
| import 'dart:io'; | import 'dart:io'; | ||||||
|  |  | ||||||
|  | import 'package:easy_localization/easy_localization.dart'; | ||||||
| import 'package:html/parser.dart'; | import 'package:html/parser.dart'; | ||||||
| import 'package:http/http.dart'; | import 'package:http/http.dart'; | ||||||
|  | import 'package:obtainium/components/generated_form.dart'; | ||||||
| import 'package:obtainium/custom_errors.dart'; | import 'package:obtainium/custom_errors.dart'; | ||||||
| import 'package:obtainium/providers/source_provider.dart'; | import 'package:obtainium/providers/source_provider.dart'; | ||||||
|  |  | ||||||
| @@ -9,6 +11,23 @@ class APKMirror extends AppSource { | |||||||
|   APKMirror() { |   APKMirror() { | ||||||
|     host = 'apkmirror.com'; |     host = 'apkmirror.com'; | ||||||
|     enforceTrackOnly = true; |     enforceTrackOnly = true; | ||||||
|  |  | ||||||
|  |     additionalSourceAppSpecificSettingFormItems = [ | ||||||
|  |       [ | ||||||
|  |         GeneratedFormSwitch('fallbackToOlderReleases', | ||||||
|  |             label: tr('fallbackToOlderReleases'), defaultValue: true) | ||||||
|  |       ], | ||||||
|  |       [ | ||||||
|  |         GeneratedFormTextField('filterReleaseTitlesByRegEx', | ||||||
|  |             label: tr('filterReleaseTitlesByRegEx'), | ||||||
|  |             required: false, | ||||||
|  |             additionalValidators: [ | ||||||
|  |               (value) { | ||||||
|  |                 return regExValidator(value); | ||||||
|  |               } | ||||||
|  |             ]) | ||||||
|  |       ] | ||||||
|  |     ]; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   @override |   @override | ||||||
| @@ -30,11 +49,31 @@ class APKMirror extends AppSource { | |||||||
|     String standardUrl, |     String standardUrl, | ||||||
|     Map<String, dynamic> additionalSettings, |     Map<String, dynamic> additionalSettings, | ||||||
|   ) async { |   ) async { | ||||||
|  |     bool fallbackToOlderReleases = | ||||||
|  |         additionalSettings['fallbackToOlderReleases'] == true; | ||||||
|  |     String? regexFilter = | ||||||
|  |         (additionalSettings['filterReleaseTitlesByRegEx'] as String?) | ||||||
|  |                     ?.isNotEmpty == | ||||||
|  |                 true | ||||||
|  |             ? additionalSettings['filterReleaseTitlesByRegEx'] | ||||||
|  |             : null; | ||||||
|     Response res = await get(Uri.parse('$standardUrl/feed')); |     Response res = await get(Uri.parse('$standardUrl/feed')); | ||||||
|     if (res.statusCode == 200) { |     if (res.statusCode == 200) { | ||||||
|       var item = parse(res.body).querySelector('item'); |       var items = parse(res.body).querySelectorAll('item'); | ||||||
|       String? titleString = item?.querySelector('title')?.innerHtml; |       dynamic targetRelease; | ||||||
|       String? dateString = item |       for (int i = 0; i < items.length; i++) { | ||||||
|  |         if (!fallbackToOlderReleases && i > 0) break; | ||||||
|  |         String? nameToFilter = items[i].querySelector('title')?.innerHtml; | ||||||
|  |         if (regexFilter != null && | ||||||
|  |             nameToFilter != null && | ||||||
|  |             !RegExp(regexFilter).hasMatch(nameToFilter.trim())) { | ||||||
|  |           continue; | ||||||
|  |         } | ||||||
|  |         targetRelease = items[i]; | ||||||
|  |         break; | ||||||
|  |       } | ||||||
|  |       String? titleString = targetRelease?.querySelector('title')?.innerHtml; | ||||||
|  |       String? dateString = targetRelease | ||||||
|           ?.querySelector('pubDate') |           ?.querySelector('pubDate') | ||||||
|           ?.innerHtml |           ?.innerHtml | ||||||
|           .split(' ') |           .split(' ') | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user