diff --git a/js/projet_detail.js b/js/projet_detail.js index 88ce1ad..6d68b15 100644 --- a/js/projet_detail.js +++ b/js/projet_detail.js @@ -3,15 +3,16 @@ document.addEventListener("DOMContentLoaded", async () => { const urlParams = new URLSearchParams(window.location.search); const projectId = urlParams.get("id"); const data = await getAllProject(); - const DataMetrics = await getDataMetrics(projectId); - - const project = data.find((project) => project.id == projectId); - if (project) { - for (obj of document.getElementsByClassName("name_project")) - obj.innerHTML = project.name; - } else { - console.error("Project not found"); + let DataMetrics; + try { + DataMetrics = await getDataMetrics(projectId); + } catch (error) { + if (error.status !== 404) { + console.error(error); + } + DataMetrics = 404; // Assign a fallback value } + const start_timelapse_button = document.getElementById("start-timelapse"); const videoSelector = document.getElementById("video_selector"); const numberPicker = document.getElementById("number-picker"); const choiceSelect = document.getElementById("choice"); @@ -28,21 +29,19 @@ document.addEventListener("DOMContentLoaded", async () => { // Add event listeners for the "Début" and "Fin" input fields const firstInput = document.getElementById("first"); const lastInput = document.getElementById("last"); - const start_timelapse_button = document.getElementById("start-timelapse"); let selectedNumbers = []; populateTimelapseLogic(start_timelapse_button, projectId).then(() => { - if(document - .getElementById("show-form-button-project") != null){ - document - .getElementById("show-form-button-project") - .addEventListener("click", showFormCamera); + if (document.getElementById("show-form-button-project") != null) { + document + .getElementById("show-form-button-project") + .addEventListener("click", showFormCamera); document - .getElementById("close-form-button-camera") - .addEventListener("click", hideFormCamera); - } + .getElementById("close-form-button-camera") + .addEventListener("click", hideFormCamera); + } if (document.getElementById("commencer") != null) { document .getElementById("commencer") @@ -51,9 +50,14 @@ document.addEventListener("DOMContentLoaded", async () => { const hours = document.getElementById("hours").value; const minutes = document.getElementById("minutes").value; const frequency = days * 1440 + hours * 60 + minutes; - start_timelapse(projectId, frequency).then(() => { - location.reload(); - }); + if(frequency >= 3) { + const nbrimages = document.getElementById("totalImages").value; + start_timelapse(projectId, frequency, nbrimages).then(() => { + location.reload(); + }); + } else { + alert("La fréquence doit être supérieure à 3 minutes !"); + } }); } if (document.getElementById("stop-camera") != null) { @@ -65,194 +69,221 @@ document.addEventListener("DOMContentLoaded", async () => { }); } }); + - choiceSelect.addEventListener("change", toggleContainers); - - if (addNumberButton) { - addNumberButton.addEventListener("click", addSelectedNumber); - } - videoSelector.addEventListener("change", () => generateViewMetric(projectId)); - document - .getElementById("show-form-button-camera") - .addEventListener("click", showFormProject); - document - .getElementById("close-form-button-project") - .addEventListener("click", hideFormProject); - - document - .getElementById("increment-button") - .addEventListener("click", incrementDuration); - document - .getElementById("decrement-button") - .addEventListener("click", decrementDuration); - document.getElementById("submit").addEventListener("click", handleFormSubmit); - document - .getElementById("projets") - .addEventListener("click", navigateToProjects); - document.getElementById("toggle-view").addEventListener("click", toggleView); - - firstInput.addEventListener("input", updateRange); - lastInput.addEventListener("input", updateRange); - - generateViewMetric(projectId); - PopulateSelect(videoSelector, projectId); - - function toggleContainers() { - if (choiceSelect.value === "oneByOne") { - oneByOneContainer.style.display = "block"; - firstLastContainer.style.display = "none"; - populateNumberBoard(DataMetrics.length); - setRequiredAttributes(); - } else { - oneByOneContainer.style.display = "none"; - firstLastContainer.style.display = "block"; - const last = document.getElementById("last"); - last.value = DataMetrics.length; - last.max = DataMetrics.length; - document.getElementById("first").max = last.value; - setRequiredAttributes(); + if (addNumberButton) { + addNumberButton.addEventListener("click", addSelectedNumber); } - } - toggleContainers(); - - function setRequiredAttributes() { - const firstInput = document.getElementById("first"); - const lastInput = document.getElementById("last"); - const denominatorInput = document.getElementById("denominator"); - - if (firstLastContainer.style.display === "block") { - firstInput.required = true; - lastInput.required = true; - denominatorInput.required = true; - } else { - firstInput.required = false; - lastInput.required = false; - denominatorInput.required = false; - } - } - - function addSelectedNumber() { - const selectedNumber = parseInt(numberPicker.value, 10); - if (!selectedNumbers.includes(selectedNumber)) { - selectedNumbers.push(selectedNumber); - numberPicker.remove(numberPicker.selectedIndex); - } - } - - function showFormCamera() { - formContainerCamera.style.display = "flex"; - } - - function hideFormCamera() { - formContainerCamera.style.display = "none"; - } - function showFormProject() { - formContainerProject.style.display = "flex"; - } - - function hideFormProject() { - formContainerProject.style.display = "none"; - } - function incrementDuration() { - durationInput.value = parseInt(durationInput.value) + 1; - } - - function decrementDuration() { - if (parseInt(durationInput.value) > 0) { - durationInput.value = parseInt(durationInput.value) - 1; - } - } - - async function handleFormSubmit(event) { - event.preventDefault(); - const data = await getDataProjectVideosFromApi(projectId); - const nameVideo = document.getElementById("name").value; - const videoDuration = durationInput.value; - const videoResolution = document.getElementById("resolution").value; - - if (videoDuration <= 0) { - alert("La durée de la vidéo doit être supérieur à 0"); - return 0; - } - if (!checkVideoPath(data, nameVideo) || !nameVideo.length > 0) { - alert( - 'Le nom : " ' + - nameVideo + - ' " est déjà pris ou vide ! \n' + - "veuillez en trouver un autre" - ); - return 0; - } - const choice = choiceSelect.value; - const measurementIds = getMeasurementsIdsFromForm( - choice, - firstInput, - lastInput + videoSelector.addEventListener("change", () => + generateViewMetric(projectId) ); - postNewVideo( - projectId, - measurementIds, - nameVideo, - videoResolution, - videoDuration - ).then(() => { - alert( - "Nouvelle vidéo enregistrée :\nNom : " + - nameVideo + - "\nRésolution : " + - videoResolution + - "\nDurée : " + - videoDuration + - " secondes" + document + .getElementById("show-form-button-camera") + .addEventListener("click", showFormProject); + document + .getElementById("close-form-button-project") + .addEventListener("click", hideFormProject); + + document + .getElementById("increment-button") + .addEventListener("click", incrementDuration); + document + .getElementById("decrement-button") + .addEventListener("click", decrementDuration); + document + .getElementById("submit") + .addEventListener("click", handleFormSubmit); + document + .getElementById("projets") + .addEventListener("click", navigateToProjects); + document + .getElementById("toggle-view") + .addEventListener("click", toggleView); + + firstInput.addEventListener("input", updateRange); + lastInput.addEventListener("input", updateRange); + + function toggleContainers() { + if (choiceSelect.value === "oneByOne") { + oneByOneContainer.style.display = "block"; + firstLastContainer.style.display = "none"; + populateNumberBoard(DataMetrics.length); + setRequiredAttributes(); + } else { + oneByOneContainer.style.display = "none"; + firstLastContainer.style.display = "block"; + const last = document.getElementById("last"); + last.value = DataMetrics.length; + last.max = DataMetrics.length; + document.getElementById("first").max = last.value; + setRequiredAttributes(); + } + } + toggleContainers(); + + function setRequiredAttributes() { + const firstInput = document.getElementById("first"); + const lastInput = document.getElementById("last"); + const denominatorInput = document.getElementById("denominator"); + + if (firstLastContainer.style.display === "block") { + firstInput.required = true; + lastInput.required = true; + denominatorInput.required = true; + } else { + firstInput.required = false; + lastInput.required = false; + denominatorInput.required = false; + } + } + + function addSelectedNumber() { + const selectedNumber = parseInt(numberPicker.value, 10); + if (!selectedNumbers.includes(selectedNumber)) { + selectedNumbers.push(selectedNumber); + numberPicker.remove(numberPicker.selectedIndex); + } + } + + function showFormCamera() { + formContainerCamera.style.display = "flex"; + } + + function hideFormCamera() { + formContainerCamera.style.display = "none"; + } + function showFormProject() { + formContainerProject.style.display = "flex"; + } + + function hideFormProject() { + formContainerProject.style.display = "none"; + } + function incrementDuration() { + durationInput.value = parseInt(durationInput.value) + 1; + } + + function decrementDuration() { + if (parseInt(durationInput.value) > 0) { + durationInput.value = parseInt(durationInput.value) - 1; + } + } + + async function handleFormSubmit(event) { + event.preventDefault(); + const data = await getDataProjectVideosFromApi(projectId); + const nameVideo = document.getElementById("name").value; + const videoDuration = durationInput.value; + const videoResolution = document.getElementById("resolution").value; + + if (videoDuration <= 0) { + alert("La durée de la vidéo doit être supérieur à 0"); + return 0; + } + if (!checkVideoPath(data, nameVideo) || !nameVideo.length > 0) { + alert( + 'Le nom : " ' + + nameVideo + + ' " est déjà pris ou vide ! \n' + + "veuillez en trouver un autre" + ); + return 0; + } + const choice = choiceSelect.value; + const measurementIds = getMeasurementsIdsFromForm( + choice, + firstInput, + lastInput ); - }); - } - - function navigateToProjects() { - window.location.href = "../index.html"; - } - - function toggleView() { - if (tableImage.classList.contains("hiddenTable")) { - tableImage.classList.remove("hiddenTable"); - tableImage.classList.add("full-view"); - } else { - tableImage.classList.remove("full-view"); - tableImage.classList.add("hiddenTable"); - } - } - - function populateNumberBoard(length) { - numberBoard.innerHTML = ""; - numberBoard.style.gridTemplateColumns = `repeat(auto-fill, minmax(50px, 1fr))`; - for (let i = 1; i <= length; i++) { - const numberButton = document.createElement("button"); - numberButton.classList.add("number-button"); - numberButton.textContent = i; - numberButton.addEventListener("click", () => - highlightNumber(numberButton) - ); - numberBoard.appendChild(numberButton); - } - } - - function highlightNumber(button) { - button.classList.toggle("highlight"); - } - - function updateRange() { - const firstValue = parseInt(firstInput.value); - const lastValue = parseInt(lastInput.value); - - if (firstValue > lastValue) { - lastInput.value = firstValue; - } - if (lastValue < firstValue) { - firstInput.value = lastValue; + postNewVideo( + projectId, + measurementIds, + nameVideo, + videoResolution, + videoDuration + ).then(() => { + alert( + "Nouvelle vidéo enregistrée :\nNom : " + + nameVideo + + "\nRésolution : " + + videoResolution + + "\nDurée : " + + videoDuration + + " secondes" + ); + }); } - firstInput.max = lastValue; - lastInput.min = firstValue; + function navigateToProjects() { + window.location.href = "../index.html"; + } + + function toggleView() { + if (tableImage.classList.contains("hiddenTable")) { + tableImage.classList.remove("hiddenTable"); + tableImage.classList.add("full-view"); + } else { + tableImage.classList.remove("full-view"); + tableImage.classList.add("hiddenTable"); + } + } + + function populateNumberBoard(length) { + numberBoard.innerHTML = ""; + numberBoard.style.gridTemplateColumns = `repeat(auto-fill, minmax(50px, 1fr))`; + for (let i = 1; i <= length; i++) { + const numberButton = document.createElement("button"); + numberButton.classList.add("number-button"); + numberButton.textContent = i; + numberButton.addEventListener("click", () => + highlightNumber(numberButton) + ); + numberBoard.appendChild(numberButton); + } + } + + function highlightNumber(button) { + button.classList.toggle("highlight"); + } + + function updateRange() { + const firstValue = parseInt(firstInput.value); + const lastValue = parseInt(lastInput.value); + + if (firstValue > lastValue) { + lastInput.value = firstValue; + } + if (lastValue < firstValue) { + firstInput.value = lastValue; + } + + firstInput.max = lastValue; + lastInput.min = firstValue; + } + if (DataMetrics != 404) { + const project = data.find((project) => project.id == projectId); + if (project) { + for (obj of document.getElementsByClassName("name_project")) + obj.innerHTML = project.name; + } else { + console.error("Project not found"); + } + + choiceSelect.addEventListener("change", toggleContainers); + + generateViewMetric(projectId); + PopulateSelect(videoSelector, projectId); + } else { + document.getElementById("metric_viewer").style.display = "none"; + document.getElementById("video-container").style.display = "none"; + document.getElementById("delete-placeholder").style.display = "none"; + document.getElementById("content1").style.display = "none"; + document.getElementById("form-container-project").style.display = "none"; + document.getElementById("form-container-camera").style.display = "none"; + document.getElementById("show-form-button-camera").style.display = "none"; + for (el of document.querySelectorAll(".box")) { + el.style.display = "none"; + } } }); @@ -303,108 +334,112 @@ async function generateViewMetric(projectId) { const videoId = document.getElementById("video_selector").value; measurements = await getDataMetrics(projectId); - let samples; - if (videoId != -1) { - currentVideoDatas = await getDataVideoFromApi(videoId); - samples = JSON.parse(currentVideoDatas[0]["measurement_ids"]); - if (currentVideoDatas[0].status != 0) { - videoPlaceHolder.innerHTML = ` + 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 = ` `; - } else { - videoPlaceHolder.innerHTML = `