Change dash parser exception handling
This commit is contained in:
parent
b5b25a4188
commit
12bfdf5234
2 changed files with 25 additions and 1 deletions
|
@ -5,7 +5,9 @@ import org.schabi.newpipe.extractor.InfoItem;
|
||||||
import org.schabi.newpipe.extractor.exceptions.ContentNotAvailableException;
|
import org.schabi.newpipe.extractor.exceptions.ContentNotAvailableException;
|
||||||
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
|
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
|
||||||
import org.schabi.newpipe.extractor.utils.DashMpdParser;
|
import org.schabi.newpipe.extractor.utils.DashMpdParser;
|
||||||
|
import org.schabi.newpipe.extractor.utils.Utils;
|
||||||
|
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Vector;
|
import java.util.Vector;
|
||||||
|
|
||||||
|
@ -137,7 +139,12 @@ public class StreamInfo extends Info {
|
||||||
// find a similar stream in the respective lists (calling Stream#equalStats).
|
// find a similar stream in the respective lists (calling Stream#equalStats).
|
||||||
DashMpdParser.getStreams(streamInfo);
|
DashMpdParser.getStreams(streamInfo);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
streamInfo.addException(new ExtractionException("Couldn't get streams from dash mpd", e));
|
// Sometimes we receive 403 (forbidden) error when trying to download the manifest,
|
||||||
|
// (similar to https://github.com/rg3/youtube-dl/blob/master/youtube_dl/extractor/youtube.py#L1888)
|
||||||
|
// just skip the exception, as we later check if we have any streams
|
||||||
|
if (!Utils.hasCauseThrowable(e, FileNotFoundException.class)) {
|
||||||
|
streamInfo.addException(new ExtractionException("Couldn't get streams from dash mpd", e));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,4 +17,21 @@ public class Utils {
|
||||||
public static String removeNonDigitCharacters(String toRemove) {
|
public static String removeNonDigitCharacters(String toRemove) {
|
||||||
return toRemove.replaceAll("\\D+", "");
|
return toRemove.replaceAll("\\D+", "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if throwable have the cause
|
||||||
|
*/
|
||||||
|
public static boolean hasCauseThrowable(Throwable throwable, Class<?> causeToCheck) {
|
||||||
|
// Check if getCause is not the same as cause (the getCause is already the root),
|
||||||
|
// as it will cause a infinite loop if it is
|
||||||
|
Throwable cause, getCause = throwable;
|
||||||
|
|
||||||
|
while ((cause = throwable.getCause()) != null && getCause != cause) {
|
||||||
|
getCause = cause;
|
||||||
|
if (cause.getClass().isAssignableFrom(causeToCheck)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue