diff --git a/.bumpversion.cfg b/.bumpversion.cfg index 035c1e0aa..cf597fc15 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.11.5rc1 +current_version = 0.11.7 commit = True tag = True parse = (?P\d+)\.(?P\d+)\.(?P\d+)((?P[a-z]+)(?P\d+))? diff --git a/CHANGELOG.md b/CHANGELOG.md index 253d97ad0..d39386c35 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,10 +16,8 @@ Web UI version numbers should always match the corresponding version of LBRY App * ### Fixed - * Eliminated instance of costs being double fetched - * Fixed issue preventing file re-download - * Fixed race condition that could prevent file playbac - * Fixed issue with batch actions and thunk + * + * ### Deprecated * @@ -29,6 +27,43 @@ Web UI version numbers should always match the corresponding version of LBRY App * * +## [0.11.7] - 2017-05-30 + +### Changed + * Video player switched from plyr to render-media + + +### Fixed + * Video player should behave better on streaming + * Daemon times out more quickly when it cannot start + * Connection should fail more cleanly, rather than get stuck entirely + * Closing modal dialogs was broken on some download and stream errors + * Discover landing page improperly showed loading error when it was loading correctly + + + +## [0.11.6] - 2017-05-29 + +### Changed + * Do not use a separate claim cache for publishes + + +### Fixed + * Upgrade process should now works on Windows + * Crudely handle failed publishes missing outpoints + + + +## [0.11.5] - 2017-05-28 + +### Fixed + * Eliminated instance of costs being double fetched + * Fixed issue preventing file re-download + * Fixed race condition that could prevent file playbac + * Fixed issue with batch actions and thunk + + + ## [0.11.4] - 2017-05-26 ### Added diff --git a/README.md b/README.md index 0819f2cbc..c2b0af5a7 100644 --- a/README.md +++ b/README.md @@ -48,3 +48,7 @@ to create distributable packages, which is run by calling: This project has currently only been worked on in Linux and macOS. If you are on Windows, you can checkout out the build steps in [appveyor.yml](https://github.com/lbryio/lbry-app/blob/master/.appveyor.yml) and probably figure out something from there. + +## Internationalization + +If you want to help translating the lbry-app, you can copy the en.json file in /app/locales and modify the values while leaving the keys as their original English strings. An example for this would be: `"Skip": "Überspringen",` Translations should automatically show up in options. \ No newline at end of file diff --git a/app/locales/en.json b/app/locales/en.json index a55aa69e1..2dd30de19 100644 --- a/app/locales/en.json +++ b/app/locales/en.json @@ -309,5 +309,10 @@ "Wallet": "Wallet", "Looking up version info": "Looking up version info", "It looks like you deleted or moved this file. We're rebuilding it now. It will only take a few seconds.": "It looks like you deleted or moved this file. We're rebuilding it now. It will only take a few seconds.", - "Fetching cost info": "Fetching cost info" -} + "Fetching cost info": "Fetching cost info", + "Testing network": "Testing network", + "Connection Failure": "Connection Failure", + "Try closing all LBRY processes and starting again. If this still happpens, your anti-virus software or firewall may be preventing LBRY from connecting. Contact hello@lbry.io if you think this is a software bug.": "Try closing all LBRY processes and starting again. If this still happpens, your anti-virus software or firewall may be preventing LBRY from connecting. Contact hello@lbry.io if you think this is a software bug.", + "Timed Out": "Timed Out", + "Testing Network": "Testing Network" +} \ No newline at end of file diff --git a/app/package.json b/app/package.json index d33d9adca..e2963c7fc 100644 --- a/app/package.json +++ b/app/package.json @@ -1,6 +1,6 @@ { "name": "LBRY", - "version": "0.11.5rc1", + "version": "0.11.7", "main": "main.js", "description": "LBRY is a fully decentralized, open-source protocol facilitating the discovery, access, and (sometimes) purchase of data.", "author": { diff --git a/electron.bat b/electron.bat deleted file mode 100644 index e300c90ae..000000000 --- a/electron.bat +++ /dev/null @@ -1,5 +0,0 @@ -start /min %~dp0node_modules\.bin\electron app - -pause - - diff --git a/ui/js/actions/content.js b/ui/js/actions/content.js index e09bd5ea1..e6b6a30a1 100644 --- a/ui/js/actions/content.js +++ b/ui/js/actions/content.js @@ -209,7 +209,7 @@ export function doLoadVideo(uri) { } } -export function doPurchaseUri(uri) { +export function doPurchaseUri(uri, purchaseModalName) { return function(dispatch, getState) { const state = getState() const balance = selectBalance(state) @@ -244,7 +244,7 @@ export function doPurchaseUri(uri) { if (cost > balance) { dispatch(doOpenModal('notEnoughCredits')) } else { - dispatch(doOpenModal('affirmPurchase')) + dispatch(doOpenModal(purchaseModalName)) } return Promise.resolve() @@ -274,16 +274,16 @@ export function doFetchClaimsByChannel(uri) { } } -export function doClaimListMine() { +export function doFetchClaimListMine() { return function(dispatch, getState) { dispatch({ - type: types.CLAIM_LIST_MINE_STARTED + type: types.FETCH_CLAIM_LIST_MINE_STARTED }) lbry.claim_list_mine().then((claims) => { dispatch({ - type: types.CLAIM_LIST_MINE_COMPLETED, + type: types.FETCH_CLAIM_LIST_MINE_COMPLETED, data: { claims } diff --git a/ui/js/actions/file_info.js b/ui/js/actions/file_info.js index 23ba50e71..44d76885c 100644 --- a/ui/js/actions/file_info.js +++ b/ui/js/actions/file_info.js @@ -1,7 +1,7 @@ import * as types from 'constants/action_types' import lbry from 'lbry' import { - doClaimListMine + doFetchClaimListMine } from 'actions/content' import { selectClaimsByUri, @@ -110,7 +110,7 @@ export function doFetchFileInfosAndPublishedClaims() { isFileInfoListPending = selectFileListIsPending(state) if (isClaimListMinePending === undefined) { - dispatch(doClaimListMine()) + dispatch(doFetchClaimListMine()) } if (isFileInfoListPending === undefined) { diff --git a/ui/js/component/fileActions/index.js b/ui/js/component/fileActions/index.js index e9dc10705..8e9555a14 100644 --- a/ui/js/component/fileActions/index.js +++ b/ui/js/component/fileActions/index.js @@ -66,7 +66,7 @@ const perform = (dispatch) => ({ dispatch(doDeleteFile(fileInfo, deleteFromComputer)) }, openModal: (modal) => dispatch(doOpenModal(modal)), - startDownload: (uri) => dispatch(doPurchaseUri(uri)), + startDownload: (uri) => dispatch(doPurchaseUri(uri, 'affirmPurchase')), loadVideo: (uri) => dispatch(doLoadVideo(uri)), }) diff --git a/ui/js/component/fileActions/view.jsx b/ui/js/component/fileActions/view.jsx index b73573922..0a2106b26 100644 --- a/ui/js/component/fileActions/view.jsx +++ b/ui/js/component/fileActions/view.jsx @@ -122,7 +122,7 @@ class FileActions extends React.Component { openModal('confirmRemove')} label={__("Remove...")} /> : '' } + contentLabel={__("Confirm Purchase")} onConfirmed={this.onAffirmPurchase.bind(this)} onAborted={closeModal}> {__("This will purchase")} {title} {__("for")} {__("credits")}.

