diff --git a/main/templates/course_detail.html b/main/templates/course_detail.html index b9314ee..e79c313 100644 --- a/main/templates/course_detail.html +++ b/main/templates/course_detail.html @@ -128,44 +128,18 @@ socket.onmessage = function(e) { } catch { return; } + // Vérifie le format des données reçues let rowData; - function formatHMS(seconds) { - // Copie la logique du templatetag temps_format - if (seconds === undefined || seconds === null || seconds === "") return "--:--:--"; - let total_seconds = 0; - if (typeof seconds === 'string' && seconds.includes(':')) { - // déjà formaté - return seconds; - } - if (!isNaN(Number(seconds))) { - total_seconds = Math.floor(Number(seconds)); - } else { - return "--:--:--"; - } - let h = Math.floor(total_seconds / 3600); - let m = Math.floor((total_seconds % 3600) / 60); - let s = total_seconds % 60; - return (h < 10 ? '0' : '') + h + 'h' + (m < 10 ? '0' : '') + m + 'm' + (s < 10 ? '0' : '') + s + 's'; - } - if (Array.isArray(data)) { - // Si la ligne reçue n'a pas 5 colonnes, on complète avec des vides - rowData = data.slice(0, 5); - while (rowData.length < 5) rowData.push(''); - // Si le temps est en secondes, on le formate - if (rowData.length > 4 && /^\d+$/.test(rowData[4])) { - rowData[4] = formatHMS(rowData[4]); - } - } else if (typeof data === 'object' && data !== null) { + + if (typeof data === 'object' && data !== null) { // Transforme l'objet en tableau dans l'ordre attendu - let temps = data.temps; - if (/^\d+$/.test(temps)) temps = formatHMS(temps); rowData = [ data.rang, data.nom || (data.coureur && data.coureur.nom), data.prenom || (data.coureur && data.coureur.prenom), data.classe || (data.coureur && data.coureur.classe), - temps + data.temps ]; } else { // Format inconnu, ignore diff --git a/main/views.py b/main/views.py index 8fe5323..05e68d9 100644 --- a/main/views.py +++ b/main/views.py @@ -22,14 +22,13 @@ from PIL import Image def seconds_to_hms(delta: timedelta) -> str: - """Format a timedelta as H:MM:SS (handles days too).""" if delta is None: return '' total = int(delta.total_seconds()) hours = total // 3600 minutes = (total % 3600) // 60 seconds = total % 60 - return f"{hours}:{minutes:02d}:{seconds:02d}" + return f"{hours}h{minutes:02d}m{seconds:02d}s" @login_required def main_view(request): @@ -141,10 +140,6 @@ def course_detail_view(request, course_id): is_finished = True return redirect('course_detail', course_id=course.id) - if request.headers.get('x-requested-with') == 'XMLHttpRequest': - from django.template.loader import render_to_string - tbody = render_to_string('arrivees_tbody.html', {'arrivees': arrivees}) - return HttpResponse(tbody) return render(request, 'course_detail.html', { 'title': 'Course : '+course.nom+" ("+str(course.date)+")", 'course': course, @@ -152,6 +147,7 @@ def course_detail_view(request, course_id): 'is_started': is_started, 'is_finished': is_finished }) + @login_required def scan_view(request): courses = Course.objects.filter(owner=request.user, depart__isnull=False, fin__isnull=True) diff --git a/static/mp3/error.mp3 b/static/mp3/error.mp3 new file mode 100644 index 0000000..396da7e Binary files /dev/null and b/static/mp3/error.mp3 differ diff --git a/static/mp3/ok.mp3 b/static/mp3/ok.mp3 new file mode 100644 index 0000000..cce6abc Binary files /dev/null and b/static/mp3/ok.mp3 differ