khamba
Version:
A cli tool for sharing files through local network.
47 lines (46 loc) • 2.13 kB
JavaScript
import React, { useEffect, useCallback, useRef } from 'react';
import { logError } from '../../../functions/log.js';
import { checkEnoughSpace, useFileDownloader, } from '../../../functions/useFileDownloader.js';
import { useHashCheck } from '../../../functions/useHashCheck.js';
import { useStore } from '@nanostores/react';
import { $baseInfo } from '../../../stores/baseStore.js';
import SingleFileTransfer from '../../../components/Transfer/SingleFileTransfer.js';
const taskState = {
DEFAULT: 'pending',
TRANSFERRING: 'loading',
TRANSFERRED: 'loading',
HASH_CHECKING: 'loading',
ERROR: 'error',
SUCCESS: 'success',
};
const ReceiverSingleFileTransfer = ({ index, downloadIndex, fileId, file, peerInfo, onSingleDownloadComplete, longestNameLength, }) => {
const baseInfo = useStore($baseInfo);
const downloadAttempted = useRef(false);
const startDownload = useCallback(async () => {
try {
if (downloadAttempted.current)
return;
downloadAttempted.current = true;
const { peerIP, peerHttpPort } = peerInfo;
// const isNoDuplicationIssue = await checkDuplication(fileId, fileName);
// if (!isNoDuplicationIssue) return;
const isNoSpaceIssue = await checkEnoughSpace(fileId, file.totalSize);
if (!isNoSpaceIssue)
return;
await useFileDownloader(baseInfo.MY_ID, peerIP, peerHttpPort, fileId, file.fileName, file.fileType, file.totalSize);
await useHashCheck(peerIP, peerHttpPort, fileId, file.fileName);
onSingleDownloadComplete();
}
catch (error) {
logError(error);
}
}, [file, peerInfo, onSingleDownloadComplete]);
useEffect(() => {
if (downloadIndex === index && !downloadAttempted.current) {
startDownload();
}
}, [downloadIndex, index, startDownload]);
return (React.createElement(React.Fragment, null,
React.createElement(SingleFileTransfer, { file: file, longestNameLength: longestNameLength })));
};
export default ReceiverSingleFileTransfer;