diff --git a/ui/js/actions/app.js b/ui/js/actions/app.js index a513b820c..bf0451c82 100644 --- a/ui/js/actions/app.js +++ b/ui/js/actions/app.js @@ -52,6 +52,7 @@ export function doChangePath(path) { const state = getState() const pageTitle = selectPageTitle(state) window.document.title = pageTitle + window.scrollTo(0, 0) const currentPage = selectCurrentPage(state) if (currentPage === 'search') { diff --git a/ui/js/actions/content.js b/ui/js/actions/content.js index e6b6a30a1..a7276abf9 100644 --- a/ui/js/actions/content.js +++ b/ui/js/actions/content.js @@ -166,6 +166,8 @@ export function doDownloadFile(uri, streamInfo) { fileInfo, } }) + + dispatch(doUpdateLoadStatus(uri, streamInfo.outpoint)) }) lbryio.call('file', 'view', { @@ -176,7 +178,6 @@ export function doDownloadFile(uri, streamInfo) { rewards.claimEligiblePurchaseRewards() - dispatch(doUpdateLoadStatus(uri, streamInfo.outpoint)) } } diff --git a/ui/js/component/fileActions/index.js b/ui/js/component/fileActions/index.js index 8e9555a14..1d8ba6088 100644 --- a/ui/js/component/fileActions/index.js +++ b/ui/js/component/fileActions/index.js @@ -43,6 +43,7 @@ const makeSelect = () => { const selectIsAvailableForUri = makeSelectIsAvailableForUri() const selectDownloadingForUri = makeSelectDownloadingForUri() const selectCostInfoForUri = makeSelectCostInfoForUri() + const selectLoadingForUri = makeSelectLoadingForUri() const select = (state, props) => ({ fileInfo: selectFileInfoForUri(state, props), @@ -51,6 +52,7 @@ const makeSelect = () => { modal: selectCurrentModal(state), downloading: selectDownloadingForUri(state, props), costInfo: selectCostInfoForUri(state, props), + loading: selectLoadingForUri(state, props), }) return select diff --git a/ui/js/component/fileActions/view.jsx b/ui/js/component/fileActions/view.jsx index 5dd4357c6..8b3d2678b 100644 --- a/ui/js/component/fileActions/view.jsx +++ b/ui/js/component/fileActions/view.jsx @@ -63,6 +63,7 @@ class FileActions extends React.Component { closeModal, startDownload, costInfo, + loading, } = this.props const deleteChecked = this.state.deleteChecked, @@ -73,7 +74,7 @@ class FileActions extends React.Component { let content - if (downloading) { + if (loading || downloading) { const progress = (fileInfo && fileInfo.written_bytes) ? fileInfo.written_bytes / fileInfo.total_bytes * 100 : 0, @@ -110,7 +111,6 @@ class FileActions extends React.Component { content = openInShell(fileInfo)} />; } else { console.log('handle this case of file action props?'); - console.log(this.props) } return ( diff --git a/ui/js/component/video/index.js b/ui/js/component/video/index.js index 423ff533a..e581f4bc6 100644 --- a/ui/js/component/video/index.js +++ b/ui/js/component/video/index.js @@ -13,7 +13,8 @@ import { doLoadVideo, } from 'actions/content' import { - makeSelectMetadataForUri + makeSelectMetadataForUri, + makeSelectContentTypeForUri, } from 'selectors/claims' import { makeSelectFileInfoForUri, @@ -32,6 +33,7 @@ const makeSelect = () => { const selectIsLoading = makeSelectLoadingForUri() const selectIsDownloading = makeSelectDownloadingForUri() const selectMetadata = makeSelectMetadataForUri() + const selectContentType = makeSelectContentTypeForUri() const select = (state, props) => ({ costInfo: selectCostInfo(state, props), @@ -40,6 +42,7 @@ const makeSelect = () => { modal: selectCurrentModal(state), isLoading: selectIsLoading(state, props), isDownloading: selectIsDownloading(state, props), + contentType: selectContentType(state, props), }) return select diff --git a/ui/js/component/video/view.jsx b/ui/js/component/video/view.jsx index d7a1f274f..09ca9a5ac 100644 --- a/ui/js/component/video/view.jsx +++ b/ui/js/component/video/view.jsx @@ -2,6 +2,10 @@ import React from 'react'; import FilePrice from 'component/filePrice' import Link from 'component/link'; import Modal from 'component/modal'; +import lbry from 'lbry' +import { + Thumbnail, +} from 'component/common' class VideoPlayButton extends React.Component { onPurchaseConfirmed() { @@ -33,6 +37,7 @@ class VideoPlayButton extends React.Component { isLoading, costInfo, fileInfo, + mediaType, } = this.props /* @@ -44,13 +49,14 @@ class VideoPlayButton extends React.Component { */ const disabled = isLoading || fileInfo === undefined || (fileInfo === null && (!costInfo || costInfo.cost === undefined)) + const icon = mediaType == "image" ? "icon-folder-o" : "icon-play" return (
You don't have enough LBRY credits to pay for this stream. @@ -89,12 +95,14 @@ class Video extends React.Component { isLoading, isDownloading, fileInfo, + contentType, } = this.props const { isPlaying = false, } = this.state const isReadyToPlay = fileInfo && fileInfo.written_bytes > 0 + const mediaType = lbry.getMediaType(contentType, fileInfo && fileInfo.file_name) let loadStatusMessage = '' @@ -106,14 +114,24 @@ class Video extends React.Component { loadStatusMessage = "Downloading stream... not long left now!" } + let klassName = "" + if (isLoading || isDownloading) klassName += "video-embedded video" + if (mediaType === "video") { + klassName += "video-embedded video" + klassName += isPlaying ? " video--active" : " video--hidden" + } else { + if (!isPlaying) klassName += "video-embedded" + } + const poster = metadata.thumbnail + return ( -
{ - isPlaying || isLoading ? +
{ + isPlaying ? (!isReadyToPlay ? this is the world's worst loading screen and we shipped our software with it anyway...

{loadStatusMessage}
: - ) : + ) :
- +
}
); @@ -126,10 +144,9 @@ const fs = require('fs') class VideoPlayer extends React.Component { componentDidMount() { - const elem = this.refs.video + const elem = this.refs.media const { downloadPath, - contentType, filename, } = this.props const file = { @@ -138,7 +155,7 @@ class VideoPlayer extends React.Component { return fs.createReadStream(downloadPath, opts) } } - player.render(file, elem, { + player.append(file, elem, { autoplay: true, controls: true, }) @@ -147,14 +164,15 @@ class VideoPlayer extends React.Component { render() { const { downloadPath, - contentType, + mediaType, poster, } = this.props return ( - +
+ {mediaType === "audio" && } +
+
) } } diff --git a/ui/js/lbry.js b/ui/js/lbry.js index b7e0f9960..7b95016ac 100644 --- a/ui/js/lbry.js +++ b/ui/js/lbry.js @@ -286,7 +286,7 @@ lbry.imagePath = function(file) lbry.getMediaType = function(contentType, fileName) { if (contentType) { - return /^[^/]+/.exec(contentType); + return /^[^/]+/.exec(contentType)[0]; } else if (fileName) { var dotIndex = fileName.lastIndexOf('.'); if (dotIndex == -1) { diff --git a/ui/js/page/filePage/view.jsx b/ui/js/page/filePage/view.jsx index e7a1e2068..b1e031df7 100644 --- a/ui/js/page/filePage/view.jsx +++ b/ui/js/page/filePage/view.jsx @@ -92,11 +92,12 @@ class FilePage extends React.Component{ const channelClaimId = claim.value && claim.value.publisherSignature ? claim.value.publisherSignature.certificateId : null; const channelUri = signatureIsValid && hasSignature && channelName ? lbryuri.build({channelName, claimId: channelClaimId}, false) : null const uriIndicator = + const mediaType = lbry.getMediaType(contentType) return (
- { contentType && contentType.startsWith('video/') ? + { ["video", "audio", "image"].indexOf(mediaType) !== -1 ?