mirror of
				https://github.com/ImranR98/Obtainium.git
				synced 2025-10-27 03:33:45 +01:00 
			
		
		
		
	Initial changes to support search
This commit is contained in:
		| @@ -4,9 +4,10 @@ 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'; | ||||||
|  |  | ||||||
| class FDroid implements AppSource { | class FDroid extends AppSource { | ||||||
|   @override |   FDroid() { | ||||||
|   late String host = 'f-droid.org'; |     host = 'f-droid.org'; | ||||||
|  |   } | ||||||
|  |  | ||||||
|   @override |   @override | ||||||
|   String standardizeURL(String url) { |   String standardizeURL(String url) { | ||||||
| @@ -77,13 +78,4 @@ class FDroid implements AppSource { | |||||||
|   AppNames getAppNames(String standardUrl) { |   AppNames getAppNames(String standardUrl) { | ||||||
|     return AppNames('F-Droid', Uri.parse(standardUrl).pathSegments.last); |     return AppNames('F-Droid', Uri.parse(standardUrl).pathSegments.last); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   @override |  | ||||||
|   List<List<GeneratedFormItem>> additionalDataFormItems = []; |  | ||||||
|  |  | ||||||
|   @override |  | ||||||
|   List<String> additionalDataDefaults = []; |  | ||||||
|  |  | ||||||
|   @override |  | ||||||
|   List<GeneratedFormItem> moreSourceSettingsFormItems = []; |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -7,9 +7,52 @@ import 'package:obtainium/providers/settings_provider.dart'; | |||||||
| import 'package:obtainium/providers/source_provider.dart'; | import 'package:obtainium/providers/source_provider.dart'; | ||||||
| import 'package:url_launcher/url_launcher_string.dart'; | import 'package:url_launcher/url_launcher_string.dart'; | ||||||
|  |  | ||||||
| class GitHub implements AppSource { | class GitHub extends AppSource { | ||||||
|   @override |   GitHub() { | ||||||
|   late String host = 'github.com'; |     host = 'github.com'; | ||||||
|  |  | ||||||
|  |     additionalDataDefaults = ['true', 'true', '']; | ||||||
|  |  | ||||||
|  |     moreSourceSettingsFormItems = [ | ||||||
|  |       GeneratedFormItem( | ||||||
|  |           label: 'GitHub Personal Access Token (Increases Rate Limit)', | ||||||
|  |           id: 'github-creds', | ||||||
|  |           required: false, | ||||||
|  |           additionalValidators: [ | ||||||
|  |             (value) { | ||||||
|  |               if (value != null && value.trim().isNotEmpty) { | ||||||
|  |                 if (value | ||||||
|  |                         .split(':') | ||||||
|  |                         .where((element) => element.trim().isNotEmpty) | ||||||
|  |                         .length != | ||||||
|  |                     2) { | ||||||
|  |                   return 'PAT must be in this format: username:token'; | ||||||
|  |                 } | ||||||
|  |               } | ||||||
|  |               return null; | ||||||
|  |             } | ||||||
|  |           ], | ||||||
|  |           hint: 'username:token', | ||||||
|  |           belowWidgets: [ | ||||||
|  |             const SizedBox( | ||||||
|  |               height: 8, | ||||||
|  |             ), | ||||||
|  |             GestureDetector( | ||||||
|  |                 onTap: () { | ||||||
|  |                   launchUrlString( | ||||||
|  |                       'https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token', | ||||||
|  |                       mode: LaunchMode.externalApplication); | ||||||
|  |                 }, | ||||||
|  |                 child: const Text( | ||||||
|  |                   'About GitHub PATs', | ||||||
|  |                   style: TextStyle( | ||||||
|  |                       decoration: TextDecoration.underline, fontSize: 12), | ||||||
|  |                 )) | ||||||
|  |           ]) | ||||||
|  |     ]; | ||||||
|  |  | ||||||
|  |     canSearch = true; | ||||||
|  |   } | ||||||
|  |  | ||||||
|   @override |   @override | ||||||
|   String standardizeURL(String url) { |   String standardizeURL(String url) { | ||||||
| @@ -142,44 +185,7 @@ class GitHub implements AppSource { | |||||||
|   ]; |   ]; | ||||||
|  |  | ||||||
|   @override |   @override | ||||||
|   List<String> additionalDataDefaults = ['true', 'true', '']; |   Future<List<String>> search(String query) async { | ||||||
|  |     return []; | ||||||
|   @override |  | ||||||
|   List<GeneratedFormItem> moreSourceSettingsFormItems = [ |  | ||||||
|     GeneratedFormItem( |  | ||||||
|         label: 'GitHub Personal Access Token (Increases Rate Limit)', |  | ||||||
|         id: 'github-creds', |  | ||||||
|         required: false, |  | ||||||
|         additionalValidators: [ |  | ||||||
|           (value) { |  | ||||||
|             if (value != null && value.trim().isNotEmpty) { |  | ||||||
|               if (value |  | ||||||
|                       .split(':') |  | ||||||
|                       .where((element) => element.trim().isNotEmpty) |  | ||||||
|                       .length != |  | ||||||
|                   2) { |  | ||||||
|                 return 'PAT must be in this format: username:token'; |  | ||||||
|   } |   } | ||||||
|             } |  | ||||||
|             return null; |  | ||||||
|           } |  | ||||||
|         ], |  | ||||||
|         hint: 'username:token', |  | ||||||
|         belowWidgets: [ |  | ||||||
|           const SizedBox( |  | ||||||
|             height: 8, |  | ||||||
|           ), |  | ||||||
|           GestureDetector( |  | ||||||
|               onTap: () { |  | ||||||
|                 launchUrlString( |  | ||||||
|                     'https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token', |  | ||||||
|                     mode: LaunchMode.externalApplication); |  | ||||||
|               }, |  | ||||||
|               child: const Text( |  | ||||||
|                 'About GitHub PATs', |  | ||||||
|                 style: TextStyle( |  | ||||||
|                     decoration: TextDecoration.underline, fontSize: 12), |  | ||||||
|               )) |  | ||||||
|         ]) |  | ||||||
|   ]; |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,13 +1,13 @@ | |||||||
| import 'package:html/parser.dart'; | import 'package:html/parser.dart'; | ||||||
| import 'package:http/http.dart'; | import 'package:http/http.dart'; | ||||||
| import 'package:obtainium/app_sources/github.dart'; | import 'package:obtainium/app_sources/github.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'; | ||||||
|  |  | ||||||
| class GitLab implements AppSource { | class GitLab extends AppSource { | ||||||
|   @override |   GitLab() { | ||||||
|   late String host = 'gitlab.com'; |     host = 'gitlab.com'; | ||||||
|  |   } | ||||||
|  |  | ||||||
|   @override |   @override | ||||||
|   String standardizeURL(String url) { |   String standardizeURL(String url) { | ||||||
| @@ -72,13 +72,4 @@ class GitLab implements AppSource { | |||||||
|     // Same as GitHub |     // Same as GitHub | ||||||
|     return GitHub().getAppNames(standardUrl); |     return GitHub().getAppNames(standardUrl); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   @override |  | ||||||
|   List<List<GeneratedFormItem>> additionalDataFormItems = []; |  | ||||||
|  |  | ||||||
|   @override |  | ||||||
|   List<String> additionalDataDefaults = []; |  | ||||||
|  |  | ||||||
|   @override |  | ||||||
|   List<GeneratedFormItem> moreSourceSettingsFormItems = []; |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,12 +1,12 @@ | |||||||
| 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'; | ||||||
|  |  | ||||||
| class IzzyOnDroid implements AppSource { | class IzzyOnDroid extends AppSource { | ||||||
|   @override |   IzzyOnDroid() { | ||||||
|   late String host = 'android.izzysoft.de'; |     host = 'android.izzysoft.de'; | ||||||
|  |   } | ||||||
|  |  | ||||||
|   @override |   @override | ||||||
|   String standardizeURL(String url) { |   String standardizeURL(String url) { | ||||||
| @@ -63,13 +63,4 @@ class IzzyOnDroid implements AppSource { | |||||||
|   AppNames getAppNames(String standardUrl) { |   AppNames getAppNames(String standardUrl) { | ||||||
|     return AppNames('IzzyOnDroid', Uri.parse(standardUrl).pathSegments.last); |     return AppNames('IzzyOnDroid', Uri.parse(standardUrl).pathSegments.last); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   @override |  | ||||||
|   List<List<GeneratedFormItem>> additionalDataFormItems = []; |  | ||||||
|  |  | ||||||
|   @override |  | ||||||
|   List<String> additionalDataDefaults = []; |  | ||||||
|  |  | ||||||
|   @override |  | ||||||
|   List<GeneratedFormItem> moreSourceSettingsFormItems = []; |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,12 +1,12 @@ | |||||||
| 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'; | ||||||
|  |  | ||||||
| class Mullvad implements AppSource { | class Mullvad extends AppSource { | ||||||
|   @override |   Mullvad() { | ||||||
|   late String host = 'mullvad.net'; |     host = 'mullvad.net'; | ||||||
|  |   } | ||||||
|  |  | ||||||
|   @override |   @override | ||||||
|   String standardizeURL(String url) { |   String standardizeURL(String url) { | ||||||
| @@ -50,13 +50,4 @@ class Mullvad implements AppSource { | |||||||
|   AppNames getAppNames(String standardUrl) { |   AppNames getAppNames(String standardUrl) { | ||||||
|     return AppNames('Mullvad-VPN', 'Mullvad-VPN'); |     return AppNames('Mullvad-VPN', 'Mullvad-VPN'); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   @override |  | ||||||
|   List<List<GeneratedFormItem>> additionalDataFormItems = []; |  | ||||||
|  |  | ||||||
|   @override |  | ||||||
|   List<String> additionalDataDefaults = []; |  | ||||||
|  |  | ||||||
|   @override |  | ||||||
|   List<GeneratedFormItem> moreSourceSettingsFormItems = []; |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,12 +1,12 @@ | |||||||
| import 'dart:convert'; | import 'dart:convert'; | ||||||
| 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'; | ||||||
|  |  | ||||||
| class Signal implements AppSource { | class Signal extends AppSource { | ||||||
|   @override |   Signal() { | ||||||
|   late String host = 'signal.org'; |     host = 'signal.org'; | ||||||
|  |   } | ||||||
|  |  | ||||||
|   @override |   @override | ||||||
|   String standardizeURL(String url) { |   String standardizeURL(String url) { | ||||||
| @@ -42,13 +42,4 @@ class Signal implements AppSource { | |||||||
|  |  | ||||||
|   @override |   @override | ||||||
|   AppNames getAppNames(String standardUrl) => AppNames('Signal', 'Signal'); |   AppNames getAppNames(String standardUrl) => AppNames('Signal', 'Signal'); | ||||||
|  |  | ||||||
|   @override |  | ||||||
|   List<List<GeneratedFormItem>> additionalDataFormItems = []; |  | ||||||
|  |  | ||||||
|   @override |  | ||||||
|   List<String> additionalDataDefaults = []; |  | ||||||
|  |  | ||||||
|   @override |  | ||||||
|   List<GeneratedFormItem> moreSourceSettingsFormItems = []; |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,12 +1,12 @@ | |||||||
| 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'; | ||||||
|  |  | ||||||
| class SourceForge implements AppSource { | class SourceForge extends AppSource { | ||||||
|   @override |   SourceForge() { | ||||||
|   late String host = 'sourceforge.net'; |     host = 'sourceforge.net'; | ||||||
|  |   } | ||||||
|  |  | ||||||
|   @override |   @override | ||||||
|   String standardizeURL(String url) { |   String standardizeURL(String url) { | ||||||
| @@ -66,13 +66,4 @@ class SourceForge implements AppSource { | |||||||
|     return AppNames(runtimeType.toString(), |     return AppNames(runtimeType.toString(), | ||||||
|         standardUrl.substring(standardUrl.lastIndexOf('/') + 1)); |         standardUrl.substring(standardUrl.lastIndexOf('/') + 1)); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   @override |  | ||||||
|   List<List<GeneratedFormItem>> additionalDataFormItems = []; |  | ||||||
|  |  | ||||||
|   @override |  | ||||||
|   List<String> additionalDataDefaults = []; |  | ||||||
|  |  | ||||||
|   @override |  | ||||||
|   List<GeneratedFormItem> moreSourceSettingsFormItems = []; |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -48,6 +48,10 @@ class IDChangedError extends ObtainiumError { | |||||||
|       : super('Downloaded package ID does not match existing App ID'); |       : super('Downloaded package ID does not match existing App ID'); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | class NotImplementedError extends ObtainiumError { | ||||||
|  |   NotImplementedError() : super('This class has not implemented this function'); | ||||||
|  | } | ||||||
|  |  | ||||||
| class MultiAppMultiError extends ObtainiumError { | class MultiAppMultiError extends ObtainiumError { | ||||||
|   Map<String, List<String>> content = {}; |   Map<String, List<String>> content = {}; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -128,17 +128,36 @@ List<String> getLinksFromParsedHTML( | |||||||
|         .map((e) => '$prependToLinks${e.attributes['href']!}') |         .map((e) => '$prependToLinks${e.attributes['href']!}') | ||||||
|         .toList(); |         .toList(); | ||||||
|  |  | ||||||
| abstract class AppSource { | class AppSource { | ||||||
|   late String host; |   late String host; | ||||||
|   String standardizeURL(String url); |   String standardizeURL(String url) { | ||||||
|  |     throw NotImplementedError(); | ||||||
|  |   } | ||||||
|  |  | ||||||
|   Future<APKDetails> getLatestAPKDetails( |   Future<APKDetails> getLatestAPKDetails( | ||||||
|       String standardUrl, List<String> additionalData); |       String standardUrl, List<String> additionalData) { | ||||||
|   AppNames getAppNames(String standardUrl); |     throw NotImplementedError(); | ||||||
|   late List<List<GeneratedFormItem>> additionalDataFormItems; |   } | ||||||
|   late List<String> additionalDataDefaults; |  | ||||||
|   late List<GeneratedFormItem> moreSourceSettingsFormItems; |   AppNames getAppNames(String standardUrl) { | ||||||
|   String? changeLogPageFromStandardUrl(String standardUrl); |     throw NotImplementedError(); | ||||||
|   Future<String> apkUrlPrefetchModifier(String apkUrl); |   } | ||||||
|  |  | ||||||
|  |   List<List<GeneratedFormItem>> additionalDataFormItems = []; | ||||||
|  |   List<String> additionalDataDefaults = []; | ||||||
|  |   List<GeneratedFormItem> moreSourceSettingsFormItems = []; | ||||||
|  |   String? changeLogPageFromStandardUrl(String standardUrl) { | ||||||
|  |     throw NotImplementedError(); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   Future<String> apkUrlPrefetchModifier(String apkUrl) { | ||||||
|  |     throw NotImplementedError(); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   bool canSearch = false; | ||||||
|  |   Future<List<String>> search(String query) { | ||||||
|  |     throw NotImplementedError(); | ||||||
|  |   } | ||||||
| } | } | ||||||
|  |  | ||||||
| abstract class MassAppUrlSource { | abstract class MassAppUrlSource { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user