import { formatBytes } from "./filebrowser-utils.js"; import { concealElement, revealElement } from "./motion.js"; export function createTransferPanel({ onCancel }) { const transferPanel = document.getElementById("transfer-panel"); const transferList = document.getElementById("transfer-list"); function addTransferToUI(transfer) { if (!transferPanel || !transferList) return; const transferItem = document.createElement("div"); transferItem.id = `transfer-${transfer.id}`; transferItem.className = "transfer-item bg-slate-800/50 border border-slate-700 rounded-lg p-3"; const icon = transfer.type === "upload" ? "fa-upload" : "fa-download"; const color = transfer.type === "upload" ? "text-blue-400" : "text-green-400"; transferItem.innerHTML = `
${transfer.progress}% ${formatBytes(transfer.sent || transfer.received || 0)} / ${formatBytes(transfer.total)}
`; const nameEl = transferItem.querySelector(".transfer-name"); if (nameEl) { nameEl.textContent = transfer.fileName; } const cancelBtn = transferItem.querySelector(".cancel-btn"); if (cancelBtn) { cancelBtn.addEventListener("click", () => onCancel(transfer.id)); } transferList.appendChild(transferItem); if (transferPanel.classList.contains("hidden")) { revealElement(transferPanel, { duration: 180, offset: 6 }); } revealElement(transferItem, { duration: 190, offset: 7 }); } function updateTransferProgress(transferId, progress, current, total) { const transferItem = document.getElementById(`transfer-${transferId}`); if (!transferItem) return; const progressBar = transferItem.querySelector(".progress-bar"); const progressText = transferItem.querySelector(".progress-text"); const sizeText = transferItem.querySelector(".size-text"); if (progressBar) progressBar.style.width = `${progress}%`; if (progressText) progressText.textContent = `${progress}%`; if (sizeText) { sizeText.textContent = `${formatBytes(current)} / ${formatBytes(total)}`; } } async function removeTransfer(transferId) { const transferItem = document.getElementById(`transfer-${transferId}`); if (transferItem) { await concealElement(transferItem, { duration: 130, offset: -5 }); transferItem.remove(); } if (transferList && transferList.children.length === 0) { await concealElement(transferPanel, { duration: 120, offset: 5 }); } } return { addTransferToUI, removeTransfer, updateTransferProgress, }; }