suppress load video error #1768

Merged
daovist merged 6 commits from suppress-load-video-error into master 2018-07-19 16:42:24 +02:00
4 changed files with 43 additions and 19 deletions
Showing only changes of commit d43dd78821 - Show all commits

View file

@ -17,6 +17,7 @@ import {
import { makeSelectClientSetting, selectShowNsfw } from 'redux/selectors/settings';
import { selectMediaPaused, makeSelectMediaPositionForUri } from 'redux/selectors/media';
import { selectPlayingUri } from 'redux/selectors/content';
import { selectFileInfoErrors } from 'redux/selectors/file_info';
import FileViewer from './view';
const select = (state, props) => ({
@ -34,6 +35,7 @@ const select = (state, props) => ({
mediaPosition: makeSelectMediaPositionForUri(props.uri)(state),
autoplay: makeSelectClientSetting(settings.AUTOPLAY)(state),
searchBarFocused: selectSearchBarFocused(state),
fileInfoErrors: selectFileInfoErrors(state)
});
const perform = dispatch => ({

View file

@ -79,10 +79,22 @@ class FileViewer extends React.PureComponent<Props> {
}
}
// do not play when state.content.errors[uri]
handleAutoplay = (props: Props) => {
const { autoplay, playingUri, fileInfo, costInfo, isDownloading, uri, play, metadata } = props;
const {
autoplay,
playingUri,
fileInfo,
costInfo,
isDownloading,
uri,
play,
metadata,
fileInfoErrors,
} = props;
const playable = autoplay && playingUri !== uri && metadata && !metadata.nsfw;
const playable =
autoplay && playingUri !== uri && metadata && !metadata.nsfw && !(uri in fileInfoErrors);
if (playable && costInfo && costInfo.cost === 0 && !fileInfo && !isDownloading) {
play(uri);

View file

@ -171,7 +171,7 @@ export function doUpdateLoadStatus(uri, outpoint) {
} else {
// ready to play
const { total_bytes: totalBytes, written_bytes: writtenBytes } = fileInfo;
const progress = writtenBytes / totalBytes * 100;
const progress = (writtenBytes / totalBytes) * 100;
dispatch({
type: ACTIONS.DOWNLOADING_PROGRESSED,
@ -259,29 +259,37 @@ export function doLoadVideo(uri) {
streamInfo === null || typeof streamInfo !== 'object' || streamInfo.error === 'Timeout';
if (timeout) {
dispatch(doSetPlayingUri(null));
dispatch({
type: ACTIONS.LOADING_VIDEO_FAILED,
data: { uri },
});
dispatch(doNotify({ id: MODALS.FILE_TIMEOUT }, { uri }));
dispatch(handleLoadVideoError(uri, 'timeout'));
} else {
dispatch(doDownloadFile(uri, streamInfo));
}
})
.catch(() => {
dispatch(doSetPlayingUri(null));
dispatch({
type: ACTIONS.LOADING_VIDEO_FAILED,
data: { uri },
});
dispatch(handleLoadVideoError(uri));
});
};
}
function handleLoadVideoError(uri, errorType = '') {
return (dispatch, getState) => {
// suppress error when another media is playing
const { playingUri } = getState().content;
if (!playingUri || playingUri === uri) {
dispatch({
type: ACTIONS.LOADING_VIDEO_FAILED,
data: { uri },
});
dispatch(doSetPlayingUri(null));
if (errorType === 'timeout') {
doNotify({ id: MODALS.FILE_TIMEOUT }, { uri });
} else {
dispatch(
doAlertError(
`Failed to download ${uri}, please try again. If this problem persists, visit https://lbry.io/faq/support for support.`
)
);
});
}
}
};
}

View file

@ -3,9 +3,9 @@ import {
selectIsFetchingClaimListMine,
selectMyClaims,
selectClaimsById,
} from 'redux/selectors/claims';
buildURI,
} from 'lbry-redux';
import { createSelector } from 'reselect';
import { buildURI } from 'lbryURI';
export const selectState = state => state.fileInfo || {};
@ -97,7 +97,7 @@ export const selectTotalDownloadProgress = createSelector(selectDownloadingFileI
const progress = [];
fileInfos.forEach(fileInfo => {
progress.push(fileInfo.written_bytes / fileInfo.total_bytes * 100);
progress.push((fileInfo.written_bytes / fileInfo.total_bytes) * 100);
});
const totalProgress = progress.reduce((a, b) => a + b, 0);
@ -195,3 +195,5 @@ export const selectSearchDownloadUris = query =>
})
: null;
});
export const selectFileInfoErrors = createSelector(selectState, state => state.errors || {});