import lbry from 'lbry' import { createSelector, } from 'reselect' import { selectClaimsByUri, selectClaimListMineIsPending, selectMyClaimsOutpoints, } from 'selectors/claims' export const _selectState = state => state.fileInfo || {} export const selectAllFileInfos = createSelector( _selectState, (state) => state.fileInfos || {} ) export const selectFileListIsPending = createSelector( _selectState, (state) => state.isFileListPending ) export const selectFileListDownloadedOrPublishedIsPending = createSelector( selectFileListIsPending, selectClaimListMineIsPending, (isFileListPending, isClaimListMinePending) => isFileListPending || isClaimListMinePending ) export const selectFileInfoForUri = (state, props) => { const claims = selectClaimsByUri(state), claim = claims[props.uri], fileInfos = selectAllFileInfos(state), outpoint = claim ? `${claim.txid}:${claim.nout}` : undefined return outpoint && fileInfos ? fileInfos[outpoint] : undefined } export const makeSelectFileInfoForUri = () => { return createSelector( selectFileInfoForUri, (fileInfo) => fileInfo ) } export const selectUrisDownloading = createSelector( _selectState, (state) => state.urisDownloading || {} ) const selectDownloadingForUri = (state, props) => { const byUri = selectUrisDownloading(state) return byUri[props.uri] } export const makeSelectDownloadingForUri = () => { return createSelector( selectDownloadingForUri, (downloadingForUri) => !!downloadingForUri ) } export const selectUrisLoading = createSelector( _selectState, (state) => state.urisLoading || {} ) const selectLoadingForUri = (state, props) => { const byUri = selectUrisLoading(state) return byUri[props.uri] } export const makeSelectLoadingForUri = () => { return createSelector( selectLoadingForUri, (loading) => !!loading ) } export const selectFileInfosDownloaded = createSelector( selectAllFileInfos, selectMyClaimsOutpoints, (fileInfos, myClaimOutpoints) => { const fileInfoList = [] Object.values(fileInfos).forEach(fileInfo => { if (fileInfo && myClaimOutpoints.indexOf(fileInfo.outpoint) === -1 && (fileInfo.completed || fileInfo.written_bytes)) { fileInfoList.push(fileInfo) } }) return fileInfoList } ) export const selectFileInfosPendingPublish = createSelector( _selectState, (state) => { return lbry.getPendingPublishes() } ) export const selectFileInfosPublished = createSelector( selectAllFileInfos, selectFileInfosPendingPublish, selectMyClaimsOutpoints, (allFileInfos, pendingFileInfos, outpoints) => { const fileInfos = [] outpoints.forEach(outpoint => { if (allFileInfos[outpoint]) { fileInfos.push(allFileInfos[outpoint]) } }) return [...fileInfos, ...pendingFileInfos] } )