From 618a1523cfefd291a37ed6f5ac9f6fd48292555e Mon Sep 17 00:00:00 2001 From: Imran Remtulla Date: Wed, 16 Nov 2022 20:57:58 -0500 Subject: [PATCH] Add app only downloads APK if needed --- lib/app_sources/fdroid.dart | 5 +++++ lib/pages/add_app.dart | 27 ++++++++++++++++----------- lib/providers/source_provider.dart | 8 +++++++- 3 files changed, 28 insertions(+), 12 deletions(-) diff --git a/lib/app_sources/fdroid.dart b/lib/app_sources/fdroid.dart index ea3d37c..b123cae 100644 --- a/lib/app_sources/fdroid.dart +++ b/lib/app_sources/fdroid.dart @@ -30,6 +30,11 @@ class FDroid extends AppSource { @override Future apkUrlPrefetchModifier(String apkUrl) async => apkUrl; + @override + String? tryGettingAppIdFromURL(String standardUrl) { + return Uri.parse(standardUrl).pathSegments.last; + } + @override Future getLatestAPKDetails( String standardUrl, List additionalData) async { diff --git a/lib/pages/add_app.dart b/lib/pages/add_app.dart index 8b96dcb..b85b85d 100644 --- a/lib/pages/add_app.dart +++ b/lib/pages/add_app.dart @@ -115,18 +115,23 @@ class _AddAppPageState extends State { additionalData); await settingsProvider .getInstallPermission(); - // ignore: use_build_context_synchronously - var apkUrl = await appsProvider - .confirmApkUrl(app, context); - if (apkUrl == null) { - throw ObtainiumError('Cancelled'); + // Only download the APK here if you need to for the package ID + if (sourceProvider + .isTempId(app.id)) { + // ignore: use_build_context_synchronously + var apkUrl = await appsProvider + .confirmApkUrl(app, context); + if (apkUrl == null) { + throw ObtainiumError( + 'Cancelled'); + } + app.preferredApkIndex = + app.apkUrls.indexOf(apkUrl); + var downloadedApk = + await appsProvider + .downloadApp(app); + app.id = downloadedApk.appId; } - app.preferredApkIndex = - app.apkUrls.indexOf(apkUrl); - var downloadedApk = - await appsProvider - .downloadApp(app); - app.id = downloadedApk.appId; if (appsProvider.apps .containsKey(app.id)) { throw ObtainiumError( diff --git a/lib/providers/source_provider.dart b/lib/providers/source_provider.dart index 1a2cee1..b55dc9a 100644 --- a/lib/providers/source_provider.dart +++ b/lib/providers/source_provider.dart @@ -163,6 +163,10 @@ class AppSource { Future> search(String query) { throw NotImplementedError(); } + + String? tryGettingAppIdFromURL(String standardUrl) { + return null; + } } ObtainiumError getObtainiumHttpError(Response res) { @@ -240,7 +244,9 @@ class SourceProvider { APKDetails apk = await source.getLatestAPKDetails(standardUrl, additionalData); return App( - id ?? generateTempID(names, source), + id ?? + source.tryGettingAppIdFromURL(standardUrl) ?? + generateTempID(names, source), standardUrl, names.author[0].toUpperCase() + names.author.substring(1), name.trim().isNotEmpty