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

View File

@@ -37,8 +37,9 @@ function formatStatusWithColor(status) {
colorClass = "status-idle"; colorClass = "status-idle";
break; break;
case 3: case 3:
statusText = "En cours d'arrêt"; statusText = "En cours d\'arrêt";
colorClass = "status-stopping"; colorClass = "status-stopping";
break; // Ajout du break manquant ici
default: default:
statusText = "Inconnu"; statusText = "Inconnu";
colorClass = "status-unknown"; colorClass = "status-unknown";
@@ -149,6 +150,14 @@ function setupCarousel(global_project_list) {
deleteButton.addEventListener('click', (event) => { deleteButton.addEventListener('click', (event) => {
event.stopPropagation(); event.stopPropagation();
const projectName = project.name; 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('alertMessage').textContent = `Veux-tu vraiment supprimer le projet : ${projectName} ?`;
document.getElementById('customAlert').style.display = 'block'; document.getElementById('customAlert').style.display = 'block';

View File

@@ -86,9 +86,13 @@ document.addEventListener("DOMContentLoaded", async () => {
const frequency = days * 1440 + hours * 60 + minutes; const frequency = days * 1440 + hours * 60 + minutes;
if(frequency >= 3) { if(frequency >= 3) {
const nbrimages = document.getElementById("totalImages").value; const nbrimages = document.getElementById("totalImages").value;
start_timelapse(projectId, frequency, nbrimages).then(() => { try {
// Attendre que la requête API soit terminée avant de recharger la page
await start_timelapse(projectId, frequency, nbrimages);
location.reload(); location.reload();
}); } catch (error) {
console.error("Erreur lors du démarrage du timelapse:", error);
}
} else { } else {
alert("La fréquence doit être supérieure à 3 minutes !"); alert("La fréquence doit être supérieure à 3 minutes !");
} }
@@ -98,8 +102,13 @@ document.addEventListener("DOMContentLoaded", async () => {
document document
.getElementById("stop-camera") .getElementById("stop-camera")
.addEventListener("click", async () => { .addEventListener("click", async () => {
stopCamera(projectId); try {
// Attendre que la requête API soit terminée avant de recharger la page
await stopCamera(projectId);
location.reload(); location.reload();
} catch (error) {
console.error("Erreur lors de l'arrêt de la caméra:", error);
}
}); });
} }
}); });
@@ -379,9 +388,14 @@ async function generateViewMetric(projectId) {
if (measurements != 404) { if (measurements != 404) {
let samples; let samples;
if (videoId != -1) { if (videoId != -1) {
try {
console.log("videoId", videoId);
currentVideoDatas = await getDataVideoFromApi(videoId); currentVideoDatas = await getDataVideoFromApi(videoId);
samples = JSON.parse(currentVideoDatas[0]["measurement_ids"]); console.log("currentVideoDatas", currentVideoDatas);
if (currentVideoDatas[0].status != 0) { // 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 = ` videoPlaceHolder.innerHTML = `
<video class="video" controls> <video class="video" controls>
<source src="${api_url}/videos/file/${videoId}" type="video/mp4"> <source src="${api_url}/videos/file/${videoId}" type="video/mp4">
@@ -397,6 +411,21 @@ async function generateViewMetric(projectId) {
showConfirmationAlert(videoId); showConfirmationAlert(videoId);
}); });
tempoMeasure = filterAndSortMeasurementsByNumber(measurements, samples); 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);
}
} else { } else {
deletePlaceHolder.innerHTML = ""; deletePlaceHolder.innerHTML = "";
videoPlaceHolder.innerHTML = ""; videoPlaceHolder.innerHTML = "";
@@ -530,10 +559,19 @@ function filterAndSortMeasurementsByNumber(measurements, Numbers) {
function checkVideoPath(videos, name) { function checkVideoPath(videos, name) {
let res = true; let res = true;
// 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) => { videos.forEach((video) => {
const videoName = video.name; const videoName = video.name;
if (videoName == name) res = false; 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; return res;
} }
@@ -579,6 +617,11 @@ async function populateTimelapseLogic(placeholder, id) {
placeholder.innerHTML = `<button class="default-button" id="show-form-button-project"> placeholder.innerHTML = `<button class="default-button" id="show-form-button-project">
<span> Reconfigurer la caméra </span> <span> Reconfigurer la caméra </span>
</button>`; </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 { } else {
placeholder.innerHTML = ``; placeholder.innerHTML = ``;
} }