From 52f3fab3a6d4139ede218e677c66fb45a6f8ff93 Mon Sep 17 00:00:00 2001 From: Sean Yesmunt Date: Tue, 28 Aug 2018 11:35:24 -0400 Subject: [PATCH 1/7] add spinner to related content --- src/renderer/component/recommendedContent/view.jsx | 2 ++ src/renderer/component/spinner/view.jsx | 1 + src/renderer/scss/component/_spinner.scss | 14 ++++++++++++++ yarn.lock | 4 ++-- 4 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/renderer/component/recommendedContent/view.jsx b/src/renderer/component/recommendedContent/view.jsx index 4a12aecb3..902229c47 100644 --- a/src/renderer/component/recommendedContent/view.jsx +++ b/src/renderer/component/recommendedContent/view.jsx @@ -2,6 +2,7 @@ import React from 'react'; import FileTile from 'component/fileTile'; import type { Claim } from 'types/claim'; +import Spinner from 'component/spinner'; type Props = { uri: string, @@ -65,6 +66,7 @@ export default class RecommendedContent extends React.PureComponent { {recommendedContent && !recommendedContent.length && !isSearching &&
No related content found
} + {isSearching && } ); } diff --git a/src/renderer/component/spinner/view.jsx b/src/renderer/component/spinner/view.jsx index 836971041..4d5030b83 100644 --- a/src/renderer/component/spinner/view.jsx +++ b/src/renderer/component/spinner/view.jsx @@ -19,6 +19,7 @@ const Spinner = (props: Props) => { 'spinner--dark': !light && (dark || theme === LIGHT_THEME), 'spinner--light': !dark && (light || theme === DARK_THEME), 'spinner--splash': type === 'splash', + 'spinner--small': type === 'small', })} >
diff --git a/src/renderer/scss/component/_spinner.scss b/src/renderer/scss/component/_spinner.scss index d6e4cb937..5ef690181 100644 --- a/src/renderer/scss/component/_spinner.scss +++ b/src/renderer/scss/component/_spinner.scss @@ -50,6 +50,20 @@ } } +.spinner--small { + margin: $spacing-vertical * 1/3 0; + width: 40px; + height: 32px; + text-align: center; + font-size: 10px; + + .rect { + height: 100%; + width: 3px; + margin: 0 2px; + } +} + @keyframes sk-stretchdelay { 0%, 40%, diff --git a/yarn.lock b/yarn.lock index 3b366088b..db1f53c7d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5655,9 +5655,9 @@ lazy-val@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/lazy-val/-/lazy-val-1.0.3.tgz#bb97b200ef00801d94c317e29dc6ed39e31c5edc" -lbry-redux@lbryio/lbry-redux#ccda4117ee503e30abae355c77d3783a141e9492: +lbry-redux@lbryio/lbry-redux#eae0d134d92d83f733b85a8ecebf529a6e9799cf: version "0.0.1" - resolved "https://codeload.github.com/lbryio/lbry-redux/tar.gz/ccda4117ee503e30abae355c77d3783a141e9492" + resolved "https://codeload.github.com/lbryio/lbry-redux/tar.gz/eae0d134d92d83f733b85a8ecebf529a6e9799cf" dependencies: proxy-polyfill "0.1.6" reselect "^3.0.0" From de631ac0392c8f327140b8792b1e1ff241b40756 Mon Sep 17 00:00:00 2001 From: Sean Yesmunt Date: Tue, 28 Aug 2018 16:46:50 -0400 Subject: [PATCH 2/7] fetch new rewards and properly call reward claim after view event has been fired --- src/renderer/analytics.js | 16 ++++++++++++++-- src/renderer/component/fileViewer/index.js | 4 +++- src/renderer/component/fileViewer/view.jsx | 8 +++++--- src/renderer/component/rewardSummary/index.js | 2 ++ src/renderer/component/rewardSummary/view.jsx | 2 ++ src/renderer/page/discover/index.js | 9 ++++++--- src/renderer/page/discover/view.jsx | 10 ++++++++-- 7 files changed, 40 insertions(+), 11 deletions(-) diff --git a/src/renderer/analytics.js b/src/renderer/analytics.js index 808106bfc..7ab84e448 100644 --- a/src/renderer/analytics.js +++ b/src/renderer/analytics.js @@ -44,7 +44,13 @@ const analytics: Analytics = { } analyticsEnabled = enabled; }, - apiLogView: (uri: string, outpoint: string, claimId: string, timeToStart?: number): void => { + apiLogView: ( + uri: string, + outpoint: string, + claimId: string, + timeToStart?: number, + onSuccessCb: ?() => void + ): void => { if (analyticsEnabled) { const params = { uri, @@ -56,7 +62,13 @@ const analytics: Analytics = { params.time_to_start = timeToStart; } - Lbryio.call('file', 'view', params).catch(() => {}); + Lbryio.call('file', 'view', params) + .then(() => { + if (onSuccessCb) { + onSuccessCb(); + } + }) + .catch(() => {}); } }, }; diff --git a/src/renderer/component/fileViewer/index.js b/src/renderer/component/fileViewer/index.js index 2e77b38d4..c21e5f5c1 100644 --- a/src/renderer/component/fileViewer/index.js +++ b/src/renderer/component/fileViewer/index.js @@ -4,6 +4,7 @@ import { doChangeVolume } from 'redux/actions/app'; import { selectVolume } from 'redux/selectors/app'; import { doPlayUri, doSetPlayingUri } from 'redux/actions/content'; import { doPlay, doPause, savePosition } from 'redux/actions/media'; +import { doClaimEligiblePurchaseRewards } from 'redux/actions/rewards'; import { makeSelectMetadataForUri, makeSelectContentTypeForUri, @@ -35,7 +36,7 @@ const select = (state, props) => ({ mediaPosition: makeSelectMediaPositionForUri(props.uri)(state), autoplay: makeSelectClientSetting(settings.AUTOPLAY)(state), searchBarFocused: selectSearchBarFocused(state), - fileInfoErrors: selectFileInfoErrors(state) + fileInfoErrors: selectFileInfoErrors(state), }); const perform = dispatch => ({ @@ -45,6 +46,7 @@ const perform = dispatch => ({ doPlay: () => dispatch(doPlay()), doPause: () => dispatch(doPause()), savePosition: (claimId, position) => dispatch(savePosition(claimId, position)), + claimRewards: () => dispatch(doClaimEligiblePurchaseRewards()), }); export default connect( diff --git a/src/renderer/component/fileViewer/view.jsx b/src/renderer/component/fileViewer/view.jsx index aed32f07c..3e51bab10 100644 --- a/src/renderer/component/fileViewer/view.jsx +++ b/src/renderer/component/fileViewer/view.jsx @@ -44,6 +44,7 @@ type Props = { play: string => void, searchBarFocused: boolean, mediaType: string, + claimRewards: () => void, }; class FileViewer extends React.PureComponent { @@ -169,7 +170,8 @@ class FileViewer extends React.PureComponent { } } - fireAnalyticsEvent = (claim, startTime, playTime) => { + fireAnalyticsEvent(claim, startTime, playTime) { + const { claimRewards } = this.props; const { name, claim_id: claimId, txid, nout } = claim; // ideally outpoint would exist inside of claim information @@ -181,8 +183,8 @@ class FileViewer extends React.PureComponent { timeToStart = playTime - startTime; } - analytics.apiLogView(`${name}#${claimId}`, outpoint, claimId, timeToStart); - }; + analytics.apiLogView(`${name}#${claimId}`, outpoint, claimId, timeToStart, claimRewards); + } startedPlayingCb: ?() => void; startTime: ?number; diff --git a/src/renderer/component/rewardSummary/index.js b/src/renderer/component/rewardSummary/index.js index 3ac4d29e9..331825385 100644 --- a/src/renderer/component/rewardSummary/index.js +++ b/src/renderer/component/rewardSummary/index.js @@ -1,6 +1,7 @@ import { connect } from 'react-redux'; import { selectUnclaimedRewardValue, selectFetchingRewards } from 'redux/selectors/rewards'; import { doRewardList } from 'redux/actions/rewards'; +import { doFetchRewardedContent } from 'redux/actions/content'; import RewardSummary from './view'; const select = state => ({ @@ -10,6 +11,7 @@ const select = state => ({ const perform = dispatch => ({ fetchRewards: () => dispatch(doRewardList()), + fetchRewardedContent: () => dispatch(doFetchRewardedContent()), }); export default connect( diff --git a/src/renderer/component/rewardSummary/view.jsx b/src/renderer/component/rewardSummary/view.jsx index 87b20ca6c..b849f1344 100644 --- a/src/renderer/component/rewardSummary/view.jsx +++ b/src/renderer/component/rewardSummary/view.jsx @@ -8,11 +8,13 @@ type Props = { unclaimedRewardAmount: number, fetching: boolean, fetchRewards: () => void, + fetchRewardedContent: () => void, }; class RewardSummary extends React.Component { componentDidMount() { this.props.fetchRewards(); + this.props.fetchRewardedContent(); } render() { diff --git a/src/renderer/page/discover/index.js b/src/renderer/page/discover/index.js index ea3fc0fd0..e1c16600c 100644 --- a/src/renderer/page/discover/index.js +++ b/src/renderer/page/discover/index.js @@ -1,7 +1,6 @@ -import React from 'react'; import { connect } from 'react-redux'; import { doFetchFeaturedUris } from 'redux/actions/content'; -import { selectFeaturedUris, selectFetchingFeaturedUris } from 'redux/selectors/content'; +import { selectFeaturedUris, selectFetchingFeaturedUris, doFetchRewardedContent } from 'redux/selectors/content'; import DiscoverPage from './view'; const select = state => ({ @@ -11,6 +10,10 @@ const select = state => ({ const perform = dispatch => ({ fetchFeaturedUris: () => dispatch(doFetchFeaturedUris()), + fetchRewards: () => dispatch(doFetchRewardedContent()), }); -export default connect(select, perform)(DiscoverPage); +export default connect( + select, + perform +)(DiscoverPage); diff --git a/src/renderer/page/discover/view.jsx b/src/renderer/page/discover/view.jsx index 084fbebf3..64f1e0c96 100644 --- a/src/renderer/page/discover/view.jsx +++ b/src/renderer/page/discover/view.jsx @@ -5,6 +5,7 @@ import CategoryList from 'component/categoryList'; type Props = { fetchFeaturedUris: () => void, + fetchRewards: () => void, fetchingFeaturedUris: boolean, featuredUris: {}, }; @@ -16,9 +17,14 @@ class DiscoverPage extends React.PureComponent { } componentWillMount() { - const { fetchFeaturedUris } = this.props; + const { fetchFeaturedUris, fetchRewards } = this.props; fetchFeaturedUris(); - this.continousFetch = setInterval(fetchFeaturedUris, 1000 * 60 * 60); + fetchRewards(); + + this.continousFetch = setInterval(() => { + fetchFeaturedUris(); + fetchRewards(); + }, 1000 * 60 * 60); } componentWillUnmount() { From 387a277322265f862400658eb5c3a0618171e74b Mon Sep 17 00:00:00 2001 From: Sean Yesmunt Date: Tue, 28 Aug 2018 16:51:50 -0400 Subject: [PATCH 3/7] typo --- src/renderer/page/discover/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/renderer/page/discover/index.js b/src/renderer/page/discover/index.js index e1c16600c..e567e6a73 100644 --- a/src/renderer/page/discover/index.js +++ b/src/renderer/page/discover/index.js @@ -1,6 +1,6 @@ import { connect } from 'react-redux'; -import { doFetchFeaturedUris } from 'redux/actions/content'; -import { selectFeaturedUris, selectFetchingFeaturedUris, doFetchRewardedContent } from 'redux/selectors/content'; +import { doFetchFeaturedUris, doFetchRewardedContent } from 'redux/actions/content'; +import { selectFeaturedUris, selectFetchingFeaturedUris } from 'redux/selectors/content'; import DiscoverPage from './view'; const select = state => ({ From 649c28dad69aa5606fe562cb9bd4f478bada43a6 Mon Sep 17 00:00:00 2001 From: Sean Yesmunt Date: Tue, 28 Aug 2018 17:14:52 -0400 Subject: [PATCH 4/7] bump lbry-redux --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7ca7edcaa..49f0a23ce 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ "formik": "^0.10.4", "hast-util-sanitize": "^1.1.2", "keytar": "^4.2.1", - "lbry-redux": "lbryio/lbry-redux#feffbe966fc568cef595ab66b314766261e855df", + "lbry-redux": "lbryio/lbry-redux#421321a78397251589e5a890f4caa95e79975e2b", "localforage": "^1.7.1", "mammoth": "^1.4.6", "mime": "^2.3.1", From f51ba5c6155f41a674dab30cd35e79f588d44c75 Mon Sep 17 00:00:00 2001 From: Sean Yesmunt Date: Tue, 28 Aug 2018 17:20:11 -0400 Subject: [PATCH 5/7] fix typo --- src/renderer/redux/actions/subscriptions.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/renderer/redux/actions/subscriptions.js b/src/renderer/redux/actions/subscriptions.js index 2b13840e2..0b7a39f78 100644 --- a/src/renderer/redux/actions/subscriptions.js +++ b/src/renderer/redux/actions/subscriptions.js @@ -249,8 +249,7 @@ export const doChannelSubscribe = (subscription: Subscription) => ( dispatch(doClaimRewardType(rewards.SUBSCRIPTION, { failSilently: true })); } - // should be subUri - dispatch(doCheckSubscription(subscription, true)); + dispatch(doCheckSubscription(subscription.uri, true)); }; export const doChannelUnsubscribe = (subscription: Subscription) => ( From 82f2d24dd33a9e8ec9ea227bcab515e72e26ba97 Mon Sep 17 00:00:00 2001 From: Sean Yesmunt Date: Tue, 28 Aug 2018 17:53:20 -0400 Subject: [PATCH 6/7] change name to fetchRewardedContent --- src/renderer/page/discover/index.js | 2 +- src/renderer/page/discover/view.jsx | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/renderer/page/discover/index.js b/src/renderer/page/discover/index.js index e567e6a73..6a35f0029 100644 --- a/src/renderer/page/discover/index.js +++ b/src/renderer/page/discover/index.js @@ -10,7 +10,7 @@ const select = state => ({ const perform = dispatch => ({ fetchFeaturedUris: () => dispatch(doFetchFeaturedUris()), - fetchRewards: () => dispatch(doFetchRewardedContent()), + fetchRewardedContent: () => dispatch(doFetchRewardedContent()), }); export default connect( diff --git a/src/renderer/page/discover/view.jsx b/src/renderer/page/discover/view.jsx index 64f1e0c96..4579f5394 100644 --- a/src/renderer/page/discover/view.jsx +++ b/src/renderer/page/discover/view.jsx @@ -5,7 +5,7 @@ import CategoryList from 'component/categoryList'; type Props = { fetchFeaturedUris: () => void, - fetchRewards: () => void, + fetchRewardedContent: () => void, fetchingFeaturedUris: boolean, featuredUris: {}, }; @@ -17,13 +17,13 @@ class DiscoverPage extends React.PureComponent { } componentWillMount() { - const { fetchFeaturedUris, fetchRewards } = this.props; + const { fetchFeaturedUris, fetchRewardedContent } = this.props; fetchFeaturedUris(); - fetchRewards(); + fetchRewardedContent(); this.continousFetch = setInterval(() => { fetchFeaturedUris(); - fetchRewards(); + fetchRewardedContent(); }, 1000 * 60 * 60); } From 6091bdec18896a0b6def744fffa897fd1b9ef7c5 Mon Sep 17 00:00:00 2001 From: Sean Yesmunt Date: Tue, 28 Aug 2018 17:54:23 -0400 Subject: [PATCH 7/7] remove old reward call --- src/renderer/redux/actions/content.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/renderer/redux/actions/content.js b/src/renderer/redux/actions/content.js index d0db1980b..0a4e96130 100644 --- a/src/renderer/redux/actions/content.js +++ b/src/renderer/redux/actions/content.js @@ -2,7 +2,6 @@ import * as NOTIFICATION_TYPES from 'constants/notification_types'; import { ipcRenderer } from 'electron'; import Lbryio from 'lbryio'; import { doAlertError } from 'redux/actions/app'; -import { doClaimEligiblePurchaseRewards } from 'redux/actions/rewards'; import { doNavigate } from 'redux/actions/navigation'; import { setSubscriptionLatest, @@ -230,7 +229,6 @@ export function doStartDownload(uri, outpoint) { export function doDownloadFile(uri, streamInfo) { return dispatch => { dispatch(doStartDownload(uri, streamInfo.outpoint)); - dispatch(doClaimEligiblePurchaseRewards()); }; }