Compare commits

8 Commits
dev ... main

Author SHA1 Message Date
arussac
f669733c29 Ajout de marges inférieures pour améliorer l'espacement des éléments dans le style du projet.
All checks were successful
SSH Frontend Deploy / ssh-deploy (push) Successful in 3s
2025-04-28 08:14:04 +02:00
arussac
62439c0e90 Ajout de l'ID à l'élément de téléchargement de l'application et affichage du lien au chargement de la page.
All checks were successful
SSH Frontend Deploy / ssh-deploy (push) Successful in 3s
2025-04-27 16:01:56 +02:00
arussac
73b9b199fd Ajout d'un lien pour télécharger l'application et ajout du fichier APK.
All checks were successful
SSH Frontend Deploy / ssh-deploy (push) Successful in 6s
2025-04-27 15:58:02 +02:00
3927e2f857 Ajout de la description du projet dans le carousel avec un style de texte amélioré.
All checks were successful
SSH Frontend Deploy / ssh-deploy (push) Successful in 3s
2025-04-27 15:12:10 +02:00
c9579f6346 Ajout de la gestion des projets actifs pour la caméra : vérification avant de démarrer un nouveau timelapse, réinitialisation lors de l'arrêt de la caméra et validation lors de l'upload manuel.
All checks were successful
SSH Frontend Deploy / ssh-deploy (push) Successful in 2s
2025-04-27 15:07:26 +02:00
c43e8d53f7 Amélioration de la fonction start_timelapse : ajout de plusieurs formats d'ID pour le backend et logs pour le débogage.
All checks were successful
SSH Frontend Deploy / ssh-deploy (push) Successful in 2s
2025-04-27 14:59:24 +02:00
arussac
2dae04098d Ajout d'une marge inférieure pour la section vidéo afin d'améliorer l'espacement visuel.
All checks were successful
SSH Frontend Deploy / ssh-deploy (push) Successful in 3s
2025-04-27 12:39:19 +02:00
2097bbfaec Merge pull request 'FUSIOONNNNN' (#1) from dev into main
All checks were successful
SSH Frontend Deploy / ssh-deploy (push) Successful in 3s
Reviewed-on: #1
2025-04-27 12:36:19 +02:00
5 changed files with 50 additions and 4 deletions

BIN
app-release.apk Normal file

Binary file not shown.

View File

@@ -2,6 +2,7 @@
float: left;
display: inline;
width: 49%;
margin-bottom: 5vh;
}
.picture_placeHolder {
@@ -176,4 +177,12 @@
text-align: center;
margin-top: 20px;
margin-bottom: 20px;
}
.video {
margin-bottom: 2vh;
}
#content1 {
margin-bottom: 5vh;
}

View File

@@ -10,7 +10,7 @@
</head>
<body id="body">
<button class="default-button" id="download"><span>Télécharger l'App</span></button>
<a id="app" href="./app-release.apk"><button class="default-button" id="download" ><span>Télécharger l'App</span></button></a>
<button class="default-button" id="show-form-button"><span>Ajouter un projet</span></button>
<div id="customAlert" class="modal">
<div class="modal-content">

View File

@@ -1,6 +1,7 @@
// Global variables
let global_project_list;
let current_project = "";
let active_camera_project = null; // ID du projet actuellement utilisé par la caméra
function formatDate(isoString) {
const date = new Date(isoString);
@@ -184,11 +185,27 @@ async function renderVideo(id){
async function start_timelapse(id,frequency,nbimages){
try {
// Vérifier si un autre projet est déjà actif avec la caméra
if (active_camera_project !== null && active_camera_project !== id) {
const confirmation = confirm(`Un autre projet (ID: ${active_camera_project}) est déjà en cours avec la caméra. Voulez-vous arrêter ce projet et configurer la caméra pour le projet actuel?`);
if (!confirmation) {
alert("Configuration annulée. La caméra reste configurée pour le projet précédent.");
return false;
}
// Si l'utilisateur confirme, on continue et on va redéfinir active_camera_project
}
// Utilisation de plusieurs formats possibles pour garantir que le backend reçoit l'ID
const mydata = JSON.stringify({
projectId: id,
project_id: id, // Format avec underscore (convention standard REST)
projectId: id, // Format camelCase
id: id, // Format simple
interval: frequency,
nb_images: nbimages
});
console.log("Données envoyées à /procedure/start:", mydata); // Log pour débogage
const response = await $.ajax({
url: api_url.concat(`/procedure/start`),
method: "POST",
@@ -197,9 +214,13 @@ async function start_timelapse(id,frequency,nbimages){
data: mydata
});
// Définir ce projet comme le projet actif pour la caméra
active_camera_project = id;
alert("Configuration de la caméra réussie");
return response;
} catch (error) {
console.error("Erreur détaillée:", error); // Log plus détaillé de l'erreur
alert("Erreur lors de la configuration de la caméra: " + error);
throw error;
}
@@ -218,6 +239,9 @@ async function stopCamera(id){
data: mydata
});
// Réinitialiser le statut du projet actif sur la caméra
active_camera_project = null;
alert("La caméra a été arrêtée avec succès");
return response;
} catch (error) {
@@ -228,6 +252,17 @@ async function stopCamera(id){
async function manualUpload(imageFile, projectId, timestamp, temperature, humidity) {
try {
// Vérifier que l'upload est fait pour le projet actif de la caméra
if (active_camera_project === null) {
alert("Aucun projet n'est actif avec la caméra. Veuillez configurer un projet avant d'effectuer un upload manuel.");
return false;
}
if (projectId !== active_camera_project) {
alert(`L'upload manuel n'est possible que pour le projet actif (ID: ${active_camera_project}). Vous essayez d'uploader pour le projet ${projectId}.`);
return false;
}
// Create FormData to send the file and metadata
const formData = new FormData();
formData.append('image', imageFile);
@@ -244,10 +279,10 @@ async function manualUpload(imageFile, projectId, timestamp, temperature, humidi
contentType: false, // Lets browser set the content type with boundary
});
alert("Image uploaded successfully");
alert("Image téléchargée avec succès");
return response;
} catch (error) {
alert("Error uploading image: " + error);
alert("Erreur lors du téléchargement de l'image : " + error);
throw error;
}
}

View File

@@ -130,6 +130,7 @@ function setupCarousel(global_project_list) {
projectDiv.classList.add(letter[index]);
projectDiv.innerHTML = `
<h2>${project.name}</h2>
<p class="project-description" style="font-size: 0.8em; font-style: italic; margin-top: -5px; margin-bottom: 10px;">${project.description || 'Pas de description'}</p>
<p><strong>Date de début :</strong> ${formatDateToFrench(project.start_date)}</p>
<p><strong>Statut :</strong> ${formatStatusWithColor(parseInt(project.status))}</p>
<div class="project_buttons">
@@ -223,6 +224,7 @@ window.addEventListener('DOMContentLoaded', (event) => {
child.style.display = 'none';
}
});
document.getElementById('app').style.display = 'block';
const newH1 = document.createElement('h1');
newH1.textContent = "Caméra Timelapse sur mobile, utilisez l'app !!!";
newH1.classList.add('global_title_h1');