188 lines
7.4 KiB
JavaScript
188 lines
7.4 KiB
JavaScript
let ws = new WebSocket("ws://127.0.0.1:8000/ws");
|
|
let videoQueue = {}; // Hier speichern wir alle laufenden Videos
|
|
|
|
console.log("Start Script");
|
|
|
|
ws.onmessage = function(event) {
|
|
try {
|
|
let packet = JSON.parse(event.data);
|
|
console.log(packet);
|
|
|
|
if (packet.data_flow !== undefined) {
|
|
let message = packet.data_flow;
|
|
console.log(message);
|
|
|
|
// Überprüfen, ob die erwarteten Felder existieren
|
|
if (message.id && message.source && message.target && message.path) {
|
|
// Falls das Video noch nicht existiert, erstelle ein neues Element
|
|
if (!videoQueue[message.id]) {
|
|
videoQueue[message.id] = createVideoElement(message.id, message.source, message.target, message.path);
|
|
}
|
|
|
|
// Update der UI
|
|
updateVideoElement(message.id, message);
|
|
} else {
|
|
console.error("Fehlende Felder in der Nachricht", message);
|
|
}
|
|
}
|
|
|
|
if (packet.video_list !== undefined) {
|
|
let video_list = packet.video_list;
|
|
|
|
createVideoList(video_list);
|
|
createVideoListFinished(video_list);
|
|
|
|
video_list.forEach(list => {
|
|
if(list.finished === 1) {
|
|
let container = document.getElementById(list.id); // Holt das Element mit der id
|
|
if (container) {
|
|
container.remove(); // Entfernt das Element aus dem DOM
|
|
}
|
|
}
|
|
});
|
|
}
|
|
} catch (e) {
|
|
console.error("Fehler beim Parsen der WebSocket-Nachricht:", e, event.data);
|
|
}
|
|
};
|
|
|
|
ws.onerror = function(event) {
|
|
console.error("WebSocket Fehler:", event);
|
|
};
|
|
|
|
function createVideoList(video) {
|
|
let container = document.createElement("div");
|
|
container.className = "video_list";
|
|
container.id = "remaining"
|
|
|
|
let html = ``;
|
|
|
|
video.forEach(list => {
|
|
if(list.finished === 0) {
|
|
html += `<tr>
|
|
<td width="5%" align="right"><img src="/webs/mkv.png" width="20px"></td>
|
|
<td width="65%" align="left"><span>${list.file_name}</span></td>
|
|
<td width="15%" align="right"><span>${list.duration}</span></td>
|
|
<td width="15%" align="right"><span>${list.source_file_size}</span></td>
|
|
</tr>`;
|
|
}
|
|
});
|
|
|
|
container.innerHTML = `
|
|
<div class="video-info">
|
|
<div>
|
|
<table class="table_video_wait" id="remaining_list" border="0" width="100%">
|
|
${html}
|
|
</table>
|
|
</div>
|
|
</div>`;
|
|
|
|
document.getElementById("video_list").appendChild(container);
|
|
return container;
|
|
}
|
|
|
|
function createVideoListFinished(video) {
|
|
let container = document.createElement("div");
|
|
container.className = "video_list";
|
|
container.id = "finished"
|
|
|
|
let html = ``;
|
|
|
|
video.forEach(list => {
|
|
if(list.finished === 1) {
|
|
html += `<tr>
|
|
<td width="5%" align="right"><img src="/webs/mkv.png" width="20px"></td>
|
|
<td width="65%" align="left"><span>${list.file_name}</span></td>
|
|
<td width="15%" align="right"><span>${list.duration}</span></td>
|
|
<td width="15%" align="right"><span>${list.source_file_size}</span></td>
|
|
</tr>`;
|
|
}
|
|
});
|
|
|
|
container.innerHTML = `
|
|
<div class="video-info">
|
|
<div>
|
|
<table class="table_video_wait" id="remaining_list" border="0" width="100%">
|
|
${html}
|
|
</table>
|
|
</div>
|
|
</div>`;
|
|
|
|
document.getElementById("video_finished").appendChild(container);
|
|
return container;
|
|
}
|
|
|
|
function createVideoElement(id, source, target, path) {
|
|
let container = document.createElement("div");
|
|
container.className = "video";
|
|
container.id = id;
|
|
|
|
container.innerHTML = `
|
|
<div class="video-header">${source} ➝ ${target}</div>
|
|
<div class="progress-container">
|
|
<div class="progress-bar"></div>
|
|
</div>
|
|
<div><span class="path">${path}</span></div><br />
|
|
<div class="video_info">
|
|
<table class="table_video_info" border="0">
|
|
<tr>
|
|
<td class="img"><img src="/webs/animation-32.png" class="icons"></td>
|
|
<td class="label"><div title="Anzahl Frames"><span class="frame">0</span> Anz</div></td>
|
|
<td class="img"><img src="/webs/fps-32.png" class="icons"></td>
|
|
<td class="label"><div title="Frames / Sekunde"><span class="fps">0</span> fps</div></td>
|
|
<td class="img"><img src="/webs/q-24.png" class="icons"></td>
|
|
<td class="label"><div title="Quantizer"><span class="q">0 </span> Q</div></td>
|
|
</tr>
|
|
<tr>
|
|
<td class="img"><img src="/webs/ssd-30.png" class="icons"></td>
|
|
<td class="label"><div title="Dateigröße"><span class="size">0 </span> MB</div></td>
|
|
<td class="img"><img src="/webs/bitrate-30.png" class="icons"></td>
|
|
<td class="label"><div title="Bitrate"><span class="bitrate">0 </span> Mb/s</div></td>
|
|
<td class="img"><img src="/webs/speed-32.png" class="icons"></td>
|
|
<td class="label"><div title="Speed"><span class="speed">0</span> x</div></td>
|
|
</tr>
|
|
<tr>
|
|
<td class="img"><img src="/webs/timer-50.png" class="icons"></td>
|
|
<td class="label"><div title="Verbleibend"><span class="time_remaining">0 </span></div></td>
|
|
<td class="img"></td>
|
|
<td class="label"></td>
|
|
<td class="img"></td>
|
|
<td align="right"><div class="loader"><span class="finished"></span></div></td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
|
|
`;
|
|
|
|
document.getElementById("videos").appendChild(container);
|
|
return container;
|
|
}
|
|
|
|
function updateVideoElement(id, data) {
|
|
let container = document.getElementById(id);
|
|
if (!container) return;
|
|
|
|
container.querySelector(".frame").textContent = data.frame || '---';
|
|
container.querySelector(".fps").textContent = data.fps || '---';
|
|
container.querySelector(".q").textContent = data.q || '---';
|
|
container.querySelector(".size").textContent = data.size || '---';
|
|
container.querySelector(".bitrate").textContent = data.bitrate || '---';
|
|
container.querySelector(".speed").textContent = data.speed || '---';
|
|
container.querySelector(".time_remaining").textContent = data.time_remaining || '---';
|
|
|
|
let progressBar = container.querySelector(".progress-bar");
|
|
let progress = data.loading; // Annahme: `loading` kommt als Zahl von 0 bis 100
|
|
progressBar.style.width = progress + "%"
|
|
|
|
if (data.finished == 3) {
|
|
progressBar.style.background = "linear-gradient(90deg, #4caf50, #00c853)";
|
|
container.querySelector(".finished").textContent = "Läuft";
|
|
} else if(data.finished == 1) {
|
|
progressBar.style.background = "#4caf50";
|
|
container.querySelector(".finished").textContent = "Fertig";
|
|
} else if(data.finished == 2) {
|
|
progressBar.style.background = "#ff0000";
|
|
container.querySelector(".finished").textContent = "Fehler";
|
|
}
|
|
}
|
|
console.log("End Script");
|