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
Future<String> apkUrlPrefetchModifier(String apkUrl) async => apkUrl;
@override
String? tryGettingAppIdFromURL(String standardUrl) {
return Uri.parse(standardUrl).pathSegments.last;
}
@override
Future<APKDetails> getLatestAPKDetails(
String standardUrl, List<String> additionalData) async {

View File

@@ -115,18 +115,23 @@ class _AddAppPageState extends State<AddAppPage> {
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(

View File

@@ -163,6 +163,10 @@ class AppSource {
Future<Map<String, String>> 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