khamba
Version:
A cli tool for sharing files through local network.
53 lines (52 loc) • 2.27 kB
JavaScript
import React from 'react';
import { Box, Text } from 'ink';
import { useStore } from '@nanostores/react';
import { $baseInfo } from '../stores/baseStore.js';
import { $connectedPeers } from '../stores/peersStore.js';
import PeerList from '../components/PeerList.js';
import { $peersFiles, initReceiverTransferInfo, } from '../stores/receiverfileHandlerStore.js';
import { log } from '../functions/log.js';
import { fetchInitSenderTransfer } from '../functions/fetch.js';
import WaveAnimation from '../components/Misc/WaveAnimation.js';
import { isObjectEmpty } from '../functions/helper.js';
const Discover = () => {
const baseInfo = useStore($baseInfo);
const connectedPeers = useStore($connectedPeers);
const peersFiles = useStore($peersFiles);
if (!baseInfo.MY_NAME ||
!baseInfo.BROADCAST_ADDR ||
!baseInfo.MY_IP ||
!baseInfo.UDP_PORT) {
throw new Error('Base Info Data not set properly');
}
const onSelect = async (peerID) => {
const selectedPeer = connectedPeers[peerID];
const selectedPeerFiles = peersFiles[peerID];
if (!selectedPeer) {
log('Selected Peer not found');
return;
}
if (!selectedPeerFiles || isObjectEmpty(selectedPeerFiles)) {
console.log('No sending files found');
return;
}
// ! Notifying Sender that I have started receiving
const isSenderInitSuccess = await fetchInitSenderTransfer(selectedPeer.ip, selectedPeer.httpPort, baseInfo.MY_ID);
if (!isSenderInitSuccess) {
return log('⭕ Sender init transfer failed. ⭕');
}
const totalFiles = Object.entries(selectedPeerFiles).length;
initReceiverTransferInfo({
peerID: peerID,
peerIP: selectedPeer.ip,
peerHttpPort: selectedPeer.httpPort,
peerName: selectedPeer.name,
}, totalFiles, selectedPeerFiles);
};
return (React.createElement(Box, { flexDirection: "column" },
React.createElement(Text, null,
React.createElement(WaveAnimation, null),
"\u2800DISCOVERING\u2800"),
React.createElement(PeerList, { peers: connectedPeers, onSelect: onSelect })));
};
export default Discover;