77 lines
1.7 KiB
JavaScript
77 lines
1.7 KiB
JavaScript
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'
|
|
import {
|
|
selectSettingsIsGenerous
|
|
} from 'selectors/settings'
|
|
|
|
export function doFetchCostInfoForUri(uri) {
|
|
return function(dispatch, getState) {
|
|
const state = getState(),
|
|
claim = selectClaimsByUri(state)[uri],
|
|
isResolving = selectResolvingUris(state).indexOf(uri) !== -1,
|
|
isGenerous = selectSettingsIsGenerous(state)
|
|
|
|
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({
|
|
type: types.FETCH_COST_INFO_STARTED,
|
|
data: {
|
|
uri,
|
|
}
|
|
})
|
|
}
|
|
|
|
function resolve(costInfo) {
|
|
dispatch({
|
|
type: types.FETCH_COST_INFO_COMPLETED,
|
|
data: {
|
|
uri,
|
|
costInfo,
|
|
}
|
|
})
|
|
}
|
|
|
|
if (isGenerous && claim) {
|
|
let cost
|
|
const fee = claim.value.stream.metadata.fee;
|
|
if (fee === undefined ) {
|
|
resolve({ cost: 0, includesData: true })
|
|
} else if (fee.currency == 'LBC') {
|
|
resolve({ cost: fee.amount, includesData: true })
|
|
} else {
|
|
begin()
|
|
lbryio.getExchangeRates().then(({lbc_usd}) => {
|
|
resolve({ cost: fee.amount / lbc_usd, includesData: true })
|
|
});
|
|
}
|
|
} else {
|
|
begin()
|
|
lbry.getCostInfo(uri).then(resolve)
|
|
}
|
|
}
|
|
}
|
|
|