Amélioration des messages d'alerte et gestion des erreurs pour la configuration et l'arrêt de la caméra. Ajout de vérifications pour empêcher la suppression de projets en cours de capture.

This commit is contained in:
2025-04-27 12:34:59 +02:00
parent 178796edb4
commit 091133ca99
3 changed files with 85 additions and 30 deletions

View File

@@ -197,8 +197,10 @@ async function start_timelapse(id,frequency,nbimages){
data: mydata
});
alert("data retrieval started:", response);
alert("Configuration de la caméra réussie");
return response;
} catch (error) {
alert("Erreur lors de la configuration de la caméra: " + error);
throw error;
}
}
@@ -216,9 +218,10 @@ async function stopCamera(id){
data: mydata
});
alert("Camera stopped succesfully :", response);
alert("La caméra a été arrêtée avec succès");
return response;
} catch (error) {
alert("Error stopping the camera :", error);
alert("Erreur lors de l'arrêt de la caméra : " + error);
throw error;
}
}

View File

@@ -37,8 +37,9 @@ function formatStatusWithColor(status) {
colorClass = "status-idle";
break;
case 3:
statusText = "En cours d'arrêt";
statusText = "En cours d\'arrêt";
colorClass = "status-stopping";
break; // Ajout du break manquant ici
default:
statusText = "Inconnu";
colorClass = "status-unknown";
@@ -149,6 +150,14 @@ function setupCarousel(global_project_list) {
deleteButton.addEventListener('click', (event) => {
event.stopPropagation();
const projectName = project.name;
const projectStatus = parseInt(project.status);
// Vérifier si le projet est en cours de capture (statut 1) ou en cours d'arrêt (statut 3)
if (projectStatus === 1 || projectStatus === 3) {
alert(`Impossible de supprimer "${projectName}" car sa capture est ${projectStatus === 1 ? 'en cours' : 'en cours d\'arrêt'}.\nVeuillez d'abord arrêter la procédure de capture.`);
return;
}
document.getElementById('alertMessage').textContent = `Veux-tu vraiment supprimer le projet : ${projectName} ?`;
document.getElementById('customAlert').style.display = 'block';

View File

@@ -85,10 +85,14 @@ document.addEventListener("DOMContentLoaded", async () => {
const minutes = document.getElementById("minutes").value;
const frequency = days * 1440 + hours * 60 + minutes;
if(frequency >= 3) {
const nbrimages = document.getElementById("totalImages").value;
start_timelapse(projectId, frequency, nbrimages).then(() => {
const nbrimages = document.getElementById("totalImages").value;
try {
// Attendre que la requête API soit terminée avant de recharger la page
await start_timelapse(projectId, frequency, nbrimages);
location.reload();
});
} catch (error) {
console.error("Erreur lors du démarrage du timelapse:", error);
}
} else {
alert("La fréquence doit être supérieure à 3 minutes !");
}
@@ -98,8 +102,13 @@ document.addEventListener("DOMContentLoaded", async () => {
document
.getElementById("stop-camera")
.addEventListener("click", async () => {
stopCamera(projectId);
location.reload();
try {
// Attendre que la requête API soit terminée avant de recharger la page
await stopCamera(projectId);
location.reload();
} catch (error) {
console.error("Erreur lors de l'arrêt de la caméra:", error);
}
});
}
});
@@ -379,24 +388,44 @@ async function generateViewMetric(projectId) {
if (measurements != 404) {
let samples;
if (videoId != -1) {
currentVideoDatas = await getDataVideoFromApi(videoId);
samples = JSON.parse(currentVideoDatas[0]["measurement_ids"]);
if (currentVideoDatas[0].status != 0) {
videoPlaceHolder.innerHTML = `
<video class="video" controls>
<source src="${api_url}/videos/file/${videoId}" type="video/mp4">
Your browser does not support the video tag.
</video>`;
} else {
videoPlaceHolder.innerHTML = `<h2>La vidéo n'a pas été rendered</h2>`;
try {
console.log("videoId", videoId);
currentVideoDatas = await getDataVideoFromApi(videoId);
console.log("currentVideoDatas", currentVideoDatas);
// Vérifier que currentVideoDatas existe et contient au moins un élément
if (currentVideoDatas) {
samples = JSON.parse(currentVideoDatas["measurement_ids"]);
if (currentVideoDatas.status != 0) {
videoPlaceHolder.innerHTML = `
<video class="video" controls>
<source src="${api_url}/videos/file/${videoId}" type="video/mp4">
Your browser does not support the video tag.
</video>`;
} else {
videoPlaceHolder.innerHTML = `<h2>La vidéo n'a pas été rendered</h2>`;
}
deletePlaceHolder.innerHTML = `
<button id="delete-video" class="default-delete-button" data-video-id="${videoId}">Delete Video</button>
`;
document.getElementById("delete-video").addEventListener("click", () => {
showConfirmationAlert(videoId);
});
tempoMeasure = filterAndSortMeasurementsByNumber(measurements, samples);
} else {
// Si aucune donnée n'est disponible pour cette vidéo
console.warn("Aucune donnée disponible pour la vidéo sélectionnée");
deletePlaceHolder.innerHTML = "";
videoPlaceHolder.innerHTML = `<h2>Données de vidéo non disponibles</h2>`;
samples = measurements.map((measurement) => measurement.id);
tempoMeasure = filterAndSortMeasurementsByIds(measurements, samples);
}
} catch (error) {
console.error("Erreur lors de la récupération des données vidéo:", error);
deletePlaceHolder.innerHTML = "";
videoPlaceHolder.innerHTML = `<h2>Erreur lors de la récupération des données vidéo</h2>`;
samples = measurements.map((measurement) => measurement.id);
tempoMeasure = filterAndSortMeasurementsByIds(measurements, samples);
}
deletePlaceHolder.innerHTML = `
<button id="delete-video" class="default-delete-button" data-video-id="${videoId}">Delete Video</button>
`;
document.getElementById("delete-video").addEventListener("click", () => {
showConfirmationAlert(videoId);
});
tempoMeasure = filterAndSortMeasurementsByNumber(measurements, samples);
} else {
deletePlaceHolder.innerHTML = "";
videoPlaceHolder.innerHTML = "";
@@ -530,10 +559,19 @@ function filterAndSortMeasurementsByNumber(measurements, Numbers) {
function checkVideoPath(videos, name) {
let res = true;
videos.forEach((video) => {
const videoName = video.name;
if (videoName == name) res = false;
});
// Vérifier si videos est un tableau et s'il a une méthode forEach
if (videos && Array.isArray(videos) && videos.length > 0) {
videos.forEach((video) => {
const videoName = video.name;
if (videoName == name) res = false;
});
} else {
// Si videos n'est pas un tableau valide, on considère qu'aucune vidéo n'existe
// et donc n'importe quel nom est valide
console.log("Aucune vidéo existante détectée");
}
return res;
}
@@ -579,6 +617,11 @@ async function populateTimelapseLogic(placeholder, id) {
placeholder.innerHTML = `<button class="default-button" id="show-form-button-project">
<span> Reconfigurer la caméra </span>
</button>`;
} else if (data.status == 3) {
// Affichage d'un message pour indiquer que l'arrêt est en cours
placeholder.innerHTML = `<button class="default-button" disabled>
<span> Arrêt en cours... </span>
</button>`;
} else {
placeholder.innerHTML = ``;
}