1
0
mirror of https://github.com/TeamNewPipe/NewPipe.git synced 2024-11-22 11:02:35 +01:00

Improve mime type deduction on subscription import

This commit is contained in:
Stypox 2021-08-30 15:26:42 +02:00
parent e603dddc54
commit 5284072b8d
No known key found for this signature in database
GPG Key ID: 4BDF1B40A49FDD23

View File

@ -19,6 +19,9 @@
package org.schabi.newpipe.local.subscription.services; 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.content.Intent;
import android.net.Uri; import android.net.Uri;
import android.text.TextUtils; import android.text.TextUtils;
@ -26,7 +29,6 @@ import android.util.Log;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.documentfile.provider.DocumentFile;
import androidx.localbroadcastmanager.content.LocalBroadcastManager; import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import org.reactivestreams.Subscriber; import org.reactivestreams.Subscriber;
@ -47,6 +49,7 @@ import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects;
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
import io.reactivex.rxjava3.core.Flowable; 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.functions.Function;
import io.reactivex.rxjava3.schedulers.Schedulers; 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 class SubscriptionsImportService extends BaseImportExportService {
public static final int CHANNEL_URL_MODE = 0; public static final int CHANNEL_URL_MODE = 0;
public static final int INPUT_STREAM_MODE = 1; public static final int INPUT_STREAM_MODE = 1;
@ -114,11 +114,20 @@ public class SubscriptionsImportService extends BaseImportExportService {
} }
try { try {
inputStream = new SharpInputStream( final StoredFileHelper fileHelper = new StoredFileHelper(this, uri, DEFAULT_MIME);
new StoredFileHelper(this, uri, DEFAULT_MIME).getStream()); inputStream = new SharpInputStream(fileHelper.getStream());
inputStreamType = fileHelper.getType();
final DocumentFile documentFile = DocumentFile.fromSingleUri(this, uri); if (inputStreamType == null || inputStreamType.equals(DEFAULT_MIME)) {
inputStreamType = documentFile.getType(); // 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) { } catch (final IOException e) {
handleError(e); handleError(e);
return START_NOT_STICKY; return START_NOT_STICKY;
@ -254,9 +263,9 @@ public class SubscriptionsImportService extends BaseImportExportService {
final Throwable error = notification.getError(); final Throwable error = notification.getError();
final Throwable cause = error.getCause(); final Throwable cause = error.getCause();
if (error instanceof IOException) { if (error instanceof IOException) {
throw (IOException) error; throw error;
} else if (cause instanceof IOException) { } else if (cause instanceof IOException) {
throw (IOException) cause; throw cause;
} else if (ExceptionUtils.isNetworkRelated(error)) { } else if (ExceptionUtils.isNetworkRelated(error)) {
throw new IOException(error); throw new IOException(error);
} }
@ -286,6 +295,9 @@ public class SubscriptionsImportService extends BaseImportExportService {
} }
private Flowable<List<SubscriptionItem>> importFromInputStream() { private Flowable<List<SubscriptionItem>> importFromInputStream() {
Objects.requireNonNull(inputStream);
Objects.requireNonNull(inputStreamType);
return Flowable.fromCallable(() -> NewPipe.getService(currentServiceId) return Flowable.fromCallable(() -> NewPipe.getService(currentServiceId)
.getSubscriptionExtractor() .getSubscriptionExtractor()
.fromInputStream(inputStream, inputStreamType)); .fromInputStream(inputStream, inputStreamType));