Compare commits

...

5 Commits

Author SHA1 Message Date
Anthony Stirling
d19d87b8f0 Update downloader.js 2024-11-20 10:23:29 +00:00
Anthony Stirling
a22ce69bc3 Merge branch 'main' into Frooodle-patch-7 2024-11-20 10:16:44 +00:00
Anthony Stirling
59b60ebfb8 Update common.html 2024-11-20 10:15:23 +00:00
Anthony Stirling
b9a014b5c7 Update downloader.js 2024-11-20 09:23:41 +00:00
Anthony Stirling
9e30918aae Update downloader.js 2024-11-20 09:04:00 +00:00
2 changed files with 40 additions and 4 deletions

View File

@@ -96,14 +96,31 @@
});
});
async function getPDFPageCount(file) {
try {
const arrayBuffer = await file.arrayBuffer();
pdfjsLib.GlobalWorkerOptions.workerSrc = '/pdfjs-legacy/pdf.worker.mjs'
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) {
const startTime = performance.now();
const file = formData.get('fileInput');
let success = false;
let errorMessage = null;
try {
const response = await fetch(url, { method: "POST", body: formData });
const contentType = response.headers.get("content-type");
if (!response.ok) {
errorMessage = response.status;
if (response.status === 401) {
// Handle 401 Unauthorized error
showSessionExpiredPrompt();
return;
}
@@ -118,6 +135,8 @@
let filename = getFilenameFromContentDisposition(contentDisposition);
const blob = await response.blob();
success = true;
if (contentType.includes("application/pdf") || contentType.includes("image/")) {
clearFileInput();
return handleResponse(blob, filename, !isMulti, isZip);
@@ -127,13 +146,29 @@
}
} catch (error) {
success = false;
errorMessage = error.message;
clearFileInput();
console.error("Error in handleSingleDownload:", error);
throw error;
} finally {
const processingTime = performance.now() - startTime;
// Capture analytics
const pageCount = file && file.type === 'application/pdf' ? await getPDFPageCount(file) : null;
posthog.capture('file_processing', {
success: success,
file_type: file ? file.type || 'unknown' : 'unknown',
file_size: file ? file.size : 0,
processing_time: processingTime,
error_message: errorMessage,
pdf_pages: pageCount
});
}
}
function getFilenameFromContentDisposition(contentDisposition) {
function getFilenameFromContentDisposition(contentDisposition) {
let filename;
if (contentDisposition && contentDisposition.indexOf("attachment") !== -1) {
@@ -145,7 +180,7 @@
return filename;
}
async function handleJsonResponse(response) {
const json = await response.json();
const errorMessage = JSON.stringify(json, null, 2);

View File

@@ -201,6 +201,7 @@
window.stirlingPDF.error = /*[[#{error}]]*/ "Error";
})();
</script>
<script type="module" th:src="@{'/pdfjs-legacy/pdf.mjs'}"></script>
<script th:src="@{'/js/downloader.js'}"></script>
<div class="custom-file-chooser" th:attr="data-bs-unique-id=${name}, data-bs-element-id=${name+'-input'}, data-bs-files-selected=#{filesSelected}, data-bs-pdf-prompt=#{pdfPrompt}">
@@ -218,4 +219,4 @@
</div>
</div>
<script th:src="@{'/js/fileInput.js'}"></script>
</th:block>
</th:block>