UNPKG

khamba

Version:

A cli tool for sharing files through local network.

57 lines (56 loc) 2.35 kB
import { log } from '../functions/log.js'; import { $sendingFiles } from '../stores/baseStore.js'; import { $connectedPeers } from '../stores/peersStore.js'; import { deepMap } from 'nanostores'; export const $senderTransferInfo = deepMap(); export const updateSenderTransferProgress = (peerID, fileID, transferSize) => { const prevTransferred = $senderTransferInfo.get()[peerID]?.files[fileID]?.totalTransferred ?? 0; $senderTransferInfo.setKey(`${peerID}.files.${fileID}.totalTransferred`, prevTransferred + transferSize); }; export const updateSenderTransferState = (peerID, fileID, state) => { $senderTransferInfo.setKey(`${peerID}.files.${fileID}.state`, state); }; export const updateSenderTransferError = (peerID, fileID, error) => { $senderTransferInfo.setKey(`${peerID}.files.${fileID}.errorMsg`, error); }; export const addToSenderTransferInfo = (peerID, newTransferInfo) => { const prevTransferInfo = $senderTransferInfo.get(); const updatedTransferInfo = { ...prevTransferInfo, [peerID]: newTransferInfo }; $senderTransferInfo.set(updatedTransferInfo); }; export const initSenderTransfer = (peerID) => { const sendingFiles = $sendingFiles.get(); const connectedPeers = $connectedPeers.get(); const selectedPeer = connectedPeers[peerID]; if (!selectedPeer) { return log('⭕ Selected Peer not found ⭕', peerID); } if (!sendingFiles) { return log('⭕ No sending files found ⭕'); } const files = Object.entries(sendingFiles)?.reduce((acc, [key, value]) => { acc[key] = { state: 'DEFAULT', fileName: value.fileName, fileType: value.fileType, totalSize: value.fileSize, totalTransferred: 0, }; return acc; }, {}); const totalFiles = Object.entries(sendingFiles).length; const totalFileSize = Object.values(sendingFiles).reduce((total, file) => total + file.fileSize, 0); // TODO:: Return const newTransferInfo = { peerInfo: { peerID: peerID, peerIP: selectedPeer.ip, peerHttpPort: selectedPeer.httpPort, peerName: selectedPeer.name, }, totalFiles: totalFiles, totalFileSize: totalFileSize, files: files, }; addToSenderTransferInfo(peerID, newTransferInfo); };