/** * @returns {Promise<{server_ip: string, server_port: number}>} */ let videoActive = [] async function getServerConfig() { const response = await fetch('/api/ip'); return await response.json(); } async function getMediaStat() { const response = await fetch('/api/stats'); return await response.json(); } getServerConfig() .then(data => { const externWebsocketUrl = data.extern_websocket_url; const websocketPort = data.websocket_port; const websocketHttps = data.websocket_https if (websocketHttps === 1){ connect = "wss" } else { connect = "ws" } const ws = new WebSocket(`${connect}://${externWebsocketUrl}:${websocketPort}`); ws.onopen = function() { console.log("WebSocket ist geöffnet"); ws.send(JSON.stringify({"data_message": "Server Adresse: " + externWebsocketUrl + ":" + websocketPort})); }; ws.onmessage = function(messageEvent) { try{ console.log(messageEvent.data); let packet = JSON.parse(messageEvent.data); if (packet.data_flow !== undefined){ updateVideoElement(packet); } else if(packet.data_convert !== undefined){ createVideoElement(packet); } } catch (e){ console.error("Error parsing data flow"); } }; ws.onclose = function() { console.log("WebSocket wurde geschlossen"); }; ws.onerror = function(errorEvent) { console.error("WebSocket-Fehler: ", errorEvent); }; }) .catch(error => { console.error('Error fetching settings:', error); }); function createVideoElement(packet){ const active_Conversions = document.getElementById('active-conversions'); Object.keys(packet.data_convert).forEach(key => { const video = packet.data_convert[key]; if(!videoActive[key]){ const card = document.createElement('div'); card.className = 'video-card'; card.id = key card.innerHTML = `

${video.source_file_name} - ${video.target_file_name}


Frames: 0 Anz
Größe: 0
FPS: 0
Quanitzer: 0
Bitrate: 0
Speed: 0
Verbleibend: 0
Zeit: 0
Quelle: ${video.key}
`; active_Conversions.appendChild(card) videoActive[key] = video; } }); } function updateVideoElement(packet){ let video = packet.data_flow; let container = document.getElementById(video.id); container.querySelector(".frames").textContent = video.frames || 0; container.querySelector(".size").textContent = video.size[0] || 0; container.querySelector(".size_unit").textContent = video.size[1] || "KB"; container.querySelector(".fps").textContent = video.fps || 0; container.querySelector(".quantizer").textContent = video.quantizer || 0; container.querySelector(".bitrate").textContent = video.bitrate[0] || 0; container.querySelector(".bitrate_unit").textContent = video.bitrate[1] || 0; container.querySelector(".speed").textContent = video.speed || 0; container.querySelector(".time_remaining").textContent = video.time_remaining || 0; container.querySelector(".time").textContent = video.time || 0; let progressBar = container.querySelector(".progress-bar"); let progress = video.loading; // Annahme: `loading` kommt als Zahl von 0 bis 100 progressBar.style.width = progress + "%" if (videoActive[video.id].status == 3) { progressBar.style.background = "linear-gradient(90deg, #4caf50, #00c853)"; container.querySelector(".finished").textContent = "Läuft"; } else if(videoActive[video.id].status == 0) { progressBar.style.background = "#4caf50"; container.querySelector(".finished").textContent = "Fertig"; } else if(videoActive[video.id].status == 1) { progressBar.style.background = "#ff0000"; container.querySelector(".finished").textContent = "Fehler"; } }