UNPKG

khamba

Version:

A cli tool for sharing files through local network.

53 lines (52 loc) 2.27 kB
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;