From 5db2c5f0b1fbfde72101622b15ea4958e98b3543 Mon Sep 17 00:00:00 2001 From: Imran Remtulla Date: Fri, 11 Nov 2022 21:44:20 -0500 Subject: [PATCH] Initial changes to support search --- lib/app_sources/fdroid.dart | 16 ++---- lib/app_sources/github.dart | 92 ++++++++++++++++-------------- lib/app_sources/gitlab.dart | 17 ++---- lib/app_sources/izzyondroid.dart | 17 ++---- lib/app_sources/mullvad.dart | 17 ++---- lib/app_sources/signal.dart | 17 ++---- lib/app_sources/sourceforge.dart | 17 ++---- lib/custom_errors.dart | 4 ++ lib/providers/source_provider.dart | 37 +++++++++--- 9 files changed, 105 insertions(+), 129 deletions(-) diff --git a/lib/app_sources/fdroid.dart b/lib/app_sources/fdroid.dart index d40a45f..25ad2fc 100644 --- a/lib/app_sources/fdroid.dart +++ b/lib/app_sources/fdroid.dart @@ -4,9 +4,10 @@ import 'package:obtainium/components/generated_form.dart'; import 'package:obtainium/custom_errors.dart'; import 'package:obtainium/providers/source_provider.dart'; -class FDroid implements AppSource { - @override - late String host = 'f-droid.org'; +class FDroid extends AppSource { + FDroid() { + host = 'f-droid.org'; + } @override String standardizeURL(String url) { @@ -77,13 +78,4 @@ class FDroid implements AppSource { AppNames getAppNames(String standardUrl) { return AppNames('F-Droid', Uri.parse(standardUrl).pathSegments.last); } - - @override - List> additionalDataFormItems = []; - - @override - List additionalDataDefaults = []; - - @override - List moreSourceSettingsFormItems = []; } diff --git a/lib/app_sources/github.dart b/lib/app_sources/github.dart index 932c0fd..e5d4651 100644 --- a/lib/app_sources/github.dart +++ b/lib/app_sources/github.dart @@ -7,9 +7,52 @@ import 'package:obtainium/providers/settings_provider.dart'; import 'package:obtainium/providers/source_provider.dart'; import 'package:url_launcher/url_launcher_string.dart'; -class GitHub implements AppSource { - @override - late String host = 'github.com'; +class GitHub extends AppSource { + GitHub() { + 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 String standardizeURL(String url) { @@ -142,44 +185,7 @@ class GitHub implements AppSource { ]; @override - List additionalDataDefaults = ['true', 'true', '']; - - @override - List 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), - )) - ]) - ]; + Future> search(String query) async { + return []; + } } diff --git a/lib/app_sources/gitlab.dart b/lib/app_sources/gitlab.dart index b8b9094..9fe7fad 100644 --- a/lib/app_sources/gitlab.dart +++ b/lib/app_sources/gitlab.dart @@ -1,13 +1,13 @@ import 'package:html/parser.dart'; import 'package:http/http.dart'; import 'package:obtainium/app_sources/github.dart'; -import 'package:obtainium/components/generated_form.dart'; import 'package:obtainium/custom_errors.dart'; import 'package:obtainium/providers/source_provider.dart'; -class GitLab implements AppSource { - @override - late String host = 'gitlab.com'; +class GitLab extends AppSource { + GitLab() { + host = 'gitlab.com'; + } @override String standardizeURL(String url) { @@ -72,13 +72,4 @@ class GitLab implements AppSource { // Same as GitHub return GitHub().getAppNames(standardUrl); } - - @override - List> additionalDataFormItems = []; - - @override - List additionalDataDefaults = []; - - @override - List moreSourceSettingsFormItems = []; } diff --git a/lib/app_sources/izzyondroid.dart b/lib/app_sources/izzyondroid.dart index 0e77915..b18b3ff 100644 --- a/lib/app_sources/izzyondroid.dart +++ b/lib/app_sources/izzyondroid.dart @@ -1,12 +1,12 @@ import 'package:html/parser.dart'; import 'package:http/http.dart'; -import 'package:obtainium/components/generated_form.dart'; import 'package:obtainium/custom_errors.dart'; import 'package:obtainium/providers/source_provider.dart'; -class IzzyOnDroid implements AppSource { - @override - late String host = 'android.izzysoft.de'; +class IzzyOnDroid extends AppSource { + IzzyOnDroid() { + host = 'android.izzysoft.de'; + } @override String standardizeURL(String url) { @@ -63,13 +63,4 @@ class IzzyOnDroid implements AppSource { AppNames getAppNames(String standardUrl) { return AppNames('IzzyOnDroid', Uri.parse(standardUrl).pathSegments.last); } - - @override - List> additionalDataFormItems = []; - - @override - List additionalDataDefaults = []; - - @override - List moreSourceSettingsFormItems = []; } diff --git a/lib/app_sources/mullvad.dart b/lib/app_sources/mullvad.dart index a402104..660deb8 100644 --- a/lib/app_sources/mullvad.dart +++ b/lib/app_sources/mullvad.dart @@ -1,12 +1,12 @@ import 'package:html/parser.dart'; import 'package:http/http.dart'; -import 'package:obtainium/components/generated_form.dart'; import 'package:obtainium/custom_errors.dart'; import 'package:obtainium/providers/source_provider.dart'; -class Mullvad implements AppSource { - @override - late String host = 'mullvad.net'; +class Mullvad extends AppSource { + Mullvad() { + host = 'mullvad.net'; + } @override String standardizeURL(String url) { @@ -50,13 +50,4 @@ class Mullvad implements AppSource { AppNames getAppNames(String standardUrl) { return AppNames('Mullvad-VPN', 'Mullvad-VPN'); } - - @override - List> additionalDataFormItems = []; - - @override - List additionalDataDefaults = []; - - @override - List moreSourceSettingsFormItems = []; } diff --git a/lib/app_sources/signal.dart b/lib/app_sources/signal.dart index 250a688..1b10a32 100644 --- a/lib/app_sources/signal.dart +++ b/lib/app_sources/signal.dart @@ -1,12 +1,12 @@ import 'dart:convert'; import 'package:http/http.dart'; -import 'package:obtainium/components/generated_form.dart'; import 'package:obtainium/custom_errors.dart'; import 'package:obtainium/providers/source_provider.dart'; -class Signal implements AppSource { - @override - late String host = 'signal.org'; +class Signal extends AppSource { + Signal() { + host = 'signal.org'; + } @override String standardizeURL(String url) { @@ -42,13 +42,4 @@ class Signal implements AppSource { @override AppNames getAppNames(String standardUrl) => AppNames('Signal', 'Signal'); - - @override - List> additionalDataFormItems = []; - - @override - List additionalDataDefaults = []; - - @override - List moreSourceSettingsFormItems = []; } diff --git a/lib/app_sources/sourceforge.dart b/lib/app_sources/sourceforge.dart index 7114bf6..1373e80 100644 --- a/lib/app_sources/sourceforge.dart +++ b/lib/app_sources/sourceforge.dart @@ -1,12 +1,12 @@ import 'package:html/parser.dart'; import 'package:http/http.dart'; -import 'package:obtainium/components/generated_form.dart'; import 'package:obtainium/custom_errors.dart'; import 'package:obtainium/providers/source_provider.dart'; -class SourceForge implements AppSource { - @override - late String host = 'sourceforge.net'; +class SourceForge extends AppSource { + SourceForge() { + host = 'sourceforge.net'; + } @override String standardizeURL(String url) { @@ -66,13 +66,4 @@ class SourceForge implements AppSource { return AppNames(runtimeType.toString(), standardUrl.substring(standardUrl.lastIndexOf('/') + 1)); } - - @override - List> additionalDataFormItems = []; - - @override - List additionalDataDefaults = []; - - @override - List moreSourceSettingsFormItems = []; } diff --git a/lib/custom_errors.dart b/lib/custom_errors.dart index b1d4f3f..3b3a568 100644 --- a/lib/custom_errors.dart +++ b/lib/custom_errors.dart @@ -48,6 +48,10 @@ class IDChangedError extends ObtainiumError { : 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 { Map> content = {}; diff --git a/lib/providers/source_provider.dart b/lib/providers/source_provider.dart index aec6c70..06c2c46 100644 --- a/lib/providers/source_provider.dart +++ b/lib/providers/source_provider.dart @@ -128,17 +128,36 @@ List getLinksFromParsedHTML( .map((e) => '$prependToLinks${e.attributes['href']!}') .toList(); -abstract class AppSource { +class AppSource { late String host; - String standardizeURL(String url); + String standardizeURL(String url) { + throw NotImplementedError(); + } + Future getLatestAPKDetails( - String standardUrl, List additionalData); - AppNames getAppNames(String standardUrl); - late List> additionalDataFormItems; - late List additionalDataDefaults; - late List moreSourceSettingsFormItems; - String? changeLogPageFromStandardUrl(String standardUrl); - Future apkUrlPrefetchModifier(String apkUrl); + String standardUrl, List additionalData) { + throw NotImplementedError(); + } + + AppNames getAppNames(String standardUrl) { + throw NotImplementedError(); + } + + List> additionalDataFormItems = []; + List additionalDataDefaults = []; + List moreSourceSettingsFormItems = []; + String? changeLogPageFromStandardUrl(String standardUrl) { + throw NotImplementedError(); + } + + Future apkUrlPrefetchModifier(String apkUrl) { + throw NotImplementedError(); + } + + bool canSearch = false; + Future> search(String query) { + throw NotImplementedError(); + } } abstract class MassAppUrlSource {