From 5284072b8d838b692c71977c0b48269dc646a36e Mon Sep 17 00:00:00 2001 From: Stypox Date: Mon, 30 Aug 2021 15:26:42 +0200 Subject: [PATCH] Improve mime type deduction on subscription import --- .../services/SubscriptionsImportService.java | 32 +++++++++++++------ 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/local/subscription/services/SubscriptionsImportService.java b/app/src/main/java/org/schabi/newpipe/local/subscription/services/SubscriptionsImportService.java index 638a2e4f7..af598b106 100644 --- a/app/src/main/java/org/schabi/newpipe/local/subscription/services/SubscriptionsImportService.java +++ b/app/src/main/java/org/schabi/newpipe/local/subscription/services/SubscriptionsImportService.java @@ -19,6 +19,9 @@ package org.schabi.newpipe.local.subscription.services; +import static org.schabi.newpipe.MainActivity.DEBUG; +import static org.schabi.newpipe.streams.io.StoredFileHelper.DEFAULT_MIME; + import android.content.Intent; import android.net.Uri; import android.text.TextUtils; @@ -26,7 +29,6 @@ import android.util.Log; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.documentfile.provider.DocumentFile; import androidx.localbroadcastmanager.content.LocalBroadcastManager; import org.reactivestreams.Subscriber; @@ -47,6 +49,7 @@ import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; +import java.util.Objects; import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; import io.reactivex.rxjava3.core.Flowable; @@ -55,9 +58,6 @@ import io.reactivex.rxjava3.functions.Consumer; import io.reactivex.rxjava3.functions.Function; import io.reactivex.rxjava3.schedulers.Schedulers; -import static org.schabi.newpipe.MainActivity.DEBUG; -import static org.schabi.newpipe.streams.io.StoredFileHelper.DEFAULT_MIME; - public class SubscriptionsImportService extends BaseImportExportService { public static final int CHANNEL_URL_MODE = 0; public static final int INPUT_STREAM_MODE = 1; @@ -114,11 +114,20 @@ public class SubscriptionsImportService extends BaseImportExportService { } try { - inputStream = new SharpInputStream( - new StoredFileHelper(this, uri, DEFAULT_MIME).getStream()); + final StoredFileHelper fileHelper = new StoredFileHelper(this, uri, DEFAULT_MIME); + inputStream = new SharpInputStream(fileHelper.getStream()); + inputStreamType = fileHelper.getType(); - final DocumentFile documentFile = DocumentFile.fromSingleUri(this, uri); - inputStreamType = documentFile.getType(); + if (inputStreamType == null || inputStreamType.equals(DEFAULT_MIME)) { + // mime type could not be determined, just take file extension + final String name = fileHelper.getName(); + final int pointIndex = name.lastIndexOf('.'); + if (pointIndex == -1 || pointIndex >= name.length() - 1) { + inputStreamType = DEFAULT_MIME; // no extension, will fail in the extractor + } else { + inputStreamType = name.substring(pointIndex + 1); + } + } } catch (final IOException e) { handleError(e); return START_NOT_STICKY; @@ -254,9 +263,9 @@ public class SubscriptionsImportService extends BaseImportExportService { final Throwable error = notification.getError(); final Throwable cause = error.getCause(); if (error instanceof IOException) { - throw (IOException) error; + throw error; } else if (cause instanceof IOException) { - throw (IOException) cause; + throw cause; } else if (ExceptionUtils.isNetworkRelated(error)) { throw new IOException(error); } @@ -286,6 +295,9 @@ public class SubscriptionsImportService extends BaseImportExportService { } private Flowable> importFromInputStream() { + Objects.requireNonNull(inputStream); + Objects.requireNonNull(inputStreamType); + return Flowable.fromCallable(() -> NewPipe.getService(currentServiceId) .getSubscriptionExtractor() .fromInputStream(inputStream, inputStreamType));