lbry-desktop/ui/redux/actions/file_info.js

73 lines
1.9 KiB
JavaScript

import * as ACTIONS from 'constants/action_types';
import Lbry from 'lbry';
import { selectClaimsByUri } from 'redux/selectors/claims';
import { selectIsFetchingFileList, selectUrisLoading } from 'redux/selectors/file_info';
export function doFetchFileInfo(uri) {
return (dispatch, getState) => {
const state = getState();
const claim = selectClaimsByUri(state)[uri];
const outpoint = claim ? `${claim.txid}:${claim.nout}` : null;
const alreadyFetching = !!selectUrisLoading(state)[uri];
if (!alreadyFetching) {
dispatch({
type: ACTIONS.FETCH_FILE_INFO_STARTED,
data: {
outpoint,
},
});
Lbry.file_list({ outpoint, full_status: true, page: 1, page_size: 1 }).then((result) => {
const { items: fileInfos } = result;
const fileInfo = fileInfos[0];
dispatch({
type: ACTIONS.FETCH_FILE_INFO_COMPLETED,
data: {
outpoint,
fileInfo: fileInfo || null,
},
});
});
}
};
}
export function doFileList(page = 1, pageSize = 99999) {
return (dispatch, getState) => {
const state = getState();
const isFetching = selectIsFetchingFileList(state);
if (!isFetching) {
dispatch({
type: ACTIONS.FILE_LIST_STARTED,
});
Lbry.file_list({ page, page_size: pageSize }).then((result) => {
const { items: fileInfos } = result;
dispatch({
type: ACTIONS.FILE_LIST_SUCCEEDED,
data: {
fileInfos: fileInfos,
},
});
});
}
};
}
export function doFetchFileInfos() {
return (dispatch, getState) => {
const state = getState();
const isFetchingFileInfo = selectIsFetchingFileList(state);
if (!isFetchingFileInfo) dispatch(doFileList());
};
}
export function doSetFileListSort(page, value) {
return {
type: ACTIONS.SET_FILE_LIST_SORT,
data: { page, value },
};
}