UNPKG

@trap_stevo/filetide

Version:

Revolutionizing real-time file transfer with seamless, instant communication across any device. Deliver files instantly, regardless of platform, and experience unparalleled speed and control in managing transfers. Elevate your file-sharing capabilities wi

86 lines (85 loc) 3.75 kB
"use strict"; const { FileTideDebugUtilityManager } = require("./FileTideDebugUtilityManager.js"); class FileTransferTrackingManager { constructor() { if (FileTransferTrackingManager.instance) { return FileTransferTrackingManager.instance; } this.activeTransfers = new Map(); FileTransferTrackingManager.instance = this; } trackTransfer(data, fileStream) { const senderN = data.senderName || data.senderID; FileTideDebugUtilityManager.log("notice", true, `Tracking transfer ~ ${data.fileName} | ${senderN}...`); if (this.containsTransfer(data.fileName)) { FileTideDebugUtilityManager.log("notice", true, `Transfer ~ ${data.fileName} | ${senderN} already tracked.`); return; } const totalChunks = data.totalChunks || Math.ceil(data.fileSize / (data.chunkSize || 512 * 1024)); const chunkSize = data.chunkSize || 512 * 1024; this.activeTransfers.set(data.fileName, { receivedChunks: new Set(), fileInfo: data, totalChunks, fileStream, chunkSize }); FileTideDebugUtilityManager.log("notice", true, `Tracked transfer ~ ${data.fileName} | ${senderN}!`); } updateTransfer(data) { const senderN = data.senderName || data.senderID; FileTideDebugUtilityManager.log("notice", true, `Updating tracked transfer ~ ${data.fileName} | ${senderN}...`); if (!this.containsTransfer(data.fileName)) { FileTideDebugUtilityManager.log("notice", true, `Transfer ~ ${data.fileName} | ${senderN} not tracked.`); return; } const transferState = this.getTransfer(data.fileName); transferState.receivedChunks.add(data.chunkIndex); FileTideDebugUtilityManager.log("notice", true, `Updated tracked transfer ~ ${data.fileName} | ${senderN}!`); } containsTransfer(transferID) { return this.activeTransfers.has(transferID); } getTransfer(transferID) { return this.activeTransfers.get(transferID); } untrackTransfer(transferID) { FileTideDebugUtilityManager.log("notice", true, `Untracking transfer ~ ${transferID}...`); if (this.containsTransfer(transferID)) { this.activeTransfers.delete(transferID); FileTideDebugUtilityManager.log("notice", true, `Transfer ~ ${transferID} untracked!`); return; } FileTideDebugUtilityManager.log("notice", true, `Transfer ~ ${transferID} already untracked.`); } outputCurrentTransfers() { if (this.activeTransfers.size === 0) { FileTideDebugUtilityManager.log("notice", true, "No active file transfers."); return; } FileTideDebugUtilityManager.log("notice", true, "Ongoing Transfers ~\n"); this.activeTransfers.forEach((transfer, fileName) => { const { totalChunks, receivedChunks, fileInfo } = transfer; const percentage = (receivedChunks.size / totalChunks * 100).toFixed(2); FileTideDebugUtilityManager.log("notice", false, `\nFile Name ~ ${fileName}`); FileTideDebugUtilityManager.log("notice", false, `File Path ~ ${fileInfo.path || fileInfo.filePath}`); FileTideDebugUtilityManager.log("notice", false, `File Size ~ ${fileInfo.fileSize} bytes`); FileTideDebugUtilityManager.log("notice", false, `Chunk Size ~ ${transfer.chunkSize} bytes`); FileTideDebugUtilityManager.log("notice", false, `Total Chunks ~ ${totalChunks}`); FileTideDebugUtilityManager.log("notice", false, `Received Chunks ~ ${receivedChunks.size}`); FileTideDebugUtilityManager.log("notice", false, `Progress ~ ${percentage}%`); }); FileTideDebugUtilityManager.log("notice", false, "=================================\n"); } } ; const instance = new FileTransferTrackingManager(); module.exports = { FileTransferTrackingManager: instance };