diff --git a/ui/js/actions/content.js b/ui/js/actions/content.js
index a565b6e22..9b98483b9 100644
--- a/ui/js/actions/content.js
+++ b/ui/js/actions/content.js
@@ -57,66 +57,9 @@ export function doResolveUri(uri) {
export function doCancelResolveUri(uri) {
return function(dispatch, getState) {
lbry.cancelResolve({ uri })
- }
-}
-
-export function doFetchDownloadedContent() {
- return function(dispatch, getState) {
- const state = getState()
-
dispatch({
- type: types.FETCH_DOWNLOADED_CONTENT_STARTED,
- })
-
- lbry.claim_list_mine().then((myClaimInfos) => {
- lbry.file_list().then((fileInfos) => {
- const myClaimOutpoints = myClaimInfos.map(({txid, nout}) => txid + ':' + nout);
-
- fileInfos.forEach(fileInfo => {
- const uri = lbryuri.build({
- channelName: fileInfo.channel_name,
- contentName: fileInfo.name,
- })
- const claim = selectClaimsByUri(state)[uri]
- if (!claim) dispatch(doResolveUri(uri))
- })
-
- dispatch({
- type: types.FETCH_DOWNLOADED_CONTENT_COMPLETED,
- data: {
- fileInfos: fileInfos.filter(({outpoint}) => !myClaimOutpoints.includes(outpoint)),
- }
- })
- });
- });
- }
-}
-
-export function doFetchPublishedContent() {
- return function(dispatch, getState) {
- const state = getState()
-
- dispatch({
- type: types.FETCH_PUBLISHED_CONTENT_STARTED,
- })
-
- lbry.claim_list_mine().then((claimInfos) => {
- dispatch({
- type: types.FETCH_MY_CLAIMS_COMPLETED,
- data: {
- claims: claimInfos,
- }
- })
- lbry.file_list().then((fileInfos) => {
- const myClaimOutpoints = claimInfos.map(({txid, nout}) => txid + ':' + nout)
-
- dispatch({
- type: types.FETCH_PUBLISHED_CONTENT_COMPLETED,
- data: {
- fileInfos: fileInfos.filter(({outpoint}) => myClaimOutpoints.includes(outpoint)),
- }
- })
- })
+ type: types.RESOLVE_URI_CANCELED,
+ data: { uri }
})
}
}
@@ -142,10 +85,18 @@ export function doFetchFeaturedUris() {
dispatch({
type: types.FETCH_FEATURED_CONTENT_COMPLETED,
data: {
- categories: Categories,
- uris: featuredUris,
+ categories: ["FOO"],
+ uris: { FOO: ["lbry://gtasoc"]},
}
})
+
+ // dispatch({
+ // type: types.FETCH_FEATURED_CONTENT_COMPLETED,
+ // data: {
+ // categories: Categories,
+ // uris: featuredUris,
+ // }
+ // })
}
const failure = () => {
@@ -182,6 +133,7 @@ export function doUpdateLoadStatus(uri, outpoint) {
type: types.DOWNLOADING_COMPLETED,
data: {
uri,
+ outpoint,
fileInfo,
}
})
@@ -197,6 +149,7 @@ export function doUpdateLoadStatus(uri, outpoint) {
type: types.DOWNLOADING_PROGRESSED,
data: {
uri,
+ outpoint,
fileInfo,
progress,
}
@@ -216,6 +169,7 @@ export function doDownloadFile(uri, streamInfo) {
type: types.DOWNLOADING_STARTED,
data: {
uri,
+ outpoint: streamInfo.outpoint,
fileInfo,
}
})
diff --git a/ui/js/actions/cost_info.js b/ui/js/actions/cost_info.js
index b0f6af6d7..79ff4bdd5 100644
--- a/ui/js/actions/cost_info.js
+++ b/ui/js/actions/cost_info.js
@@ -1,6 +1,12 @@
import * as types from 'constants/action_types'
import lbry from 'lbry'
import lbryio from 'lbryio'
+import {
+ doResolveUri
+} from 'actions/content'
+import {
+ selectResolvingUris,
+} from 'selectors/content'
import {
selectClaimsByUri
} from 'selectors/claims'
@@ -12,21 +18,23 @@ export function doFetchCostInfoForUri(uri) {
return function(dispatch, getState) {
const state = getState(),
claim = selectClaimsByUri(state)[uri],
+ isResolving = selectResolvingUris(state).indexOf(uri) !== -1,
isGenerous = selectSettingsIsGenerous(state)
- //
- // function getCostGenerous(uri) {
- // console.log('get cost generous: ' + uri)
- // // If generous is on, the calculation is simple enough that we might as well do it here in the front end
- // lbry.resolve({uri: uri}).then((resolutionInfo) => {
- // console.log('resolve inside getCostGenerous ' + uri)
- // console.log(resolutionInfo)
- // if (!resolutionInfo) {
- // return reject(new Error("Unused URI"));
- // }
+ if (claim === null) { //claim doesn't exist, nothing to fetch a cost for
+ return
+ }
+
+ if (!claim) {
+ setTimeout(() => {
+ dispatch(doFetchCostInfoForUri(uri))
+ }, 1000)
+ if (!isResolving) {
+ dispatch(doResolveUri(uri))
+ }
+ return
+ }
- // });
- // }
function begin() {
dispatch({
diff --git a/ui/js/actions/file_info.js b/ui/js/actions/file_info.js
index f7d2b08f3..8a187c2a4 100644
--- a/ui/js/actions/file_info.js
+++ b/ui/js/actions/file_info.js
@@ -4,6 +4,8 @@ import {
selectClaimsByUri,
} from 'selectors/claims'
import {
+ selectIsFileListPending,
+ selectAllFileInfos,
selectLoadingByUri,
} from 'selectors/file_info'
import {
@@ -25,7 +27,6 @@ export function doFetchFileInfo(uri) {
dispatch({
type: types.FETCH_FILE_INFO_STARTED,
data: {
- uri,
outpoint,
}
})
@@ -34,7 +35,7 @@ export function doFetchFileInfo(uri) {
dispatch({
type: types.FETCH_FILE_INFO_COMPLETED,
data: {
- uri,
+ outpoint,
fileInfo,
}
})
@@ -43,6 +44,28 @@ export function doFetchFileInfo(uri) {
}
}
+export function doFileList(uri) {
+ return function(dispatch, getState) {
+ const state = getState()
+ const isPending = selectIsFileListPending(state)
+
+ if (!isPending) {
+ dispatch({
+ type: types.FILE_LIST_STARTED,
+ })
+
+ lbry.file_list().then((fileInfos) => {
+ dispatch({
+ type: types.FILE_LIST_COMPLETED,
+ data: {
+ fileInfos,
+ }
+ })
+ })
+ }
+ }
+}
+
export function doOpenFileInShell(fileInfo) {
return function(dispatch, getState) {
shell.openItem(fileInfo.download_path)
@@ -80,26 +103,56 @@ export function doDeleteFile(uri, fileInfo, deleteFromComputer) {
}
}
+
export function doFetchDownloadedContent() {
return function(dispatch, getState) {
- const state = getState()
+ const state = getState(),
+ fileInfos = selectAllFileInfos(state)
dispatch({
type: types.FETCH_DOWNLOADED_CONTENT_STARTED,
})
lbry.claim_list_mine().then((myClaimInfos) => {
- lbry.file_list().then((fileInfos) => {
- const myClaimOutpoints = myClaimInfos.map(({txid, nout}) => txid + ':' + nout);
- dispatch({
- type: types.FETCH_DOWNLOADED_CONTENT_COMPLETED,
- data: {
- fileInfos: fileInfos.filter(({outpoint}) => !myClaimOutpoints.includes(outpoint)),
- }
- })
- });
+ const myClaimOutpoints = myClaimInfos.map(({txid, nout}) => txid + ':' + nout);
+
+ dispatch({
+ type: types.FETCH_DOWNLOADED_CONTENT_COMPLETED,
+ data: {
+ fileInfos: fileInfos.filter(({outpoint}) => !myClaimOutpoints.includes(outpoint)),
+ }
+ })
});
}
}
+export function doFetchPublishedContent() {
+ return function(dispatch, getState) {
+ const state = getState(),
+ fileInfos = selectAllFileInfos(state)
+
+ dispatch({
+ type: types.FETCH_PUBLISHED_CONTENT_STARTED,
+ })
+
+ lbry.claim_list_mine().then((claimInfos) => {
+ dispatch({
+ type: types.FETCH_MY_CLAIMS_COMPLETED,
+ data: {
+ claims: claimInfos,
+ }
+ })
+
+ const myClaimOutpoints = claimInfos.map(({txid, nout}) => txid + ':' + nout)
+
+ dispatch({
+ type: types.FETCH_PUBLISHED_CONTENT_COMPLETED,
+ data: {
+ fileInfos: fileInfos.filter(({outpoint}) => myClaimOutpoints.includes(outpoint)),
+ }
+ })
+ })
+ }
+}
+
diff --git a/ui/js/component/auth.js b/ui/js/component/auth.js
index 261b065b1..7b934f339 100644
--- a/ui/js/component/auth.js
+++ b/ui/js/component/auth.js
@@ -200,7 +200,7 @@ const CodeRequiredStage = React.createClass({
})
if (!this.state.address) {
- lbry.getUnusedAddress((address) => {
+ lbry.wallet_unused_address().then((address) => {
setLocal('wallet_address', address);
this.setState({ address: address });
});
diff --git a/ui/js/component/fileActions/view.jsx b/ui/js/component/fileActions/view.jsx
index ec2b93587..3f7c7561a 100644
--- a/ui/js/component/fileActions/view.jsx
+++ b/ui/js/component/fileActions/view.jsx
@@ -72,9 +72,6 @@ class FileActions extends React.Component {
let content
- console.log('file actions render')
- console.log(this.props)
-
if (!fileInfo && isAvailable === undefined) {
content =
diff --git a/ui/js/component/fileCard/index.js b/ui/js/component/fileCard/index.js
index e3e11057e..89ebc5040 100644
--- a/ui/js/component/fileCard/index.js
+++ b/ui/js/component/fileCard/index.js
@@ -34,7 +34,6 @@ const makeSelect = () => {
claim: selectClaimForUri(state, props),
fileInfo: selectFileInfoForUri(state, props),
obscureNsfw: selectObscureNsfw(state),
- hasSignature: false,
metadata: selectMetadataForUri(state, props),
isResolvingUri: selectResolvingUri(state, props),
})
diff --git a/ui/js/component/fileCard/view.jsx b/ui/js/component/fileCard/view.jsx
index 1b721a703..918476a53 100644
--- a/ui/js/component/fileCard/view.jsx
+++ b/ui/js/component/fileCard/view.jsx
@@ -2,12 +2,12 @@ import React from 'react';
import lbry from 'lbry.js';
import lbryuri from 'lbryuri.js';
import Link from 'component/link';
-import {Thumbnail, TruncatedText,} from 'component/common';
+import {Thumbnail, TruncatedText, Icon} from 'component/common';
import FilePrice from 'component/filePrice'
import UriIndicator from 'component/uriIndicator';
class FileCard extends React.Component {
- componentDidMount() {
+ componentWillMount() {
this.resolve(this.props)
}
@@ -29,7 +29,15 @@ class FileCard extends React.Component {
}
componentWillUnmount() {
- this.props.cancelResolveUri(this.props.uri)
+ const {
+ isResolvingUri,
+ cancelResolveUri,
+ uri
+ } = this.props
+
+ if (isResolvingUri) {
+ cancelResolveUri(uri)
+ }
}
handleMouseOver() {
@@ -47,6 +55,8 @@ class FileCard extends React.Component {
render() {
const {
+ claim,
+ fileInfo,
metadata,
isResolvingUri,
navigate,
@@ -61,6 +71,8 @@ class FileCard extends React.Component {
description = "Loading..."
} else if (metadata && metadata.description) {
description = metadata.description
+ } else if (claim === null) {
+ description = 'This address contains no content.'
}
return (
@@ -70,7 +82,10 @@ class FileCard extends React.Component {
{title}
- { !isResolvingUri && }
+
+
+ { fileInfo ? {' '} : '' }
+
diff --git a/ui/js/component/filePrice/index.js b/ui/js/component/filePrice/index.js
index 4c8bf9b7a..726ceb3ee 100644
--- a/ui/js/component/filePrice/index.js
+++ b/ui/js/component/filePrice/index.js
@@ -12,6 +12,7 @@ import FilePrice from './view'
const makeSelect = () => {
const selectCostInfoForUri = makeSelectCostInfoForUri()
+
const select = (state, props) => ({
costInfo: selectCostInfoForUri(state, props),
})
diff --git a/ui/js/component/filePrice/view.jsx b/ui/js/component/filePrice/view.jsx
index 56174c8a2..4edc3a3e7 100644
--- a/ui/js/component/filePrice/view.jsx
+++ b/ui/js/component/filePrice/view.jsx
@@ -4,7 +4,7 @@ import {
} from 'component/common'
class FilePrice extends React.Component{
- componentDidMount() {
+ componentWillMount() {
this.fetchCost(this.props)
}
diff --git a/ui/js/component/fileTile/view.jsx b/ui/js/component/fileTile/view.jsx
index c015c6327..250bf6296 100644
--- a/ui/js/component/fileTile/view.jsx
+++ b/ui/js/component/fileTile/view.jsx
@@ -13,11 +13,8 @@ class FileTile extends React.Component {
constructor(props) {
super(props)
- this._fileInfoSubscribeId = null
- this._isMounted = null
this.state = {
showNsfwHelp: false,
- isHidden: false,
}
}
@@ -29,31 +26,11 @@ class FileTile extends React.Component {
uri,
} = this.props
- this._isMounted = true;
-
- if (this.props.hideOnRemove) {
- this._fileInfoSubscribeId = lbry.fileInfoSubscribe(this.props.outpoint, this.onFileInfoUpdate);
- }
-
if(!isResolvingUri && !claim && uri) {
resolveUri(uri)
}
}
- componentWillUnmount() {
- if (this._fileInfoSubscribeId) {
- lbry.fileInfoUnsubscribe(this.props.outpoint, this._fileInfoSubscribeId);
- }
- }
-
- onFileInfoUpdate(fileInfo) {
- if (!fileInfo && this._isMounted && this.props.hideOnRemove) {
- this.setState({
- isHidden: true
- });
- }
- }
-
handleMouseOver() {
if (this.props.obscureNsfw && this.props.metadata && this.props.metadata.nsfw) {
this.setState({
@@ -71,10 +48,6 @@ class FileTile extends React.Component {
}
render() {
- if (this.state.isHidden) {
- return null;
- }
-
const {
claim,
metadata,
diff --git a/ui/js/component/video/view.jsx b/ui/js/component/video/view.jsx
index e4502f8d2..3559a728e 100644
--- a/ui/js/component/video/view.jsx
+++ b/ui/js/component/video/view.jsx
@@ -11,7 +11,7 @@ class VideoPlayButton extends React.Component {
}
onWatchClick() {
- console.log(this.props)
+ console.log(this)
this.props.purchaseUri(this.props.uri).then(() => {
if (!this.props.modal) {
this.props.startPlaying()
@@ -24,7 +24,6 @@ class VideoPlayButton extends React.Component {
button,
label,
className,
- onWatchClick,
metadata,
metadata: {
title,
@@ -51,7 +50,7 @@ class VideoPlayButton extends React.Component {
label={label ? label : ""}
className="video__play-button"
icon="icon-play"
- onClick={this.onWatchClick} />
+ onClick={this.onWatchClick.bind(this)} />
{modal}
You don't have enough LBRY credits to pay for this stream.
@@ -142,11 +141,9 @@ class VideoPlayer extends React.Component {
poster,
} = this.props
- //
-
return (
)
}
diff --git a/ui/js/constants/action_types.js b/ui/js/constants/action_types.js
index a12b9ad8f..2d548bc48 100644
--- a/ui/js/constants/action_types.js
+++ b/ui/js/constants/action_types.js
@@ -35,8 +35,11 @@ export const FETCH_FEATURED_CONTENT_STARTED = 'FETCH_FEATURED_CONTENT_STARTED'
export const FETCH_FEATURED_CONTENT_COMPLETED = 'FETCH_FEATURED_CONTENT_COMPLETED'
export const RESOLVE_URI_STARTED = 'RESOLVE_URI_STARTED'
export const RESOLVE_URI_COMPLETED = 'RESOLVE_URI_COMPLETED'
+export const RESOLVE_URI_CANCELED = 'RESOLVE_URI_CANCELED'
export const FETCH_CHANNEL_CLAIMS_STARTED = 'FETCH_CHANNEL_CLAIMS_STARTED'
export const FETCH_CHANNEL_CLAIMS_COMPLETED = 'FETCH_CHANNEL_CLAIMS_COMPLETED'
+export const FILE_LIST_STARTED = 'FILE_LIST_STARTED'
+export const FILE_LIST_COMPLETED = 'FILE_LIST_COMPLETED'
export const FETCH_DOWNLOADED_CONTENT_STARTED = 'FETCH_DOWNLOADED_CONTENT_STARTED'
export const FETCH_DOWNLOADED_CONTENT_COMPLETED = 'FETCH_DOWNLOADED_CONTENT_COMPLETED'
export const FETCH_PUBLISHED_CONTENT_STARTED = 'FETCH_PUBLISHED_CONTENT_STARTED'
diff --git a/ui/js/lbry.js b/ui/js/lbry.js
index cb00c1560..ad7e7b6bd 100644
--- a/ui/js/lbry.js
+++ b/ui/js/lbry.js
@@ -151,14 +151,6 @@ lbry.isDaemonAcceptingConnections = function (callback) {
lbry.call('status', {}, () => callback(true), null, () => callback(false))
};
-lbry.checkFirstRun = function(callback) {
- lbry.call('is_first_run', {}, callback);
-}
-
-lbry.getUnusedAddress = function(callback) {
- lbry.call('wallet_unused_address', {}, callback);
-}
-
lbry.checkAddressIsMine = function(address, callback) {
lbry.call('address_is_mine', {address: address}, callback);
}
@@ -167,108 +159,12 @@ lbry.sendToAddress = function(amount, address, callback, errorCallback) {
lbry.call("send_amount_to_address", { "amount" : amount, "address": address }, callback, errorCallback);
}
-lbry.getClaimInfo = function(name, callback) {
- if (!name) {
- throw new Error(`Name required.`);
- }
- lbry.call('get_claim_info', { name: name }, callback);
-}
-
lbry.getMyClaim = function(name, callback) {
lbry.call('claim_list_mine', {}, (claims) => {
callback(claims.find((claim) => claim.name == name) || null);
});
}
-lbry.getPeersForBlobHash = function(blobHash, callback) {
- let timedOut = false;
- const timeout = setTimeout(() => {
- timedOut = true;
- callback([]);
- }, lbry.peerListTimeout);
-
- lbry.call('peer_list', { blob_hash: blobHash }, function(peers) {
- if (!timedOut) {
- clearTimeout(timeout);
- callback(peers);
- }
- });
-}
-//
-// lbry.costPromiseCache = {}
-// lbry.getCostInfo = function(uri) {
-// if (lbry.costPromiseCache[uri] === undefined) {
-// lbry.costPromiseCache[uri] = new Promise((resolve, reject) => {
-// const COST_INFO_CACHE_KEY = 'cost_info_cache';
-// let costInfoCache = getSession(COST_INFO_CACHE_KEY, {})
-//
-// function cacheAndResolve(cost, includesData) {
-// console.log('getCostInfo cacheAndResolve ' + uri)
-// console.log(cost)
-// costInfoCache[uri] = {cost, includesData};
-// setSession(COST_INFO_CACHE_KEY, costInfoCache);
-// resolve({cost, includesData});
-// }
-//
-// if (!uri) {
-// return reject(new Error(`URI required.`));
-// }
-//
-// if (costInfoCache[uri] && costInfoCache[uri].cost) {
-// return resolve(costInfoCache[uri])
-// }
-//
-// function getCost(uri, size) {
-// lbry.stream_cost_estimate({uri, ... size !== null ? {size} : {}}).then((cost) => {
-// cacheAndResolve(cost, size !== null);
-// }, reject);
-// }
-//
-// function getCostGenerous(uri) {
-// console.log('get cost generous: ' + uri)
-// // If generous is on, the calculation is simple enough that we might as well do it here in the front end
-// lbry.resolve({uri: uri}).then((resolutionInfo) => {
-// console.log('resolve inside getCostGenerous ' + uri)
-// console.log(resolutionInfo)
-// if (!resolutionInfo) {
-// return reject(new Error("Unused URI"));
-// }
-// const fee = resolutionInfo.claim.value.stream.metadata.fee;
-// if (fee === undefined) {
-// cacheAndResolve(0, true);
-// } else if (fee.currency == 'LBC') {
-// cacheAndResolve(fee.amount, true);
-// } else {
-// lbryio.getExchangeRates().then(({lbc_usd}) => {
-// cacheAndResolve(fee.amount / lbc_usd, true);
-// });
-// }
-// });
-// }
-//
-// const uriObj = lbryuri.parse(uri);
-// const name = uriObj.path || uriObj.name;
-//
-// lbry.settings_get({allow_cached: true}).then(({is_generous_host}) => {
-// if (is_generous_host) {
-// return getCostGenerous(uri);
-// }
-//
-// lighthouse.get_size_for_name(name).then((size) => {
-// if (size) {
-// getCost(name, size);
-// }
-// else {
-// getCost(name, null);
-// }
-// }, () => {
-// getCost(name, null);
-// });
-// });
-// });
-// }
-// return lbry.costPromiseCache[uri];
-// }
/**
* Takes a LBRY URI; will first try and calculate a total cost using
* Lighthouse. If Lighthouse can't be reached, it just retrives the
@@ -287,8 +183,6 @@ lbry.getCostInfo = function(uri) {
let costInfoCache = getSession(COST_INFO_CACHE_KEY, {})
function cacheAndResolve(cost, includesData) {
- console.log('getCostInfo cacheAndResolve ' + uri)
- console.log(cost)
costInfoCache[uri] = {cost, includesData};
setSession(COST_INFO_CACHE_KEY, costInfoCache);
resolve({cost, includesData});
@@ -509,10 +403,7 @@ lbry.stop = function(callback) {
lbry.call('stop', {}, callback);
};
-lbry.fileInfo = {};
lbry._subscribeIdCount = 0;
-lbry._fileInfoSubscribeCallbacks = {};
-lbry._fileInfoSubscribeInterval = 500000;
lbry._balanceSubscribeCallbacks = {};
lbry._balanceSubscribeInterval = 5000;
lbry._removedFiles = [];
@@ -527,54 +418,6 @@ lbry._updateClaimOwnershipCache = function(claimId) {
};
-lbry._updateFileInfoSubscribers = function(outpoint) {
- const callSubscribedCallbacks = (outpoint, fileInfo) => {
- for (let callback of Object.values(this._fileInfoSubscribeCallbacks[outpoint])) {
- callback(fileInfo);
- }
- }
-
- if (lbry._removedFiles.includes(outpoint)) {
- callSubscribedCallbacks(outpoint, false);
- } else {
- lbry.file_list({
- outpoint: outpoint,
- full_status: true,
- }).then(([fileInfo]) => {
- if (fileInfo) {
- if (this._claimIdOwnershipCache[fileInfo.claim_id] === undefined) {
- this._updateClaimOwnershipCache(fileInfo.claim_id);
- }
- fileInfo.isMine = !!this._claimIdOwnershipCache[fileInfo.claim_id];
- }
-
- callSubscribedCallbacks(outpoint, fileInfo);
- });
- }
-
- if (Object.keys(this._fileInfoSubscribeCallbacks[outpoint]).length) {
- setTimeout(() => {
- this._updateFileInfoSubscribers(outpoint);
- }, lbry._fileInfoSubscribeInterval);
- }
-}
-
-lbry.fileInfoSubscribe = function(outpoint, callback) {
- if (!lbry._fileInfoSubscribeCallbacks[outpoint])
- {
- lbry._fileInfoSubscribeCallbacks[outpoint] = {};
- }
-
- const subscribeId = ++lbry._subscribeIdCount;
- lbry._fileInfoSubscribeCallbacks[outpoint][subscribeId] = callback;
- lbry._updateFileInfoSubscribers(outpoint);
- return subscribeId;
-}
-
-lbry.fileInfoUnsubscribe = function(outpoint, subscribeId) {
- delete lbry._fileInfoSubscribeCallbacks[outpoint][subscribeId];
-}
-
lbry._balanceUpdateInterval = null;
lbry._updateBalanceSubscribers = function() {
lbry.get_balance().then(function(balance) {
diff --git a/ui/js/main.js b/ui/js/main.js
index d4bc2c273..a52e4b943 100644
--- a/ui/js/main.js
+++ b/ui/js/main.js
@@ -17,6 +17,9 @@ import {
import {
doFetchDaemonSettings
} from 'actions/settings'
+import {
+ doFileList
+} from 'actions/file_info'
import parseQueryParams from 'util/query_params'
const {remote, ipcRenderer} = require('electron');
@@ -56,6 +59,7 @@ var init = function() {
window.sessionStorage.setItem('loaded', 'y'); //once we've made it here once per session, we don't need to show splash again
app.store.dispatch(doHistoryPush({}, "Discover", "/discover"))
app.store.dispatch(doFetchDaemonSettings())
+ app.store.dispatch(doFileList())
ReactDOM.render({ lbryio.enabled ?
: '' }
, canvas)
}
diff --git a/ui/js/page/fileListDownloaded/index.js b/ui/js/page/fileListDownloaded/index.js
index 7ab01ab9c..7122ff5fd 100644
--- a/ui/js/page/fileListDownloaded/index.js
+++ b/ui/js/page/fileListDownloaded/index.js
@@ -4,12 +4,10 @@ import {
} from 'react-redux'
import {
doFetchDownloadedContent,
-} from 'actions/content'
-import {
- selectFetchingDownloadedContent,
-} from 'selectors/content'
+} from 'actions/file_info'
import {
selectDownloadedFileInfo,
+ selectFetchingDownloadedContent,
} from 'selectors/file_info'
import {
doNavigate,
diff --git a/ui/js/page/publish/view.jsx b/ui/js/page/publish/view.jsx
index 7a6e4806f..cb0b152b6 100644
--- a/ui/js/page/publish/view.jsx
+++ b/ui/js/page/publish/view.jsx
@@ -100,7 +100,7 @@ var PublishPage = React.createClass({
};
if (this.state.isFee) {
- lbry.getUnusedAddress((address) => {
+ lbry.wallet_unused_address().then((address) => {
metadata.fee = {};
metadata.fee[this.state.feeCurrency] = {
amount: parseFloat(this.state.feeAmount),
diff --git a/ui/js/page/showPage/view.jsx b/ui/js/page/showPage/view.jsx
index c1358c446..0d0b0da5e 100644
--- a/ui/js/page/showPage/view.jsx
+++ b/ui/js/page/showPage/view.jsx
@@ -21,6 +21,8 @@ class ShowPage extends React.Component{
uri,
} = props
+ console.log('show page resolve ' + uri)
+ console.log('isResolving: ' + isResolvingUri)
if(!isResolvingUri && claim === undefined && uri) {
resolveUri(uri)
}
diff --git a/ui/js/reducers/claims.js b/ui/js/reducers/claims.js
index 683f52ef1..b8885d98a 100644
--- a/ui/js/reducers/claims.js
+++ b/ui/js/reducers/claims.js
@@ -14,9 +14,7 @@ reducers[types.RESOLVE_URI_COMPLETED] = function(state, action) {
const newClaims = Object.assign({}, state.claimsByUri)
- if (claim !== undefined) {
- newClaims[uri] = claim
- }
+ newClaims[uri] = claim
//This needs a sanity boost...
if (certificate !== undefined && claim === undefined) {
@@ -32,6 +30,15 @@ reducers[types.RESOLVE_URI_COMPLETED] = function(state, action) {
})
}
+reducers[types.RESOLVE_URI_CANCELED] = function(state, action) {
+ const uri = action.data.uri
+ const newClaims = Object.assign({}, state.claimsByUri)
+ delete newClaims[uri]
+ return Object.assign({}, state, {
+ claimsByUri: newClaims
+ })
+}
+
reducers[types.FETCH_CHANNEL_CLAIMS_COMPLETED] = function(state, action) {
const {
uri,
diff --git a/ui/js/reducers/content.js b/ui/js/reducers/content.js
index 8fee4c234..117b6c830 100644
--- a/ui/js/reducers/content.js
+++ b/ui/js/reducers/content.js
@@ -30,7 +30,7 @@ reducers[types.RESOLVE_URI_STARTED] = function(state, action) {
const oldResolving = state.resolvingUris || []
const newResolving = Object.assign([], oldResolving)
- if (newResolving.indexOf(uri) == -1) newResolving.push(uri)
+ if (newResolving.indexOf(uri) === -1) newResolving.push(uri)
return Object.assign({}, state, {
resolvingUris: newResolving
@@ -48,51 +48,14 @@ reducers[types.RESOLVE_URI_COMPLETED] = function(state, action) {
...resolvingUris.slice(index + 1)
]
- const newState = Object.assign({}, state, {
+ return Object.assign({}, state, {
resolvingUris: newResolvingUris,
})
-
- return Object.assign({}, state, newState)
}
-reducers[types.FETCH_DOWNLOADED_CONTENT_STARTED] = function(state, action) {
- return Object.assign({}, state, {
- fetchingDownloadedContent: true,
- })
-}
-reducers[types.FETCH_DOWNLOADED_CONTENT_COMPLETED] = function(state, action) {
- const {
- fileInfos
- } = action.data
- const newDownloadedContent = Object.assign({}, state.downloadedContent, {
- fileInfos
- })
-
- return Object.assign({}, state, {
- downloadedContent: newDownloadedContent,
- fetchingDownloadedContent: false,
- })
-}
-
-reducers[types.FETCH_PUBLISHED_CONTENT_STARTED] = function(state, action) {
- return Object.assign({}, state, {
- fetchingPublishedContent: true,
- })
-}
-
-reducers[types.FETCH_PUBLISHED_CONTENT_COMPLETED] = function(state, action) {
- const {
- fileInfos
- } = action.data
- const newPublishedContent = Object.assign({}, state.publishedContent, {
- fileInfos
- })
-
- return Object.assign({}, state, {
- publishedContent: newPublishedContent,
- fetchingPublishedContent: false,
- })
+reducers[types.RESOLVE_URI_CANCELED] = function(state, action) {
+ return reducers[types.RESOLVE_URI_COMPLETED](state, action)
}
export default function reducer(state = defaultState, action) {
diff --git a/ui/js/reducers/file_info.js b/ui/js/reducers/file_info.js
index 951b0f213..affd4103d 100644
--- a/ui/js/reducers/file_info.js
+++ b/ui/js/reducers/file_info.js
@@ -5,13 +5,35 @@ const reducers = {}
const defaultState = {
}
+reducers[types.FILE_LIST_STARTED] = function(state, action) {
+ return Object.assign({}, state, {
+ isFileListPending: true,
+ })
+}
+
+reducers[types.FILE_LIST_COMPLETED] = function(state, action) {
+ const {
+ fileInfos,
+ } = action.data
+
+ const newFileInfos = Object.assign({}, state.fileInfos)
+ fileInfos.forEach((fileInfo) => {
+ newFileInfos[fileInfo.outpoint] = fileInfo
+ })
+
+ return Object.assign({}, state, {
+ isFileListPending: false,
+ fileInfos: newFileInfos
+ })
+}
+
reducers[types.FETCH_FILE_INFO_STARTED] = function(state, action) {
const {
- uri,
+ outpoint
} = action.data
const newFetching = Object.assign({}, state.fetching)
- newFetching[uri] = true
+ newFetching[outpoint] = true
return Object.assign({}, state, {
fetching: newFetching,
@@ -20,19 +42,18 @@ reducers[types.FETCH_FILE_INFO_STARTED] = function(state, action) {
reducers[types.FETCH_FILE_INFO_COMPLETED] = function(state, action) {
const {
- uri,
fileInfo,
+ outpoint,
} = action.data
- const newByUri = Object.assign({}, state.byUri)
+ const newFileInfos = Object.assign({}, state.fileInfos)
const newFetching = Object.assign({}, state.fetching)
- newByUri[uri] = fileInfo || null
-
- delete newFetching[uri]
+ newFileInfos[outpoint] = fileInfo
+ delete newFetching[outpoint]
return Object.assign({}, state, {
- byUri: newByUri,
+ fileInfos: newFileInfos,
fetching: newFetching,
})
}
@@ -40,9 +61,10 @@ reducers[types.FETCH_FILE_INFO_COMPLETED] = function(state, action) {
reducers[types.DOWNLOADING_STARTED] = function(state, action) {
const {
uri,
+ outpoint,
fileInfo,
} = action.data
- const newByUri = Object.assign({}, state.byUri)
+ const newFileInfos = Object.assign({}, state.fileInfos)
const newDownloading = Object.assign({}, state.downloading)
const newDownloadingByUri = Object.assign({}, newDownloading.byUri)
const newLoading = Object.assign({}, state.loading)
@@ -50,13 +72,13 @@ reducers[types.DOWNLOADING_STARTED] = function(state, action) {
newDownloadingByUri[uri] = true
newDownloading.byUri = newDownloadingByUri
- newByUri[uri] = fileInfo
+ newFileInfos[outpoint] = fileInfo
delete newLoadingByUri[uri]
newLoading.byUri = newLoadingByUri
return Object.assign({}, state, {
downloading: newDownloading,
- byUri: newByUri,
+ fileInfos: newFileInfos,
loading: newLoading,
})
}
@@ -64,16 +86,17 @@ reducers[types.DOWNLOADING_STARTED] = function(state, action) {
reducers[types.DOWNLOADING_PROGRESSED] = function(state, action) {
const {
uri,
+ outpoint,
fileInfo,
} = action.data
- const newByUri = Object.assign({}, state.byUri)
+ const newFileInfos = Object.assign({}, state.fileInfos)
const newDownloading = Object.assign({}, state.downloading)
- newByUri[uri] = fileInfo
+ newFileInfos[outpoint] = fileInfo
newDownloading[uri] = true
return Object.assign({}, state, {
- byUri: newByUri,
+ fileInfos: newByUri,
downloading: newDownloading
})
}
@@ -81,31 +104,32 @@ reducers[types.DOWNLOADING_PROGRESSED] = function(state, action) {
reducers[types.DOWNLOADING_COMPLETED] = function(state, action) {
const {
uri,
+ outpoint,
fileInfo,
} = action.data
- const newByUri = Object.assign({}, state.byUri)
+ const newFileInfos = Object.assign({}, state.fileInfos)
const newDownloading = Object.assign({}, state.downloading)
const newDownloadingByUri = Object.assign({}, newDownloading.byUri)
- newByUri[uri] = fileInfo
+ newFileInfos[outpoint] = fileInfo
delete newDownloadingByUri[uri]
newDownloading.byUri = newDownloadingByUri
return Object.assign({}, state, {
- byUri: newByUri,
+ fileInfos: newFileInfos,
downloading: newDownloading,
})
}
reducers[types.DELETE_FILE_STARTED] = function(state, action) {
const {
- uri,
+ outpoint
} = action.data
const newDeleting = Object.assign({}, state.deleting)
const newByUri = Object.assign({}, newDeleting.byUri)
- newByUri[uri] = true
- newDeleting.byUri = newByUri
+ newFileInfos[outpoint] = true
+ newDeleting.byUri = newFileInfos
return Object.assign({}, state, {
deleting: newDeleting,
@@ -118,15 +142,15 @@ reducers[types.DELETE_FILE_COMPLETED] = function(state, action) {
} = action.data
const newDeleting = Object.assign({}, state.deleting)
const newDeletingByUri = Object.assign({}, newDeleting.byUri)
- const newByUri = Object.assign({}, state.byUri)
+ const newFileInfos = Object.assign({}, state.fileInfos)
delete newDeletingByUri[uri]
newDeleting.byUri = newDeletingByUri
- delete newByUri[uri]
+ delete newFileInfos[outpoint]
return Object.assign({}, state, {
deleting: newDeleting,
- byUri: newByUri,
+ fileInfos: newFileInfos,
})
}
@@ -135,10 +159,10 @@ reducers[types.LOADING_VIDEO_STARTED] = function(state, action) {
uri,
} = action.data
const newLoading = Object.assign({}, state.loading)
- const newByUri = Object.assign({}, newLoading.byUri)
+ const newFileInfos = Object.assign({}, newLoading.byUri)
- newByUri[uri] = true
- newLoading.byUri = newByUri
+ newFileInfos[outpoint] = true
+ newLoading.byUri = newFileInfos
return Object.assign({}, state, {
loading: newLoading,
@@ -150,33 +174,38 @@ reducers[types.LOADING_VIDEO_FAILED] = function(state, action) {
uri,
} = action.data
const newLoading = Object.assign({}, state.loading)
- const newByUri = Object.assign({}, newLoading.byUri)
+ const newFileInfos = Object.assign({}, newLoading.byUri)
- delete newByUri[uri]
- newLoading.byUri = newByUri
+ delete newFileInfos[outpoint]
+ newLoading.byUri = newFileInfos
return Object.assign({}, state, {
loading: newLoading,
})
}
+reducers[types.FETCH_DOWNLOADED_CONTENT_STARTED] = function(state, action) {
+ return Object.assign({}, state, {
+ fetchingDownloadedContent: true,
+ })
+}
+
reducers[types.FETCH_DOWNLOADED_CONTENT_COMPLETED] = function(state, action) {
- const {
- fileInfos,
- } = action.data
- const newByUri = Object.assign({}, state.byUri)
+ const newFileInfos = Object.assign({}, state.fileInfos)
- fileInfos.forEach(fileInfo => {
- const uri = lbryuri.build({
- channelName: fileInfo.channel_name,
- contentName: fileInfo.name,
- })
-
- newByUri[uri] = fileInfo
+ action.data.fileInfos.forEach(fileInfo => {
+ newFileInfos[fileInfo.outpoint] = fileInfo
})
return Object.assign({}, state, {
- byUri: newByUri
+ fileInfos: newFileInfos,
+ fetchingDownloadedContent: false
+ })
+}
+
+reducers[types.FETCH_PUBLISHED_CONTENT_STARTED] = function(state, action) {
+ return Object.assign({}, state, {
+ fetchingPublishedContent: true,
})
}
@@ -184,23 +213,20 @@ reducers[types.FETCH_PUBLISHED_CONTENT_COMPLETED] = function(state, action) {
const {
fileInfos
} = action.data
- const newByUri = Object.assign({}, state.byUri)
+ const newFileInfos = Object.assign({}, state.fileInfos)
fileInfos.forEach(fileInfo => {
- const uri = lbryuri.build({
- channelName: fileInfo.channel_name,
- contentName: fileInfo.name,
- })
-
- newByUri[uri] = fileInfo
+ newFileInfos[fileInfo.outpoint] = fileInfo
})
return Object.assign({}, state, {
- byUri: newByUri
+ fileInfos: newFileInfos,
+ fetchingPublishedContent: false
})
}
+
export default function reducer(state = defaultState, action) {
const handler = reducers[action.type];
if (handler) return handler(state, action);
diff --git a/ui/js/selectors/content.js b/ui/js/selectors/content.js
index 22476b229..61efa2e1f 100644
--- a/ui/js/selectors/content.js
+++ b/ui/js/selectors/content.js
@@ -16,32 +16,6 @@ export const selectFetchingFeaturedUris = createSelector(
(state) => !!state.fetchingFeaturedContent
)
-
-export const selectFetchingDownloadedContent = createSelector(
- _selectState,
- (state) => !!state.fetchingDownloadedContent
-)
-
-export const selectDownloadedContent = createSelector(
- _selectState,
- (state) => state.downloadedContent || {}
-)
-
-export const selectDownloadedContentFileInfos = createSelector(
- selectDownloadedContent,
- (downloadedContent) => downloadedContent.fileInfos || []
-)
-
-export const selectFetchingPublishedContent = createSelector(
- _selectState,
- (state) => !!state.fetchingPublishedContent
-)
-
-export const selectPublishedContent = createSelector(
- _selectState,
- (state) => state.publishedContent || {}
-)
-
export const selectResolvingUris = createSelector(
_selectState,
(state) => state.resolvingUris || []
diff --git a/ui/js/selectors/file_info.js b/ui/js/selectors/file_info.js
index 76fb0031d..c9104bbc2 100644
--- a/ui/js/selectors/file_info.js
+++ b/ui/js/selectors/file_info.js
@@ -2,14 +2,20 @@ import {
createSelector,
} from 'reselect'
import {
+ selectClaimsByUri,
selectMyClaimsOutpoints,
} from 'selectors/claims'
export const _selectState = state => state.fileInfo || {}
-export const selectAllFileInfoByUri = createSelector(
+export const selectIsFileListPending = createSelector(
_selectState,
- (state) => state.byUri || {}
+ (state) => state.isFileListPending
+)
+
+export const selectAllFileInfos = createSelector(
+ _selectState,
+ (state) => state.fileInfos || {}
)
export const selectDownloading = createSelector(
@@ -22,8 +28,42 @@ export const selectDownloadingByUri = createSelector(
(downloading) => downloading.byUri || {}
)
+export const selectFetchingDownloadedContent = createSelector(
+ _selectState,
+ (state) => !!state.fetchingDownloadedContent
+)
+
+export const selectDownloadedContent = createSelector(
+ _selectState,
+ (state) => state.downloadedContent || {}
+)
+
+export const selectDownloadedContentFileInfos = createSelector(
+ selectDownloadedContent,
+ (downloadedContent) => downloadedContent.fileInfos || []
+)
+
+export const selectFetchingPublishedContent = createSelector(
+ _selectState,
+ (state) => !!state.fetchingPublishedContent
+)
+
+export const selectPublishedContent = createSelector(
+ _selectState,
+ (state) => state.publishedContent || {}
+)
+
export const selectFileInfoForUri = (state, props) => {
- return selectAllFileInfoByUri(state)[props.uri]
+ const claims = selectClaimsByUri(state),
+ claim = claims[props.uri],
+ outpoint = claim ? `${claim.txid}:${claim.nout}` : undefined
+
+ console.log('select file info')
+ console.log(claims)
+ console.log(claim)
+ console.log(outpoint)
+ console.log(selectAllFileInfos(state))
+ return outpoint ? selectAllFileInfos(state)[outpoint] : undefined
}
export const makeSelectFileInfoForUri = () => {
@@ -68,23 +108,21 @@ export const makeSelectLoadingForUri = () => {
}
export const selectDownloadedFileInfo = createSelector(
- selectAllFileInfoByUri,
- (byUri) => {
+ selectAllFileInfos,
+ (fileInfos) => {
const fileInfoList = []
- Object.keys(byUri).forEach(key => {
- const fileInfo = byUri[key]
-
+ Object.keys(fileInfos).forEach(outpoint => {
+ const fileInfo = fileInfos[outpoint]
if (fileInfo.completed || fileInfo.written_bytes) {
fileInfoList.push(fileInfo)
}
})
-
return fileInfoList
}
)
export const selectPublishedFileInfo = createSelector(
- selectAllFileInfoByUri,
+ selectAllFileInfos,
selectMyClaimsOutpoints,
(byUri, outpoints) => {
const fileInfos = []