mirror of
				https://github.com/ImranR98/Obtainium.git
				synced 2025-11-04 07:13:28 +01:00 
			
		
		
		
	Add app only downloads APK if needed
This commit is contained in:
		@@ -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 {
 | 
			
		||||
 
 | 
			
		||||
@@ -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(
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user