mirror of
				https://github.com/ImranR98/Obtainium.git
				synced 2025-10-31 05:23:28 +01:00 
			
		
		
		
	Minimum star count for GitHub/Codeberg search (#688)
This commit is contained in:
		| @@ -5,6 +5,7 @@ import 'package:obtainium/custom_errors.dart'; | ||||
| import 'package:obtainium/providers/source_provider.dart'; | ||||
|  | ||||
| class Codeberg extends AppSource { | ||||
|   GitHub gh = GitHub(); | ||||
|   Codeberg() { | ||||
|     host = 'codeberg.org'; | ||||
|  | ||||
| @@ -32,10 +33,9 @@ class Codeberg extends AppSource { | ||||
|     ]; | ||||
|  | ||||
|     canSearch = true; | ||||
|     searchQuerySettingFormItems = gh.searchQuerySettingFormItems; | ||||
|   } | ||||
|  | ||||
|   var gh = GitHub(); | ||||
|  | ||||
|   @override | ||||
|   String sourceSpecificStandardizeURL(String url) { | ||||
|     RegExp standardUrlRegEx = RegExp('^https?://$host/[^/]+/[^/]+'); | ||||
| @@ -68,10 +68,12 @@ class Codeberg extends AppSource { | ||||
|   } | ||||
|  | ||||
|   @override | ||||
|   Future<Map<String, List<String>>> search(String query) async { | ||||
|   Future<Map<String, List<String>>> search(String query, | ||||
|       {Map<String, dynamic> querySettings = const {}}) async { | ||||
|     return gh.searchCommon( | ||||
|         query, | ||||
|         'https://$host/api/v1/repos/search?q=${Uri.encodeQueryComponent(query)}&limit=100', | ||||
|         'data'); | ||||
|         'data', | ||||
|         querySettings: querySettings); | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -72,7 +72,8 @@ class FDroid extends AppSource { | ||||
|   } | ||||
|  | ||||
|   @override | ||||
|   Future<Map<String, List<String>>> search(String query) async { | ||||
|   Future<Map<String, List<String>>> search(String query, | ||||
|       {Map<String, dynamic> querySettings = const {}}) async { | ||||
|     Response res = await sourceRequest( | ||||
|         'https://search.$host/?q=${Uri.encodeQueryComponent(query)}'); | ||||
|     if (res.statusCode == 200) { | ||||
|   | ||||
| @@ -79,6 +79,21 @@ class GitHub extends AppSource { | ||||
|     ]; | ||||
|  | ||||
|     canSearch = true; | ||||
|     searchQuerySettingFormItems = [ | ||||
|       GeneratedFormTextField('minStarCount', | ||||
|           label: tr('minStarCount'), | ||||
|           defaultValue: '0', | ||||
|           additionalValidators: [ | ||||
|             (value) { | ||||
|               try { | ||||
|                 int.parse(value ?? '0'); | ||||
|               } catch (e) { | ||||
|                 return tr('invalidInput'); | ||||
|               } | ||||
|               return null; | ||||
|             } | ||||
|           ]) | ||||
|     ]; | ||||
|   } | ||||
|  | ||||
|   @override | ||||
| @@ -310,20 +325,26 @@ class GitHub extends AppSource { | ||||
|  | ||||
|   Future<Map<String, List<String>>> searchCommon( | ||||
|       String query, String requestUrl, String rootProp, | ||||
|       {Function(Response)? onHttpErrorCode}) async { | ||||
|       {Function(Response)? onHttpErrorCode, | ||||
|       Map<String, dynamic> querySettings = const {}}) async { | ||||
|     Response res = await sourceRequest(requestUrl); | ||||
|     if (res.statusCode == 200) { | ||||
|       int minStarCount = querySettings['minStarCount'] != null | ||||
|           ? int.parse(querySettings['minStarCount']) | ||||
|           : 0; | ||||
|       Map<String, List<String>> urlsWithDescriptions = {}; | ||||
|       for (var e in (jsonDecode(res.body)[rootProp] as List<dynamic>)) { | ||||
|         urlsWithDescriptions.addAll({ | ||||
|           e['html_url'] as String: [ | ||||
|             e['full_name'] as String, | ||||
|             ((e['archived'] == true ? '[ARCHIVED] ' : '') + | ||||
|                 (e['description'] != null | ||||
|                     ? e['description'] as String | ||||
|                     : tr('noDescription'))) | ||||
|           ] | ||||
|         }); | ||||
|         if ((e['stargazers_count'] ?? e['stars_count'] ?? 0) >= minStarCount) { | ||||
|           urlsWithDescriptions.addAll({ | ||||
|             e['html_url'] as String: [ | ||||
|               e['full_name'] as String, | ||||
|               ((e['archived'] == true ? '[ARCHIVED] ' : '') + | ||||
|                   (e['description'] != null | ||||
|                       ? e['description'] as String | ||||
|                       : tr('noDescription'))) | ||||
|             ] | ||||
|           }); | ||||
|         } | ||||
|       } | ||||
|       return urlsWithDescriptions; | ||||
|     } else { | ||||
| @@ -335,13 +356,14 @@ class GitHub extends AppSource { | ||||
|   } | ||||
|  | ||||
|   @override | ||||
|   Future<Map<String, List<String>>> search(String query) async { | ||||
|   Future<Map<String, List<String>>> search(String query, | ||||
|       {Map<String, dynamic> querySettings = const {}}) async { | ||||
|     return searchCommon( | ||||
|         query, | ||||
|         '${await getAPIHost()}/search/repositories?q=${Uri.encodeQueryComponent(query)}&per_page=100', | ||||
|         'items', onHttpErrorCode: (Response res) { | ||||
|       rateLimitErrorCheck(res); | ||||
|     }); | ||||
|     }, querySettings: querySettings); | ||||
|   } | ||||
|  | ||||
|   rateLimitErrorCheck(Response res) { | ||||
|   | ||||
| @@ -69,7 +69,8 @@ class GitLab extends AppSource { | ||||
|   } | ||||
|  | ||||
|   @override | ||||
|   Future<Map<String, List<String>>> search(String query) async { | ||||
|   Future<Map<String, List<String>>> search(String query, | ||||
|       {Map<String, dynamic> querySettings = const {}}) async { | ||||
|     String? PAT = await getPATIfAny(); | ||||
|     if (PAT == null) { | ||||
|       throw CredsNeededError(name); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user