Stefan Dej e2e496c31e bugfix: update metadata by override gcode file
Signed-off-by: Stefan Dej <meteyou@gmail.com>
2021-01-31 01:56:06 +01:00

165 lines
6.0 KiB
JavaScript

import Vue from 'vue'
import { getDefaultState } from './index'
import { findDirectory } from "@/plugins/helpers"
export default {
reset(state) {
Object.assign(state, getDefaultState())
},
setDirectory(state, payload) {
let parent = undefined;
if (payload && payload.requestParams && payload.requestParams.path) {
let arrayPath = payload.requestParams.path.split("/")
parent = findDirectory(state.filetree, arrayPath)
}
if (parent === undefined) parent = state.filetree
if (Array.isArray(parent) && parent.length) {
for (const [key, item] of Object.entries(parent)) {
if (
item.isDirectory &&
'dirs' in payload &&
payload.dirs.length > 0 &&
payload.dirs.findIndex(element => element.dirname === item.filename) < 0
) parent.splice(key, 1)
else if (!item.isDirectory && payload.files.findIndex(element => element.filename === item.filename) < 0) parent.splice(key, 1)
}
}
if (payload.dirs && payload.dirs.length) {
for (let dir of payload.dirs) {
if (!parent.find(element => (element.isDirectory === true && element.filename === dir.dirname))) {
parent.push({
isDirectory: true,
filename: dir.dirname,
modified: new Date(dir.modified * 1000),
childrens: [],
})
Vue.prototype.$socket.sendObj('server.files.get_directory', { path: payload.requestParams.path+'/'+dir.dirname }, 'files/getDirectory');
}
}
}
if (payload.files && payload.files.length) {
for (let file of payload.files) {
if (!parent.find(element => (element.isDirectory === false && element.filename === file.filename))) {
parent.push({
isDirectory: false,
filename: file.filename,
modified: new Date(file.modified * 1000),
size: parseInt(file.size),
metadataPulled: false,
})
}
}
}
},
setMetadata(state, payload) {
let filename = "gcodes/"+payload.filename;
let dirArray = filename.split("/");
filename = dirArray[dirArray.length-1];
let path = findDirectory(state.filetree, dirArray);
let index = path.findIndex(element => element.filename === filename);
if (index >= 0 && path[index]) {
const safeDefault = (value, def = undefined) => value ? value : def;
let newData = {
estimated_time: safeDefault(payload.estimated_time),
filament_total: safeDefault(payload.filament_total),
first_layer_height: safeDefault(payload.first_layer_height),
first_layer_bed_temp: safeDefault(payload.first_layer_bed_temp),
first_layer_extr_temp: safeDefault(payload.first_layer_extr_temp),
gcode_start_byte: safeDefault(payload.gcode_start_byte),
gcode_end_byte: safeDefault(payload.gcode_end_byte),
layer_height: safeDefault(payload.layer_height),
object_height: safeDefault(payload.object_height),
slicer: safeDefault(payload.slicer),
slicer_version: safeDefault(payload.slicer_version),
thumbnails: safeDefault(payload.thumbnails),
metapayloadPulled: true,
modified: new Date(payload.modified * 1000),
size: parseInt(payload.size),
};
let newObject = Object.assign(path[index], newData);
Vue.set(path, index, newObject);
}
},
setUploadFile(state, payload) {
let filename = payload.item.path;
if (payload.item.path.lastIndexOf("/") >= 0) filename = payload.item.path.substr(payload.item.path.lastIndexOf("/")).replace("/", "");
let path = payload.item.path.substr(0, payload.item.path.lastIndexOf("/"));
let parent = findDirectory(state.filetree, (payload.item.root+"/"+path).split("/"));
if (parent) {
if (parent.findIndex(element => (!element.isDirectory && element.filename === filename)) === -1) {
let modified = new Date(payload.item.modified * 1000);
parent.push({
isDirectory: false,
filename: filename,
modified: modified,
size: payload.item.size,
metadataPulled: false,
});
} else Vue.prototype.$socket.sendObj("server.files.metadata", { filename: payload.item.path }, "files/getMetadata")
}
},
setMoveItem(state, payload) {
let filenameOld = payload.source_item.path.substr(payload.source_item.path.lastIndexOf("/")+1);
let oldPath = payload.source_item.path.substr(0, payload.source_item.path.lastIndexOf("/") + 1);
let filenameNew = payload.item.path.substr(payload.item.path.lastIndexOf("/")+1);
let newPath = payload.item.path.substr(0, payload.item.path.lastIndexOf("/") + 1);
oldPath = findDirectory(state.filetree, (payload.source_item.root+"/"+oldPath).split("/"));
let indexFile = oldPath.findIndex(element => element.filename === filenameOld);
if (indexFile >= 0 && oldPath[indexFile]) {
let file = oldPath.splice(indexFile, 1)[0];
file.filename = filenameNew;
newPath = findDirectory(state.filetree, (payload.item.root+"/"+newPath).split("/"));
newPath.push(file);
}
},
setDeleteFile(state, payload) {
let currentPath = payload.item.path.substr(0, payload.item.path.lastIndexOf("/"));
let delPath = payload.item.path.substr(payload.item.path.lastIndexOf("/")+1);
currentPath = findDirectory(state.filetree, (payload.item.root+"/"+currentPath).split("/"));
let index = currentPath.findIndex(element => element.filename === delPath);
if (index >= 0 && currentPath[index]) currentPath.splice(index, 1);
},
setCreateDir(state, payload) {
let dirname = payload.item.path.substr(payload.item.path.lastIndexOf("/") + 1);
let path = payload.item.path.substr(0, payload.item.path.lastIndexOf("/"));
let parent = findDirectory(state.filetree, (payload.item.root+"/"+path).split("/"));
if (parent) {
parent.push({
isDirectory: true,
filename: dirname,
modified: new Date(),
childrens: [],
});
}
},
setDeleteDir(state, payload) {
let currentPath = payload.item.path.substr(0, payload.item.path.lastIndexOf("/"));
let delPath = payload.item.path.substr(payload.item.path.lastIndexOf("/")+1);
currentPath = findDirectory(state.filetree, (payload.item.root+"/"+currentPath).split("/"));
let index = currentPath.findIndex(element => element.filename === delPath);
if (index >= 0 && currentPath[index]) currentPath.splice(index, 1);
},
}