From 0e7a46fe7ceb20c524c8aff4ae83c912e124b37d Mon Sep 17 00:00:00 2001 From: Sean Yesmunt Date: Mon, 13 Aug 2018 12:23:01 -0400 Subject: [PATCH] update daemon startup process --- package.json | 2 +- src/renderer/component/spinner/view.jsx | 4 +- .../component/splash/internal/load-screen.jsx | 2 + src/renderer/component/splash/view.jsx | 104 ++++++++++-------- src/renderer/scss/component/_spinner.scss | 8 ++ 5 files changed, 70 insertions(+), 50 deletions(-) diff --git a/package.json b/package.json index dfae48926..8cede53fe 100644 --- a/package.json +++ b/package.json @@ -132,7 +132,7 @@ "yarn": "^1.3" }, "lbrySettings": { - "lbrynetDaemonVersion": "0.20.4", + "lbrynetDaemonVersion": "0.21.1rc1", "lbrynetDaemonUrlTemplate": "https://github.com/lbryio/lbry/releases/download/vDAEMONVER/lbrynet-daemon-vDAEMONVER-OSNAME.zip", "lbrynetDaemonDir": "static/daemon", "lbrynetDaemonFileName": "lbrynet-daemon" diff --git a/src/renderer/component/spinner/view.jsx b/src/renderer/component/spinner/view.jsx index bb44ee6f7..836971041 100644 --- a/src/renderer/component/spinner/view.jsx +++ b/src/renderer/component/spinner/view.jsx @@ -7,16 +7,18 @@ type Props = { dark?: boolean, // always a dark spinner light?: boolean, // always a light spinner theme: string, + type: ?string, }; const Spinner = (props: Props) => { - const { dark, light, theme } = props; + const { dark, light, theme, type } = props; return (
diff --git a/src/renderer/component/splash/internal/load-screen.jsx b/src/renderer/component/splash/internal/load-screen.jsx index 9aff326e4..97d141c9a 100644 --- a/src/renderer/component/splash/internal/load-screen.jsx +++ b/src/renderer/component/splash/internal/load-screen.jsx @@ -2,6 +2,7 @@ import * as React from 'react'; import Icon from 'component/common/icon'; import * as icons from 'constants/icons'; +import Spinner from 'component/spinner'; type Props = { message: string, @@ -33,6 +34,7 @@ class LoadScreen extends React.PureComponent { )} {details &&
{details}
} +
); } diff --git a/src/renderer/component/splash/view.jsx b/src/renderer/component/splash/view.jsx index 504eced07..667ab8c53 100644 --- a/src/renderer/component/splash/view.jsx +++ b/src/renderer/component/splash/view.jsx @@ -1,3 +1,4 @@ +// @flow import * as React from 'react'; import { Lbry, MODALS } from 'lbry-redux'; import LoadScreen from './internal/load-screen'; @@ -5,10 +6,13 @@ import ModalWalletUnlock from 'modal/modalWalletUnlock'; import ModalIncompatibleDaemon from 'modal/modalIncompatibleDaemon'; import ModalUpgrade from 'modal/modalUpgrade'; import ModalDownloading from 'modal/modalDownloading'; +import LoadScreen from './internal/load-screen'; type Props = { checkDaemonVersion: () => Promise, notifyUnlockWallet: () => Promise, + daemonVersionMatched: boolean, + onReadyToLaunch: () => void, notification: ?{ id: string, }, @@ -18,7 +22,6 @@ type State = { details: string, message: string, isRunning: boolean, - isLagging: boolean, launchedModal: boolean, }; @@ -30,31 +33,56 @@ export class SplashScreen extends React.PureComponent { details: __('Starting daemon'), message: __('Connecting'), isRunning: false, - isLagging: false, launchedModal: false, }; } + componentDidMount() { + const { checkDaemonVersion } = this.props; + + Lbry.connect() + .then(checkDaemonVersion) + .then(() => { + this.updateStatus(); + }) + .catch(() => { + this.setState({ + message: __('Connection Failure'), + details: __( + 'Try closing all LBRY processes and starting again. If this still happens, your anti-virus software or firewall may be preventing LBRY from connecting. Contact hello@lbry.io if you think this is a software bug.' + ), + }); + }); + } + updateStatus() { Lbry.status().then(status => { - this._updateStatusCallback(status); + this.updateStatusCallback(status); }); } - _updateStatusCallback(status) { + updateStatusCallback(status) { const { notifyUnlockWallet } = this.props; const { launchedModal } = this.state; + if (!status.wallet.is_unlocked) { + this.setState({ + message: __('Unlock Wallet'), + details: __('Please unlock your wallet to proceed.'), + isRunning: true, + }); + + if (launchedModal === false) { + this.setState({ launchedModal: true }, () => notifyUnlockWallet()); + } + return; + } - const startupStatus = status.startup_status; - if (startupStatus.code === 'started') { + if (status.is_running) { // Wait until we are able to resolve a name before declaring // that we are done. // TODO: This is a hack, and the logic should live in the daemon // to give us a better sense of when we are actually started this.setState({ - message: __('Testing Network'), - details: __('Waiting for name resolution'), - isLagging: false, isRunning: true, }); @@ -69,30 +97,28 @@ export class SplashScreen extends React.PureComponent { return; } - if (status.blockchain_status && status.blockchain_status.blocks_behind > 0) { - const format = - status.blockchain_status.blocks_behind == 1 ? '%s block behind' : '%s blocks behind'; + if (status.blockchain_headers && status.blockchain_headers.download_progress < 100) { this.setState({ message: __('Blockchain Sync'), - details: __(format, status.blockchain_status.blocks_behind), - isLagging: startupStatus.is_lagging, + details: `${__('Catching up with the blockchain')} (${ + status.blockchain_headers.download_progress + }%)`, }); - } else if (startupStatus.code === 'waiting_for_wallet_unlock') { + } else if (status.wallet && status.wallet.blocks_behind > 0) { + const format = status.wallet.blocks_behind === 1 ? '%s block behind' : '%s blocks behind'; this.setState({ - message: __('Unlock Wallet'), - details: __('Please unlock your wallet to proceed.'), - isLagging: false, - isRunning: true, + message: __('Blockchain Sync'), + details: __(format, status.wallet.blocks_behind), }); - - if (launchedModal === false) { - this.setState({ launchedModal: true }, () => notifyUnlockWallet()); - } - } else { + } else if ( + status.blockchain_headers && + status.blockchain_headers.download_progress === 100 && + status.wallet && + status.wallet.blocks_behind === 0 + ) { this.setState({ - message: __('Network Loading'), - details: startupStatus.message + (startupStatus.is_lagging ? '' : '...'), - isLagging: startupStatus.is_lagging, + message: 'Network Loading', + details: 'Initializing LBRY service...', }); } setTimeout(() => { @@ -100,34 +126,16 @@ export class SplashScreen extends React.PureComponent { }, 500); } - componentDidMount() { - const { checkDaemonVersion } = this.props; - - Lbry.connect() - .then(checkDaemonVersion) - .then(() => { - this.updateStatus(); - }) - .catch(() => { - this.setState({ - isLagging: true, - message: __('Connection Failure'), - details: __( - 'Try closing all LBRY processes and starting again. If this still happens, your anti-virus software or firewall may be preventing LBRY from connecting. Contact hello@lbry.io if you think this is a software bug.' - ), - }); - }); - } - render() { const { notification } = this.props; - const { message, details, isLagging, isRunning } = this.state; + const { message, details, isRunning } = this.state; const notificationId = notification && notification.id; + // {notificationId === MODALS.WALLET_UNLOCK && } return ( - + {/* Temp hack: don't show any modals on splash screen daemon is running; daemon doesn't let you quit during startup, so the "Quit" buttons in the modals won't work. */} diff --git a/src/renderer/scss/component/_spinner.scss b/src/renderer/scss/component/_spinner.scss index bdeda87ab..d6e4cb937 100644 --- a/src/renderer/scss/component/_spinner.scss +++ b/src/renderer/scss/component/_spinner.scss @@ -42,6 +42,14 @@ } } +.spinner--splash { + margin-top: $spacing-vertical; + + .rect { + background-color: var(--color-white); + } +} + @keyframes sk-stretchdelay { 0%, 40%,