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); } }; }