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,18 +115,23 @@ class _AddAppPageState extends State<AddAppPage> {
additionalData); additionalData);
await settingsProvider await settingsProvider
.getInstallPermission(); .getInstallPermission();
// ignore: use_build_context_synchronously // Only download the APK here if you need to for the package ID
var apkUrl = await appsProvider if (sourceProvider
.confirmApkUrl(app, context); .isTempId(app.id)) {
if (apkUrl == null) { // ignore: use_build_context_synchronously
throw ObtainiumError('Cancelled'); 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 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