mirror of
https://github.com/TeamNewPipe/NewPipe
synced 2024-12-23 16:40:32 +00:00
Improve mime type deduction on subscription import
This commit is contained in:
parent
e603dddc54
commit
5284072b8d
@ -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));
|
||||||
|
Loading…
Reference in New Issue
Block a user