From a8968a2ebddab689b39a368d5e3b26d4984b097e Mon Sep 17 00:00:00 2001 From: data Date: Thu, 24 Apr 2025 21:55:27 +0200 Subject: [PATCH 1/2] Queue Java Script angefangen --- app/class_file_convert.py | 2 ++ app/class_file_convert_read_out.py | 0 app/class_file_path.py | 9 +++++++ app/class_media_file.py | 0 app/class_media_file_stat.py | 0 app/class_settings.py | 0 app/main_server.py | 18 +++++--------- client/icons/close-144.png | Bin 0 -> 1323 bytes client/icons/muell-128.png | Bin 0 -> 1901 bytes client/icons/stat-100.png | Bin 0 -> 1749 bytes client/media_conversion.js | 38 +++++++++++++++++++++++++---- 11 files changed, 50 insertions(+), 17 deletions(-) mode change 100644 => 100755 app/class_file_convert.py mode change 100644 => 100755 app/class_file_convert_read_out.py mode change 100644 => 100755 app/class_file_path.py mode change 100644 => 100755 app/class_media_file.py mode change 100644 => 100755 app/class_media_file_stat.py mode change 100644 => 100755 app/class_settings.py mode change 100644 => 100755 app/main_server.py create mode 100644 client/icons/close-144.png create mode 100755 client/icons/muell-128.png create mode 100644 client/icons/stat-100.png diff --git a/app/class_file_convert.py b/app/class_file_convert.py old mode 100644 new mode 100755 index 374f2c2..a903fe0 --- a/app/class_file_convert.py +++ b/app/class_file_convert.py @@ -48,6 +48,7 @@ class Convert: logging.info(f"Starte Konvertierung: {command}") await self.obj_websocket.send_websocket(self.obj_path.active_path_to_dict()) + await self.obj_websocket.send_websocket(self.obj_path.queue_path_to_dict()) try: # Starte den Subprozess asynchron @@ -79,6 +80,7 @@ class Convert: await self.obj_websocket.send_websocket(obj.to_dict()) await self.obj_websocket.send_websocket(self.obj_path.active_path_to_dict()) + await self.obj_websocket.send_websocket(self.obj_path.queue_path_to_dict()) self.active_process.discard(obj) self.active_tasks.discard(obj) self.obj_path.save_paths() diff --git a/app/class_file_convert_read_out.py b/app/class_file_convert_read_out.py old mode 100644 new mode 100755 diff --git a/app/class_file_path.py b/app/class_file_path.py old mode 100644 new mode 100755 index 12161c0..8be4a1b --- a/app/class_file_path.py +++ b/app/class_file_path.py @@ -185,4 +185,13 @@ class Path: return {"data_convert": list_active_paths} + def queue_path_to_dict(self): + list_active_paths = {} + + for obj in self.paths.values(): + if obj.status is None: + list_active_paths.update({obj.id: obj.to_dict_active_paths()}) + + return {"data_queue": list_active_paths} + diff --git a/app/class_media_file.py b/app/class_media_file.py old mode 100644 new mode 100755 diff --git a/app/class_media_file_stat.py b/app/class_media_file_stat.py old mode 100644 new mode 100755 diff --git a/app/class_settings.py b/app/class_settings.py old mode 100644 new mode 100755 diff --git a/app/main_server.py b/app/main_server.py old mode 100644 new mode 100755 index bf4cc42..2c3c835 --- a/app/main_server.py +++ b/app/main_server.py @@ -43,6 +43,7 @@ class Server: if websocket not in self.clients: self.clients.add(websocket) await self.send_websocket(self.obj_path.active_path_to_dict()) + await self.send_websocket(self.obj_path.queue_path_to_dict()) try: async for message in websocket: @@ -84,31 +85,24 @@ class Server: # WebServer -------------------------------------------------------------------------------------------------------- + # noinspection PyUnusedLocal @staticmethod async def handle_index(request): - query = request.rel_url.query - if "debug" in query: - logging.info("Debug-Modus aktiv beim Seitenaufruf") - return web.FileResponse("./client/index.html") + # noinspection PyUnusedLocal async def handle_ip(self, request): - query = request.rel_url.query - if "debug" in query: - logging.info("Debug-Modus aktiv beim Seitenaufruf") - url = self.yaml["extern_websocket_url"] port = self.yaml["websocket_port"] websocket_https = self.yaml["websocket_https"] + return web.json_response({"extern_websocket_url": url, "websocket_port": port, "websocket_https": websocket_https}) + # noinspection PyUnusedLocal @staticmethod async def handle_stat(request): - query = request.rel_url.query - if "debug" in query: - logging.info("Debug-Modus aktiv beim Seitenaufruf") - obj_stat = Stat() + return web.json_response(obj_stat.read_stat()) async def server_http(self): diff --git a/client/icons/close-144.png b/client/icons/close-144.png new file mode 100644 index 0000000000000000000000000000000000000000..296635b177cd88c34adab35fb86d2704f5748472 GIT binary patch literal 1323 zcmY*ZYfw^Y7{<+ImF#l76k38{v}tZCcF{O&X2)A7L29M8b`#OUFe5vrWurw06On4w zLfH|w#5OH0B_|m(EioM#8#7mn3NOcIBgM3<+8%eNAN$Qb&+~rIyzlq@dFPRE*ue`3 zP6Qkdw;(hG+Ky?#9IWsdqd~^Im{_NTL?6ZB=G)D|0(Yf^h{IXF2!%FB!X>8C@Pk7^ zME|C!sRIA{*@go11N6vOOXd3&&52?`fQ$9T8?`!m=l;><%}e4roY*079t~T12FelOl}_ms<(8hPWbs zNSLFswnavH<7sCssV4}Agb){1@OZs{fC->AGL@+Yt%GiOczE`hi|XEEws`}r8221C z8ddk2n#TI;P1V)a#S&8UfVXWBlDNn)f=x5wSZdh>Vr!s>sMo5_X!2~`&#!Vz|GKw5 z*7G%5V(TthHJp!z2%BQZKa?VwzluuH*RRVItZ)2zaXPKW6%~F~e zu~F%&J^AF4dELj!Wto1gtA$lR8ouZ`(x;FmvZ~5i4|Mg6_7>;P^WZD$3acEe-{K)? zjj_g=Gu#nPZxnpCRzE>5T!b?%Bcq{qE_mI-gy>F!dm#CMb2OTKI_{ZOT>1 zg%&t$_q$^4X9fpq-v{>d)!Wp5DhNzhd(UyD8^$~}g=%yQ8$u91jT!`jtL@yVMlLk~ zYAw%05u_~xddyf>CB*-eptQN$Iv6&T6c#=N2L#3^d2Hu`6l$#(zS5WU3;<-m><)y$ z_37xoh%3$TI}ZW=c6LL=v?*<%w6xT;XC{OF)O6sW-|El~&rS#e)2tbGb)6tqowD-z zULE<*OGsJDWq~6pb{HpkAA9(P)@QTCS2bG*B~{&8u+G(=8I=imyJLZL8PBx_=gM~L0Bg;|nW9p<`}SD4AxA>`k`O%{2p#0Y{$A-XjQ zd?mVA&V1hL69A>9EY({9ZwA*Z0V-Ab@J>mo_xr_iau2Du_hr=B*rBPLv&?OAljkah zc%Sj`q*v=m)QPk0u+8*~1wQikuuWbWg^HSqMAjClYtY;4ni$Ds?tEeFd-o~Zt-?oE z=DmKM9-B7#VRexGhR)ExJqxK0rDLv2in z_5i^_j>0R+Iem=!#Xum!pQu5!2Sm=?KQZ%SA7e)mFr~`!au-!5%7ByO_S}u45u-0j z56lcvRBLT|RQI1pWTq0kJqum8w%`sSZAYO$Jc4@8Pv5SE!QjcFtH_rbFl(oi3`J%E zxe&T642(wwKD#QVyA%x?roFRCjP2&jyxeHU+@tQf(>u+z4m`iF?zuNswuFKs)GMRm z(x_{^3fZENei_gAfx_t_&sQ4ERJm#^xuTe~dco!Bt^_!uyg1Lre1p^-COl{_2RxKd zsWGp@rN13^+&t(;>i$7Ex4|WJy5O{Dx|}n!e=yKdsG-D1+Ul(gsqBvCqN->2V;4Hk z)DhaAr59#vmebv(d`lsLu4?tk);RE>^Vn^*4spWz36BxdoaodvCD6#b#Ek`A;SQJb zUN{Jgf*_MQ?^Uwc#+XhpAS|P W7)hSwQE$$&IWIJj4OIv1&HfkoA6$?C literal 0 HcmV?d00001 diff --git a/client/icons/muell-128.png b/client/icons/muell-128.png new file mode 100755 index 0000000000000000000000000000000000000000..e254b3914dc902a61b8f22633a37a1db95a167b2 GIT binary patch literal 1901 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 literal 0 HcmV?d00001 diff --git a/client/media_conversion.js b/client/media_conversion.js index ed22a64..e1c4ac8 100755 --- a/client/media_conversion.js +++ b/client/media_conversion.js @@ -17,20 +17,19 @@ async function getMediaStat() { getServerConfig() .then(data => { const externWebsocketUrl = data.extern_websocket_url; - const websocketPort = data.websocket_port; const websocketHttps = data.websocket_https if (websocketHttps === 1){ - connect = "wss" + connect = `wss://${externWebsocketUrl}` } else { - connect = "ws" + connect = `ws://${externWebsocketUrl}` } - const ws = new WebSocket(`${connect}://${externWebsocketUrl}:${websocketPort}`); + const ws = new WebSocket(connect); ws.onopen = function() { console.log("WebSocket ist geƶffnet"); - ws.send(JSON.stringify({"data_message": "Server Adresse: " + externWebsocketUrl + ":" + websocketPort})); + ws.send(JSON.stringify({"data_message": "Server Adresse: " + externWebsocketUrl})); }; ws.onmessage = function(messageEvent) { @@ -42,6 +41,8 @@ getServerConfig() updateVideoElement(packet); } else if(packet.data_convert !== undefined){ createVideoElement(packet); + } else if(packet.data_queue !== undefined){ + createWaitingSnake(packet); } } catch (e){ console.error("Error parsing data flow"); @@ -99,6 +100,33 @@ function createVideoElement(packet){ }); } +function createWaitingSnake(packet){ + const queue = document.getElementById('queue'); + + 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}

