node-red-contrib-displayext-node
Version:
A node for software DisplayEXT
121 lines (102 loc) • 5.88 kB
JavaScript
const fs = require("fs");
const path = require("path");
module.exports = function(RED) {
function DeleteMediaNode(config) {
RED.nodes.createNode(this, config);
const node = this;
// Définir le chemin du fichier dataMedia.json
const dataFilePath = path.join(__dirname, "..", "dataMedia.json");
node.on("input", function(msg) {
if (msg.payload) {
// Vérifier si l'action est "deleteMedia"
if (msg.payload.action === "deleteMedia" && msg.payload.mediaName) {
const mediaToDelete = msg.payload.mediaName;
let savedData = [];
// Charger les données existantes
if (fs.existsSync(dataFilePath)) {
try {
savedData = JSON.parse(fs.readFileSync(dataFilePath, "utf8"));
} catch (error) {
node.error("Erreur de lecture du fichier JSON", error);
return;
}
}
// Filtrer les éléments pour retirer celui qui correspond au media à supprimer
const filteredData = savedData.filter(item => item.name !== mediaToDelete);
// Si les données ont changé, les sauvegarder
if (filteredData.length !== savedData.length) {
try {
fs.writeFileSync(dataFilePath, JSON.stringify(filteredData, null, 2));
node.log(`Le média ${mediaToDelete} a été supprimé.`);
} catch (error) {
node.error("Erreur d'écriture dans le fichier JSON", error);
}
} else {
node.warn(`Aucun média avec le nom ${mediaToDelete} n'a été trouvé.`);
}
// Retourner une réponse
node.send({ payload: `Média ${mediaToDelete} supprimé avec succès !` });
// Vérifier si l'action est "updateMedia"
} else if (msg.payload.action === "updateMedia" && msg.payload.media.oldName && msg.payload.media.name) {
const oldName = msg.payload.media.oldName;
const newName = msg.payload.media.name;
let savedData = [];
// Charger les données existantes
if (fs.existsSync(dataFilePath)) {
try {
savedData = JSON.parse(fs.readFileSync(dataFilePath, "utf8"));
} catch (error) {
node.error("Erreur de lecture du fichier JSON", error);
return;
}
}
// Trouver et mettre à jour le nom du média
const mediaToUpdate = savedData.find(item => item.name === oldName);
if (mediaToUpdate) {
mediaToUpdate.name = newName;
// Sauvegarder les données mises à jour dans le fichier JSON
try {
fs.writeFileSync(dataFilePath, JSON.stringify(savedData, null, 2));
node.log(`Le nom du média ${oldName} a été mis à jour en ${newName}.`);
node.send({ payload: `Média ${oldName} mis à jour en ${newName} avec succès !` });
} catch (error) {
node.error("Erreur d'écriture dans le fichier JSON", error);
}
} else {
node.warn(`Aucun média avec le nom ${oldName} n'a été trouvé.`);
}
} else if (msg.payload.action === "trash" && msg.payload.media) {
const mediaToDelete = msg.payload.media;
let savedData = [];
// Charger les données existantes
if (fs.existsSync(dataFilePath)) {
try {
savedData = JSON.parse(fs.readFileSync(dataFilePath, "utf8"));
} catch (error) {
node.error("Erreur de lecture du fichier JSON", error);
return;
}
}
// Filtrer les éléments pour retirer celui qui correspond au media à supprimer
const filteredData = savedData.filter(item => item.name !== mediaToDelete);
// Si les données ont changé, les sauvegarder
if (filteredData.length !== savedData.length) {
try {
fs.writeFileSync(dataFilePath, JSON.stringify(filteredData, null, 2));
node.log(`Le média ${mediaToDelete} a été supprimé.`);
} catch (error) {
node.error("Erreur d'écriture dans le fichier JSON", error);
}
} else {
node.warn(`Aucun média avec le nom ${mediaToDelete} n'a été trouvé.`);
}
// Retourner une réponse
node.send({ payload: `Média ${mediaToDelete} supprimé avec succès !` });
} else {
node.error("Le message ne contient pas les informations requises (action ou media manquant).");
}
}
});
}
RED.nodes.registerType("update-dataMedia", DeleteMediaNode);
};