@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
JavaScript
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
};
;