+
+
+
+
+ Quelle: ${video.key}
+
`; + + + queue.appendChild(card) + videoActive[key] = video; + } + }); +} + function updateVideoElement(packet){ let video = packet.data_flow; let container = document.getElementById(video.id); From d25fe773537de09f1bf1847ae669ec2567a0c9b5 Mon Sep 17 00:00:00 2001 From: data Date: Thu, 24 Apr 2025 22:05:36 +0200 Subject: [PATCH 2/2] Queue Java Script angefangen --- app/cfg/settings.yaml | 4 ++-- app/main_server.py | 1 + client/media_conversion.js | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/app/cfg/settings.yaml b/app/cfg/settings.yaml index 7e73cbc..c6b507f 100644 --- a/app/cfg/settings.yaml +++ b/app/cfg/settings.yaml @@ -3,10 +3,10 @@ log_level: DEBUG log_rotation: time path_file: "media_path.yaml" server_ip: "0.0.0.0" -extern_http_url: localhost +extern_http_url: localhost:8080 webserver_port: 8080 webserver_https: 0 -extern_websocket_url: localhost +extern_websocket_url: localhost:8000 websocket_port: 8000 websocket_https: 0 task_max: 1 diff --git a/app/main_server.py b/app/main_server.py index 2c3c835..c0755c8 100755 --- a/app/main_server.py +++ b/app/main_server.py @@ -51,6 +51,7 @@ class Server: if data.get("data_path"): self.obj_path.receive_paths(data.get("data_path")) + await self.send_websocket(self.obj_path.queue_path_to_dict()) if var_convert_active == False and self.yaml['autostart']: await self.obj_convert.snake_waiting() diff --git a/client/media_conversion.js b/client/media_conversion.js index e1c4ac8..acb6a10 100755 --- a/client/media_conversion.js +++ b/client/media_conversion.js @@ -103,8 +103,8 @@ function createVideoElement(packet){ function createWaitingSnake(packet){ const queue = document.getElementById('queue'); - Object.keys(packet.data_convert).forEach(key => { - const video = packet.data_convert[key]; + Object.keys(packet.data_queue).forEach(key => { + const video = packet.data_queue[key]; if(!videoActive[key]){ const card = document.createElement('div');