khamba
Version:
A cli tool for sharing files through local network.
34 lines (33 loc) • 1.36 kB
JavaScript
import { deepMap } from 'nanostores';
export const $peersFiles = deepMap({});
export const $receiverTransferInfo = deepMap();
export const initReceiverTransferInfo = (peerInfo, totalFiles, sendingFiles) => {
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 totalFileSize = Object.values(sendingFiles).reduce((total, file) => total + file.fileSize, 0);
// TODO:: Return
$receiverTransferInfo.set({
peerInfo: peerInfo,
totalFiles: totalFiles,
totalFileSize: totalFileSize,
files: files,
});
};
export const updateReceiverTransferProgress = (fileID, transferSize) => {
const prevTransferred = $receiverTransferInfo.get().files[fileID]?.totalTransferred ?? 0;
$receiverTransferInfo.setKey(`files.${fileID}.totalTransferred`, prevTransferred + transferSize);
};
export const updateTransferFileState = (fileID, state) => {
$receiverTransferInfo.setKey(`files.${fileID}.state`, state);
};
export const updateTransferFileErrorMsg = (fileID, error) => {
$receiverTransferInfo.setKey(`files.${fileID}.errorMsg`, error);
};