diff --git a/.eslintrc.json b/.eslintrc.json index 8b289560f..746822b3d 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -35,6 +35,7 @@ "standard/no-callback-literal": 0, "comma-dangle": ["error", "always-multiline"], "space-before-function-paren": ["error", "never"], + "jsx-quotes": ["error", "prefer-double"], "semi": [ "error", "always", diff --git a/package.json b/package.json index dbe0ff267..79aa48b03 100644 --- a/package.json +++ b/package.json @@ -171,7 +171,7 @@ "lbrySettings": { "lbrynetDaemonVersion": "0.32.4", "lbrynetDaemonUrlTemplate": "https://github.com/lbryio/lbry/releases/download/vDAEMONVER/lbrynet-OSNAME.zip", - "lbrynetDaemonDir": "static", + "lbrynetDaemonDir": "static/daemon", "lbrynetDaemonFileName": "lbrynet" } } diff --git a/src/platforms/electron/Daemon.js b/src/platforms/electron/Daemon.js index 50e20395f..c5cff1068 100644 --- a/src/platforms/electron/Daemon.js +++ b/src/platforms/electron/Daemon.js @@ -3,9 +3,11 @@ import { spawn, execSync } from 'child_process'; import { Lbry } from 'lbry-redux'; export default class Daemon { - static path = process.env.LBRY_DAEMON || ( - process.env.NODE_ENV === 'production' ? path.join(process.resourcesPath, 'static', 'lbrynet') : path.join(__static, 'lbrynet') - ); + static path = + process.env.LBRY_DAEMON || + (process.env.NODE_ENV === 'production' + ? path.join(process.resourcesPath, 'static/daemon', 'lbrynet') + : path.join(__static, 'daemon/lbrynet')); subprocess; handlers; diff --git a/src/platforms/electron/index.js b/src/platforms/electron/index.js index b84e397b2..e8bc76faa 100644 --- a/src/platforms/electron/index.js +++ b/src/platforms/electron/index.js @@ -34,7 +34,7 @@ let daemon; const appState = {}; -const installExtensions = async() => { +const installExtensions = async () => { const devtronExtension = require('devtron'); return await devtronExtension.install(); }; @@ -53,7 +53,7 @@ if (isDev) { process.env.ELECTRON_DISABLE_SECURITY_WARNINGS = true; } -app.on('ready', async() => { +app.on('ready', async () => { let isDaemonRunning = false; await Lbry.status() .then(() => { @@ -90,20 +90,21 @@ app.on('ready', async() => { const { default: installExtension, REACT_DEVELOPER_TOOLS, - REDUX_DEVTOOLS, REACT_PERF, + REDUX_DEVTOOLS, + REACT_PERF, } = require('electron-devtools-installer'); await installExtension(REACT_DEVELOPER_TOOLS) - .then((name) => console.log(`Added Extension: ${name}`)) - .catch((err) => console.log('An error occurred: ', err)); + .then(name => console.log(`Added Extension: ${name}`)) + .catch(err => console.log('An error occurred: ', err)); await installExtension(REDUX_DEVTOOLS) - .then((name) => console.log(`Added Extension: ${name}`)) - .catch((err) => console.log('An error occurred: ', err)); + .then(name => console.log(`Added Extension: ${name}`)) + .catch(err => console.log('An error occurred: ', err)); await installExtension(REACT_PERF) - .then((name) => console.log(`Added Extension: ${name}`)) - .catch((err) => console.log('An error occurred: ', err)); + .then(name => console.log(`Added Extension: ${name}`)) + .catch(err => console.log('An error occurred: ', err)); } rendererWindow = createWindow(appState); @@ -235,7 +236,7 @@ ipcMain.on('version-info-requested', () => { let json; try { json = JSON.parse(result); - } catch(e) { + } catch (e) { return; } const tagName = json.tag_name; @@ -262,17 +263,20 @@ ipcMain.on('version-info-requested', () => { }; const requestLatestRelease = (alreadyRedirected = false) => { - const req = https.get({ - hostname: 'api.github.com', - path: '/repos/lbryio/lbry-desktop/releases/latest', - headers: { 'user-agent': `LBRY/${localVersion}` }, - }, res => { - if (res.statusCode === 301 || res.statusCode === 302) { - requestLatestRelease(res.headers.location, true); - } else { - onSuccess(res); + const req = https.get( + { + hostname: 'api.github.com', + path: '/repos/lbryio/lbry-desktop/releases/latest', + headers: { 'user-agent': `LBRY/${localVersion}` }, + }, + res => { + if (res.statusCode === 301 || res.statusCode === 302) { + requestLatestRelease(res.headers.location, true); + } else { + onSuccess(res); + } } - }); + ); if (alreadyRedirected) return; req.on('error', err => { diff --git a/src/platforms/electron/startSandbox.js b/src/platforms/electron/startSandbox.js index a85039553..4af568da8 100644 --- a/src/platforms/electron/startSandbox.js +++ b/src/platforms/electron/startSandbox.js @@ -13,8 +13,8 @@ const { Lbry } = require('lbry-redux'); delete global.window; export default async function startSandbox() { - const sandbox = express(); const port = 5278; + const sandbox = express(); sandbox.get('/set/:outpoint', async(req, res) => { const { outpoint } = req.params; @@ -26,5 +26,13 @@ export default async function startSandbox() { res.send(`/sandbox/${outpoint}/`); }); - sandbox.listen(port, 'localhost', () => console.log(`Sandbox listening on port ${port}.`)); + sandbox + .listen(port, 'localhost', () => console.log(`Sandbox listening on port ${port}.`)) + .on('error', err => { + if (err.code === 'EADDRINUSE') { + console.log( + 'Server already listening at localhost://5278: This is probably another LBRY app running. If not, games in the app will not work.' + ); + } + }); } diff --git a/src/ui/component/channelTile/index.js b/src/ui/component/channelTile/index.js index 004816016..347697f35 100644 --- a/src/ui/component/channelTile/index.js +++ b/src/ui/component/channelTile/index.js @@ -1,7 +1,11 @@ import { connect } from 'react-redux'; -import { doResolveUri, makeSelectClaimForUri, makeSelectIsUriResolving } from 'lbry-redux'; +import { + doResolveUri, + makeSelectClaimForUri, + makeSelectIsUriResolving, + makeSelectTotalItemsForChannel, +} from 'lbry-redux'; import { doNavigate } from 'redux/actions/navigation'; -import { makeSelectTotalItemsForChannel } from 'redux/selectors/content'; import ChannelTile from './view'; const select = (state, props) => ({ diff --git a/src/ui/component/channelTile/view.jsx b/src/ui/component/channelTile/view.jsx index f82615989..fcc1317ef 100644 --- a/src/ui/component/channelTile/view.jsx +++ b/src/ui/component/channelTile/view.jsx @@ -45,7 +45,7 @@ class ChannelTile extends React.PureComponent { subscriptionUri = `lbry://${claim.permanent_url}`; } - const onClick = () => navigate('/show', { uri }); + const onClick = () => navigate('/show', { uri, page: 1 }); return (
{ const { balance } = props; return ( -
+

{__('Balance')}

{__('You currently have')}

-
{(balance || balance === 0) && ( diff --git a/src/ui/constants/action_types.js b/src/ui/constants/action_types.js index 10248feae..f782a9272 100644 --- a/src/ui/constants/action_types.js +++ b/src/ui/constants/action_types.js @@ -68,7 +68,6 @@ export const RESOLVE_URIS_COMPLETED = 'RESOLVE_URIS_COMPLETED'; export const FETCH_CHANNEL_CLAIMS_STARTED = 'FETCH_CHANNEL_CLAIMS_STARTED'; export const FETCH_CHANNEL_CLAIMS_COMPLETED = 'FETCH_CHANNEL_CLAIMS_COMPLETED'; export const FETCH_CHANNEL_CLAIM_COUNT_STARTED = 'FETCH_CHANNEL_CLAIM_COUNT_STARTED'; -export const FETCH_CHANNEL_CLAIM_COUNT_COMPLETED = 'FETCH_CHANNEL_CLAIM_COUNT_COMPLETED'; export const FETCH_CLAIM_LIST_MINE_STARTED = 'FETCH_CLAIM_LIST_MINE_STARTED'; export const FETCH_CLAIM_LIST_MINE_COMPLETED = 'FETCH_CLAIM_LIST_MINE_COMPLETED'; export const ABANDON_CLAIM_STARTED = 'ABANDON_CLAIM_STARTED'; diff --git a/src/ui/page/channel/view.jsx b/src/ui/page/channel/view.jsx index ff348eefb..ab57589ef 100644 --- a/src/ui/page/channel/view.jsx +++ b/src/ui/page/channel/view.jsx @@ -32,11 +32,11 @@ class ChannelPage extends React.PureComponent { fetchClaims(uri, page || 1); } - componentWillReceiveProps(nextProps: Props) { - const { page, fetchClaims } = this.props; + componentDidUpdate(prevProps: Props) { + const { page, fetchClaims, uri } = this.props; - if (nextProps.page && page !== nextProps.page) { - fetchClaims(nextProps.uri, nextProps.page); + if (prevProps.page && prevProps.page && page !== prevProps.page) { + fetchClaims(uri, page); } } diff --git a/src/ui/page/file/view.jsx b/src/ui/page/file/view.jsx index c871253f7..749a5ca1a 100644 --- a/src/ui/page/file/view.jsx +++ b/src/ui/page/file/view.jsx @@ -226,7 +226,7 @@ class FilePage extends React.Component {
- {claimIsMine ? ( + {claimIsMine && (