Update downloader.js

This commit is contained in:
Anthony Stirling 2024-11-20 09:04:00 +00:00 committed by GitHub
parent c239d95131
commit 9e30918aae
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -96,14 +96,30 @@
}); });
}); });
async function getPDFPageCount(file) {
try {
const arrayBuffer = await file.arrayBuffer();
const pdf = await pdfjsLib.getDocument({ data: arrayBuffer }).promise;
return pdf.numPages;
} catch (error) {
console.error('Error getting PDF page count:', error);
return null;
}
}
async function handleSingleDownload(url, formData, isMulti = false, isZip = false) { async function handleSingleDownload(url, formData, isMulti = false, isZip = false) {
const startTime = performance.now();
const file = formData.get('fileInput');
let success = false;
let errorMessage = null;
try { try {
const response = await fetch(url, { method: "POST", body: formData }); const response = await fetch(url, { method: "POST", body: formData });
const contentType = response.headers.get("content-type"); const contentType = response.headers.get("content-type");
if (!response.ok) { if (!response.ok) {
errorMessage = response.status;
if (response.status === 401) { if (response.status === 401) {
// Handle 401 Unauthorized error
showSessionExpiredPrompt(); showSessionExpiredPrompt();
return; return;
} }
@ -118,6 +134,8 @@
let filename = getFilenameFromContentDisposition(contentDisposition); let filename = getFilenameFromContentDisposition(contentDisposition);
const blob = await response.blob(); const blob = await response.blob();
success = true;
if (contentType.includes("application/pdf") || contentType.includes("image/")) { if (contentType.includes("application/pdf") || contentType.includes("image/")) {
clearFileInput(); clearFileInput();
return handleResponse(blob, filename, !isMulti, isZip); return handleResponse(blob, filename, !isMulti, isZip);
@ -127,23 +145,26 @@
} }
} catch (error) { } catch (error) {
success = false;
errorMessage = error.message;
clearFileInput(); clearFileInput();
console.error("Error in handleSingleDownload:", error); console.error("Error in handleSingleDownload:", error);
throw error; throw error;
} } finally {
} const processingTime = performance.now() - startTime;
function getFilenameFromContentDisposition(contentDisposition) { // Capture analytics
let filename; const pageCount = file && file.type === 'application/pdf' ? await getPDFPageCount(file) : null;
if (contentDisposition && contentDisposition.indexOf("attachment") !== -1) { posthog.capture('file_processing', {
filename = decodeURIComponent(contentDisposition.split("filename=")[1].replace(/"/g, "")).trim(); success: success,
} else { file_type: file ? file.type || 'unknown' : 'unknown',
// If the Content-Disposition header is not present or does not contain the filename, use a default filename file_size: file ? file.size : 0,
filename = "download"; processing_time: processingTime,
error_message: errorMessage,
pdf_pages: pageCount
});
} }
return filename;
} }
async function handleJsonResponse(response) { async function handleJsonResponse(response) {