Upload files fix

This commit is contained in:
sanjayk03-dev
2024-05-17 22:20:19 +05:30
parent 81fd955a22
commit 6048da98b0
2 changed files with 89 additions and 69 deletions

View File

@@ -43,6 +43,7 @@ module.exports = {
ask_home: true, ask_home: true,
folder_name: "", folder_name: "",
edited: false, edited: false,
uploading_files: false,
confirmDelete: false, confirmDelete: false,
create_folder: false, create_folder: false,
showGcodeMessage: false, showGcodeMessage: false,
@@ -50,7 +51,6 @@ module.exports = {
macrosLoading: false, macrosLoading: false,
show_gcodes: false, show_gcodes: false,
GCodeNotFound: false, GCodeNotFound: false,
uploadFiles: false,
filesUploaded: 0, filesUploaded: 0,
totalFiles: 0, totalFiles: 0,
}; };
@@ -417,45 +417,88 @@ module.exports = {
this.$broadcast("gcode-load", ""); this.$broadcast("gcode-load", "");
}, },
upload_files: async function (files, folderName) { upload_gcode: async function (filename, file) {
this.update_config(); return new Promise((resolve, reject) => {
for (let file of files) { const xhr = new XMLHttpRequest();
const reader = new FileReader();
reader.onload = () => {
const gcode = reader.result;
const extension = file.name.split(".").pop();
switch (extension.toLowerCase()) {
case "nc":
case "ngc":
case "gcode":
case "gc":
break;
default:
alert(`Unsupported file type: ${extension}`);
this.filesUploaded++; this.filesUploaded++;
if (this.filesUploaded == this.totalFiles) { if (this.filesUploaded == this.totalFiles) {
this.uploadFiles = false; this.uploading_files = false;
}
return;
} }
this.upload_gcode(file.name, gcode); xhr.onload = () => {
if (xhr.status >= 200 && xhr.status < 300) {
resolve("file uploaded");
} else {
console.error("File upload failed:", xhr.statusText);
reject("upload failed");
}
};
xhr.onerror = () => {
alert("Upload failed.");
reject("upload failed");
};
xhr.open("PUT", `/api/file/${encodeURIComponent(filename)}`, true);
xhr.send(file);
});
},
readFile: function (file) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = () => {
resolve(reader.result);
};
reader.onerror = error => {
reject(error);
};
reader.readAsText(file, "utf-8");
});
},
validateFiles: async function (files) {
const validFiles = [];
for (const file of files) {
const extension = file.name.split(".").pop().toLowerCase();
const validExtensions = ["nc", "ngc", "gcode", "gc"];
if (validExtensions.includes(extension)) {
validFiles.push(file);
} else {
alert(`Unsupported file : ${file.name}`);
}
}
return validFiles;
},
uploadValidFiles: async function (files, folderName) {
const updatedConfig = { ...this.config };
for (const file of files) {
try {
const gcode = await this.readFile(file);
await this.upload_gcode(file.name, gcode);
const isAlreadyPresent = updatedConfig.non_macros_list.some(element => element.file_name === file.name);
const isAlreadyPresent = this.config.non_macros_list.find(element => element.file_name == file.name);
if (!isAlreadyPresent) { if (!isAlreadyPresent) {
this.config.non_macros_list.push({ file_name: file.name }); updatedConfig.non_macros_list.push({ file_name: file.name });
} }
if (folderName) { if (folderName) {
const folder = this.config.gcode_list.find(item => item.type == "folder" && item.name == folderName); const folder = updatedConfig.gcode_list.find(item => item.type == "folder" && item.name == folderName);
if (folder) { if (folder) {
if (!folder.files.map(item => item.file_name).includes(file.name)) { if (!folder.files.map(item => item.file_name).includes(file.name)) {
folder.files.push({ file_name: file.name }); folder.files.push({ file_name: file.name });
} }
} else { } else {
this.config.gcode_list.push({ updatedConfig.gcode_list.push({
name: folderName, name: folderName,
type: "folder", type: "folder",
files: [ files: [
@@ -466,11 +509,11 @@ module.exports = {
}); });
} }
} else { } else {
var folder_to_add = this.config.gcode_list.find( var folder_to_add = updatedConfig.gcode_list.find(
item => item.type == "folder" && item.name == this.state.folder, item => item.type == "folder" && item.name == this.state.folder,
); );
if (!folder_to_add) { if (!folder_to_add) {
folder_to_add = this.config.gcode_list.unshift({ folder_to_add = updatedConfig.gcode_list.unshift({
name: this.state.folder, name: this.state.folder,
type: "folder", type: "folder",
files: [ files: [
@@ -479,29 +522,30 @@ module.exports = {
}, },
], ],
}); });
folder_to_add = this.config.gcode_list[0]; folder_to_add = updatedConfig.gcode_list[0];
} }
if (!folder_to_add.files.find(item => item.file_name == file.name)) { if (!folder_to_add.files.find(item => item.file_name == file.name)) {
folder_to_add.files.push({ file_name: file.name }); folder_to_add.files.push({ file_name: file.name });
} }
} }
this.save_config(this.config); } catch (error) {
}; console.warn(`error uploading file : `, error);
}
}
return updatedConfig;
},
reader.onerror = error => { upload_files: async function (files, folderName) {
alert("Error uploading file: ", error); this.update_config();
this.uploadFiles = false;
this.filesUploaded++; const validFiles = await this.validateFiles(files);
if (this.filesUploaded == this.totalFiles) { const updatedConfig = await this.uploadValidFiles(validFiles, folderName);
this.uploadFiles = false;
} await this.save_config(updatedConfig);
};
reader.readAsText(file, "utf-8");
}
}, },
upload_file: async function (e) { upload_file: async function (e) {
this.uploadFiles = true; this.uploading_files = true;
this.filesUploaded = 0; this.filesUploaded = 0;
const files = e.target.files || e.dataTransfer.files; const files = e.target.files || e.dataTransfer.files;
@@ -511,31 +555,7 @@ module.exports = {
this.totalFiles = files.length; this.totalFiles = files.length;
this.upload_files(files); await this.upload_files(files);
},
upload_gcode: async function (filename, file) {
const xhr = new XMLHttpRequest();
xhr.onload = () => {
this.filesUploaded++;
if (this.filesUploaded == this.totalFiles) {
this.uploadFiles = false;
}
if (xhr.status >= 200 && xhr.status < 300) {
console.log("File uploaded " + filename);
} else {
console.error("File upload failed:", xhr.statusText);
alert("Upload failed.");
}
};
xhr.onerror = () => {
alert("Upload failed.");
};
xhr.open("PUT", `/api/file/${encodeURIComponent(filename)}`, true);
xhr.send(file);
}, },
create_new_folder: async function () { create_new_folder: async function () {
@@ -566,7 +586,7 @@ module.exports = {
}, },
upload_folder: async function (e) { upload_folder: async function (e) {
this.uploadFiles = true; this.uploading_files = true;
this.filesUploaded = 0; this.filesUploaded = 0;
const files = e.target.files || e.dataTransfer.files; const files = e.target.files || e.dataTransfer.files;

View File

@@ -280,7 +280,7 @@ script#control-view-template(type="text/x-template")
@click="optional_pause", v-if="false", style="height:100px;width:100px;font-weight:normal") @click="optional_pause", v-if="false", style="height:100px;width:100px;font-weight:normal")
.fa.fa-stop-circle-o .fa.fa-stop-circle-o
message(:show.sync="uploadFiles") message(:show.sync="uploadingFiles")
h3(slot="header") Files uploading h3(slot="header") Files uploading
div(slot="body") div(slot="body")
h3 Please wait... h3 Please wait...