Add app only downloads APK if needed

This commit is contained in:
Imran Remtulla
2022-11-16 20:57:58 -05:00
parent ba1cdc2c73
commit 618a1523cf
3 changed files with 28 additions and 12 deletions

View File

@@ -30,6 +30,11 @@ class FDroid extends AppSource {
@override @override
Future<String> apkUrlPrefetchModifier(String apkUrl) async => apkUrl; Future<String> apkUrlPrefetchModifier(String apkUrl) async => apkUrl;
@override
String? tryGettingAppIdFromURL(String standardUrl) {
return Uri.parse(standardUrl).pathSegments.last;
}
@override @override
Future<APKDetails> getLatestAPKDetails( Future<APKDetails> getLatestAPKDetails(
String standardUrl, List<String> additionalData) async { String standardUrl, List<String> additionalData) async {

View File

@@ -115,11 +115,15 @@ class _AddAppPageState extends State<AddAppPage> {
additionalData); additionalData);
await settingsProvider await settingsProvider
.getInstallPermission(); .getInstallPermission();
// Only download the APK here if you need to for the package ID
if (sourceProvider
.isTempId(app.id)) {
// ignore: use_build_context_synchronously // ignore: use_build_context_synchronously
var apkUrl = await appsProvider var apkUrl = await appsProvider
.confirmApkUrl(app, context); .confirmApkUrl(app, context);
if (apkUrl == null) { if (apkUrl == null) {
throw ObtainiumError('Cancelled'); throw ObtainiumError(
'Cancelled');
} }
app.preferredApkIndex = app.preferredApkIndex =
app.apkUrls.indexOf(apkUrl); app.apkUrls.indexOf(apkUrl);
@@ -127,6 +131,7 @@ class _AddAppPageState extends State<AddAppPage> {
await appsProvider await appsProvider
.downloadApp(app); .downloadApp(app);
app.id = downloadedApk.appId; app.id = downloadedApk.appId;
}
if (appsProvider.apps if (appsProvider.apps
.containsKey(app.id)) { .containsKey(app.id)) {
throw ObtainiumError( throw ObtainiumError(

View File

@@ -163,6 +163,10 @@ class AppSource {
Future<Map<String, String>> search(String query) { Future<Map<String, String>> search(String query) {
throw NotImplementedError(); throw NotImplementedError();
} }
String? tryGettingAppIdFromURL(String standardUrl) {
return null;
}
} }
ObtainiumError getObtainiumHttpError(Response res) { ObtainiumError getObtainiumHttpError(Response res) {
@@ -240,7 +244,9 @@ class SourceProvider {
APKDetails apk = APKDetails apk =
await source.getLatestAPKDetails(standardUrl, additionalData); await source.getLatestAPKDetails(standardUrl, additionalData);
return App( return App(
id ?? generateTempID(names, source), id ??
source.tryGettingAppIdFromURL(standardUrl) ??
generateTempID(names, source),
standardUrl, standardUrl,
names.author[0].toUpperCase() + names.author.substring(1), names.author[0].toUpperCase() + names.author.substring(1),
name.trim().isNotEmpty name.trim().isNotEmpty