- + {!this.props.isWarning ? + : + {' ' + this.props.message} }

- {this.props.isWarning ? : null} {this.props.details} + {this.props.details}
); diff --git a/ui/js/component/splash.js b/ui/js/component/splash.js index d5433398a..8da6d5c0e 100644 --- a/ui/js/component/splash.js +++ b/ui/js/component/splash.js @@ -13,6 +13,7 @@ export class SplashScreen extends React.Component { this.state = { details: __('Starting daemon'), + message: __("Connecting"), isLagging: false, }; } @@ -29,11 +30,12 @@ export class SplashScreen extends React.Component { // TODO: This is a hack, and the logic should live in the daemon // to give us a better sense of when we are actually started this.setState({ - details: __('Waiting for name resolution'), + message: __("Testing Network"), + details: __("Waiting for name resolution"), isLagging: false }); - lbry.resolve({uri: 'lbry://one'}).then(() => { + lbry.resolve({uri: "lbry://one"}).then(() => { this.props.onLoadDone(); }); return; @@ -48,21 +50,19 @@ export class SplashScreen extends React.Component { } componentDidMount() { - lbry.connect().then((isConnected) => { - if (isConnected) { - this.updateStatus(); - } else { + lbry.connect() + .then(() => { this.updateStatus() }) + .catch(() => { this.setState({ isLagging: true, - message: __("Failed to connect to LBRY"), - details: __("LBRY was unable to start and connect properly.") + message: __("Connection Failure"), + details: __("Try closing all LBRY processes and starting again. If this still happpens, your anti-virus software or firewall may be preventing LBRY from connecting. Contact hello@lbry.io if you think this is a software bug.") }) - } - }) + }) } render() { - return + return } } diff --git a/ui/js/component/video/index.js b/ui/js/component/video/index.js index 5566da840..423ff533a 100644 --- a/ui/js/component/video/index.js +++ b/ui/js/component/video/index.js @@ -47,7 +47,7 @@ const makeSelect = () => { const perform = (dispatch) => ({ loadVideo: (uri) => dispatch(doLoadVideo(uri)), - purchaseUri: (uri) => dispatch(doPurchaseUri(uri)), + purchaseUri: (uri) => dispatch(doPurchaseUri(uri, 'affirmPurchaseAndPlay')), closeModal: () => dispatch(doCloseModal()), }) diff --git a/ui/js/component/video/view.jsx b/ui/js/component/video/view.jsx index 3cf65a7e1..b3601a287 100644 --- a/ui/js/component/video/view.jsx +++ b/ui/js/component/video/view.jsx @@ -52,28 +52,25 @@ class VideoPlayButton extends React.Component { className="video__play-button" icon="icon-play" onClick={this.onWatchClick.bind(this)} /> - {modal} - { this.closeModal() }}> + {__("You don't have enough LBRY credits to pay for this stream.")} {__("This will purchase")} {title} {__("for")} {__("credits")}. { this.closeModal() }} contentLabel="Timed Out"> + isOpen={modal == 'timedOut'} onConfirmed={closeModal} contentLabel={__("Timed Out")}> {__("Sorry, your download timed out :(")} ); } } -const plyr = require('plyr') - class Video extends React.Component { constructor(props) { super(props) @@ -114,7 +111,7 @@ class Video extends React.Component { isPlaying || isLoading ? (!isReadyToPlay ? {__("this is the world's worst loading screen and we shipped our software with it anyway...")}

{loadStatusMessage}
: - ) : + ) :
@@ -123,18 +120,28 @@ class Video extends React.Component { } } +const from = require('from2') +const player = require('render-media') +const fs = require('fs') + class VideoPlayer extends React.Component { componentDidMount() { const elem = this.refs.video const { - autoplay, downloadPath, contentType, + filename, } = this.props - const players = plyr.setup(elem) - if (autoplay) { - players[0].play() + const file = { + name: filename, + createReadStream: (opts) => { + return fs.createReadStream(downloadPath, opts) + } } + player.render(file, elem, { + autoplay: true, + controls: true, + }) } render() { @@ -145,7 +152,7 @@ class VideoPlayer extends React.Component { } = this.props return ( -