Merge master branch's changes

This commit is contained in:
Igor Gassmann 2017-11-21 16:51:12 -03:00
commit 96d70feb7d
128 changed files with 726 additions and 588 deletions

View file

@ -1,5 +1,5 @@
[bumpversion] [bumpversion]
current_version = 0.18.0rc2 current_version = 0.18.2
commit = True commit = True
tag = True tag = True
parse = (?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)((?P<release>[a-z]+)(?P<candidate>\d+))? parse = (?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)((?P<release>[a-z]+)(?P<candidate>\d+))?

View file

@ -8,23 +8,17 @@ Web UI version numbers should always match the corresponding version of LBRY App
## [Unreleased] ## [Unreleased]
### Added ### Added
* Trending! The landing page of the app now features content that is surging in popularity relative to past interest. *
* The app now closes to the system tray. This will help improve publish seeding and network performance. Directing the app to quit or exit will close it entirely. (#374)
* You can now revoke past publishes to receive your credits. (#581)
* You can now unlock tips sent to you so you can send them elsewhere or spend them. (#581)
* Added new window menu options for reloading and help.
* Rewards are now marked in transaction history (#660)
* *
### Changed ### Changed
* Daemon updated to [v0.18.0](https://github.com/lbryio/lbry/releases/tag/v0.18.0). The largest changes here are several more network improvements and fixes as well as functionality and improvements related to concurrent heavier usage (bugs and issues largely discoverd by spee.ch). * Moved all redux code into /redux folder
* Replaced all instances of `XMLHttpRequest` with native `Fetch` API (#676).
* *
### Fixed ### Fixed
* Fixed console errors on settings page related to improper React input properties. * Long channel names causing inconsistent thumbnail sizes (#721)
* Fixed modals being too narrow after font change (#709) * Fixed regression in #697 causing transaction screen to not load for new users (#755)
* Fixed bug that prevented new channel and first publish rewards from being claimed (#290) * Fixed scriolling restore/reset/set (#729)
### Deprecated ### Deprecated
* *
@ -34,6 +28,37 @@ Web UI version numbers should always match the corresponding version of LBRY App
* *
* *
## [0.18.2] - 2017-11-15
### Fixed
* Email verification is fixed. (#746)
## [0.18.0] - 2017-11-13
### Added
* Trending! The landing page of the app now features content that is surging in popularity relative to past interest.
* The app now closes to the system tray. This will help improve publish seeding and network performance. Directing the app to quit or exit will close it entirely. (#374)
* You can now revoke past publishes to receive your credits. (#581)
* You can now unlock tips sent to you so you can send them elsewhere or spend them. (#581)
* Added new window menu options for reloading and help.
* Rewards are now marked in transaction history (#660)
### Changed
* Daemon updated to [v0.18.0](https://github.com/lbryio/lbry/releases/tag/v0.18.0). The largest changes here are several more network improvements and fixes as well as functionality and improvements related to concurrent heavier usage (bugs and issues largely discoverd by spee.ch).
* Improved build and first-run process for new developers.
* Replaced all instances of `XMLHttpRequest` with native `Fetch` API (#676).
### Fixed
* Fixed console errors on settings page related to improper React input properties.
* Fixed modals being too narrow after font change (#709)
* Fixed bug that prevented new channel and first publish rewards from being claimed (#290)
## [0.17.1] - 2017-10-25 ## [0.17.1] - 2017-10-25
### Changed ### Changed

View file

@ -18,16 +18,14 @@ Our [releases page](https://github.com/lbryio/lbry-app/releases/latest) also con
To install from source or make changes to the application, continue reading below. To install from source or make changes to the application, continue reading below.
## Development ## Development on Linux and macOS
### One-time Setup ### One-time Setup
1. Install npm and node (v6 and above required, use [nvm](https://github.com/creationix/nvm/blob/master/README.md) if having trouble) 1. Clone this repo
2. Install keytar and libsecret (see [keytar repository](https://github.com/atom/node-keytar) ) 2. `DEPS=true ./build.sh`
3. Install yarn by running: npm install -g yarn (may require elevated permissions)
4. Check out this repo. This will download and install the LBRY app and its dependencies, including [the LBRY daemon](https://github.com/lbryio/lbry) and command line utilities like `node` and `yarn`. The LBRY app requires Node >= 6; if you have an earlier version of Node installed and want to keep it, you can use [nvm](https://github.com/creationix/nvm) to switch back and forth.
5. Set up a Python virtual environment, or live on the wild side.
6. Run `./build.sh`. This builds the UI assets and puts them into `app/dist`. It also downloads [lbry daemon](https://github.com/lbryio/lbry/releases).
### Running ### Running

View file

@ -226,7 +226,15 @@ function createWindow () {
function createTray () { function createTray () {
// Minimize to tray logic follows: // Minimize to tray logic follows:
// Set the tray icon // Set the tray icon
const iconPath = path.join(app.getAppPath(), "/dist/img/fav/32x32.png"); let iconPath;
if (process.platform === 'darwin') {
// Using @2x for mac retina screens so the icon isn't blurry
// file name needs to include "Template" at the end for dark menu bar
iconPath = path.join(app.getAppPath(), "/dist/img/fav/macTemplate@2x.png");
} else {
iconPath = path.join(app.getAppPath(), "/dist/img/fav/32x32.png");
}
tray = new Tray(iconPath); tray = new Tray(iconPath);
tray.setToolTip("LBRY App"); tray.setToolTip("LBRY App");
tray.setTitle("LBRY"); tray.setTitle("LBRY");

View file

@ -1,8 +1,9 @@
{ {
"name": "LBRY", "name": "LBRY",
"version": "0.18.0rc2", "version": "0.18.2",
"main": "main.js", "main": "main.js",
"description": "A browser for the LBRY network, a digital marketplace controlled by its users.", "description": "A browser for the LBRY network, a digital marketplace controlled by its users.",
"homepage": "https://github.com/lbryio/lbry-app",
"author": { "author": {
"name": "LBRY Inc.", "name": "LBRY Inc.",
"email": "hello@lbry.io" "email": "hello@lbry.io"

View file

@ -1,4 +1,4 @@
#!/bin/bash #!/bin/bash
# this is here because teamcity runs /build.sh to build the project # this is here because teamcity runs /build.sh to build the project
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
$DIR/build/build.sh "$DIR/build/build.sh"

View file

@ -23,7 +23,7 @@ cd ui
yarn install yarn install
npm rebuild node-sass npm rebuild node-sass
node_modules\.bin\node-sass --output dist\css --sourcemap=none scss\ node_modules\.bin\node-sass --output dist\css --sourcemap=none scss\
node_modules\.bin\webpack node_modules\.bin\webpack --config webpack.prod.js
Copy-Item dist ..\app\ -recurse Copy-Item dist ..\app\ -recurse
cd .. cd ..

View file

@ -29,25 +29,14 @@ FULL_BUILD="${FULL_BUILD:-false}"
if [ -n "${TEAMCITY_VERSION:-}" -o -n "${APPVEYOR:-}" ]; then if [ -n "${TEAMCITY_VERSION:-}" -o -n "${APPVEYOR:-}" ]; then
FULL_BUILD="true" FULL_BUILD="true"
fi fi
if [ "$FULL_BUILD" != "true" ]; then
echo -e "\033[1;36mDependencies will NOT be installed. Run with 'FULL_BUILD=true' to install dependencies.\x1b[m"
fi
if [ "$FULL_BUILD" == "true" ]; then DEPS="${DEPS:-$FULL_BUILD}"
if [ "$DEPS" != "true" ]; then
echo -e "\033[1;36mDependencies will NOT be installed. Run with \"INSTALL_DEPENDENCIES=true\" to install dependencies, or \"FULL_BUILD=true\" to install dependencies and build a complete app.\x1b[m"
else
# install dependencies # install dependencies
echo -e "\033[0;32mInstalling Dependencies\x1b[m" echo -e "\033[0;32mInstalling Dependencies\x1b[m"
$BUILD_DIR/prebuild.sh "$BUILD_DIR/install_deps.sh"
VENV="$BUILD_DIR/venv"
if [ -d "$VENV" ]; then
rm -rf "$VENV"
fi
virtualenv "$VENV"
set +u
source "$VENV/bin/activate"
set -u
pip install -r "$BUILD_DIR/requirements.txt"
python "$BUILD_DIR/set_version.py"
fi fi
[ -d "$ROOT/dist" ] && rm -rf "$ROOT/dist" [ -d "$ROOT/dist" ] && rm -rf "$ROOT/dist"
@ -90,7 +79,7 @@ DAEMON_URL=$(echo ${DAEMON_URL_TEMPLATE//DAEMONVER/$DAEMON_VER} | sed "s/OSNAME/
DAEMON_VER_PATH="$BUILD_DIR/daemon.ver" DAEMON_VER_PATH="$BUILD_DIR/daemon.ver"
echo "$DAEMON_VER_PATH" echo "$DAEMON_VER_PATH"
if [[ ! -f $DAEMON_VER_PATH || ! -f $ROOT/app/dist/lbrynet-daemon || "$(< "$DAEMON_VER_PATH")" != "$DAEMON_VER" ]]; then if [[ ! -f $DAEMON_VER_PATH || ! -f $ROOT/app/dist/lbrynet-daemon || "$(< "$DAEMON_VER_PATH")" != "$DAEMON_VER" ]]; then
wget --quiet "$DAEMON_URL" -O "$BUILD_DIR/daemon.zip" curl -sL -o "$BUILD_DIR/daemon.zip" "$DAEMON_URL"
unzip "$BUILD_DIR/daemon.zip" -d "$ROOT/app/dist/" unzip "$BUILD_DIR/daemon.zip" -d "$ROOT/app/dist/"
rm "$BUILD_DIR/daemon.zip" rm "$BUILD_DIR/daemon.zip"
echo "$DAEMON_VER" > "$DAEMON_VER_PATH" echo "$DAEMON_VER" > "$DAEMON_VER_PATH"
@ -134,9 +123,13 @@ if [ "$FULL_BUILD" == "true" ]; then
# electron-build has a publish feature, but I had a hard time getting # electron-build has a publish feature, but I had a hard time getting
# it to reliably work and it also seemed difficult to configure. Not proud of # it to reliably work and it also seemed difficult to configure. Not proud of
# this, but it seemed better to write my own. # this, but it seemed better to write my own.
python "$BUILD_DIR/upload_assets.py" VENV="$BUILD_DIR/venv"
if [ -d "$VENV" ]; then
deactivate rm -rf "$VENV"
fi
virtualenv "$VENV"
"$VENV/bin/pip" install -r "$BUILD_DIR/requirements.txt"
"$VENV/bin/python" "$BUILD_DIR/upload_assets.py"
echo -e '\033[0;32mBuild and packaging complete.\x1b[m' echo -e '\033[0;32mBuild and packaging complete.\x1b[m'
else else

View file

@ -1,8 +1,6 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
set -x
LINUX=false LINUX=false
OSX=false OSX=false
@ -18,7 +16,7 @@ fi
SUDO='' SUDO=''
if $LINUX && (( $EUID != 0 )); then if (( $EUID != 0 )); then
SUDO='sudo' SUDO='sudo'
fi fi
@ -41,7 +39,7 @@ set -eu
if $LINUX; then if $LINUX; then
INSTALL="$SUDO apt-get install --no-install-recommends -y" INSTALL="$SUDO apt-get install --no-install-recommends -y"
$INSTALL build-essential libssl-dev libffi-dev libgmp3-dev python2.7-dev libsecret-1-dev wget $INSTALL build-essential libssl-dev libffi-dev libgmp3-dev python2.7-dev libsecret-1-dev curl
elif $OSX && ! cmd_exists brew ; then elif $OSX && ! cmd_exists brew ; then
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
fi fi
@ -52,6 +50,9 @@ if ! cmd_exists python; then
$INSTALL python2.7 $INSTALL python2.7
elif $OSX; then elif $OSX; then
brew install python brew install python
else
echo "python2.7 required"
exit 1
fi fi
fi fi
@ -64,11 +65,13 @@ fi
if ! cmd_exists pip; then if ! cmd_exists pip; then
if $LINUX; then if $LINUX; then
$INSTALL python-pip $INSTALL python-pip
$SUDO pip install --upgrade pip elif $OSX; then
$SUDO easy_install pip
else else
echo "Pip required" echo "pip required"
exit 1 exit 1
fi fi
$SUDO pip install --upgrade pip
fi fi
if $LINUX && [ "$(pip list --format=columns | grep setuptools | wc -l)" -ge 1 ]; then if $LINUX && [ "$(pip list --format=columns | grep setuptools | wc -l)" -ge 1 ]; then
@ -85,6 +88,9 @@ if ! cmd_exists node; then
$INSTALL nodejs $INSTALL nodejs
elif $OSX; then elif $OSX; then
brew install node brew install node
else
echo "node required"
exit 1
fi fi
fi fi
@ -96,16 +102,17 @@ if ! cmd_exists yarn; then
$SUDO apt-get install yarn $SUDO apt-get install yarn
elif $OSX; then elif $OSX; then
brew install yarn brew install yarn
else
echo "yarn required"
exit 1
fi fi
fi fi
if ! cmd_exists unzip; then if ! cmd_exists unzip; then
if $LINUX; then if $LINUX; then
$INSTALL unzip $INSTALL unzip
elif $OSX; then else
echo "unzip required" echo "unzip required"
exit 1 exit 1
# not sure this works, but OSX should come with unzip
# brew install unzip
fi fi
fi fi

View file

@ -1,21 +0,0 @@
"""Set the package version to the output of `git describe`"""
from __future__ import print_function
import os.path
import sys
import fileinput
def main():
filename = os.path.abspath(
os.path.join(os.path.abspath(__file__), '..', '..', 'ui', 'js', 'lbryio.js'))
for line in fileinput.input(filename, inplace=True):
if line.startswith(' enabled: false'):
print(' enabled: true')
else:
print(line, end='')
if __name__ == '__main__':
sys.exit(main())

BIN
ui/dist/img/fav/macTemplate@2x.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

View file

@ -1,14 +1,20 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { selectPageTitle } from "selectors/navigation"; import {
import { selectUser } from "selectors/user"; selectPageTitle,
import { doAlertError } from "actions/app"; selectHistoryIndex,
import { doRecordScroll } from "actions/navigation"; selectActiveHistoryEntry,
} from "redux/selectors/navigation";
import { selectUser } from "redux/selectors/user";
import { doAlertError } from "redux/actions/app";
import { doRecordScroll } from "redux/actions/navigation";
import App from "./view"; import App from "./view";
const select = (state, props) => ({ const select = (state, props) => ({
pageTitle: selectPageTitle(state), pageTitle: selectPageTitle(state),
user: selectUser(state), user: selectUser(state),
currentStackIndex: selectHistoryIndex(state),
currentPageAttributes: selectActiveHistoryEntry(state),
}); });
const perform = dispatch => ({ const perform = dispatch => ({

View file

@ -4,30 +4,49 @@ import Header from "component/header";
import Theme from "component/theme"; import Theme from "component/theme";
import ModalRouter from "modal/modalRouter"; import ModalRouter from "modal/modalRouter";
import lbry from "lbry"; import lbry from "lbry";
import throttle from "util/throttle";
class App extends React.PureComponent { class App extends React.PureComponent {
constructor() {
super();
this.mainContent = undefined;
}
componentWillMount() { componentWillMount() {
const { alertError } = this.props; const { alertError } = this.props;
document.addEventListener("unhandledError", event => { document.addEventListener("unhandledError", event => {
alertError(event.detail); alertError(event.detail);
}); });
}
this.scrollListener = () => this.props.recordScroll(window.scrollY); componentDidMount() {
const { recordScroll } = this.props;
const mainContent = document.getElementById("main-content");
this.mainContent = mainContent;
window.addEventListener("scroll", this.scrollListener); const scrollListener = () => recordScroll(this.mainContent.scrollTop);
this.setTitleFromProps(this.props); this.mainContent.addEventListener("scroll", throttle(scrollListener, 750));
} }
componentWillUnmount() { componentWillUnmount() {
window.removeEventListener("scroll", this.scrollListener); this.mainContent.removeEventListener("scroll", this.scrollListener);
} }
componentWillReceiveProps(props) { componentWillReceiveProps(props) {
this.setTitleFromProps(props); this.setTitleFromProps(props);
} }
componentDidUpdate(prevProps) {
const { currentStackIndex: prevStackIndex } = prevProps;
const { currentStackIndex, currentPageAttributes } = this.props;
if (currentStackIndex !== prevStackIndex) {
this.mainContent.scrollTop = currentPageAttributes.scrollY || 0;
}
}
setTitleFromProps(props) { setTitleFromProps(props) {
window.document.title = props.pageTitle || "LBRY"; window.document.title = props.pageTitle || "LBRY";
} }

View file

@ -1,6 +1,6 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { selectUserEmail } from "selectors/user"; import { selectUserEmail } from "redux/selectors/user";
import CardVerify from "./view"; import CardVerify from "./view";
const select = state => ({ const select = state => ({

View file

@ -1,10 +1,10 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { makeSelectClaimForUri } from "selectors/claims"; import { makeSelectClaimForUri } from "redux/selectors/claims";
import { doNavigate } from "actions/navigation"; import { doNavigate } from "redux/actions/navigation";
import { doResolveUri } from "actions/content"; import { doResolveUri } from "redux/actions/content";
import { makeSelectTotalItemsForChannel } from "selectors/content"; import { makeSelectTotalItemsForChannel } from "redux/selectors/content";
import { makeSelectIsUriResolving } from "selectors/content"; import { makeSelectIsUriResolving } from "redux/selectors/content";
import ChannelTile from "./view"; import ChannelTile from "./view";
const select = (state, props) => ({ const select = (state, props) => ({

View file

@ -1,11 +1,12 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { makeSelectBlockDate } from "selectors/wallet"; import { makeSelectBlockDate } from "redux/selectors/wallet";
import { doFetchBlock } from "actions/wallet"; import { doFetchBlock } from "redux/actions/wallet";
import DateTime from "./view"; import DateTime from "./view";
const select = (state, props) => ({ const select = (state, props) => ({
date: !props.date && props.block date:
!props.date && props.block
? makeSelectBlockDate(props.block)(state) ? makeSelectBlockDate(props.block)(state)
: props.date, : props.date,
}); });

View file

@ -1,9 +1,9 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { makeSelectFileInfoForUri } from "selectors/file_info"; import { makeSelectFileInfoForUri } from "redux/selectors/file_info";
import { makeSelectCostInfoForUri } from "selectors/cost_info"; import { makeSelectCostInfoForUri } from "redux/selectors/cost_info";
import { doOpenModal } from "actions/app"; import { doOpenModal } from "redux/actions/app";
import { makeSelectClaimIsMine } from "selectors/claims"; import { makeSelectClaimIsMine } from "redux/selectors/claims";
import FileActions from "./view"; import FileActions from "./view";
const select = (state, props) => ({ const select = (state, props) => ({

View file

@ -1,17 +1,17 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { doNavigate } from "actions/navigation"; import { doNavigate } from "redux/actions/navigation";
import { doResolveUri } from "actions/content"; import { doResolveUri } from "redux/actions/content";
import { selectShowNsfw } from "selectors/settings"; import { selectShowNsfw } from "redux/selectors/settings";
import { import {
makeSelectClaimForUri, makeSelectClaimForUri,
makeSelectMetadataForUri, makeSelectMetadataForUri,
} from "selectors/claims"; } from "redux/selectors/claims";
import { makeSelectFileInfoForUri } from "selectors/file_info"; import { makeSelectFileInfoForUri } from "redux/selectors/file_info";
import { import {
makeSelectIsUriResolving, makeSelectIsUriResolving,
selectRewardContentClaimIds, selectRewardContentClaimIds,
} from "selectors/content"; } from "redux/selectors/content";
import FileCard from "./view"; import FileCard from "./view";
const select = (state, props) => ({ const select = (state, props) => ({

View file

@ -4,10 +4,10 @@ import {
makeSelectClaimForUri, makeSelectClaimForUri,
makeSelectContentTypeForUri, makeSelectContentTypeForUri,
makeSelectMetadataForUri, makeSelectMetadataForUri,
} from "selectors/claims"; } from "redux/selectors/claims";
import FileDetails from "./view"; import FileDetails from "./view";
import { doOpenFileInFolder } from "actions/file_info"; import { doOpenFileInFolder } from "redux/actions/file_info";
import { makeSelectFileInfoForUri } from "selectors/file_info"; import { makeSelectFileInfoForUri } from "redux/selectors/file_info";
const select = (state, props) => ({ const select = (state, props) => ({
claim: makeSelectClaimForUri(props.uri)(state), claim: makeSelectClaimForUri(props.uri)(state),

View file

@ -4,11 +4,11 @@ import {
makeSelectFileInfoForUri, makeSelectFileInfoForUri,
makeSelectDownloadingForUri, makeSelectDownloadingForUri,
makeSelectLoadingForUri, makeSelectLoadingForUri,
} from "selectors/file_info"; } from "redux/selectors/file_info";
import { makeSelectCostInfoForUri } from "selectors/cost_info"; import { makeSelectCostInfoForUri } from "redux/selectors/cost_info";
import { doFetchAvailability } from "actions/availability"; import { doFetchAvailability } from "redux/actions/availability";
import { doOpenFileInShell } from "actions/file_info"; import { doOpenFileInShell } from "redux/actions/file_info";
import { doPurchaseUri, doStartDownload } from "actions/content"; import { doPurchaseUri, doStartDownload } from "redux/actions/content";
import FileDownloadLink from "./view"; import FileDownloadLink from "./view";
const select = (state, props) => ({ const select = (state, props) => ({

View file

@ -1,7 +1,10 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { doSearch } from "actions/search"; import { doSearch } from "redux/actions/search";
import { selectIsSearching, makeSelectSearchUris } from "selectors/search"; import {
selectIsSearching,
makeSelectSearchUris,
} from "redux/selectors/search";
import FileListSearch from "./view"; import FileListSearch from "./view";
const select = (state, props) => ({ const select = (state, props) => ({

View file

@ -1,11 +1,11 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { doFetchCostInfoForUri } from "actions/cost_info"; import { doFetchCostInfoForUri } from "redux/actions/cost_info";
import { import {
makeSelectCostInfoForUri, makeSelectCostInfoForUri,
makeSelectFetchingCostInfoForUri, makeSelectFetchingCostInfoForUri,
} from "selectors/cost_info"; } from "redux/selectors/cost_info";
import { makeSelectClaimForUri } from "selectors/claims"; import { makeSelectClaimForUri } from "redux/selectors/claims";
import FilePrice from "./view"; import FilePrice from "./view";
const select = (state, props) => ({ const select = (state, props) => ({

View file

@ -1,17 +1,17 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { doNavigate } from "actions/navigation"; import { doNavigate } from "redux/actions/navigation";
import { doResolveUri } from "actions/content"; import { doResolveUri } from "redux/actions/content";
import { import {
makeSelectClaimForUri, makeSelectClaimForUri,
makeSelectMetadataForUri, makeSelectMetadataForUri,
} from "selectors/claims"; } from "redux/selectors/claims";
import { makeSelectFileInfoForUri } from "selectors/file_info"; import { makeSelectFileInfoForUri } from "redux/selectors/file_info";
import { selectShowNsfw } from "selectors/settings"; import { selectShowNsfw } from "redux/selectors/settings";
import { import {
makeSelectIsUriResolving, makeSelectIsUriResolving,
selectRewardContentClaimIds, selectRewardContentClaimIds,
} from "selectors/content"; } from "redux/selectors/content";
import FileTile from "./view"; import FileTile from "./view";
const select = (state, props) => ({ const select = (state, props) => ({

View file

@ -4,13 +4,13 @@ import { connect } from "react-redux";
import { import {
selectIsBackDisabled, selectIsBackDisabled,
selectIsForwardDisabled, selectIsForwardDisabled,
} from "selectors/navigation"; } from "redux/selectors/navigation";
import { selectBalance } from "selectors/wallet"; import { selectBalance } from "redux/selectors/wallet";
import { import {
doNavigate, doNavigate,
doHistoryBack, doHistoryBack,
doHistoryForward, doHistoryForward,
} from "actions/navigation"; } from "redux/actions/navigation";
import Header from "./view"; import Header from "./view";
import { selectIsUpgradeAvailable } from "../../selectors/app"; import { selectIsUpgradeAvailable } from "../../selectors/app";
import { doDownloadUpgrade } from "../../actions/app"; import { doDownloadUpgrade } from "../../actions/app";

View file

@ -3,7 +3,7 @@ import { connect } from "react-redux";
import { import {
selectUserInvitees, selectUserInvitees,
selectUserInviteStatusIsPending, selectUserInviteStatusIsPending,
} from "selectors/user"; } from "redux/selectors/user";
import InviteList from "./view"; import InviteList from "./view";
const select = state => ({ const select = state => ({

View file

@ -5,11 +5,11 @@ import {
selectUserInvitesRemaining, selectUserInvitesRemaining,
selectUserInviteNewIsPending, selectUserInviteNewIsPending,
selectUserInviteNewErrorMessage, selectUserInviteNewErrorMessage,
} from "selectors/user"; } from "redux/selectors/user";
import rewards from "rewards"; import rewards from "rewards";
import { makeSelectRewardAmountByType } from "selectors/rewards"; import { makeSelectRewardAmountByType } from "redux/selectors/rewards";
import { doUserInviteNew } from "actions/user"; import { doUserInviteNew } from "redux/actions/user";
const select = state => { const select = state => {
const selectReward = makeSelectRewardAmountByType(); const selectReward = makeSelectRewardAmountByType();

View file

@ -1,6 +1,6 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { doNavigate } from "actions/navigation"; import { doNavigate } from "redux/actions/navigation";
import Link from "./view"; import Link from "./view";
const perform = dispatch => ({ const perform = dispatch => ({

View file

@ -1,6 +1,6 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { doNavigate } from "actions/navigation"; import { doNavigate } from "redux/actions/navigation";
import NsfwOverlay from "./view"; import NsfwOverlay from "./view";
const perform = dispatch => ({ const perform = dispatch => ({

View file

@ -340,7 +340,8 @@ class PublishForm extends React.PureComponent {
handleFeePrefChange(feeEnabled) { handleFeePrefChange(feeEnabled) {
this.setState({ this.setState({
isFee: feeEnabled, isFee: feeEnabled,
feeAmount: this.state.feeAmount == "" feeAmount:
this.state.feeAmount == ""
? this._defaultPaidPrice ? this._defaultPaidPrice
: this.state.feeAmount, : this.state.feeAmount,
}); });
@ -556,9 +557,8 @@ class PublishForm extends React.PureComponent {
} }
/> />
</div> </div>
{!this.state.hasFile && !this.myClaimExists() {!this.state.hasFile && !this.myClaimExists() ? null : (
? null <div>
: <div>
<div className="card__content"> <div className="card__content">
<FormRow <FormRow
ref="meta_title" ref="meta_title"
@ -631,7 +631,8 @@ class PublishForm extends React.PureComponent {
<option value="1">{__("Adults Only")}</option> <option value="1">{__("Adults Only")}</option>
</FormRow> </FormRow>
</div> </div>
</div>} </div>
)}
</section> </section>
<section className="card"> <section className="card">
@ -661,17 +662,21 @@ class PublishForm extends React.PureComponent {
<span className={!this.state.isFee ? "hidden" : ""}> <span className={!this.state.isFee ? "hidden" : ""}>
<FormFieldPrice <FormFieldPrice
min="0" min="0"
defaultValue={{ amount: 5.0, currency: "LBC" }} defaultValue={{
amount: this._defaultPaidPrice,
currency: "LBC",
}}
onChange={val => this.handleFeeChange(val)} onChange={val => this.handleFeeChange(val)}
/> />
</span> </span>
{this.state.isFee && this.state.feeCurrency.toUpperCase() != "LBC" {this.state.isFee &&
? <div className="form-field__helper"> this.state.feeCurrency.toUpperCase() != "LBC" ? (
<div className="form-field__helper">
{__( {__(
"All content fees are charged in LBC. For non-LBC payment methods, the number of credits charged will be adjusted based on the value of LBRY credits at the time of purchase." "All content fees are charged in LBC. For non-LBC payment methods, the number of credits charged will be adjusted based on the value of LBRY credits at the time of purchase."
)} )}
</div> </div>
: null} ) : null}
</div> </div>
</section> </section>
<section className="card"> <section className="card">
@ -737,16 +742,12 @@ class PublishForm extends React.PureComponent {
"Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International" "Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International"
)} )}
</option> </option>
<option value="copyright"> <option value="copyright">{__("Copyrighted...")}</option>
{__("Copyrighted...")} <option value="other">{__("Other...")}</option>
</option>
<option value="other">
{__("Other...")}
</option>
</FormRow> </FormRow>
{this.state.licenseType == "copyright" {this.state.licenseType == "copyright" ? (
? <FormRow <FormRow
label={__("Copyright notice")} label={__("Copyright notice")}
type="text" type="text"
name="copyright-notice" name="copyright-notice"
@ -755,10 +756,10 @@ class PublishForm extends React.PureComponent {
this.handleCopyrightNoticeChange(event); this.handleCopyrightNoticeChange(event);
}} }}
/> />
: null} ) : null}
{this.state.licenseType == "other" {this.state.licenseType == "other" ? (
? <FormRow <FormRow
label={__("License description")} label={__("License description")}
type="text" type="text"
name="other-license-description" name="other-license-description"
@ -767,10 +768,10 @@ class PublishForm extends React.PureComponent {
this.handleOtherLicenseDescriptionChange(event); this.handleOtherLicenseDescriptionChange(event);
}} }}
/> />
: null} ) : null}
{this.state.licenseType == "other" {this.state.licenseType == "other" ? (
? <FormRow <FormRow
label={__("License URL")} label={__("License URL")}
type="text" type="text"
name="other-license-url" name="other-license-url"
@ -779,7 +780,7 @@ class PublishForm extends React.PureComponent {
this.handleOtherLicenseUrlChange(event); this.handleOtherLicenseUrlChange(event);
}} }}
/> />
: null} ) : null}
</div> </div>
</section> </section>
@ -795,8 +796,7 @@ class PublishForm extends React.PureComponent {
<div className="card__subtitle"> <div className="card__subtitle">
{__( {__(
"This is the exact address where people find your content (ex. lbry://myvideo)." "This is the exact address where people find your content (ex. lbry://myvideo)."
)} )}{" "}
{" "}
<Link <Link
label={__("Learn more")} label={__("Learn more")}
href="https://lbry.io/faq/naming" href="https://lbry.io/faq/naming"
@ -805,9 +805,11 @@ class PublishForm extends React.PureComponent {
</div> </div>
<div className="card__content"> <div className="card__content">
<FormRow <FormRow
prefix={`lbry://${this.state.channel === "anonymous" prefix={`lbry://${
this.state.channel === "anonymous"
? "" ? ""
: `${this.state.channel}/`}`} : `${this.state.channel}/`
}`}
type="text" type="text"
ref="name" ref="name"
placeholder="myname" placeholder="myname"
@ -818,8 +820,8 @@ class PublishForm extends React.PureComponent {
helper={this.getNameBidHelpText()} helper={this.getNameBidHelpText()}
/> />
</div> </div>
{this.state.rawName {this.state.rawName ? (
? <div className="card__content"> <div className="card__content">
<FormRow <FormRow
ref="bid" ref="bid"
type="number" type="number"
@ -835,7 +837,9 @@ class PublishForm extends React.PureComponent {
min="0" min="0"
/> />
</div> </div>
: ""} ) : (
""
)}
</section> </section>
<section className="card"> <section className="card">
@ -847,8 +851,7 @@ class PublishForm extends React.PureComponent {
ref="tosAgree" ref="tosAgree"
label={ label={
<span> <span>
{__("I agree to the")} {__("I agree to the")}{" "}
{" "}
<Link <Link
href="https://www.lbry.io/termsofservice" href="https://www.lbry.io/termsofservice"
label={__("LBRY terms of service")} label={__("LBRY terms of service")}
@ -894,8 +897,8 @@ class PublishForm extends React.PureComponent {
}} }}
> >
<p> <p>
{__("Your file has been published to LBRY at the address")} {__("Your file has been published to LBRY at the address")}{" "}
{" "}<code>{this.state.uri}</code>! <code>{this.state.uri}</code>!
</p> </p>
<p> <p>
{__( {__(

View file

@ -4,9 +4,12 @@ import {
makeSelectClaimRewardError, makeSelectClaimRewardError,
makeSelectRewardByType, makeSelectRewardByType,
makeSelectIsRewardClaimPending, makeSelectIsRewardClaimPending,
} from "selectors/rewards"; } from "redux/selectors/rewards";
import { doNavigate } from "actions/navigation"; import { doNavigate } from "redux/actions/navigation";
import { doClaimRewardType, doClaimRewardClearError } from "actions/rewards"; import {
doClaimRewardType,
doClaimRewardClearError,
} from "redux/actions/rewards";
import RewardLink from "./view"; import RewardLink from "./view";
const makeSelect = () => { const makeSelect = () => {

View file

@ -1,6 +1,6 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { selectClaimedRewards } from "selectors/rewards"; import { selectClaimedRewards } from "redux/selectors/rewards";
import RewardListClaimed from "./view"; import RewardListClaimed from "./view";
const select = state => ({ const select = state => ({

View file

@ -1,6 +1,6 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { selectUnclaimedRewardValue } from "selectors/rewards"; import { selectUnclaimedRewardValue } from "redux/selectors/rewards";
import RewardSummary from "./view"; import RewardSummary from "./view";
const select = state => ({ const select = state => ({

View file

@ -4,7 +4,7 @@ import Router from "./view.jsx";
import { import {
selectCurrentPage, selectCurrentPage,
selectCurrentParams, selectCurrentParams,
} from "selectors/navigation.js"; } from "redux/selectors/navigation.js";
const select = state => ({ const select = state => ({
params: selectCurrentParams(state), params: selectCurrentParams(state),

View file

@ -1,7 +1,7 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { doRemoveSnackBarSnack } from "actions/app"; import { doRemoveSnackBarSnack } from "redux/actions/app";
import { selectSnackBarSnacks } from "selectors/app"; import { selectSnackBarSnacks } from "redux/selectors/app";
import SnackBar from "./view"; import SnackBar from "./view";
const perform = dispatch => ({ const perform = dispatch => ({

View file

@ -1,8 +1,11 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { selectCurrentModal, selectDaemonVersionMatched } from "selectors/app"; import {
import { doCheckDaemonVersion } from "actions/app"; selectCurrentModal,
selectDaemonVersionMatched,
} from "redux/selectors/app";
import { doCheckDaemonVersion } from "redux/actions/app";
import SplashScreen from "./view"; import SplashScreen from "./view";
const select = state => { const select = state => {

View file

@ -1,7 +1,10 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { selectCurrentPage, selectHeaderLinks } from "selectors/navigation"; import {
import { doNavigate } from "actions/navigation"; selectCurrentPage,
selectHeaderLinks,
} from "redux/selectors/navigation";
import { doNavigate } from "redux/actions/navigation";
import SubHeader from "./view"; import SubHeader from "./view";
const select = (state, props) => ({ const select = (state, props) => ({

View file

@ -1,6 +1,6 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { selectThemePath } from "selectors/settings.js"; import { selectThemePath } from "redux/selectors/settings.js";
import Theme from "./view"; import Theme from "./view";
const select = state => ({ const select = state => ({

View file

@ -1,9 +1,9 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { doNavigate } from "actions/navigation"; import { doNavigate } from "redux/actions/navigation";
import { doOpenModal } from "actions/app"; import { doOpenModal } from "redux/actions/app";
import { selectClaimedRewardsByTransactionId } from "selectors/rewards"; import { selectClaimedRewardsByTransactionId } from "redux/selectors/rewards";
import { selectAllMyClaimsByOutpoint } from "selectors/claims"; import { selectAllMyClaimsByOutpoint } from "redux/selectors/claims";
import TransactionList from "./view"; import TransactionList from "./view";
const select = state => ({ const select = state => ({

View file

@ -1,12 +1,12 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { doFetchTransactions } from "actions/wallet"; import { doFetchTransactions } from "redux/actions/wallet";
import { import {
selectBalance, selectBalance,
selectRecentTransactions, selectRecentTransactions,
selectHasTransactions, selectHasTransactions,
selectIsFetchingTransactions, selectIsFetchingTransactions,
} from "selectors/wallet"; } from "redux/selectors/wallet";
import TransactionListRecent from "./view"; import TransactionListRecent from "./view";

View file

@ -1,9 +1,9 @@
import React from "react"; import React from "react";
import lbryuri from "lbryuri"; import lbryuri from "lbryuri";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { doResolveUri } from "actions/content"; import { doResolveUri } from "redux/actions/content";
import { makeSelectIsUriResolving } from "selectors/content"; import { makeSelectIsUriResolving } from "redux/selectors/content";
import { makeSelectClaimForUri } from "selectors/claims"; import { makeSelectClaimForUri } from "redux/selectors/claims";
import UriIndicator from "./view"; import UriIndicator from "./view";
const select = (state, props) => ({ const select = (state, props) => ({

View file

@ -60,13 +60,17 @@ class UriIndicator extends React.PureComponent {
const inner = ( const inner = (
<span> <span>
{channelName} {" "} <span className="channel-name">{channelName}</span>{" "}
{!signatureIsValid {!signatureIsValid ? (
? <Icon <Icon
icon={icon} icon={icon}
className={`channel-indicator__icon channel-indicator__icon--${modifier}`} className={`channel-indicator__icon channel-indicator__icon--${
modifier
}`}
/> />
: ""} ) : (
""
)}
</span> </span>
); );

View file

@ -1,10 +1,10 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { doUserEmailNew, doUserInviteNew } from "actions/user"; import { doUserEmailNew, doUserInviteNew } from "redux/actions/user";
import { import {
selectEmailNewIsPending, selectEmailNewIsPending,
selectEmailNewErrorMessage, selectEmailNewErrorMessage,
} from "selectors/user"; } from "redux/selectors/user";
import UserEmailNew from "./view"; import UserEmailNew from "./view";
const select = state => ({ const select = state => ({

View file

@ -1,11 +1,11 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { doUserEmailVerify } from "actions/user"; import { doUserEmailVerify } from "redux/actions/user";
import { import {
selectEmailVerifyIsPending, selectEmailVerifyIsPending,
selectEmailToVerify, selectEmailToVerify,
selectEmailVerifyErrorMessage, selectEmailVerifyErrorMessage,
} from "selectors/user"; } from "redux/selectors/user";
import UserEmailVerify from "./view"; import UserEmailVerify from "./view";
const select = state => ({ const select = state => ({

View file

@ -1,13 +1,13 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { doNavigate } from "actions/navigation"; import { doNavigate } from "redux/actions/navigation";
import { doUserIdentityVerify } from "actions/user"; import { doUserIdentityVerify } from "redux/actions/user";
import rewards from "rewards"; import rewards from "rewards";
import { makeSelectRewardByType } from "selectors/rewards"; import { makeSelectRewardByType } from "redux/selectors/rewards";
import { import {
selectIdentityVerifyIsPending, selectIdentityVerifyIsPending,
selectIdentityVerifyErrorMessage, selectIdentityVerifyErrorMessage,
} from "selectors/user"; } from "redux/selectors/user";
import UserVerify from "./view"; import UserVerify from "./view";
const select = (state, props) => { const select = (state, props) => {

View file

@ -1,21 +1,21 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { doChangeVolume } from "actions/app"; import { doChangeVolume } from "redux/actions/app";
import { selectVolume } from "selectors/app"; import { selectVolume } from "redux/selectors/app";
import { doPlayUri, doSetPlayingUri } from "actions/content"; import { doPlayUri, doSetPlayingUri } from "redux/actions/content";
import { import {
makeSelectMetadataForUri, makeSelectMetadataForUri,
makeSelectContentTypeForUri, makeSelectContentTypeForUri,
} from "selectors/claims"; } from "redux/selectors/claims";
import { import {
makeSelectFileInfoForUri, makeSelectFileInfoForUri,
makeSelectLoadingForUri, makeSelectLoadingForUri,
makeSelectDownloadingForUri, makeSelectDownloadingForUri,
} from "selectors/file_info"; } from "redux/selectors/file_info";
import { makeSelectCostInfoForUri } from "selectors/cost_info"; import { makeSelectCostInfoForUri } from "redux/selectors/cost_info";
import { selectShowNsfw } from "selectors/settings"; import { selectShowNsfw } from "redux/selectors/settings";
import Video from "./view"; import Video from "./view";
import { selectPlayingUri } from "selectors/content"; import { selectPlayingUri } from "redux/selectors/content";
const select = (state, props) => ({ const select = (state, props) => ({
costInfo: makeSelectCostInfoForUri(props.uri)(state), costInfo: makeSelectCostInfoForUri(props.uri)(state),

View file

@ -1,10 +1,10 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { doCheckAddressIsMine, doGetNewAddress } from "actions/wallet"; import { doCheckAddressIsMine, doGetNewAddress } from "redux/actions/wallet";
import { import {
selectReceiveAddress, selectReceiveAddress,
selectGettingNewAddress, selectGettingNewAddress,
} from "selectors/wallet"; } from "redux/selectors/wallet";
import WalletAddress from "./view"; import WalletAddress from "./view";
const select = state => ({ const select = state => ({

View file

@ -1,6 +1,6 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { selectBalance } from "selectors/wallet"; import { selectBalance } from "redux/selectors/wallet";
import WalletBalance from "./view"; import WalletBalance from "./view";
const select = state => ({ const select = state => ({

View file

@ -4,12 +4,12 @@ import {
doSendDraftTransaction, doSendDraftTransaction,
doSetDraftTransactionAmount, doSetDraftTransactionAmount,
doSetDraftTransactionAddress, doSetDraftTransactionAddress,
} from "actions/wallet"; } from "redux/actions/wallet";
import { import {
selectDraftTransactionAmount, selectDraftTransactionAmount,
selectDraftTransactionAddress, selectDraftTransactionAddress,
selectDraftTransactionError, selectDraftTransactionError,
} from "selectors/wallet"; } from "redux/selectors/wallet";
import WalletSend from "./view"; import WalletSend from "./view";

View file

@ -1,9 +1,9 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { doSendSupport } from "actions/wallet"; import { doSendSupport } from "redux/actions/wallet";
import WalletSendTip from "./view"; import WalletSendTip from "./view";
import { makeSelectTitleForUri } from "selectors/claims"; import { makeSelectTitleForUri } from "redux/selectors/claims";
import { selectIsSendingSupport } from "selectors/wallet"; import { selectIsSendingSupport } from "redux/selectors/wallet";
const select = (state, props) => ({ const select = (state, props) => ({
isPending: selectIsSendingSupport(state), isPending: selectIsSendingSupport(state),

View file

@ -1,8 +1,11 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import lbryuri from "lbryuri.js"; import lbryuri from "lbryuri.js";
import { selectWunderBarAddress, selectWunderBarIcon } from "selectors/search"; import {
import { doNavigate } from "actions/navigation"; selectWunderBarAddress,
selectWunderBarIcon,
} from "redux/selectors/search";
import { doNavigate } from "redux/actions/navigation";
import Wunderbar from "./view"; import Wunderbar from "./view";
const select = state => ({ const select = state => ({

View file

@ -9,26 +9,30 @@ jsonrpc.call = function(
connectFailedCallback, connectFailedCallback,
timeout timeout
) { ) {
function checkStatus(response) { function checkAndParse(response) {
if (response.status >= 200 && response.status < 300) { if (response.status >= 200 && response.status < 300) {
return response;
} else {
var error = new Error(response.statusText);
error.response = response;
throw error;
}
}
function parseJSON(response) {
return response.json(); return response.json();
} else {
return response.json().then(json => {
let error;
if (json.error) {
error = new Error(json.error);
} else {
error = new Error("Protocol error with unknown response signature");
}
return Promise.reject(error);
});
}
} }
function makeRequest(url, options) { function makeRequest(url, options) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
fetch(url, options).then(resolve).catch(reject); fetch(url, options)
.then(resolve)
.catch(reject);
if (timeout) { if (timeout) {
const e = new Error(__("XMLHttpRequest connection timed out")); const e = new Error(__("Protocol request timed out"));
setTimeout(() => { setTimeout(() => {
return reject(e); return reject(e);
}, timeout); }, timeout);
@ -51,8 +55,7 @@ jsonrpc.call = function(
sessionStorage.setItem("JSONRPCCounter", counter + 1); sessionStorage.setItem("JSONRPCCounter", counter + 1);
return fetch(url, options) return fetch(url, options)
.then(checkStatus) .then(checkAndParse)
.then(parseJSON)
.then(response => { .then(response => {
const error = const error =
response.error || (response.result && response.result.error); response.error || (response.result && response.result.error);

View file

@ -45,24 +45,25 @@ lbryio.call = function(resource, action, params = {}, method = "get") {
return Promise.reject(new Error(__("Invalid method"))); return Promise.reject(new Error(__("Invalid method")));
} }
function checkStatus(response) { function checkAndParse(response) {
if (response.status >= 200 && response.status < 300) { if (response.status >= 200 && response.status < 300) {
return response;
} else {
var error = new Error(response.statusText);
error.response = response;
throw error;
}
}
function parseJSON(response) {
return response.json(); return response.json();
} else {
return response.json().then(json => {
let error;
if (json.error) {
error = new Error(json.error);
} else {
error = new Error("Unknown API error signature");
}
error.response = response; //this is primarily a hack used in actions/user.js
return Promise.reject(error);
});
}
} }
function makeRequest(url, options) { function makeRequest(url, options) {
return fetch(url, options).then(checkStatus).then(parseJSON).catch(e => { return fetch(url, options).then(checkAndParse);
throw e;
});
} }
return lbryio.getAuthToken().then(token => { return lbryio.getAuthToken().then(token => {

View file

@ -5,9 +5,9 @@ import SnackBar from "component/snackBar";
import { Provider } from "react-redux"; import { Provider } from "react-redux";
import store from "store.js"; import store from "store.js";
import SplashScreen from "component/splash"; import SplashScreen from "component/splash";
import { doDaemonReady } from "actions/app"; import { doDaemonReady } from "redux/actions/app";
import { doNavigate } from "actions/navigation"; import { doNavigate } from "redux/actions/navigation";
import { doDownloadLanguages } from "actions/settings"; import { doDownloadLanguages } from "redux/actions/settings";
import * as types from "constants/action_types"; import * as types from "constants/action_types";
const env = ENV; const env = ENV;
@ -71,7 +71,10 @@ var init = function() {
ReactDOM.render( ReactDOM.render(
<Provider store={store}> <Provider store={store}>
<div><App /><SnackBar /></div> <div>
<App />
<SnackBar />
</div>
</Provider>, </Provider>,
canvas canvas
); );

View file

@ -1,8 +1,8 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { doCloseModal } from "actions/app"; import { doCloseModal } from "redux/actions/app";
import { doLoadVideo, doSetPlayingUri } from "actions/content"; import { doLoadVideo, doSetPlayingUri } from "redux/actions/content";
import { makeSelectMetadataForUri } from "selectors/claims"; import { makeSelectMetadataForUri } from "redux/selectors/claims";
import ModalAffirmPurchase from "./view"; import ModalAffirmPurchase from "./view";
const select = (state, props) => ({ const select = (state, props) => ({

View file

@ -1,6 +1,6 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { doCloseModal } from "actions/app"; import { doCloseModal } from "redux/actions/app";
import ModalAuthFailure from "./view"; import ModalAuthFailure from "./view";
const select = state => ({}); const select = state => ({});

View file

@ -1,15 +1,15 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { doCloseModal } from "actions/app"; import { doCloseModal } from "redux/actions/app";
import { doAuthNavigate } from "actions/navigation"; import { doAuthNavigate } from "redux/actions/navigation";
import { doSetClientSetting } from "actions/settings"; import { doSetClientSetting } from "redux/actions/settings";
import { selectUserIsRewardApproved } from "selectors/user"; import { selectUserIsRewardApproved } from "redux/selectors/user";
import { selectBalance } from "selectors/wallet"; import { selectBalance } from "redux/selectors/wallet";
import { import {
makeSelectHasClaimedReward, makeSelectHasClaimedReward,
makeSelectRewardByType, makeSelectRewardByType,
selectUnclaimedRewardValue, selectUnclaimedRewardValue,
} from "selectors/rewards"; } from "redux/selectors/rewards";
import * as settings from "constants/settings"; import * as settings from "constants/settings";
import ModalCreditIntro from "./view"; import ModalCreditIntro from "./view";

View file

@ -4,7 +4,7 @@ import { CreditAmount, CurrencySymbol } from "component/common";
import Link from "component/link/index"; import Link from "component/link/index";
const ModalCreditIntro = props => { const ModalCreditIntro = props => {
const { closeModal, totalRewardValue, verifyAccount } = props; const { closeModal, totalRewardValue, currentBalance, verifyAccount } = props;
const totalRewardRounded = Math.round(totalRewardValue / 10) * 10; const totalRewardRounded = Math.round(totalRewardValue / 10) * 10;
return ( return (
@ -12,37 +12,41 @@ const ModalCreditIntro = props => {
<section> <section>
<h3 className="modal__header">{__("Blockchain 101")}</h3> <h3 className="modal__header">{__("Blockchain 101")}</h3>
<p> <p>
LBRY is controlled and powered by a blockchain asset called {" "} LBRY is controlled and powered by a blockchain asset called{" "}
<em><CurrencySymbol /></em>.{" "} <em>
<CurrencySymbol />{" "} <CurrencySymbol />
</em>. <CurrencySymbol />{" "}
{__( {__(
"is used to publish content, to have a say in the network rules, and to access paid content." "is used to publish content, to have a say in the network rules, and to access paid content."
)} )}
</p> </p>
{currentBalance <= 0 {currentBalance <= 0 ? (
? <div> <div>
<p> <p>
You currently have <CreditAmount amount={currentBalance} />, so You currently have <CreditAmount amount={currentBalance} />, so
the actions you can take are limited. the actions you can take are limited.
</p> </p>
<p> <p>
However, there are a variety of ways to get credits, including However, there are a variety of ways to get credits, including
more than {" "} more than{" "}
{totalRewardValue {totalRewardValue ? (
? <CreditAmount amount={totalRewardRounded} /> <CreditAmount amount={totalRewardRounded} />
: <span className="credit-amount">{__("?? credits")}</span>} ) : (
{" "}{" "} <span className="credit-amount">{__("?? credits")}</span>
)}{" "}
{__( {__(
" in rewards available for being a proven human during the LBRY beta." " in rewards available for being a proven human during the LBRY beta."
)} )}
</p> </p>
</div> </div>
: <div> ) : (
<div>
<p> <p>
But you probably knew this, since you've already got{" "} But you probably knew this, since you've already got{" "}
<CreditAmount amount={currentBalance} />. <CreditAmount amount={currentBalance} />.
</p> </p>
</div>} </div>
)}
<div className="modal__buttons"> <div className="modal__buttons">
<Link <Link

View file

@ -1,7 +1,10 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { doStartUpgrade, doCancelUpgrade } from "actions/app"; import { doStartUpgrade, doCancelUpgrade } from "redux/actions/app";
import { selectDownloadProgress, selectDownloadComplete } from "selectors/app"; import {
selectDownloadProgress,
selectDownloadComplete,
} from "redux/selectors/app";
import ModalDownloading from "./view"; import ModalDownloading from "./view";
const select = state => ({ const select = state => ({

View file

@ -1,6 +1,6 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { doCloseModal } from "actions/app"; import { doCloseModal } from "redux/actions/app";
import ModalError from "./view"; import ModalError from "./view";
const perform = dispatch => ({ const perform = dispatch => ({

View file

@ -1,7 +1,7 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { doCloseModal } from "actions/app"; import { doCloseModal } from "redux/actions/app";
import { makeSelectMetadataForUri } from "selectors/claims"; import { makeSelectMetadataForUri } from "redux/selectors/claims";
import ModalFileTimeout from "./view"; import ModalFileTimeout from "./view";
const select = state => ({ const select = state => ({

View file

@ -1,8 +1,8 @@
import React from "react"; import React from "react";
import rewards from "rewards"; import rewards from "rewards";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { doCloseModal } from "actions/app"; import { doCloseModal } from "redux/actions/app";
import { makeSelectRewardByType } from "selectors/rewards"; import { makeSelectRewardByType } from "redux/selectors/rewards";
import ModalFirstReward from "./view"; import ModalFirstReward from "./view";
const select = (state, props) => { const select = (state, props) => {

View file

@ -1,6 +1,6 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { doQuit, doSkipWrongDaemonNotice } from "actions/app"; import { doQuit, doSkipWrongDaemonNotice } from "redux/actions/app";
import ModalIncompatibleDaemon from "./view"; import ModalIncompatibleDaemon from "./view";
const select = state => ({}); const select = state => ({});

View file

@ -1,7 +1,7 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { doCloseModal } from "actions/app"; import { doCloseModal } from "redux/actions/app";
import { doNavigate } from "actions/navigation"; import { doNavigate } from "redux/actions/navigation";
import ModalInsufficientBalance from "./view"; import ModalInsufficientBalance from "./view";
const select = state => ({}); const select = state => ({});

View file

@ -1,7 +1,7 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { doCloseModal } from "actions/app"; import { doCloseModal } from "redux/actions/app";
import { doNavigate } from "actions/navigation"; import { doNavigate } from "redux/actions/navigation";
import ModalInsufficientCredits from "./view"; import ModalInsufficientCredits from "./view";
const select = state => ({}); const select = state => ({});

View file

@ -1,9 +1,12 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { doCloseModal } from "actions/app"; import { doCloseModal } from "redux/actions/app";
import { doDeleteFileAndGoBack } from "actions/file_info"; import { doDeleteFileAndGoBack } from "redux/actions/file_info";
import { makeSelectTitleForUri, makeSelectClaimIsMine } from "selectors/claims"; import {
import { makeSelectFileInfoForUri } from "selectors/file_info"; makeSelectTitleForUri,
makeSelectClaimIsMine,
} from "redux/selectors/claims";
import { makeSelectFileInfoForUri } from "redux/selectors/file_info";
import ModalRemoveFile from "./view"; import ModalRemoveFile from "./view";
const select = (state, props) => ({ const select = (state, props) => ({

View file

@ -1,8 +1,8 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { doCloseModal } from "actions/app"; import { doCloseModal } from "redux/actions/app";
import { doAbandonClaim } from "actions/content"; import { doAbandonClaim } from "redux/actions/content";
import { selectTransactionItems } from "selectors/wallet"; import { selectTransactionItems } from "redux/selectors/wallet";
import ModalRevokeClaim from "./view"; import ModalRevokeClaim from "./view";
const select = state => ({ const select = state => ({

View file

@ -1,7 +1,7 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { doCloseModal } from "actions/app"; import { doCloseModal } from "redux/actions/app";
import { doAuthNavigate } from "actions/navigation"; import { doAuthNavigate } from "redux/actions/navigation";
import ModalRewardApprovalRequired from "./view"; import ModalRewardApprovalRequired from "./view";
const perform = dispatch => ({ const perform = dispatch => ({

View file

@ -1,13 +1,13 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { doOpenModal } from "actions/app"; import { doOpenModal } from "redux/actions/app";
import * as settings from "constants/settings"; import * as settings from "constants/settings";
import { selectCurrentModal, selectModalProps } from "selectors/app"; import { selectCurrentModal, selectModalProps } from "redux/selectors/app";
import { selectCurrentPage } from "selectors/navigation"; import { selectCurrentPage } from "redux/selectors/navigation";
import { selectCostForCurrentPageUri } from "selectors/cost_info"; import { selectCostForCurrentPageUri } from "redux/selectors/cost_info";
import { makeSelectClientSetting } from "selectors/settings"; import { makeSelectClientSetting } from "redux/selectors/settings";
import { selectUser } from "selectors/user"; import { selectUser } from "redux/selectors/user";
import { selectBalance } from "selectors/wallet"; import { selectBalance } from "redux/selectors/wallet";
import ModalRouter from "./view"; import ModalRouter from "./view";
const select = (state, props) => ({ const select = (state, props) => ({

View file

@ -1,6 +1,6 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { doCloseModal } from "actions/app"; import { doCloseModal } from "redux/actions/app";
import ModalTransactionFailed from "./view"; import ModalTransactionFailed from "./view";
const select = state => ({}); const select = state => ({});

View file

@ -11,7 +11,7 @@ class ModalTransactionFailed extends React.PureComponent {
contentLabel={__("Transaction failed")} contentLabel={__("Transaction failed")}
onConfirmed={closeModal} onConfirmed={closeModal}
> >
{__("Something went wrong")}: {__("Transaction failed.")}:
</Modal> </Modal>
); );
} }

View file

@ -1,6 +1,6 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { doDownloadUpgrade, doSkipUpgrade } from "actions/app"; import { doDownloadUpgrade, doSkipUpgrade } from "redux/actions/app";
import ModalUpgrade from "./view"; import ModalUpgrade from "./view";
const select = state => ({}); const select = state => ({});

View file

@ -2,8 +2,8 @@ import React from "react";
import * as settings from "constants/settings"; import * as settings from "constants/settings";
import * as modals from "constants/modal_types"; import * as modals from "constants/modal_types";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { doCloseModal, doOpenModal } from "actions/app"; import { doCloseModal, doOpenModal } from "redux/actions/app";
import { doSetClientSetting } from "actions/settings"; import { doSetClientSetting } from "redux/actions/settings";
import ModalWelcome from "./view"; import ModalWelcome from "./view";
const perform = dispatch => () => ({ const perform = dispatch => () => ({

View file

@ -1,7 +1,7 @@
import React from "react"; import React from "react";
import { doNavigate } from "actions/navigation"; import { doNavigate } from "redux/actions/navigation";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { selectPathAfterAuth } from "selectors/navigation"; import { selectPathAfterAuth } from "redux/selectors/navigation";
import { import {
selectAuthenticationIsPending, selectAuthenticationIsPending,
selectEmailToVerify, selectEmailToVerify,
@ -9,7 +9,7 @@ import {
selectUser, selectUser,
selectUserIsPending, selectUserIsPending,
selectIdentityVerifyIsPending, selectIdentityVerifyIsPending,
} from "selectors/user"; } from "redux/selectors/user";
import AuthPage from "./view"; import AuthPage from "./view";
const select = state => ({ const select = state => ({

View file

@ -1,6 +1,6 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { selectDaemonSettings } from "selectors/settings"; import { selectDaemonSettings } from "redux/selectors/settings";
import BackupPage from "./view"; import BackupPage from "./view";
const select = state => ({ const select = state => ({

View file

@ -3,18 +3,18 @@ import { connect } from "react-redux";
import { import {
doFetchClaimsByChannel, doFetchClaimsByChannel,
doFetchClaimCountByChannel, doFetchClaimCountByChannel,
} from "actions/content"; } from "redux/actions/content";
import { import {
makeSelectClaimForUri, makeSelectClaimForUri,
makeSelectClaimsInChannelForCurrentPage, makeSelectClaimsInChannelForCurrentPage,
makeSelectFetchingChannelClaims, makeSelectFetchingChannelClaims,
} from "selectors/claims"; } from "redux/selectors/claims";
import { import {
makeSelectCurrentParam, makeSelectCurrentParam,
selectCurrentParams, selectCurrentParams,
} from "selectors/navigation"; } from "redux/selectors/navigation";
import { doNavigate } from "actions/navigation"; import { doNavigate } from "redux/actions/navigation";
import { makeSelectTotalPagesForChannel } from "selectors/content"; import { makeSelectTotalPagesForChannel } from "redux/selectors/content";
import ChannelPage from "./view"; import ChannelPage from "./view";
const select = (state, props) => ({ const select = (state, props) => ({

View file

@ -1,10 +1,10 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { doFetchFeaturedUris } from "actions/content"; import { doFetchFeaturedUris } from "redux/actions/content";
import { import {
selectFeaturedUris, selectFeaturedUris,
selectFetchingFeaturedUris, selectFetchingFeaturedUris,
} from "selectors/content"; } from "redux/selectors/content";
import DiscoverPage from "./view"; import DiscoverPage from "./view";
const select = state => ({ const select = state => ({

View file

@ -1,19 +1,19 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { doNavigate } from "actions/navigation"; import { doNavigate } from "redux/actions/navigation";
import { doFetchFileInfo } from "actions/file_info"; import { doFetchFileInfo } from "redux/actions/file_info";
import { makeSelectFileInfoForUri } from "selectors/file_info"; import { makeSelectFileInfoForUri } from "redux/selectors/file_info";
import { selectRewardContentClaimIds } from "selectors/content"; import { selectRewardContentClaimIds } from "redux/selectors/content";
import { doFetchCostInfoForUri } from "actions/cost_info"; import { doFetchCostInfoForUri } from "redux/actions/cost_info";
import { import {
makeSelectClaimForUri, makeSelectClaimForUri,
makeSelectContentTypeForUri, makeSelectContentTypeForUri,
makeSelectMetadataForUri, makeSelectMetadataForUri,
} from "selectors/claims"; } from "redux/selectors/claims";
import { makeSelectCostInfoForUri } from "selectors/cost_info"; import { makeSelectCostInfoForUri } from "redux/selectors/cost_info";
import { selectShowNsfw } from "selectors/settings"; import { selectShowNsfw } from "redux/selectors/settings";
import FilePage from "./view"; import FilePage from "./view";
import { makeSelectCurrentParam } from "selectors/navigation"; import { makeSelectCurrentParam } from "redux/selectors/navigation";
const select = (state, props) => ({ const select = (state, props) => ({
claim: makeSelectClaimForUri(props.uri)(state), claim: makeSelectClaimForUri(props.uri)(state),

View file

@ -1,16 +1,16 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { doFetchFileInfosAndPublishedClaims } from "actions/file_info"; import { doFetchFileInfosAndPublishedClaims } from "redux/actions/file_info";
import { import {
selectFileInfosDownloaded, selectFileInfosDownloaded,
selectIsFetchingFileListDownloadedOrPublished, selectIsFetchingFileListDownloadedOrPublished,
} from "selectors/file_info"; } from "redux/selectors/file_info";
import { import {
selectMyClaimsWithoutChannels, selectMyClaimsWithoutChannels,
selectIsFetchingClaimListMine, selectIsFetchingClaimListMine,
} from "selectors/claims"; } from "redux/selectors/claims";
import { doFetchClaimListMine } from "actions/content"; import { doFetchClaimListMine } from "redux/actions/content";
import { doNavigate } from "actions/navigation"; import { doNavigate } from "redux/actions/navigation";
import FileListDownloaded from "./view"; import FileListDownloaded from "./view";
const select = state => ({ const select = state => ({

View file

@ -1,13 +1,13 @@
import React from "react"; import React from "react";
import rewards from "rewards"; import rewards from "rewards";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { doFetchClaimListMine } from "actions/content"; import { doFetchClaimListMine } from "redux/actions/content";
import { import {
selectMyClaimsWithoutChannels, selectMyClaimsWithoutChannels,
selectIsFetchingClaimListMine, selectIsFetchingClaimListMine,
} from "selectors/claims"; } from "redux/selectors/claims";
import { doClaimRewardType } from "actions/rewards"; import { doClaimRewardType } from "redux/actions/rewards";
import { doNavigate } from "actions/navigation"; import { doNavigate } from "redux/actions/navigation";
import FileListPublished from "./view"; import FileListPublished from "./view";
const select = state => ({ const select = state => ({

View file

@ -1,8 +1,8 @@
import React from "react"; import React from "react";
import { doAuthNavigate } from "actions/navigation"; import { doAuthNavigate } from "redux/actions/navigation";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { doFetchAccessToken } from "actions/user"; import { doFetchAccessToken } from "redux/actions/user";
import { selectAccessToken, selectUser } from "selectors/user"; import { selectAccessToken, selectUser } from "redux/selectors/user";
import HelpPage from "./view"; import HelpPage from "./view";
const select = state => ({ const select = state => ({

View file

@ -1,11 +1,11 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import InvitePage from "./view"; import InvitePage from "./view";
import { doFetchInviteStatus } from "actions/user"; import { doFetchInviteStatus } from "redux/actions/user";
import { import {
selectUserInviteStatusFailed, selectUserInviteStatusFailed,
selectUserInviteStatusIsPending, selectUserInviteStatusIsPending,
} from "selectors/user"; } from "redux/selectors/user";
const select = state => ({ const select = state => ({
isFailed: selectUserInviteStatusFailed(state), isFailed: selectUserInviteStatusFailed(state),

View file

@ -1,22 +1,22 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { doNavigate, doHistoryBack } from "actions/navigation"; import { doNavigate, doHistoryBack } from "redux/actions/navigation";
import { doClaimRewardType } from "actions/rewards"; import { doClaimRewardType } from "redux/actions/rewards";
import { import {
selectMyClaims, selectMyClaims,
selectFetchingMyChannels, selectFetchingMyChannels,
selectMyChannelClaims, selectMyChannelClaims,
selectClaimsByUri, selectClaimsByUri,
} from "selectors/claims"; } from "redux/selectors/claims";
import { selectResolvingUris } from "selectors/content"; import { selectResolvingUris } from "redux/selectors/content";
import { import {
doFetchClaimListMine, doFetchClaimListMine,
doFetchChannelListMine, doFetchChannelListMine,
doResolveUri, doResolveUri,
doCreateChannel, doCreateChannel,
doPublish, doPublish,
} from "actions/content"; } from "redux/actions/content";
import { selectBalance } from "selectors/wallet"; import { selectBalance } from "redux/selectors/wallet";
import rewards from "rewards"; import rewards from "rewards";
import PublishPage from "./view"; import PublishPage from "./view";

View file

@ -1,7 +1,7 @@
import React from "react"; import React from "react";
import Link from "component/link"; import Link from "component/link";
import { FormRow } from "component/form"; import { FormRow } from "component/form";
import { doShowSnackBar } from "actions/app"; import { doShowSnackBar } from "redux/actions/app";
import lbry from "../lbry.js"; import lbry from "../lbry.js";
class ReportPage extends React.Component { class ReportPage extends React.Component {
@ -86,8 +86,7 @@ class ReportPage extends React.Component {
<section className="card"> <section className="card">
<div className="card__content"> <div className="card__content">
<h3>{__("Developer?")}</h3> <h3>{__("Developer?")}</h3>
{__("You can also")} {__("You can also")}{" "}
{" "}
<Link <Link
href="https://github.com/lbryio/lbry/issues" href="https://github.com/lbryio/lbry/issues"
label={__("submit an issue on GitHub")} label={__("submit an issue on GitHub")}

View file

@ -3,10 +3,10 @@ import { connect } from "react-redux";
import { import {
selectFetchingRewards, selectFetchingRewards,
selectUnclaimedRewards, selectUnclaimedRewards,
} from "selectors/rewards"; } from "redux/selectors/rewards";
import { selectUser } from "selectors/user"; import { selectUser } from "redux/selectors/user";
import { doAuthNavigate, doNavigate } from "actions/navigation"; import { doAuthNavigate, doNavigate } from "redux/actions/navigation";
import { doRewardList } from "actions/rewards"; import { doRewardList } from "redux/actions/rewards";
import RewardsPage from "./view"; import RewardsPage from "./view";
const select = (state, props) => { const select = (state, props) => {

View file

@ -1,7 +1,7 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { selectIsSearching, selectSearchQuery } from "selectors/search"; import { selectIsSearching, selectSearchQuery } from "redux/selectors/search";
import { doNavigate } from "actions/navigation"; import { doNavigate } from "redux/actions/navigation";
import SearchPage from "./view"; import SearchPage from "./view";
const select = state => ({ const select = state => ({

View file

@ -1,20 +1,20 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import * as settings from "constants/settings"; import * as settings from "constants/settings";
import { doClearCache } from "actions/app"; import { doClearCache } from "redux/actions/app";
import { import {
doSetDaemonSetting, doSetDaemonSetting,
doSetClientSetting, doSetClientSetting,
doGetThemes, doGetThemes,
doSetTheme, doSetTheme,
doChangeLanguage, doChangeLanguage,
} from "actions/settings"; } from "redux/actions/settings";
import { import {
makeSelectClientSetting, makeSelectClientSetting,
selectDaemonSettings, selectDaemonSettings,
selectLanguages, selectLanguages,
} from "selectors/settings"; } from "redux/selectors/settings";
import { selectCurrentLanguage } from "selectors/app"; import { selectCurrentLanguage } from "redux/selectors/app";
import SettingsPage from "./view"; import SettingsPage from "./view";
const select = state => ({ const select = state => ({

View file

@ -1,8 +1,8 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { doResolveUri } from "actions/content"; import { doResolveUri } from "redux/actions/content";
import { makeSelectClaimForUri } from "selectors/claims"; import { makeSelectClaimForUri } from "redux/selectors/claims";
import { makeSelectIsUriResolving } from "selectors/content"; import { makeSelectIsUriResolving } from "redux/selectors/content";
import ShowPage from "./view"; import ShowPage from "./view";
const select = (state, props) => ({ const select = (state, props) => ({

View file

@ -1,10 +1,10 @@
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { doFetchTransactions } from "actions/wallet"; import { doFetchTransactions } from "redux/actions/wallet";
import { import {
selectTransactionItems, selectTransactionItems,
selectIsFetchingTransactions, selectIsFetchingTransactions,
} from "selectors/wallet"; } from "redux/selectors/wallet";
import TransactionHistoryPage from "./view"; import TransactionHistoryPage from "./view";
const select = state => ({ const select = state => ({

View file

@ -7,11 +7,11 @@ import {
selectUpgradeFilename, selectUpgradeFilename,
selectIsUpgradeSkipped, selectIsUpgradeSkipped,
selectRemoteVersion, selectRemoteVersion,
} from "selectors/app"; } from "redux/selectors/app";
import { doFetchDaemonSettings } from "actions/settings"; import { doFetchDaemonSettings } from "redux/actions/settings";
import { doBalanceSubscribe } from "actions/wallet"; import { doBalanceSubscribe } from "redux/actions/wallet";
import { doAuthenticate } from "actions/user"; import { doAuthenticate } from "redux/actions/user";
import { doFetchFileInfosAndPublishedClaims } from "actions/file_info"; import { doFetchFileInfosAndPublishedClaims } from "redux/actions/file_info";
import * as modals from "constants/modal_types"; import * as modals from "constants/modal_types";
import { doFetchRewardedContent } from "actions/content"; import { doFetchRewardedContent } from "actions/content";
import { selectCurrentModal } from "../selectors/app"; import { selectCurrentModal } from "../selectors/app";
@ -20,7 +20,7 @@ const { remote, ipcRenderer, shell } = require("electron");
const path = require("path"); const path = require("path");
const { download } = remote.require("electron-dl"); const { download } = remote.require("electron-dl");
const fs = remote.require("fs"); const fs = remote.require("fs");
const { lbrySettings: config } = require("../../../app/package.json"); const { lbrySettings: config } = require("../../../../app/package.json");
const CHECK_UPGRADE_INTERVAL = 10 * 60 * 1000; const CHECK_UPGRADE_INTERVAL = 10 * 60 * 1000;
export function doOpenModal(modal, modalProps = {}) { export function doOpenModal(modal, modalProps = {}) {

View file

@ -1,6 +1,6 @@
import * as types from "constants/action_types"; import * as types from "constants/action_types";
import lbry from "lbry"; import lbry from "lbry";
import { selectFetchingAvailability } from "selectors/availability"; import { selectFetchingAvailability } from "redux/selectors/availability";
export function doFetchAvailability(uri) { export function doFetchAvailability(uri) {
return function(dispatch, getState) { return function(dispatch, getState) {

View file

@ -3,18 +3,18 @@ import * as settings from "constants/settings";
import lbry from "lbry"; import lbry from "lbry";
import lbryio from "lbryio"; import lbryio from "lbryio";
import lbryuri from "lbryuri"; import lbryuri from "lbryuri";
import { makeSelectClientSetting } from "selectors/settings"; import { makeSelectClientSetting } from "redux/selectors/settings";
import { selectBalance, selectTransactionItems } from "selectors/wallet"; import { selectBalance, selectTransactionItems } from "redux/selectors/wallet";
import { import {
makeSelectFileInfoForUri, makeSelectFileInfoForUri,
selectDownloadingByOutpoint, selectDownloadingByOutpoint,
} from "selectors/file_info"; } from "redux/selectors/file_info";
import { selectResolvingUris } from "selectors/content"; import { selectResolvingUris } from "redux/selectors/content";
import { makeSelectCostInfoForUri } from "selectors/cost_info"; import { makeSelectCostInfoForUri } from "redux/selectors/cost_info";
import { doAlertError, doOpenModal } from "actions/app"; import { doAlertError, doOpenModal } from "redux/actions/app";
import { doClaimEligiblePurchaseRewards } from "actions/rewards"; import { doClaimEligiblePurchaseRewards } from "redux/actions/rewards";
import { selectBadgeNumber } from "selectors/app"; import { selectBadgeNumber } from "redux/selectors/app";
import { selectTotalDownloadProgress } from "selectors/file_info"; import { selectTotalDownloadProgress } from "redux/selectors/file_info";
import setBadge from "util/setBadge"; import setBadge from "util/setBadge";
import setProgressBar from "util/setProgressBar"; import setProgressBar from "util/setProgressBar";
import batchActions from "util/batchActions"; import batchActions from "util/batchActions";
@ -51,8 +51,8 @@ export function doResolveUris(uris) {
certificate: null, certificate: null,
}; };
const { claim, certificate, claims_in_channel } = uriResolveInfo && const { claim, certificate, claims_in_channel } =
!uriResolveInfo.error uriResolveInfo && !uriResolveInfo.error
? uriResolveInfo ? uriResolveInfo
: fallbackResolveInfo; : fallbackResolveInfo;
resolveInfo[uri] = { claim, certificate, claims_in_channel }; resolveInfo[uri] = { claim, certificate, claims_in_channel };

View file

@ -1,10 +1,10 @@
import * as types from "constants/action_types"; import * as types from "constants/action_types";
import lbry from "lbry"; import lbry from "lbry";
import lbryio from "lbryio"; import lbryio from "lbryio";
import { doResolveUri } from "actions/content"; import { doResolveUri } from "redux/actions/content";
import { selectResolvingUris } from "selectors/content"; import { selectResolvingUris } from "redux/selectors/content";
import { selectClaimsByUri } from "selectors/claims"; import { selectClaimsByUri } from "redux/selectors/claims";
import { selectSettingsIsGenerous } from "selectors/settings"; import { selectSettingsIsGenerous } from "redux/selectors/settings";
export function doFetchCostInfoForUri(uri) { export function doFetchCostInfoForUri(uri) {
return function(dispatch, getState) { return function(dispatch, getState) {
@ -45,7 +45,8 @@ export function doFetchCostInfoForUri(uri) {
}, reject); }, reject);
*/ */
const fee = claim.value && claim.value.stream && claim.value.stream.metadata const fee =
claim.value && claim.value.stream && claim.value.stream.metadata
? claim.value.stream.metadata.fee ? claim.value.stream.metadata.fee
: undefined; : undefined;

View file

@ -1,19 +1,19 @@
import * as types from "constants/action_types"; import * as types from "constants/action_types";
import lbry from "lbry"; import lbry from "lbry";
import { doFetchClaimListMine, doAbandonClaim } from "actions/content"; import { doFetchClaimListMine, doAbandonClaim } from "redux/actions/content";
import { import {
selectClaimsByUri, selectClaimsByUri,
selectIsFetchingClaimListMine, selectIsFetchingClaimListMine,
selectMyClaimsOutpoints, selectMyClaimsOutpoints,
} from "selectors/claims"; } from "redux/selectors/claims";
import { import {
selectIsFetchingFileList, selectIsFetchingFileList,
selectFileInfosByOutpoint, selectFileInfosByOutpoint,
selectUrisLoading, selectUrisLoading,
selectTotalDownloadProgress, selectTotalDownloadProgress,
} from "selectors/file_info"; } from "redux/selectors/file_info";
import { doCloseModal } from "actions/app"; import { doCloseModal } from "redux/actions/app";
import { doNavigate, doHistoryBack } from "actions/navigation"; import { doNavigate, doHistoryBack } from "redux/actions/navigation";
import setProgressBar from "util/setProgressBar"; import setProgressBar from "util/setProgressBar";
import batchActions from "util/batchActions"; import batchActions from "util/batchActions";

View file

@ -6,8 +6,8 @@ import {
selectCurrentParams, selectCurrentParams,
selectHistoryStack, selectHistoryStack,
selectHistoryIndex, selectHistoryIndex,
} from "selectors/navigation"; } from "redux/selectors/navigation";
import { doSearch } from "actions/search"; import { doSearch } from "redux/actions/search";
import { toQueryString } from "util/query_params"; import { toQueryString } from "util/query_params";
export function doNavigate(path, params = {}, options = {}) { export function doNavigate(path, params = {}, options = {}) {
@ -21,21 +21,11 @@ export function doNavigate(path, params = {}, options = {}) {
url += "?" + toQueryString(params); url += "?" + toQueryString(params);
} }
const state = getState(), const scrollY = options.scrollY;
currentPage = selectCurrentPage(state),
nextPage = computePageFromPath(path),
scrollY = options.scrollY;
if (currentPage != nextPage) {
//I wasn't seeing it scroll to the proper position without this -- possibly because the page isn't fully rendered? Not sure - Jeremy
setTimeout(() => {
window.scrollTo(0, scrollY ? scrollY : 0);
}, 100);
}
dispatch({ dispatch({
type: types.HISTORY_NAVIGATE, type: types.HISTORY_NAVIGATE,
data: { url, index: options.index }, data: { url, index: options.index, scrollY },
}); });
}; };
} }

View file

@ -2,8 +2,8 @@ import * as types from "constants/action_types";
import * as modals from "constants/modal_types"; import * as modals from "constants/modal_types";
import lbryio from "lbryio"; import lbryio from "lbryio";
import rewards from "rewards"; import rewards from "rewards";
import { selectUnclaimedRewardsByType } from "selectors/rewards"; import { selectUnclaimedRewardsByType } from "redux/selectors/rewards";
import { selectUserIsRewardApproved } from "selectors/user"; import { selectUserIsRewardApproved } from "redux/selectors/user";
export function doRewardList() { export function doRewardList() {
return function(dispatch, getState) { return function(dispatch, getState) {
@ -93,12 +93,11 @@ export function doClaimEligiblePurchaseRewards() {
if (rewardsByType[rewards.TYPE_FIRST_STREAM]) { if (rewardsByType[rewards.TYPE_FIRST_STREAM]) {
dispatch(doClaimRewardType(rewards.TYPE_FIRST_STREAM)); dispatch(doClaimRewardType(rewards.TYPE_FIRST_STREAM));
} else { } else {
[ [rewards.TYPE_MANY_DOWNLOADS, rewards.TYPE_FEATURED_DOWNLOAD].forEach(
rewards.TYPE_MANY_DOWNLOADS, type => {
rewards.TYPE_FEATURED_DOWNLOAD,
].forEach(type => {
dispatch(doClaimRewardType(type)); dispatch(doClaimRewardType(type));
}); }
);
} }
}; };
} }

View file

@ -1,8 +1,8 @@
import * as types from "constants/action_types"; import * as types from "constants/action_types";
import lbryuri from "lbryuri"; import lbryuri from "lbryuri";
import { doResolveUri } from "actions/content"; import { doResolveUri } from "redux/actions/content";
import { doNavigate } from "actions/navigation"; import { doNavigate } from "redux/actions/navigation";
import { selectCurrentPage } from "selectors/navigation"; import { selectCurrentPage } from "redux/selectors/navigation";
import batchActions from "util/batchActions"; import batchActions from "util/batchActions";
export function doSearch(rawQuery) { export function doSearch(rawQuery) {

View file

@ -1,6 +1,6 @@
import * as types from "constants/action_types"; import * as types from "constants/action_types";
import * as settings from "constants/settings"; import * as settings from "constants/settings";
import { doAlertError } from "actions/app"; import { doAlertError } from "redux/actions/app";
import batchActions from "util/batchActions"; import batchActions from "util/batchActions";
import lbry from "lbry"; import lbry from "lbry";

View file

@ -1,9 +1,9 @@
import * as types from "constants/action_types"; import * as types from "constants/action_types";
import * as modals from "constants/modal_types"; import * as modals from "constants/modal_types";
import lbryio from "lbryio"; import lbryio from "lbryio";
import { doOpenModal, doShowSnackBar } from "actions/app"; import { doOpenModal, doShowSnackBar } from "redux/actions/app";
import { doRewardList, doClaimRewardType } from "actions/rewards"; import { doRewardList, doClaimRewardType } from "redux/actions/rewards";
import { selectEmailToVerify, selectUser } from "selectors/user"; import { selectEmailToVerify, selectUser } from "redux/selectors/user";
import rewards from "rewards"; import rewards from "rewards";
export function doAuthenticate() { export function doAuthenticate() {
@ -69,7 +69,7 @@ export function doUserEmailNew(email) {
"post" "post"
) )
.catch(error => { .catch(error => {
if (error.xhr && error.xhr.status == 409) { if (error.response && error.response.status == 409) {
return lbryio.call( return lbryio.call(
"user_email", "user_email",
"resend_token", "resend_token",

View file

@ -4,9 +4,9 @@ import {
selectDraftTransaction, selectDraftTransaction,
selectDraftTransactionAmount, selectDraftTransactionAmount,
selectBalance, selectBalance,
} from "selectors/wallet"; } from "redux/selectors/wallet";
import { doOpenModal, doShowSnackBar } from "actions/app"; import { doOpenModal, doShowSnackBar } from "redux/actions/app";
import { doNavigate } from "actions/navigation"; import { doNavigate } from "redux/actions/navigation";
import * as modals from "constants/modal_types"; import * as modals from "constants/modal_types";
export function doUpdateBalance() { export function doUpdateBalance() {

Some files were not shown because too many files have changed in this diff Show more