diff --git a/.travis.yml b/.travis.yml index 59a7e035..0b7b450c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,14 +1,15 @@ sudo: required -dist: trusty +dist: xenial language: python python: -- '2.7' +- '3.6' install: - deactivate - export PATH=/usr/bin:$PATH - sudo dpkg --add-architecture i386 +- sudo add-apt-repository ppa:jonathonf/python-3.6 -y - sudo apt-get -qq update -- sudo apt-get -qq install build-essential ccache git libncurses5:i386 libstdc++6:i386 libgtk2.0-0:i386 libpangox-1.0-0:i386 libpangoxft-1.0-0:i386 libidn11:i386 python2.7 python2.7-dev openjdk-8-jdk unzip zlib1g-dev zlib1g:i386 m4 libc6-dev-i386 +- sudo apt-get -qq install build-essential python3.6 python3.6-dev python3.6-venv python3-pip ccache git libncurses5:i386 libstdc++6:i386 libgtk2.0-0:i386 libpangox-1.0-0:i386 libpangoxft-1.0-0:i386 libidn11:i386 python2.7 python2.7-dev openjdk-8-jdk unzip zlib1g-dev zlib1g:i386 m4 libc6-dev-i386 - sudo pip install --upgrade cython==0.25.2 pip setuptools - wget -q https://nodejs.org/dist/v8.11.1/node-v8.11.1-linux-x64.tar.xz - tar -xf node-v8.11.1-linux-x64.tar.xz @@ -26,11 +27,14 @@ install: - cd .. - mv buildozer.spec.travis buildozer.spec - mkdir -p cd ~/.buildozer/android/platform/ -- wget -q 'https://dl.google.com/android/repository/android-ndk-r13b-linux-x86_64.zip' -P ~/.buildozer/android/platform/ +- wget -q 'https://us.crystax.net/download/crystax-ndk-10.3.2-linux-x86_64.tar.xz' -P ~/.buildozer/android/ - wget -q 'https://dl.google.com/android/android-sdk_r23-linux.tgz' -P ~/.buildozer/android/platform/ - wget -q 'https://dl.google.com/android/repository/platform-27_r01.zip' -P ~/.buildozer/android/platform/ - wget -q 'https://dl.google.com/android/repository/build-tools_r26.0.1-linux.zip' -P ~/.buildozer/android/platform/ -- unzip -qq ~/.buildozer/android/platform/android-ndk-r13b-linux-x86_64.zip -d ~/.buildozer/android/platform/ +- tar -xf ~/.buildozer/android/crystax-ndk-10.3.2-linux-x86_64.tar.xz -C ~/.buildozer/android/ +- cp -f $TRAVIS_BUILD_DIR/scripts/build-target-python.sh ~/.buildozer/android/crystax-ndk-10.3.2/build/tools/build-target-python.sh +- rm -rf ~/.buildozer/android/crystax-ndk-10.3.2/platforms/android-9 +- ln -s ~/.buildozer/android/crystax-ndk-10.3.2/platforms/android-21 ~/.buildozer/android/crystax-ndk-10.3.2/platforms/android-9 - tar -xf ~/.buildozer/android/platform/android-sdk_r23-linux.tgz -C ~/.buildozer/android/platform/ - mv ~/.buildozer/android/platform/android-sdk-linux ~/.buildozer/android/platform/android-sdk-23 - unzip -qq ~/.buildozer/android/platform/platform-27_r01.zip -d ~/.buildozer/android/platform/android-sdk-23/platforms diff --git a/Vagrantfile b/Vagrantfile index e3d5fc5c..713a2efa 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -43,7 +43,7 @@ Vagrant.configure("2") do |config| dpkg --add-architecture i386 apt-get update apt-get install -y libssl-dev - apt-get install -y autoconf libffi-dev pkg-config libtool build-essential ccache git libncurses5:i386 libstdc++6:i386 libgtk2.0-0:i386 libpangox-1.0-0:i386 libpangoxft-1.0-0:i386 libidn11:i386 python2.7 python2.7-dev openjdk-8-jdk unzip zlib1g-dev zlib1g:i386 m4 libc6-dev-i386 python-pip + apt-get install -y python3.6 python3.6-dev python3-pip autoconf libffi-dev pkg-config libtool build-essential ccache git libncurses5:i386 libstdc++6:i386 libgtk2.0-0:i386 libpangox-1.0-0:i386 libpangoxft-1.0-0:i386 libidn11:i386 python2.7 python2.7-dev openjdk-8-jdk unzip zlib1g-dev zlib1g:i386 m4 libc6-dev-i386 python-pip pip install -f --upgrade setuptools pyopenssl git clone https://github.com/lbryio/buildozer.git cd buildozer @@ -63,12 +63,15 @@ Vagrant.configure("2") do |config| cp $HOME/lbry-android/buildozer.spec.vagrant $HOME/lbry-android/buildozer.spec mkdir -p cd $HOME/.buildozer/android/platform/ - wget -q 'https://dl.google.com/android/repository/android-ndk-r13b-linux-x86_64.zip' -P $HOME/.buildozer/android/platform/ + wget -q 'https://us.crystax.net/download/crystax-ndk-10.3.2-linux-x86_64.tar.xz' -P $HOME/.buildozer/android/ wget -q 'https://dl.google.com/android/android-sdk_r23-linux.tgz' -P $HOME/.buildozer/android/platform/ wget -q 'https://dl.google.com/android/repository/platform-27_r01.zip' -P $HOME/.buildozer/android/platform/ wget -q 'https://dl.google.com/android/repository/build-tools_r26.0.1-linux.zip' -P $HOME/.buildozer/android/platform/ - unzip -qq $HOME/.buildozer/android/platform/android-ndk-r13b-linux-x86_64.zip -d $HOME/.buildozer/android/platform/ - rm $HOME/.buildozer/android/platform/android-ndk-r13b-linux-x86_64.zip + tar -xf ~/.buildozer/android/crystax-ndk-10.3.2-linux-x86_64.tar.xz -C $HOME/.buildozer/android/ + rm $HOME/.buildozer/android/crystax-ndk-10.3.2-linux-x86_64.tar.xz + ln -s $HOME/.buildozer/android/crystax-ndk-10.3.2/platforms/android-21 $HOME/.buildozer/android/crystax-ndk-10.3.2/platforms/android-9 + cp -f $HOME/lbry-android/scripts/build-target-python.sh $HOME/.buildozer/android/crystax-ndk-10.3.2/build/tools/build-target-python.sh + rm -rf $HOME/.buildozer/android/crystax-ndk-10.3.2/platforms/android-9 tar -xf $HOME/.buildozer/android/platform/android-sdk_r23-linux.tgz -C $HOME/.buildozer/android/platform/ rm $HOME/.buildozer/android/platform/android-sdk_r23-linux.tgz mv $HOME/.buildozer/android/platform/android-sdk-linux $HOME/.buildozer/android/platform/android-sdk-23 diff --git a/app/src/component/fileDownloadButton/view.js b/app/src/component/fileDownloadButton/view.js index 70e6f507..827f2f13 100644 --- a/app/src/component/fileDownloadButton/view.js +++ b/app/src/component/fileDownloadButton/view.js @@ -47,7 +47,7 @@ class FileDownloadButton extends React.PureComponent { onStartDownloadFailed } = this.props; - if ((fileInfo && !fileInfo.stopped) || loading || downloading) { + if (loading || downloading) { const progress = fileInfo && fileInfo.written_bytes ? fileInfo.written_bytes / fileInfo.total_bytes * 100 : 0, label = fileInfo ? progress.toFixed(0) + '% complete' : 'Connecting...'; diff --git a/app/src/component/phoneNumberRewardSubcard/view.js b/app/src/component/phoneNumberRewardSubcard/view.js index 7856c4fb..5f2bb1fb 100644 --- a/app/src/component/phoneNumberRewardSubcard/view.js +++ b/app/src/component/phoneNumberRewardSubcard/view.js @@ -44,7 +44,7 @@ class PhoneNumberRewardSubcard extends React.PureComponent { DeviceEventEmitter.addListener('onVerificationCodeReceived', this.receiveVerificationCode); const { phone } = this.props; - if (phone && String(phone).trim().length > 0) { + if (phone && String(phone).trim().length() > 0) { this.setState({ newPhoneAdded: true }); } diff --git a/app/src/page/file/index.js b/app/src/page/file/index.js index d909afb5..e653fff0 100644 --- a/app/src/page/file/index.js +++ b/app/src/page/file/index.js @@ -1,9 +1,8 @@ import { connect } from 'react-redux'; import { doFetchFileInfo, - doFetchCostInfoForUri, doResolveUri, - doNotify, + doFetchCostInfoForUri, makeSelectIsUriResolving, makeSelectCostInfoForUri, makeSelectFileInfoForUri, @@ -33,14 +32,13 @@ const select = (state, props) => { }; const perform = dispatch => ({ + fetchFileInfo: uri => dispatch(doFetchFileInfo(uri)), + fetchCostInfo: uri => dispatch(doFetchCostInfoForUri(uri)), + resolveUri: uri => dispatch(doResolveUri(uri)), + stopDownload: (uri, fileInfo) => dispatch(doStopDownloadingFile(uri, fileInfo)), deleteFile: (fileInfo, deleteFromDevice, abandonClaim) => { dispatch(doDeleteFile(fileInfo, deleteFromDevice, abandonClaim)); }, - fetchFileInfo: uri => dispatch(doFetchFileInfo(uri)), - fetchCostInfo: uri => dispatch(doFetchCostInfoForUri(uri)), - notify: data => dispatch(doNotify(data)), - resolveUri: uri => dispatch(doResolveUri(uri)), - stopDownload: (uri, fileInfo) => dispatch(doStopDownloadingFile(uri, fileInfo)), }); export default connect(select, perform)(FilePage); diff --git a/app/src/page/file/view.js b/app/src/page/file/view.js index c617c6ea..5e399d61 100644 --- a/app/src/page/file/view.js +++ b/app/src/page/file/view.js @@ -57,8 +57,7 @@ class FilePage extends React.PureComponent { showWebView: false, playerBgHeight: 0, playerHeight: 0, - uri: null, - stopDownloadConfirmed: false + uri: null }; } @@ -156,12 +155,7 @@ class FilePage extends React.PureComponent { { text: 'No' }, { text: 'Yes', onPress: () => { deleteFile(fileInfo.outpoint, true); - this.setState({ - downloadPressed: false, - fileViewLogged: false, - mediaLoaded: false, - stopDownloadConfirmed: false - }); + this.setState({ downloadPressed: false, fileViewLogged: false, mediaLoaded: false }); }} ], { cancelable: true } @@ -169,7 +163,7 @@ class FilePage extends React.PureComponent { } onStopDownloadPressed = () => { - const { fileInfo, navigation, notify, stopDownload } = this.props; + const { deleteFile, stopDownload, fileInfo, navigation } = this.props; Alert.alert( 'Stop download', @@ -178,20 +172,8 @@ class FilePage extends React.PureComponent { { text: 'No' }, { text: 'Yes', onPress: () => { stopDownload(navigation.state.params.uri, fileInfo); - this.setState({ - downloadPressed: false, - fileViewLogged: false, - mediaLoaded: false, - stopDownloadConfirmed: true - }); - - // there can be a bit of lag between the user pressing Yes and the UI being updated - // after the file_set_status and file_delete operations, so let the user know - notify({ - message: 'The download will stop momentarily. You do not need to wait to discover something else.', - displayType: ['toast'] - }); - }} + this.setState({ downloadPressed: false, fileViewLogged: false, mediaLoaded: false }); + } } ], { cancelable: true } ); @@ -379,9 +361,7 @@ class FilePage extends React.PureComponent { const mediaType = Lbry.getMediaType(contentType); const isPlayable = mediaType === 'video' || mediaType === 'audio'; const { height, channel_name: channelName, value } = claim; - const showActions = !this.state.fullscreenMode && - !this.state.showImageViewer && - !this.state.showWebView && + const showActions = !this.state.fullscreenMode && !this.state.showImageViewer && !this.state.showWebView && (completed || (fileInfo && !fileInfo.stopped && fileInfo.written_bytes < fileInfo.total_bytes)); const channelClaimId = value && value.publisherSignature && value.publisherSignature.certificateId; @@ -440,7 +420,7 @@ class FilePage extends React.PureComponent { isPlayable={isPlayable} onPlay={() => { this.startTime = Date.now(); - this.setState({ downloadPressed: true, autoPlayMedia: true, stopDownloadConfirmed: false }); + this.setState({ downloadPressed: true, autoPlayMedia: true }); }} onButtonLayout={() => this.setState({ downloadButtonShown: true })} onStartDownloadFailed={() => { @@ -474,16 +454,14 @@ class FilePage extends React.PureComponent { onPlaybackStarted={this.onPlaybackStarted} />} - {fileInfo && showActions && + { showActions && {completed &&