113 lines
2.8 KiB
JavaScript
113 lines
2.8 KiB
JavaScript
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]
|
|
}
|
|
)
|