Some checks failed
Tests / Go Tests (push) Has been cancelled
Tests / Python Tests (push) Has been cancelled
Tests / Integration Tests (push) Has been cancelled
Tests / Go Lint (push) Has been cancelled
Tests / Python Lint (push) Has been cancelled
Tests / Security Scan (push) Has been cancelled
Tests / All Checks Passed (push) Has been cancelled
Security Scanning / Secret Scanning (push) Has been cancelled
Security Scanning / Dependency Vulnerability Scan (push) Has been cancelled
Security Scanning / Go Security Scan (push) Has been cancelled
Security Scanning / Python Security Scan (push) Has been cancelled
Security Scanning / Node.js Security Scan (push) Has been cancelled
Security Scanning / Docker Image Security (push) Has been cancelled
Security Scanning / Security Summary (push) Has been cancelled
CI/CD Pipeline / Go Tests (push) Has been cancelled
CI/CD Pipeline / Python Tests (push) Has been cancelled
CI/CD Pipeline / Website Tests (push) Has been cancelled
CI/CD Pipeline / Linting (push) Has been cancelled
CI/CD Pipeline / Security Scan (push) Has been cancelled
CI/CD Pipeline / Docker Build & Push (push) Has been cancelled
CI/CD Pipeline / Integration Tests (push) Has been cancelled
CI/CD Pipeline / Deploy to Staging (push) Has been cancelled
CI/CD Pipeline / Deploy to Production (push) Has been cancelled
CI/CD Pipeline / CI Summary (push) Has been cancelled
ci/woodpecker/manual/build-ci-image Pipeline was successful
ci/woodpecker/manual/main Pipeline failed
All services: admin-v2, studio-v2, website, ai-compliance-sdk, consent-service, klausur-service, voice-service, and infrastructure. Large PDFs and compiled binaries excluded via .gitignore.
77 lines
2.5 KiB
Python
77 lines
2.5 KiB
Python
"""
|
|
Meetings Module - Active Meetings Page
|
|
List of currently active meetings
|
|
"""
|
|
|
|
from ..templates import ICONS, render_base_page
|
|
|
|
|
|
def active_meetings() -> str:
|
|
"""Active meetings list"""
|
|
content = f'''
|
|
<div class="page-header">
|
|
<div>
|
|
<h1 class="page-title">Aktive Meetings</h1>
|
|
<p class="page-subtitle">Laufende Videokonferenzen und Schulungen</p>
|
|
</div>
|
|
<button class="btn btn-primary" onclick="window.location.href='/meetings/quick'">
|
|
{ICONS['plus']} Neues Meeting starten
|
|
</button>
|
|
</div>
|
|
|
|
<!-- Active Meetings List -->
|
|
<div class="meeting-list" id="activeMeetingsList">
|
|
<div style="text-align: center; padding: 3rem; color: var(--bp-text-muted);">
|
|
<p>Keine aktiven Meetings</p>
|
|
<p style="font-size: 0.875rem; margin-top: 0.5rem;">
|
|
Starten Sie ein neues Meeting oder warten Sie, bis ein geplantes Meeting beginnt.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
|
|
<script>
|
|
async function loadActiveMeetings() {{
|
|
try {{
|
|
const response = await fetch('/api/meetings/active');
|
|
if (response.ok) {{
|
|
const meetings = await response.json();
|
|
renderMeetings(meetings);
|
|
}}
|
|
}} catch (error) {{
|
|
console.error('Error loading active meetings:', error);
|
|
}}
|
|
}}
|
|
|
|
function renderMeetings(meetings) {{
|
|
const container = document.getElementById('activeMeetingsList');
|
|
|
|
if (!meetings || meetings.length === 0) {{
|
|
return;
|
|
}}
|
|
|
|
container.innerHTML = meetings.map(meeting => `
|
|
<div class="meeting-item">
|
|
<div class="meeting-time">
|
|
<div class="meeting-time-value">${{meeting.participants || 0}}</div>
|
|
<div class="meeting-time-date">Teilnehmer</div>
|
|
</div>
|
|
<div class="meeting-info">
|
|
<div class="meeting-title">${{meeting.title}}</div>
|
|
<div class="meeting-meta">
|
|
<span>{ICONS['clock']} Seit ${{meeting.started_at}}</span>
|
|
</div>
|
|
</div>
|
|
<span class="meeting-badge badge-live">LIVE</span>
|
|
<div class="meeting-actions">
|
|
<button class="btn btn-primary" onclick="window.location.href='/meetings/room/${{meeting.room_name}}'">Beitreten</button>
|
|
</div>
|
|
</div>
|
|
`).join('');
|
|
}}
|
|
|
|
loadActiveMeetings();
|
|
</script>
|
|
'''
|
|
|
|
return render_base_page("Aktive Meetings", content, "active")
|