Results
@@ -690,8 +694,12 @@ const app = new Elysia()
if (!job) {
return redirect("/results");
}
+ // parse from url encoded string
+ const userId = decodeURIComponent(params.userId);
+ const jobId = decodeURIComponent(params.jobId);
+ const fileName = decodeURIComponent(params.fileName);
- const filePath = `${outputDir}${params.userId}/${params.jobId}/${params.fileName}`;
+ const filePath = `${outputDir}${userId}/${jobId}/${fileName}`;
return Bun.file(filePath);
},
)
diff --git a/src/public/android-chrome-192x192.png b/src/public/android-chrome-192x192.png
new file mode 100644
index 0000000..db2f782
Binary files /dev/null and b/src/public/android-chrome-192x192.png differ
diff --git a/src/public/android-chrome-512x512.png b/src/public/android-chrome-512x512.png
new file mode 100644
index 0000000..320d6ec
Binary files /dev/null and b/src/public/android-chrome-512x512.png differ
diff --git a/src/public/apple-touch-icon.png b/src/public/apple-touch-icon.png
new file mode 100644
index 0000000..c0e4dc5
Binary files /dev/null and b/src/public/apple-touch-icon.png differ
diff --git a/src/public/favicon-16x16.png b/src/public/favicon-16x16.png
new file mode 100644
index 0000000..9b406ff
Binary files /dev/null and b/src/public/favicon-16x16.png differ
diff --git a/src/public/favicon-32x32.png b/src/public/favicon-32x32.png
new file mode 100644
index 0000000..58ffa4d
Binary files /dev/null and b/src/public/favicon-32x32.png differ
diff --git a/src/public/favicon.ico b/src/public/favicon.ico
new file mode 100644
index 0000000..b8c4ef2
Binary files /dev/null and b/src/public/favicon.ico differ
diff --git a/src/public/script.js b/src/public/script.js
index 97bfe23..0edfb51 100644
--- a/src/public/script.js
+++ b/src/public/script.js
@@ -28,9 +28,7 @@ fileInput.addEventListener("change", (e) => {
fileType = file.name.split(".").pop();
console.log(file.type);
fileInput.setAttribute("accept", `.${fileType}`);
-
- const title = document.querySelector("h1");
- title.textContent = `Convert .${fileType}`;
+ setTitle();
fetch("/conversions", {
method: "POST",
@@ -57,6 +55,11 @@ fileInput.addEventListener("change", (e) => {
uploadFiles(files);
});
+const setTitle = () => {
+ const title = document.querySelector("h1");
+ title.textContent = `Convert ${fileType ? `.${fileType}` : "___"}`;
+};
+
// Add a onclick for the delete button
const deleteRow = (target) => {
const filename = target.parentElement.parentElement.children[0].textContent;
@@ -67,6 +70,13 @@ const deleteRow = (target) => {
const index = fileNames.indexOf(filename);
fileNames.splice(index, 1);
+ // if fileNames is empty, reset fileType
+ if (fileNames.length === 0) {
+ fileType = null;
+ fileInput.removeAttribute("accept");
+ setTitle();
+ }
+
fetch("/delete", {
method: "POST",
body: JSON.stringify({ filename: filename }),
diff --git a/src/public/site.webmanifest b/src/public/site.webmanifest
new file mode 100644
index 0000000..09691b5
--- /dev/null
+++ b/src/public/site.webmanifest
@@ -0,0 +1,19 @@
+{
+ "name": "ConvertX | Self Hosted File Converter",
+ "short_name": "ConvertX",
+ "icons": [
+ {
+ "src": "/android-chrome-192x192.png",
+ "sizes": "192x192",
+ "type": "image/png"
+ },
+ {
+ "src": "/android-chrome-512x512.png",
+ "sizes": "512x512",
+ "type": "image/png"
+ }
+ ],
+ "theme_color": "#a5d601",
+ "background_color": "#13171f",
+ "display": "standalone"
+}