Upload files fix
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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...
|
||||||
|
|||||||
Reference in New Issue
Block a user