From d159a5140d7a40ed34a1d83924b745c8b53a9f95 Mon Sep 17 00:00:00 2001 From: DJ2LS <75909252+DJ2LS@users.noreply.github.com> Date: Sun, 5 Jun 2022 19:11:09 +0200 Subject: [PATCH 01/19] first change of info fields --- tnc/data_handler.py | 210 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 180 insertions(+), 30 deletions(-) diff --git a/tnc/data_handler.py b/tnc/data_handler.py index 92d8b5cd..a1b9ddee 100644 --- a/tnc/data_handler.py +++ b/tnc/data_handler.py @@ -395,6 +395,7 @@ class DATA: key=value, for each item. E.g.: self.send_data_to_socket_queue( arq="received", + status="success", uuid=uniqueid, timestamp=timestamp, mycallsign=str(mycallsign, "UTF-8"), @@ -526,7 +527,7 @@ class DATA: static.TNC_STATE = "BUSY" static.ARQ_STATE = True - static.INFO.append("ARQ;RECEIVING") + # static.INFO.append("ARQ;RECEIVING") # Update data_channel timestamp self.data_channel_last_received = int(time.time()) @@ -743,6 +744,7 @@ class DATA: ) self.send_data_to_socket_queue( arq="received", + status="success", uuid=uniqueid, timestamp=timestamp, mycallsign=str(mycallsign, "UTF-8"), @@ -750,7 +752,7 @@ class DATA: dxgrid=str(static.DXGRID, "UTF-8"), data=base64_data, ) - static.INFO.append("ARQ;RECEIVING;SUCCESS") + # static.INFO.append("ARQ;RECEIVING;SUCCESS") self.log.info( "[TNC] ARQ | RX | SENDING DATA FRAME ACK", @@ -773,7 +775,19 @@ class DATA: ) else: - static.INFO.append("ARQ;RECEIVING;FAILED") + # static.INFO.append("ARQ;RECEIVING;FAILED") + + self.send_data_to_socket_queue( + arq="transmission", + status="failed", + uuid=uniqueid, + timestamp=timestamp, + mycallsign=str(mycallsign, "UTF-8"), + dxcallsign=str(static.DXCALLSIGN, "UTF-8"), + dxgrid=str(static.DXGRID, "UTF-8"), + data=base64_data, + ) + self.log.warning( "[TNC] ARQ | RX | DATA FRAME NOT SUCESSFULLY RECEIVED!", e="wrong crc", @@ -823,7 +837,7 @@ class DATA: # static.TOTAL_BYTES = round(len(data_out) / 1024, 2) static.TOTAL_BYTES = len(data_out) frame_total_size = len(data_out).to_bytes(4, byteorder="big") - static.INFO.append("ARQ;TRANSMITTING") + # static.INFO.append("ARQ;TRANSMITTING") self.send_data_to_socket_queue( arq="transmission", @@ -1026,12 +1040,12 @@ class DATA: if self.data_frame_ack_received: self.send_data_to_socket_queue( arq="transmission", - status="success", + status="transmitted", uuid=self.transmission_uuid, percent=static.ARQ_TRANSMISSION_PERCENT, bytesperminute=static.ARQ_BYTES_PER_MINUTE, ) - static.INFO.append("ARQ;TRANSMITTING;SUCCESS") + # static.INFO.append("ARQ;TRANSMITTING;SUCCESS") self.log.info( "[TNC] ARQ | TX | DATA TRANSMITTED!", @@ -1048,7 +1062,7 @@ class DATA: percent=static.ARQ_TRANSMISSION_PERCENT, bytesperminute=static.ARQ_BYTES_PER_MINUTE, ) - static.INFO.append("ARQ;TRANSMITTING;FAILED") + # static.INFO.append("ARQ;TRANSMITTING;FAILED") self.log.info( "[TNC] ARQ | TX | TRANSMISSION FAILED OR TIME OUT!", @@ -1175,7 +1189,7 @@ class DATA: percent=static.ARQ_TRANSMISSION_PERCENT, bytesperminute=static.ARQ_BYTES_PER_MINUTE, ) - static.INFO.append("ARQ;TRANSMITTING;FAILED") + # static.INFO.append("ARQ;TRANSMITTING;FAILED") # Update data_channel timestamp self.arq_session_last_received = int(time.time()) @@ -1355,7 +1369,19 @@ class DATA: + "]", state=static.ARQ_SESSION_STATE, ) - static.INFO.append("ARQ;SESSION;CLOSE") + # static.INFO.append("ARQ;SESSION;CLOSE") + + self.send_data_to_socket_queue( + arq="session", + status="close", + uuid=uniqueid, + timestamp=timestamp, + mycallsign=str(mycallsign, "UTF-8"), + dxcallsign=str(static.DXCALLSIGN, "UTF-8"), + dxgrid=str(static.DXGRID, "UTF-8"), + data=base64_data, + ) + self.IS_ARQ_SESSION_MASTER = False static.ARQ_SESSION = False self.arq_cleanup() @@ -1391,7 +1417,18 @@ class DATA: + "]", state=static.ARQ_SESSION_STATE, ) - static.INFO.append("ARQ;SESSION;CLOSE") + # static.INFO.append("ARQ;SESSION;CLOSE") + + self.send_data_to_socket_queue( + arq="session", + status="close", + uuid=uniqueid, + timestamp=timestamp, + mycallsign=str(mycallsign, "UTF-8"), + dxcallsign=str(static.DXCALLSIGN, "UTF-8"), + dxgrid=str(static.DXGRID, "UTF-8"), + data=base64_data, + ) self.IS_ARQ_SESSION_MASTER = False static.ARQ_SESSION = False @@ -1536,7 +1573,17 @@ class DATA: while not static.ARQ_STATE: time.sleep(0.01) for attempt in range(self.data_channel_max_retries): - static.INFO.append("DATACHANNEL;OPENING") + # static.INFO.append("DATACHANNEL;OPENING") + + self.send_data_to_socket_queue( + arq="transmission", + status="opening", + mycallsign=str(mycallsign, "UTF-8"), + dxcallsign=str(static.DXCALLSIGN, "UTF-8"), + dxgrid=str(static.DXGRID, "UTF-8"), + + ) + self.log.info( "[TNC] ARQ | DATA | TX | [" + str(mycallsign, "UTF-8") @@ -1556,7 +1603,8 @@ class DATA: return True # `data_channel_max_retries` attempts have been sent. Aborting attempt & cleaning up - static.INFO.append("DATACHANNEL;FAILED") + # static.INFO.append("DATACHANNEL;FAILED") + self.log.debug( "[TNC] arq_open_data_channel:", transmission_uuid=self.transmission_uuid ) @@ -1597,7 +1645,14 @@ class DATA: """ self.arq_file_transfer = True self.is_IRS = True - static.INFO.append("DATACHANNEL;RECEIVEDOPENER") + # static.INFO.append("DATACHANNEL;RECEIVEDOPENER") + self.send_data_to_socket_queue( + arq="transmission", + status="opening", + mycallsign=str(mycallsign, "UTF-8"), + dxcallsign=str(static.DXCALLSIGN, "UTF-8"), + dxgrid=str(static.DXGRID, "UTF-8"), + ) static.DXCALLSIGN_CRC = bytes(data_in[4:7]) static.DXCALLSIGN = helpers.bytes_to_callsign(bytes(data_in[7:13])) @@ -1697,7 +1752,14 @@ class DATA: """ protocol_version = int.from_bytes(bytes(data_in[13:14]), "big") if protocol_version == static.ARQ_PROTOCOL_VERSION: - static.INFO.append("DATACHANNEL;OPEN") + # static.INFO.append("DATACHANNEL;OPEN") + self.send_data_to_socket_queue( + arq="transmission", + status="open", + mycallsign=str(mycallsign, "UTF-8"), + dxcallsign=str(static.DXCALLSIGN, "UTF-8"), + dxgrid=str(static.DXGRID, "UTF-8"), + ) frametype = int.from_bytes(bytes(data_in[:1]), "big") if frametype == 228: @@ -1737,7 +1799,12 @@ class DATA: else: static.TNC_STATE = "IDLE" static.ARQ_STATE = False - static.INFO.append("PROTOCOL;VERSION_MISMATCH") + # static.INFO.append("PROTOCOL;VERSION_MISMATCH") + self.send_data_to_socket_queue( + arq="transmission", + status="failed", + reason="protocol version missmatch", + ) # TODO: We should display a message to this effect on the UI. self.log.warning( "[TNC] protocol version mismatch:", @@ -1757,7 +1824,13 @@ class DATA: static.DXCALLSIGN = dxcallsign static.DXCALLSIGN_CRC = helpers.get_crc_24(static.DXCALLSIGN) - static.INFO.append("PING;SENDING") + # static.INFO.append("PING;SENDING") + self.send_data_to_socket_queue( + ping="sending", + mycallsign=str(mycallsign, "UTF-8"), + dxcallsign=str(static.DXCALLSIGN, "UTF-8"), + dxgrid=str(static.DXGRID, "UTF-8"), + ) self.log.info( "[TNC] PING REQ [" + str(self.mycallsign, "UTF-8") @@ -1801,8 +1874,14 @@ class DATA: static.HAMLIB_FREQUENCY, ) - static.INFO.append("PING;RECEIVING") + # static.INFO.append("PING;RECEIVING") + self.send_data_to_socket_queue( + ping="receiving", + mycallsign=str(mycallsign, "UTF-8"), + dxcallsign=str(static.DXCALLSIGN, "UTF-8"), + dxgrid=str(static.DXGRID, "UTF-8"), + ) # check if callsign ssid override valid, mycallsign = helpers.check_callsign(self.mycallsign, data_in[1:4]) if not valid: @@ -1865,8 +1944,15 @@ class DATA: static.HAMLIB_FREQUENCY, ) - static.INFO.append("PING;RECEIVEDACK") + # static.INFO.append("PING;RECEIVEDACK") + self.send_data_to_socket_queue( + ping="receiving", + status="ack", + mycallsign=str(mycallsign, "UTF-8"), + dxcallsign=str(static.DXCALLSIGN, "UTF-8"), + dxgrid=str(static.DXGRID, "UTF-8"), + ) self.log.info( "[TNC] PING ACK [" + str(self.mycallsign, "UTF-8") @@ -1892,7 +1978,13 @@ class DATA: static.TNC_STATE = "IDLE" static.ARQ_STATE = False - static.INFO.append("TRANSMISSION;STOPPED") + # static.INFO.append("TRANSMISSION;STOPPED") + self.send_data_to_socket_queue( + arq="transmission", + status="stopped", + mycallsign=str(mycallsign, "UTF-8"), + dxcallsign=str(static.DXCALLSIGN, "UTF-8"), + dxgrid=str(static.DXGRID, "UTF-8"), ) self.arq_cleanup() def received_stop_transmission(self) -> None: @@ -1902,7 +1994,17 @@ class DATA: self.log.warning("[TNC] Stopping transmission!") static.TNC_STATE = "IDLE" static.ARQ_STATE = False - static.INFO.append("TRANSMISSION;STOPPED") + # static.INFO.append("TRANSMISSION;STOPPED") + self.send_data_to_socket_queue( + arq="transmission", + status="stopped", + uuid=uniqueid, + timestamp=timestamp, + mycallsign=str(mycallsign, "UTF-8"), + dxcallsign=str(static.DXCALLSIGN, "UTF-8"), + dxgrid=str(static.DXGRID, "UTF-8"), + data=base64_data, + ) self.arq_cleanup() # ----------- BROADCASTS @@ -1925,7 +2027,14 @@ class DATA: and not self.arq_file_transfer and not static.BEACON_PAUSE ): - static.INFO.append("BEACON;SENDING") + # static.INFO.append("BEACON;SENDING") + self.send_data_to_socket_queue( + beacon="transmitting", + interval=str(self.beacon_interval, "UTF-8"), + mycallsign=str(mycallsign, "UTF-8"), + dxcallsign=str(static.DXCALLSIGN, "UTF-8"), + dxgrid=str(static.DXGRID, "UTF-8"), + ) self.log.info( "[TNC] Sending beacon!", interval=self.beacon_interval ) @@ -1976,8 +2085,13 @@ class DATA: dxgrid=str(dxgrid, "UTF-8"), snr=str(static.SNR), ) - static.INFO.append("BEACON;RECEIVING") - + # static.INFO.append("BEACON;RECEIVING") + self.send_data_to_socket_queue( + beacon="received", + mycallsign=str(mycallsign, "UTF-8"), + dxcallsign=str(static.DXCALLSIGN, "UTF-8"), + dxgrid=str(static.DXGRID, "UTF-8"), + ) self.log.info( "[TNC] BEACON RCVD [" + str(dxcallsign, "UTF-8") @@ -2000,8 +2114,13 @@ class DATA: Transmit a CQ """ self.log.info("[TNC] CQ CQ CQ") - static.INFO.append("CQ;SENDING") - + # static.INFO.append("CQ;SENDING") + self.send_data_to_socket_queue( + cq="transmitting", + mycallsign=str(mycallsign, "UTF-8"), + dxcallsign=str(static.DXCALLSIGN, "UTF-8"), + dxgrid=str(static.DXGRID, "UTF-8"), + ) cq_frame = bytearray(14) cq_frame[:1] = bytes([200]) cq_frame[1:7] = helpers.callsign_to_bytes(self.mycallsign) @@ -2031,7 +2150,13 @@ class DATA: self.log.debug("[TNC] received_cq:", dxcallsign=dxcallsign) dxgrid = bytes(helpers.decode_grid(data_in[7:11]), "UTF-8") - static.INFO.append("CQ;RECEIVING") + # static.INFO.append("CQ;RECEIVING") + self.send_data_to_socket_queue( + cq="receiving", + mycallsign=str(mycallsign, "UTF-8"), + dxcallsign=str(static.DXCALLSIGN, "UTF-8"), + dxgrid=str(static.DXGRID, "UTF-8"), + ) self.log.info( "[TNC] CQ RCVD [" + str(dxcallsign, "UTF-8") @@ -2064,7 +2189,13 @@ class DATA: # duration, plus overhead. Set the wait interval to be random between 0 and 2s # in 0.5s increments. helpers.wait(randrange(0, 20, 5) / 10.0) - static.INFO.append("QRV;SENDING") + # static.INFO.append("QRV;SENDING") + self.send_data_to_socket_queue( + qrv="transmitting", + mycallsign=str(mycallsign, "UTF-8"), + dxcallsign=str(static.DXCALLSIGN, "UTF-8"), + dxgrid=str(static.DXGRID, "UTF-8"), + ) self.log.info("[TNC] Sending QRV!") qrv_frame = bytearray(14) @@ -2102,7 +2233,7 @@ class DATA: dxgrid=str(dxgrid, "UTF-8"), snr=str(static.SNR), ) - static.INFO.append("QRV;RECEIVING") + # static.INFO.append("QRV;RECEIVING") self.log.info( "[TNC] QRV RCVD [" @@ -2404,7 +2535,16 @@ class DATA: + str(static.DXCALLSIGN, "UTF-8") + "]" ) - static.INFO.append("ARQ;RECEIVING;FAILED") + # static.INFO.append("ARQ;RECEIVING;FAILED") + self.send_data_to_socket_queue( + arq="transmission", + status="failed", + uuid=uniqueid, + timestamp=timestamp, + mycallsign=str(mycallsign, "UTF-8"), + dxcallsign=str(static.DXCALLSIGN, "UTF-8"), + dxgrid=str(static.DXGRID, "UTF-8"), + ) self.arq_cleanup() def arq_session_keep_alive_watchdog(self) -> None: @@ -2427,7 +2567,17 @@ class DATA: + str(static.DXCALLSIGN, "UTF-8") + "]" ) - static.INFO.append("ARQ;SESSION;TIMEOUT") + # static.INFO.append("ARQ;SESSION;TIMEOUT") + self.send_data_to_socket_queue( + arq="session", + status="failed", + reason="timeout", + uuid=uniqueid, + timestamp=timestamp, + mycallsign=str(mycallsign, "UTF-8"), + dxcallsign=str(static.DXCALLSIGN, "UTF-8"), + dxgrid=str(static.DXGRID, "UTF-8"), + ) self.close_session() def heartbeat(self) -> None: From 6613142fce82102e2fbb55283088e7375604e405 Mon Sep 17 00:00:00 2001 From: dj2ls Date: Mon, 6 Jun 2022 20:31:15 +0200 Subject: [PATCH 02/19] updated messages --- tnc/data_handler.py | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/tnc/data_handler.py b/tnc/data_handler.py index a1b9ddee..48817e11 100644 --- a/tnc/data_handler.py +++ b/tnc/data_handler.py @@ -743,8 +743,8 @@ class DATA: [uniqueid, timestamp, static.DXCALLSIGN, static.DXGRID, base64_data] ) self.send_data_to_socket_queue( - arq="received", - status="success", + arq="transmission", + status="received", uuid=uniqueid, timestamp=timestamp, mycallsign=str(mycallsign, "UTF-8"), @@ -785,11 +785,10 @@ class DATA: mycallsign=str(mycallsign, "UTF-8"), dxcallsign=str(static.DXCALLSIGN, "UTF-8"), dxgrid=str(static.DXGRID, "UTF-8"), - data=base64_data, ) self.log.warning( - "[TNC] ARQ | RX | DATA FRAME NOT SUCESSFULLY RECEIVED!", + "[TNC] ARQ | RX | DATA FRAME NOT SUCCESSFULLY RECEIVED!", e="wrong crc", expected=data_frame_crc, received=data_frame_crc_received, @@ -1379,7 +1378,6 @@ class DATA: mycallsign=str(mycallsign, "UTF-8"), dxcallsign=str(static.DXCALLSIGN, "UTF-8"), dxgrid=str(static.DXGRID, "UTF-8"), - data=base64_data, ) self.IS_ARQ_SESSION_MASTER = False @@ -1427,7 +1425,6 @@ class DATA: mycallsign=str(mycallsign, "UTF-8"), dxcallsign=str(static.DXCALLSIGN, "UTF-8"), dxgrid=str(static.DXGRID, "UTF-8"), - data=base64_data, ) self.IS_ARQ_SESSION_MASTER = False @@ -1581,7 +1578,6 @@ class DATA: mycallsign=str(mycallsign, "UTF-8"), dxcallsign=str(static.DXCALLSIGN, "UTF-8"), dxgrid=str(static.DXGRID, "UTF-8"), - ) self.log.info( @@ -1755,7 +1751,7 @@ class DATA: # static.INFO.append("DATACHANNEL;OPEN") self.send_data_to_socket_queue( arq="transmission", - status="open", + status="opened", mycallsign=str(mycallsign, "UTF-8"), dxcallsign=str(static.DXCALLSIGN, "UTF-8"), dxgrid=str(static.DXGRID, "UTF-8"), @@ -1984,7 +1980,8 @@ class DATA: status="stopped", mycallsign=str(mycallsign, "UTF-8"), dxcallsign=str(static.DXCALLSIGN, "UTF-8"), - dxgrid=str(static.DXGRID, "UTF-8"), ) + dxgrid=str(static.DXGRID, "UTF-8"), + ) self.arq_cleanup() def received_stop_transmission(self) -> None: @@ -2003,7 +2000,6 @@ class DATA: mycallsign=str(mycallsign, "UTF-8"), dxcallsign=str(static.DXCALLSIGN, "UTF-8"), dxgrid=str(static.DXGRID, "UTF-8"), - data=base64_data, ) self.arq_cleanup() From acd8b345c18698ba3f0dfcbbb0f68dcb50357892 Mon Sep 17 00:00:00 2001 From: dj2ls Date: Mon, 6 Jun 2022 20:44:35 +0200 Subject: [PATCH 03/19] reduced message information --- tnc/data_handler.py | 70 +++------------------------------------------ 1 file changed, 4 insertions(+), 66 deletions(-) diff --git a/tnc/data_handler.py b/tnc/data_handler.py index 48817e11..929199e3 100644 --- a/tnc/data_handler.py +++ b/tnc/data_handler.py @@ -781,10 +781,6 @@ class DATA: arq="transmission", status="failed", uuid=uniqueid, - timestamp=timestamp, - mycallsign=str(mycallsign, "UTF-8"), - dxcallsign=str(static.DXCALLSIGN, "UTF-8"), - dxgrid=str(static.DXGRID, "UTF-8"), ) self.log.warning( @@ -1373,11 +1369,6 @@ class DATA: self.send_data_to_socket_queue( arq="session", status="close", - uuid=uniqueid, - timestamp=timestamp, - mycallsign=str(mycallsign, "UTF-8"), - dxcallsign=str(static.DXCALLSIGN, "UTF-8"), - dxgrid=str(static.DXGRID, "UTF-8"), ) self.IS_ARQ_SESSION_MASTER = False @@ -1420,11 +1411,6 @@ class DATA: self.send_data_to_socket_queue( arq="session", status="close", - uuid=uniqueid, - timestamp=timestamp, - mycallsign=str(mycallsign, "UTF-8"), - dxcallsign=str(static.DXCALLSIGN, "UTF-8"), - dxgrid=str(static.DXGRID, "UTF-8"), ) self.IS_ARQ_SESSION_MASTER = False @@ -1575,9 +1561,6 @@ class DATA: self.send_data_to_socket_queue( arq="transmission", status="opening", - mycallsign=str(mycallsign, "UTF-8"), - dxcallsign=str(static.DXCALLSIGN, "UTF-8"), - dxgrid=str(static.DXGRID, "UTF-8"), ) self.log.info( @@ -1608,6 +1591,7 @@ class DATA: self.send_data_to_socket_queue( arq="transmission", status="failed", + reason="unknown", uuid=self.transmission_uuid, percent=static.ARQ_TRANSMISSION_PERCENT, bytesperminute=static.ARQ_BYTES_PER_MINUTE, @@ -1645,9 +1629,6 @@ class DATA: self.send_data_to_socket_queue( arq="transmission", status="opening", - mycallsign=str(mycallsign, "UTF-8"), - dxcallsign=str(static.DXCALLSIGN, "UTF-8"), - dxgrid=str(static.DXGRID, "UTF-8"), ) static.DXCALLSIGN_CRC = bytes(data_in[4:7]) static.DXCALLSIGN = helpers.bytes_to_callsign(bytes(data_in[7:13])) @@ -1752,9 +1733,6 @@ class DATA: self.send_data_to_socket_queue( arq="transmission", status="opened", - mycallsign=str(mycallsign, "UTF-8"), - dxcallsign=str(static.DXCALLSIGN, "UTF-8"), - dxgrid=str(static.DXGRID, "UTF-8"), ) frametype = int.from_bytes(bytes(data_in[:1]), "big") @@ -1823,9 +1801,6 @@ class DATA: # static.INFO.append("PING;SENDING") self.send_data_to_socket_queue( ping="sending", - mycallsign=str(mycallsign, "UTF-8"), - dxcallsign=str(static.DXCALLSIGN, "UTF-8"), - dxgrid=str(static.DXGRID, "UTF-8"), ) self.log.info( "[TNC] PING REQ [" @@ -1874,7 +1849,6 @@ class DATA: self.send_data_to_socket_queue( ping="receiving", - mycallsign=str(mycallsign, "UTF-8"), dxcallsign=str(static.DXCALLSIGN, "UTF-8"), dxgrid=str(static.DXGRID, "UTF-8"), ) @@ -1921,8 +1895,7 @@ class DATA: static.DXGRID = bytes(data_in[7:13]).rstrip(b"\x00") self.send_data_to_socket_queue( - type="ping", - status="ack", + ping="acknowledge", uuid=str(uuid.uuid4()), timestamp=int(time.time()), mycallsign=str(self.mycallsign, "UTF-8"), @@ -1942,13 +1915,6 @@ class DATA: # static.INFO.append("PING;RECEIVEDACK") - self.send_data_to_socket_queue( - ping="receiving", - status="ack", - mycallsign=str(mycallsign, "UTF-8"), - dxcallsign=str(static.DXCALLSIGN, "UTF-8"), - dxgrid=str(static.DXGRID, "UTF-8"), - ) self.log.info( "[TNC] PING ACK [" + str(self.mycallsign, "UTF-8") @@ -1978,9 +1944,6 @@ class DATA: self.send_data_to_socket_queue( arq="transmission", status="stopped", - mycallsign=str(mycallsign, "UTF-8"), - dxcallsign=str(static.DXCALLSIGN, "UTF-8"), - dxgrid=str(static.DXGRID, "UTF-8"), ) self.arq_cleanup() @@ -2026,10 +1989,7 @@ class DATA: # static.INFO.append("BEACON;SENDING") self.send_data_to_socket_queue( beacon="transmitting", - interval=str(self.beacon_interval, "UTF-8"), - mycallsign=str(mycallsign, "UTF-8"), - dxcallsign=str(static.DXCALLSIGN, "UTF-8"), - dxgrid=str(static.DXGRID, "UTF-8"), + interval=self.beacon_interval, ) self.log.info( "[TNC] Sending beacon!", interval=self.beacon_interval @@ -2113,9 +2073,6 @@ class DATA: # static.INFO.append("CQ;SENDING") self.send_data_to_socket_queue( cq="transmitting", - mycallsign=str(mycallsign, "UTF-8"), - dxcallsign=str(static.DXCALLSIGN, "UTF-8"), - dxgrid=str(static.DXGRID, "UTF-8"), ) cq_frame = bytearray(14) cq_frame[:1] = bytes([200]) @@ -2188,9 +2145,6 @@ class DATA: # static.INFO.append("QRV;SENDING") self.send_data_to_socket_queue( qrv="transmitting", - mycallsign=str(mycallsign, "UTF-8"), - dxcallsign=str(static.DXCALLSIGN, "UTF-8"), - dxgrid=str(static.DXGRID, "UTF-8"), ) self.log.info("[TNC] Sending QRV!") @@ -2220,14 +2174,7 @@ class DATA: dxgrid = bytes(helpers.decode_grid(data_in[7:11]), "UTF-8") self.send_data_to_socket_queue( - type="qrv", - status="received", - uuid=str(uuid.uuid4()), - timestamp=int(time.time()), - mycallsign=str(self.mycallsign, "UTF-8"), - dxcallsign=str(dxcallsign, "UTF-8"), - dxgrid=str(dxgrid, "UTF-8"), - snr=str(static.SNR), + qrv="received", ) # static.INFO.append("QRV;RECEIVING") @@ -2536,10 +2483,6 @@ class DATA: arq="transmission", status="failed", uuid=uniqueid, - timestamp=timestamp, - mycallsign=str(mycallsign, "UTF-8"), - dxcallsign=str(static.DXCALLSIGN, "UTF-8"), - dxgrid=str(static.DXGRID, "UTF-8"), ) self.arq_cleanup() @@ -2568,11 +2511,6 @@ class DATA: arq="session", status="failed", reason="timeout", - uuid=uniqueid, - timestamp=timestamp, - mycallsign=str(mycallsign, "UTF-8"), - dxcallsign=str(static.DXCALLSIGN, "UTF-8"), - dxgrid=str(static.DXGRID, "UTF-8"), ) self.close_session() From 79f1f8e9b21e45f9ec73c8f8c66fa1958d82a5d6 Mon Sep 17 00:00:00 2001 From: dj2ls Date: Mon, 6 Jun 2022 20:50:36 +0200 Subject: [PATCH 04/19] added simple message identifier --- tnc/data_handler.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/tnc/data_handler.py b/tnc/data_handler.py index 929199e3..1a524703 100644 --- a/tnc/data_handler.py +++ b/tnc/data_handler.py @@ -394,6 +394,7 @@ class DATA: Dictionary containing the data to be sent, in the format: key=value, for each item. E.g.: self.send_data_to_socket_queue( + freedata="tnc-message", arq="received", status="success", uuid=uniqueid, @@ -743,6 +744,7 @@ class DATA: [uniqueid, timestamp, static.DXCALLSIGN, static.DXGRID, base64_data] ) self.send_data_to_socket_queue( + freedata="tnc-message", arq="transmission", status="received", uuid=uniqueid, @@ -778,6 +780,7 @@ class DATA: # static.INFO.append("ARQ;RECEIVING;FAILED") self.send_data_to_socket_queue( + freedata="tnc-message", arq="transmission", status="failed", uuid=uniqueid, @@ -835,6 +838,7 @@ class DATA: # static.INFO.append("ARQ;TRANSMITTING") self.send_data_to_socket_queue( + freedata="tnc-message", arq="transmission", status="transmitting", uuid=self.transmission_uuid, @@ -1023,6 +1027,7 @@ class DATA: ) self.send_data_to_socket_queue( + freedata="tnc-message", arq="transmission", status="transmitting", uuid=self.transmission_uuid, @@ -1034,6 +1039,7 @@ class DATA: if self.data_frame_ack_received: self.send_data_to_socket_queue( + freedata="tnc-message", arq="transmission", status="transmitted", uuid=self.transmission_uuid, @@ -1051,6 +1057,7 @@ class DATA: else: self.send_data_to_socket_queue( + freedata="tnc-message", arq="transmission", status="failed", uuid=self.transmission_uuid, @@ -1178,6 +1185,7 @@ class DATA: static.HAMLIB_FREQUENCY, ) self.send_data_to_socket_queue( + freedata="tnc-message", arq="transmission", status="failed", uuid=self.transmission_uuid, @@ -1367,6 +1375,7 @@ class DATA: # static.INFO.append("ARQ;SESSION;CLOSE") self.send_data_to_socket_queue( + freedata="tnc-message", arq="session", status="close", ) @@ -1409,6 +1418,7 @@ class DATA: # static.INFO.append("ARQ;SESSION;CLOSE") self.send_data_to_socket_queue( + freedata="tnc-message", arq="session", status="close", ) @@ -1559,6 +1569,7 @@ class DATA: # static.INFO.append("DATACHANNEL;OPENING") self.send_data_to_socket_queue( + freedata="tnc-message", arq="transmission", status="opening", ) @@ -1589,6 +1600,7 @@ class DATA: ) self.send_data_to_socket_queue( + freedata="tnc-message", arq="transmission", status="failed", reason="unknown", @@ -1627,6 +1639,7 @@ class DATA: self.is_IRS = True # static.INFO.append("DATACHANNEL;RECEIVEDOPENER") self.send_data_to_socket_queue( + freedata="tnc-message", arq="transmission", status="opening", ) @@ -1731,6 +1744,7 @@ class DATA: if protocol_version == static.ARQ_PROTOCOL_VERSION: # static.INFO.append("DATACHANNEL;OPEN") self.send_data_to_socket_queue( + freedata="tnc-message", arq="transmission", status="opened", ) @@ -1775,6 +1789,7 @@ class DATA: static.ARQ_STATE = False # static.INFO.append("PROTOCOL;VERSION_MISMATCH") self.send_data_to_socket_queue( + freedata="tnc-message", arq="transmission", status="failed", reason="protocol version missmatch", @@ -1800,6 +1815,7 @@ class DATA: # static.INFO.append("PING;SENDING") self.send_data_to_socket_queue( + freedata="tnc-message", ping="sending", ) self.log.info( @@ -1848,6 +1864,7 @@ class DATA: # static.INFO.append("PING;RECEIVING") self.send_data_to_socket_queue( + freedata="tnc-message", ping="receiving", dxcallsign=str(static.DXCALLSIGN, "UTF-8"), dxgrid=str(static.DXGRID, "UTF-8"), @@ -1895,6 +1912,7 @@ class DATA: static.DXGRID = bytes(data_in[7:13]).rstrip(b"\x00") self.send_data_to_socket_queue( + freedata="tnc-message", ping="acknowledge", uuid=str(uuid.uuid4()), timestamp=int(time.time()), @@ -1942,6 +1960,7 @@ class DATA: static.ARQ_STATE = False # static.INFO.append("TRANSMISSION;STOPPED") self.send_data_to_socket_queue( + freedata="tnc-message", arq="transmission", status="stopped", ) @@ -1956,6 +1975,7 @@ class DATA: static.ARQ_STATE = False # static.INFO.append("TRANSMISSION;STOPPED") self.send_data_to_socket_queue( + freedata="tnc-message", arq="transmission", status="stopped", uuid=uniqueid, @@ -1988,6 +2008,7 @@ class DATA: ): # static.INFO.append("BEACON;SENDING") self.send_data_to_socket_queue( + freedata="tnc-message", beacon="transmitting", interval=self.beacon_interval, ) @@ -2032,6 +2053,7 @@ class DATA: dxgrid = bytes(data_in[9:13]).rstrip(b"\x00") self.send_data_to_socket_queue( + freedata="tnc-message", type="beacon", status="received", uuid=str(uuid.uuid4()), @@ -2043,6 +2065,7 @@ class DATA: ) # static.INFO.append("BEACON;RECEIVING") self.send_data_to_socket_queue( + freedata="tnc-message", beacon="received", mycallsign=str(mycallsign, "UTF-8"), dxcallsign=str(static.DXCALLSIGN, "UTF-8"), @@ -2072,6 +2095,7 @@ class DATA: self.log.info("[TNC] CQ CQ CQ") # static.INFO.append("CQ;SENDING") self.send_data_to_socket_queue( + freedata="tnc-message", cq="transmitting", ) cq_frame = bytearray(14) @@ -2105,6 +2129,7 @@ class DATA: dxgrid = bytes(helpers.decode_grid(data_in[7:11]), "UTF-8") # static.INFO.append("CQ;RECEIVING") self.send_data_to_socket_queue( + freedata="tnc-message", cq="receiving", mycallsign=str(mycallsign, "UTF-8"), dxcallsign=str(static.DXCALLSIGN, "UTF-8"), @@ -2144,6 +2169,7 @@ class DATA: helpers.wait(randrange(0, 20, 5) / 10.0) # static.INFO.append("QRV;SENDING") self.send_data_to_socket_queue( + freedata="tnc-message", qrv="transmitting", ) self.log.info("[TNC] Sending QRV!") @@ -2174,6 +2200,7 @@ class DATA: dxgrid = bytes(helpers.decode_grid(data_in[7:11]), "UTF-8") self.send_data_to_socket_queue( + freedata="tnc-message", qrv="received", ) # static.INFO.append("QRV;RECEIVING") @@ -2480,6 +2507,7 @@ class DATA: ) # static.INFO.append("ARQ;RECEIVING;FAILED") self.send_data_to_socket_queue( + freedata="tnc-message", arq="transmission", status="failed", uuid=uniqueid, @@ -2508,6 +2536,7 @@ class DATA: ) # static.INFO.append("ARQ;SESSION;TIMEOUT") self.send_data_to_socket_queue( + freedata="tnc-message", arq="session", status="failed", reason="timeout", From 0c0e8dd8caac59beb3f96d2327d2e1d9d64d573e Mon Sep 17 00:00:00 2001 From: dj2ls Date: Mon, 6 Jun 2022 21:07:41 +0200 Subject: [PATCH 05/19] use uuid and mycallsign within class --- tnc/data_handler.py | 30 +++++++++++++----------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/tnc/data_handler.py b/tnc/data_handler.py index 1a524703..16978b65 100644 --- a/tnc/data_handler.py +++ b/tnc/data_handler.py @@ -397,9 +397,9 @@ class DATA: freedata="tnc-message", arq="received", status="success", - uuid=uniqueid, + uuid=self.transmission_uuid, timestamp=timestamp, - mycallsign=str(mycallsign, "UTF-8"), + mycallsign=str(self.mycallsign, "UTF-8"), dxcallsign=str(static.DXCALLSIGN, "UTF-8"), dxgrid=str(static.DXGRID, "UTF-8"), data=base64_data, @@ -676,7 +676,7 @@ class DATA: if bof_position >= 0: payload = static.RX_FRAME_BUFFER[ - bof_position + len(self.data_frame_bof) : eof_position + bof_position + len(self.data_frame_bof): eof_position ] frame_length = int.from_bytes(payload[4:8], "big") # 4:8 4bytes static.TOTAL_BYTES = frame_length @@ -703,7 +703,7 @@ class DATA: # Extract raw data from buffer payload = static.RX_FRAME_BUFFER[ - bof_position + len(self.data_frame_bof) : eof_position + bof_position + len(self.data_frame_bof): eof_position ] # Get the data frame crc data_frame_crc = payload[:4] # 0:4 = 4 bytes @@ -726,7 +726,7 @@ class DATA: ) data_frame = data_frame_decompressed - uniqueid = str(uuid.uuid4()) + self.transmission_uuid = str(uuid.uuid4()) timestamp = int(time.time()) # check if callsign ssid override @@ -741,13 +741,13 @@ class DATA: # Re-code data_frame in base64, UTF-8 for JSON UI communication. base64_data = base64.b64encode(data_frame).decode("UTF-8") static.RX_BUFFER.append( - [uniqueid, timestamp, static.DXCALLSIGN, static.DXGRID, base64_data] + [self.transmission_uuid, timestamp, static.DXCALLSIGN, static.DXGRID, base64_data] ) self.send_data_to_socket_queue( freedata="tnc-message", arq="transmission", status="received", - uuid=uniqueid, + uuid=self.transmission_uuid, timestamp=timestamp, mycallsign=str(mycallsign, "UTF-8"), dxcallsign=str(static.DXCALLSIGN, "UTF-8"), @@ -783,7 +783,7 @@ class DATA: freedata="tnc-message", arq="transmission", status="failed", - uuid=uniqueid, + uuid=self.transmission_uuid, ) self.log.warning( @@ -819,12 +819,10 @@ class DATA: self.speed_level = len(self.mode_list) - 1 static.ARQ_SPEED_LEVEL = self.speed_level - TX_N_SENT_BYTES = 0 # already sent bytes per data frame self.tx_n_retry_of_burst = 0 # retries we already sent data # Maximum number of retries to send before declaring a frame is lost TX_N_MAX_RETRIES_PER_BURST = 50 TX_N_FRAMES_PER_BURST = n_frames_per_burst # amount of n frames per burst - TX_BUFFER = [] # our buffer for appending new data # TIMEOUTS BURST_ACK_TIMEOUT_SECONDS = 3.0 # timeout for burst acknowledges @@ -1978,11 +1976,9 @@ class DATA: freedata="tnc-message", arq="transmission", status="stopped", - uuid=uniqueid, - timestamp=timestamp, - mycallsign=str(mycallsign, "UTF-8"), + uuid=self.transmission_uuid, + mycallsign=str(self.mycallsign, "UTF-8"), dxcallsign=str(static.DXCALLSIGN, "UTF-8"), - dxgrid=str(static.DXGRID, "UTF-8"), ) self.arq_cleanup() @@ -2067,7 +2063,7 @@ class DATA: self.send_data_to_socket_queue( freedata="tnc-message", beacon="received", - mycallsign=str(mycallsign, "UTF-8"), + mycallsign=str(self.mycallsign, "UTF-8"), dxcallsign=str(static.DXCALLSIGN, "UTF-8"), dxgrid=str(static.DXGRID, "UTF-8"), ) @@ -2131,7 +2127,7 @@ class DATA: self.send_data_to_socket_queue( freedata="tnc-message", cq="receiving", - mycallsign=str(mycallsign, "UTF-8"), + mycallsign=str(self.mycallsign, "UTF-8"), dxcallsign=str(static.DXCALLSIGN, "UTF-8"), dxgrid=str(static.DXGRID, "UTF-8"), ) @@ -2510,7 +2506,7 @@ class DATA: freedata="tnc-message", arq="transmission", status="failed", - uuid=uniqueid, + uuid=self.transmission_uuid, ) self.arq_cleanup() From 8e4a3f4d33eb95b3d64937bc09f4214827735a59 Mon Sep 17 00:00:00 2001 From: dj2ls Date: Tue, 7 Jun 2022 10:08:15 +0200 Subject: [PATCH 06/19] first change of gui --- gui/main.js | 90 +++++++++++++ gui/preload-chat.js | 8 +- gui/preload-main.js | 320 +++++++++++++++++++++++++------------------- gui/sock.js | 192 ++++++++++++++++++-------- tnc/data_handler.py | 15 +-- 5 files changed, 419 insertions(+), 206 deletions(-) diff --git a/gui/main.js b/gui/main.js index 504beec7..ff4fb9e4 100644 --- a/gui/main.js +++ b/gui/main.js @@ -514,6 +514,96 @@ ipcMain.on('save-file-to-folder',(event,data)=>{ }); +//tnc messages START -------------------------------------- + +// CQ TRANSMITTING +ipcMain.on('request-show-cq-toast-transmitting',(event,data)=>{ + win.webContents.send('action-show-cq-toast-transmitting', data); +}); + +// CQ RECEIVED +ipcMain.on('request-show-cq-toast-received',(event,data)=>{ + win.webContents.send('action-show-cq-toast-received', data); +}); + +// QRV TRANSMITTING +ipcMain.on('request-show-qrv-toast-transmitting',(event,data)=>{ + win.webContents.send('action-show-qrv-toast-transmitting', data); +}); + +// QRV RECEIVED +ipcMain.on('request-show-qrv-toast-received',(event,data)=>{ + win.webContents.send('action-show-qrv-toast-received', data); +}); + +// BEACON TRANSMITTING +ipcMain.on('request-show-beacon-toast-transmitting',(event,data)=>{ + win.webContents.send('action-show-beacon-toast-transmitting', data); +}); + +// BEACON RECEIVED +ipcMain.on('request-show-beacon-toast-received',(event,data)=>{ + win.webContents.send('action-show-beacon-toast-received', data); +}); + +// PING TRANSMITTING +ipcMain.on('request-show-ping-toast-transmitting',(event,data)=>{ + win.webContents.send('action-show-ping-toast-transmitting', data); +}); + +// PING RECEIVED +ipcMain.on('request-show-ping-toast-received',(event,data)=>{ + win.webContents.send('action-show-ping-toast-received', data); +}); + +// PING RECEIVED ACK +ipcMain.on('request-show-ping-toast-received-ack',(event,data)=>{ + win.webContents.send('action-show-ping-toast-received-ack', data); +}); + +// ARQ DATA CHANNEL OPENING +ipcMain.on('request-show-arq-toast-datachannel-opening',(event,data)=>{ + win.webContents.send('action-show-arq-toast-datachannel-opening', data); +}); + +// ARQ DATA CHANNEL OPEN +ipcMain.on('request-show-arq-toast-datachannel-open',(event,data)=>{ + win.webContents.send('action-show-arq-toast-datachannel-open', data); +}); + +// ARQ DATA RECEIVED OPENER +ipcMain.on('request-show-arq-toast-datachannel-received-opener',(event,data)=>{ + win.webContents.send('action-show-arq-toast-datachannel-received-opener', data); +}); + +// ARQ TRANSMISSION FAILED +ipcMain.on('request-show-arq-toast-transmission-failed',(event,data)=>{ + win.webContents.send('action-show-arq-toast-transmission-failed', data); +}); + +// ARQ TRANSMISSION RECEIVING +ipcMain.on('request-show-arq-toast-transmission-receiving',(event,data)=>{ + win.webContents.send('action-show-arq-toast-transmission-receiving', data); +}); + +// ARQ TRANSMISSION RECEIVED +ipcMain.on('request-show-arq-toast-transmission-received',(event,data)=>{ + win.webContents.send('action-show-arq-toast-transmission-received', data); +}); + +// ARQ TRANSMISSION TRANSMITTING +ipcMain.on('request-show-arq-toast-transmission-transmitting',(event,data)=>{ + win.webContents.send('action-show-arq-toast-transmission-transmitting', data); +}); + +// ARQ TRANSMISSION TRANSMITTED +ipcMain.on('request-show-arq-toast-transmission-transmitted',(event,data)=>{ + win.webContents.send('action-show-arq-toast-transmission-transmitted', data); +}); + + +//tnc messages END -------------------------------------- + //restart and install udpate ipcMain.on('request-restart-and-install',(event,data)=>{ close_sub_processes() diff --git a/gui/preload-chat.js b/gui/preload-chat.js index 6c79730c..c3dc33d4 100644 --- a/gui/preload-chat.js +++ b/gui/preload-chat.js @@ -354,7 +354,9 @@ ipcRenderer.on('action-new-msg-received', (event, arg) => { }).catch(function(err) { console.log(err); }); - } else if (item.type == 'beacon') { + + // Handle beacon + } else if (item.beacon == 'received') { obj.timestamp = item.timestamp; obj.dxcallsign = item.dxcallsign; obj.dxgrid = item.dxgrid; @@ -364,7 +366,7 @@ ipcRenderer.on('action-new-msg-received', (event, arg) => { obj.msg = 'null'; obj.status = item.status; obj.snr = item.snr; - obj.type = item.type; + obj.type = 'beacon'; db.put({ _id: obj.uuid, @@ -393,6 +395,8 @@ ipcRenderer.on('action-new-msg-received', (event, arg) => { }).catch(function(err) { console.log(err); }); + + // handle ARQ transmission } else if (item.arq == 'received') { var encoded_data = atob(item.data); var splitted_data = encoded_data.split(split_char); diff --git a/gui/preload-main.js b/gui/preload-main.js index cbd134cb..e790c0a3 100644 --- a/gui/preload-main.js +++ b/gui/preload-main.js @@ -1332,144 +1332,7 @@ ipcRenderer.on('action-update-tnc-state', (event, arg) => { tbl.appendChild(row); } - - - // DISPLAY INFO TOASTS - if (typeof(arg.info) == 'undefined') { - var infoLength = 0; - } else { - var infoLength = arg.info.length; - } - for (i = 0; i < infoLength; i++) { - - // SENDING CQ TOAST - if (arg.info[i] == "CQ;SENDING"){ - var toastCQsending = document.getElementById('toastCQsending'); - var toast = bootstrap.Toast.getOrCreateInstance(toastCQsending); // Returns a Bootstrap toast instance - toast.show(); - } - - // RECEIVING CQ TOAST - if (arg.info[i] == "CQ;RECEIVING"){ - var toastCQreceiving = document.getElementById('toastCQreceiving'); - var toast = bootstrap.Toast.getOrCreateInstance(toastCQreceiving); // Returns a Bootstrap toast instance - toast.show(); - } - - // RECEIVING BEACON TOAST - if (arg.info[i] == "BEACON;RECEIVING"){ - var toastBEACONreceiving = document.getElementById('toastBEACONreceiving'); - var toast = bootstrap.Toast.getOrCreateInstance(toastBEACONreceiving); // Returns a Bootstrap toast instance - toast.show(); - } - - - // SENDING PING TOAST - if (arg.info[i] == "PING;SENDING"){ - var toastPINGsending = document.getElementById('toastPINGsending'); - var toast = bootstrap.Toast.getOrCreateInstance(toastPINGsending); // Returns a Bootstrap toast instance - toast.show(); - } - // RECEIVING PING TOAST - if (arg.info[i] == "PING;RECEIVING"){ - var toastPINGreceiving = document.getElementById('toastPINGreceiving'); - var toast = bootstrap.Toast.getOrCreateInstance(toastPINGreceiving); // Returns a Bootstrap toast instance - toast.show(); - } - // RECEIVING PING ACK TOAST - if (arg.info[i] == "PING;RECEIVEDACK"){ - var toastPINGreceivedACK = document.getElementById('toastPINGreceivedACK'); - var toast = bootstrap.Toast.getOrCreateInstance(toastPINGreceivedACK); // Returns a Bootstrap toast instance - toast.show(); - } - // DATACHANNEL OPENING TOAST - if (arg.info[i] == "DATACHANNEL;OPENING"){ - var toastDATACHANNELopening = document.getElementById('toastDATACHANNELopening'); - var toast = bootstrap.Toast.getOrCreateInstance(toastDATACHANNELopening); // Returns a Bootstrap toast instance - toast.show(); - } - - // DATACHANNEL OPEN TOAST - if (arg.info[i] == "DATACHANNEL;OPEN"){ - var toastDATACHANNELopen = document.getElementById('toastDATACHANNELopen'); - var toast = bootstrap.Toast.getOrCreateInstance(toastDATACHANNELopen); // Returns a Bootstrap toast instance - toast.show(); - } - // DATACHANNEL RECEIVEDOPENER TOAST - if (arg.info[i] == "DATACHANNEL;RECEIVEDOPENER"){ - var toastDATACHANNELreceivedopener = document.getElementById('toastDATACHANNELreceivedopener'); - var toast = bootstrap.Toast.getOrCreateInstance(toastDATACHANNELreceivedopener); // Returns a Bootstrap toast instance - toast.show(); - } - // TRANSMISSION STOPPED - if (arg.info[i] == "TRANSMISSION;STOPPED"){ - var toastDATACHANNELreceivedopener = document.getElementById('toastTRANSMISSIONstopped'); - var toast = bootstrap.Toast.getOrCreateInstance(toastDATACHANNELreceivedopener); // Returns a Bootstrap toast instance - toast.show(); - } - - // DATACHANNEL FAILED TOAST - if (arg.info[i] == "DATACHANNEL;FAILED"){ - var toastDATACHANNELfailed = document.getElementById('toastDATACHANNELfailed'); - var toast = bootstrap.Toast.getOrCreateInstance(toastDATACHANNELfailed); // Returns a Bootstrap toast instance - toast.show(); - } - // ARQ RECEIVING TOAST - if (arg.info[i] == "ARQ;RECEIVING"){ - - document.getElementById("transmission_progress").className = "progress-bar progress-bar-striped progress-bar-animated bg-primary"; - - var toastARQreceiving = document.getElementById('toastARQreceiving'); - var toast = bootstrap.Toast.getOrCreateInstance(toastARQreceiving); // Returns a Bootstrap toast instance - toast.show(); - } - // ARQ RECEIVING SUCCESS TOAST - console.log(arg.info[i]) - if (arg.info[i] == "ARQ;RECEIVING;SUCCESS"){ - - document.getElementById("transmission_progress").className = "progress-bar progress-bar-striped bg-success"; - - var toastARQreceivingsuccess = document.getElementById('toastARQreceivingsuccess'); - var toast = bootstrap.Toast.getOrCreateInstance(toastARQreceivingsuccess); // Returns a Bootstrap toast instance - toast.show(); - } - // ARQ RECEIVING FAILED TOAST - if (arg.info[i] == "ARQ;RECEIVING;FAILED"){ - - document.getElementById("transmission_progress").className = "progress-bar progress-bar-striped bg-danger"; - - var toastARQreceivingfailed = document.getElementById('toastARQreceivingfailed'); - var toast = bootstrap.Toast.getOrCreateInstance(toastARQreceivingfailed); // Returns a Bootstrap toast instance - toast.show(); - } - // ARQ TRANSMITTING TOAST - if (arg.info[i] == "ARQ;TRANSMITTING"){ - - document.getElementById("transmission_progress").className = "progress-bar progress-bar-striped progress-bar-animated bg-primary"; - - var toastARQtransmitting = document.getElementById('toastARQtransmitting'); - var toast = bootstrap.Toast.getOrCreateInstance(toastARQtransmitting); // Returns a Bootstrap toast instance - toast.show(); - } - // ARQ TRANSMITTING SUCCESS TOAST - if (arg.info[i] == "ARQ;TRANSMITTING;SUCCESS"){ - - document.getElementById("transmission_progress").className = "progress-bar progress-bar-striped bg-success"; - - var toastARQtransmittingsuccess = document.getElementById('toastARQtransmittingsuccess'); - var toast = bootstrap.Toast.getOrCreateInstance(toastARQtransmittingsuccess); // Returns a Bootstrap toast instance - toast.show(); - } - // ARQ TRANSMITTING FAILED TOAST - if (arg.info[i] == "ARQ;TRANSMITTING;FAILED"){ - - document.getElementById("transmission_progress").className = "progress-bar progress-bar-striped bg-danger"; - - var toast = bootstrap.Toast.getOrCreateInstance(toastARQtransmittingfailed); // Returns a Bootstrap toast instance - toast.show(); - } - } }); ipcRenderer.on('action-update-daemon-state', (event, arg) => { @@ -1929,3 +1792,186 @@ ipcRenderer.on('action-updater', (event, arg) => { }); + + + +// ----------- INFO MODAL ACTIONS ------------------------------- + +// CQ TRANSMITTING +ipcRenderer.on('action-show-cq-toast-transmitting', (event, data) => { + var toastCQsending = document.getElementById('toastCQsending'); + var toast = bootstrap.Toast.getOrCreateInstance(toastCQsending); // Returns a Bootstrap toast instance + toast.show(); +}); + +// CQ RECEIVED +ipcRenderer.on('action-show-cq-toast-received', (event, data) => { + var toastCQreceiving = document.getElementById('toastCQreceiving'); + var toast = bootstrap.Toast.getOrCreateInstance(toastCQreceiving); // Returns a Bootstrap toast instance + toast.show(); +}); + +// QRV TRANSMITTING +ipcRenderer.on('action-show-qrv-toast-transmitting', (event, data) => { +}); + +// QRV RECEIVED +ipcRenderer.on('action-show-qrv-toast-received', (event, data) => { +}); + +// BEACON TRANSMITTING +ipcRenderer.on('action-show-beacon-toast-transmitting', (event, data) => { +}); + +// BEACON RECEIVED +ipcRenderer.on('action-show-beacon-toast-received', (event, data) => { + var toastBEACONreceiving = document.getElementById('toastBEACONreceiving'); + var toast = bootstrap.Toast.getOrCreateInstance(toastBEACONreceiving); // Returns a Bootstrap toast instance + toast.show(); +}); + +// PING TRANSMITTING +ipcRenderer.on('action-show-ping-toast-transmitting', (event, data) => { + var toastPINGsending = document.getElementById('toastPINGsending'); + var toast = bootstrap.Toast.getOrCreateInstance(toastPINGsending); // Returns a Bootstrap toast instance + toast.show(); +}); + +// PING RECEIVED +ipcRenderer.on('action-show-ping-toast-received', (event, data) => { + var toastPINGreceiving = document.getElementById('toastPINGreceiving'); + var toast = bootstrap.Toast.getOrCreateInstance(toastPINGreceiving); // Returns a Bootstrap toast instance + toast.show(); +}); + +// PING RECEIVED ACK +ipcRenderer.on('action-show-ping-toast-received-ack', (event, data) => { + var toastPINGreceivedACK = document.getElementById('toastPINGreceivedACK'); + var toast = bootstrap.Toast.getOrCreateInstance(toastPINGreceivedACK); // Returns a Bootstrap toast instance + toast.show(); +}); + +// DATA CHANNEL OPENING TOAST +ipcRenderer.on('action-show-arq-toast-datachannel-opening', (event, data) => { + var toastDATACHANNELopening = document.getElementById('toastDATACHANNELopening'); + var toast = bootstrap.Toast.getOrCreateInstance(toastDATACHANNELopening); // Returns a Bootstrap toast instance + toast.show(); +}); + +// DATA CHANNEL OPEN TOAST +ipcRenderer.on('action-show-arq-toast-datachannel-open', (event, data) => { + var toastDATACHANNELopen = document.getElementById('toastDATACHANNELopen'); + var toast = bootstrap.Toast.getOrCreateInstance(toastDATACHANNELopen); // Returns a Bootstrap toast instance + toast.show(); +}); + +// DATA CHANNEL RECEIVED OPENER TOAST +ipcRenderer.on('action-show-arq-toast-datachannel-received-opener', (event, data) => { + var toastDATACHANNELreceivedopener = document.getElementById('toastDATACHANNELreceivedopener'); + var toast = bootstrap.Toast.getOrCreateInstance(toastDATACHANNELreceivedopener); // Returns a Bootstrap toast instance + toast.show(); +}); + +// ARQ TRANSMISSION FAILED +// TODO: use for both - transmitting and receiving --> we need to change the IDs +ipcRenderer.on('action-show-arq-toast-transmission-failed', (event, data) => { + document.getElementById("transmission_progress").className = "progress-bar progress-bar-striped bg-danger"; + var toast = bootstrap.Toast.getOrCreateInstance(toastARQtransmittingfailed); // Returns a Bootstrap toast instance + toast.show(); +}); + +// ARQ TRANSMISSION STOPPED +// TODO: RENAME ID -- WRONG +ipcRenderer.on('action-show-arq-toast-transmission-stopped', (event, data) => { + var toastDATACHANNELreceivedopener = document.getElementById('toastTRANSMISSIONstopped'); + var toast = bootstrap.Toast.getOrCreateInstance(toastDATACHANNELreceivedopener); // Returns a Bootstrap toast instance + toast.show(); +}); + +// ARQ TRANSMISSION FAILED +// TODO: USE FOR TX AND RX +ipcRenderer.on('action-show-arq-toast-transmission-failed', (event, data) => { + document.getElementById("transmission_progress").className = "progress-bar progress-bar-striped bg-danger"; + + var toastARQreceivingfailed = document.getElementById('toastARQreceivingfailed'); + var toast = bootstrap.Toast.getOrCreateInstance(toastARQreceivingfailed); // Returns a Bootstrap toast instance + toast.show(); +}); + +// ARQ TRANSMISSION TRANSMITTED +ipcRenderer.on('action-show-arq-toast-transmission-transmitted', (event, data) => { + + document.getElementById("transmission_progress").className = "progress-bar progress-bar-striped bg-success"; + var toastARQtransmittingsuccess = document.getElementById('toastARQtransmittingsuccess'); + var toast = bootstrap.Toast.getOrCreateInstance(toastARQtransmittingsuccess); // Returns a Bootstrap toast instance + toast.show(); +}); + +// ARQ TRANSMISSION TRANSMITTING +ipcRenderer.on('action-show-arq-toast-transmission-transmitting', (event, data) => { + + document.getElementById("transmission_progress").className = "progress-bar progress-bar-striped progress-bar-animated bg-primary"; + var toastARQtransmitting = document.getElementById('toastARQtransmitting'); + var toast = bootstrap.Toast.getOrCreateInstance(toastARQtransmitting); // Returns a Bootstrap toast instance + toast.show(); +}); + +// ARQ TRANSMISSION RECEIVED +ipcRenderer.on('action-show-arq-toast-transmission-received', (event, data) => { + + document.getElementById("transmission_progress").className = "progress-bar progress-bar-striped bg-success"; + var toastARQreceivingsuccess = document.getElementById('toastARQreceivingsuccess'); + var toast = bootstrap.Toast.getOrCreateInstance(toastARQreceivingsuccess); // Returns a Bootstrap toast instance + toast.show(); +}); + +// ARQ TRANSMISSION RECEIVING +ipcRenderer.on('action-show-arq-toast-transmission-receiving', (event, data) => { + + document.getElementById("transmission_progress").className = "progress-bar progress-bar-striped progress-bar-animated bg-primary"; + var toastARQreceiving = document.getElementById('toastARQreceiving'); + var toast = bootstrap.Toast.getOrCreateInstance(toastARQreceiving); // Returns a Bootstrap toast instance + toast.show(); +}); + /* + // TRANSMISSION STOPPED + if (arg.info[i] == "TRANSMISSION;STOPPED"){ + var toastDATACHANNELreceivedopener = document.getElementById('toastTRANSMISSIONstopped'); + var toast = bootstrap.Toast.getOrCreateInstance(toastDATACHANNELreceivedopener); // Returns a Bootstrap toast instance + toast.show(); + } + */ + + // DATACHANNEL FAILED TOAST + //if (arg.info[i] == "DATACHANNEL;FAILED"){ + // var toastDATACHANNELfailed = document.getElementById('toastDATACHANNELfailed'); + // var toast = bootstrap.Toast.getOrCreateInstance(toastDATACHANNELfailed); // Returns a Bootstrap toast instance + // toast.show(); + //} + + + /* + // ARQ RECEIVING FAILED TOAST + if (arg.info[i] == "ARQ;RECEIVING;FAILED"){ + + document.getElementById("transmission_progress").className = "progress-bar progress-bar-striped bg-danger"; + + var toastARQreceivingfailed = document.getElementById('toastARQreceivingfailed'); + var toast = bootstrap.Toast.getOrCreateInstance(toastARQreceivingfailed); // Returns a Bootstrap toast instance + toast.show(); + } + */ + + + + /* + // ARQ TRANSMITTING FAILED TOAST + if (arg.info[i] == "ARQ;TRANSMITTING;FAILED"){ + + document.getElementById("transmission_progress").className = "progress-bar progress-bar-striped bg-danger"; + + var toast = bootstrap.Toast.getOrCreateInstance(toastARQtransmittingfailed); // Returns a Bootstrap toast instance + toast.show(); + } + + */ \ No newline at end of file diff --git a/gui/sock.js b/gui/sock.js index 2e449c81..d91af922 100644 --- a/gui/sock.js +++ b/gui/sock.js @@ -226,67 +226,147 @@ client.on('data', function(socketdata) { ipcRenderer.send('request-update-tnc-state', Data); } - // update transmission status - - if (data['arq'] == 'transmission'){ - socketLog.info(data) - - let state = { - status: data['status'], - uuid: data['uuid'], - percent: data['percent'], - bytesperminute: data['bytesperminute'], - }; - ipcRenderer.send('request-update-transmission-status', state); - - - } - - // Check for Ping - if (data['type'] == 'ping') { - ipcRenderer.send('request-new-msg-received', {data: [data]}); - } - - // Check for Beacon - if (data['type'] == 'beacon') { - ipcRenderer.send('request-new-msg-received', {data: [data]}); - } - - /* A TEST WITH STREAMING DATA .... */ - // if we received data through network stream, we get a single data item - if (data['arq'] == 'received') { - dataArray = [] - messageArray = [] + // ----------- catch tnc messages START ----------- + if (data['freedata'] == 'tnc-message'){ socketLog.info(data) - // we need to encode here to do a deep check for checking if file or message - var encoded_data = atob(data['data']) - var splitted_data = encoded_data.split(split_char) - - - if(splitted_data[0] == 'f'){ - dataArray.push(data) - } - - if(splitted_data[0] == 'm'){ - messageArray.push(data) - console.log(data) + + // update transmission status + if (data['arq'] == 'transmission'){ + + let state = { + status: data['status'], + uuid: data['uuid'], + percent: data['percent'], + bytesperminute: data['bytesperminute'], + }; + + ipcRenderer.send('request-update-transmission-status', state); } - rxBufferLengthGui = dataArray.length - let Files = { - data: dataArray, - }; - ipcRenderer.send('request-update-rx-buffer', Files); - ipcRenderer.send('request-new-msg-received', Files); - - rxMsgBufferLengthGui = messageArray.length - let Messages = { - data: messageArray, - }; - ipcRenderer.send('request-new-msg-received', Messages); + + // CQ TRANSMITTING + if (data['cq'] == 'transmitting') { + ipcRenderer.send('request-show-cq-toast-transmitting', {data: [data]}); + } + + // CQ RECEIVED + if (data['cq'] == 'received') { + ipcRenderer.send('request-show-cq-toast-received', {data: [data]}); + } + + // QRV TRANSMITTING + if (data['qrv'] == 'transmitting') { + ipcRenderer.send('request-show-qrv-toast-transmitting', {data: [data]}); + } + + // QRV RECEIVED + if (data['qrv'] == 'received') { + ipcRenderer.send('request-show-qrv-toast-received', {data: [data]}); + } + + // BEACON TRANSMITTING + if (data['beacon'] == 'transmitting') { + ipcRenderer.send('request-show-beacon-toast-transmitting', {data: [data]}); + } + + // BEACON RECEIVED + if (data['beacon'] == 'received') { + ipcRenderer.send('request-show-beacon-toast-received', {data: [data]}); + ipcRenderer.send('request-new-msg-received', {data: [data]}); + } + + // PING TRANSMITTING + if (data['ping'] == 'transmitting') { + ipcRenderer.send('request-show-ping-toast-transmitting', {data: [data]}); + } + + // PING RECEIVED + if (data['ping'] == 'received') { + ipcRenderer.send('request-show-ping-toast-received', {data: [data]}); + ipcRenderer.send('request-new-msg-received', {data: [data]}); + } + + // PING ACKNOWLEDGE + if (data['ping'] == 'acknowledge') { + ipcRenderer.send('request-show-ping-toast-received-ack', {data: [data]}); + ipcRenderer.send('request-new-msg-received', {data: [data]}); + } + + // ARQ OPEN + if (data['arq'] == 'transmission') { + + // ARQ OPEN + if (data['status'] == 'open') { + ipcRenderer.send('request-show-arq-toast-datachannel-open', {data: [data]}); + // ARQ OPENING + } else if (data['status'] == 'opening') { + ipcRenderer.send('request-show-arq-toast-datachannel-opening', {data: [data]}); + + // ARQ TRANSMISSION FAILED + } else if (data['status'] == 'failed') { + ipcRenderer.send('request-show-arq-toast-transmission-failed', {data: [data]}); + + // ARQ TRANSMISSION RECEIVED + } else if (data['status'] == 'received') { + ipcRenderer.send('request-show-arq-toast-transmission-received', {data: [data]}); + + // ARQ TRANSMISSION TRANSMITTING + } else if (data['status'] == 'transmitting') { + ipcRenderer.send('request-show-arq-toast-transmission-transmitting', {data: [data]}); + + // ARQ TRANSMISSION TRANSMITTED + } else if (data['status'] == 'transmitted') { + ipcRenderer.send('request-show-arq-toast-transmission-transmitted', {data: [data]}); + } + } + + + + + + + + + /* A TEST WITH STREAMING DATA .... */ + // if we received data through network stream, we get a single data item + if (data['arq'] == 'received') { + dataArray = [] + messageArray = [] + + socketLog.info(data) + // we need to encode here to do a deep check for checking if file or message + var encoded_data = atob(data['data']) + var splitted_data = encoded_data.split(split_char) + + + if(splitted_data[0] == 'f'){ + dataArray.push(data) + } + + if(splitted_data[0] == 'm'){ + messageArray.push(data) + console.log(data) + } + + rxBufferLengthGui = dataArray.length + let Files = { + data: dataArray, + }; + ipcRenderer.send('request-update-rx-buffer', Files); + ipcRenderer.send('request-new-msg-received', Files); + + rxMsgBufferLengthGui = messageArray.length + let Messages = { + data: messageArray, + }; + ipcRenderer.send('request-new-msg-received', Messages); + } } - + // ----------- catch tnc info messages END ----------- + + + // if we manually checking for the rx buffer we are getting an array of multiple data if (data['command'] == 'rx_buffer') { socketLog.info(data) diff --git a/tnc/data_handler.py b/tnc/data_handler.py index 16978b65..9beb5d71 100644 --- a/tnc/data_handler.py +++ b/tnc/data_handler.py @@ -1814,7 +1814,7 @@ class DATA: # static.INFO.append("PING;SENDING") self.send_data_to_socket_queue( freedata="tnc-message", - ping="sending", + ping="transmitting", ) self.log.info( "[TNC] PING REQ [" @@ -2050,8 +2050,7 @@ class DATA: self.send_data_to_socket_queue( freedata="tnc-message", - type="beacon", - status="received", + beacon="received", uuid=str(uuid.uuid4()), timestamp=int(time.time()), mycallsign=str(self.mycallsign, "UTF-8"), @@ -2060,13 +2059,7 @@ class DATA: snr=str(static.SNR), ) # static.INFO.append("BEACON;RECEIVING") - self.send_data_to_socket_queue( - freedata="tnc-message", - beacon="received", - mycallsign=str(self.mycallsign, "UTF-8"), - dxcallsign=str(static.DXCALLSIGN, "UTF-8"), - dxgrid=str(static.DXGRID, "UTF-8"), - ) + self.log.info( "[TNC] BEACON RCVD [" + str(dxcallsign, "UTF-8") @@ -2126,7 +2119,7 @@ class DATA: # static.INFO.append("CQ;RECEIVING") self.send_data_to_socket_queue( freedata="tnc-message", - cq="receiving", + cq="received", mycallsign=str(self.mycallsign, "UTF-8"), dxcallsign=str(static.DXCALLSIGN, "UTF-8"), dxgrid=str(static.DXGRID, "UTF-8"), From a4df21c0a2eeb6c645993e6689a899e60552f25f Mon Sep 17 00:00:00 2001 From: dj2ls Date: Tue, 7 Jun 2022 11:31:59 +0200 Subject: [PATCH 07/19] further changes of gui --- gui/preload-chat.js | 257 ++++++++++++++++---------------------------- gui/preload-main.js | 2 + tnc/data_handler.py | 6 +- 3 files changed, 98 insertions(+), 167 deletions(-) diff --git a/gui/preload-chat.js b/gui/preload-chat.js index c3dc33d4..57208c2a 100644 --- a/gui/preload-chat.js +++ b/gui/preload-chat.js @@ -73,7 +73,7 @@ db.find({ // handle result if (typeof(result) !== 'undefined') { result.docs.forEach(function(item) { - console.log(item) + //console.log(item) update_chat(item); }); } @@ -179,14 +179,8 @@ db.post({ }).catch(function(err) { console.log(err); }); - db.get(uuid, [{ - attachments: true - }]).then(function(doc) { - // handle doc - update_chat(doc) - }).catch(function(err) { - console.log(err); - }); + update_chat_obj_by_uuid(uuid); + }); // SEND MSG @@ -237,14 +231,9 @@ db.post({ }).catch(function(err) { console.log(err); }); - db.get(uuid, [{ - attachments: true - }]).then(function(doc) { - // handle doc - update_chat(doc) - }).catch(function(err) { - console.log(err); - }); + + update_chat_obj_by_uuid(uuid); + // scroll to bottom var element = document.getElementById("message-container"); element.scrollTo(0, element.scrollHeight); @@ -274,7 +263,7 @@ ipcRenderer.on('return-selected-files', (event, arg) => { `; }); ipcRenderer.on('action-update-transmission-status', (event, arg) => { - console.log(arg.status); + //console.log(arg.status); console.log(arg.uuid); db.get(arg.uuid, { attachments: true @@ -295,26 +284,22 @@ ipcRenderer.on('action-update-transmission-status', (event, arg) => { _attachments: doc._attachments }); }).then(function(response) { - // handle response - db.get(arg.uuid, [{ - attachments: true - }]).then(function(doc) { - // handle doc - update_chat(doc); - }).catch(function(err) { - console.log(err); - }); + update_chat_obj_by_uuid(arg.uuid); + }).catch(function(err) { console.log(err); }); }); ipcRenderer.on('action-new-msg-received', (event, arg) => { console.log(arg.data) + var new_msg = arg.data; new_msg.forEach(function(item) { console.log(item) let obj = new Object(); - if (item.type == 'ping') { + + //handle ping + if (item.ping == 'received') { obj.timestamp = item.timestamp; obj.dxcallsign = item.dxcallsign; obj.dxgrid = item.dxgrid; @@ -324,38 +309,18 @@ ipcRenderer.on('action-new-msg-received', (event, arg) => { obj.msg = 'null'; obj.status = item.status; obj.snr = item.snr; - obj.type = item.type; - - db.put({ - _id: obj.uuid, - timestamp: obj.timestamp, - uuid: obj.uuid, - dxcallsign: obj.dxcallsign, - dxgrid: obj.dxgrid, - msg: obj.msg, - checksum: obj.checksum, - type: obj.type, - command: obj.command, - status: obj.status, - snr: obj.snr, - }).then(function(response) { - console.log("new database entry"); - console.log(response); - }).catch(function(err) { - console.log(err); - }); - - db.get(item.uuid, { - attachments: true - }).then(function(doc) { - console.log(doc) - update_chat(doc); + obj.type = 'ping'; + obj.filename = 'null'; + obj.filetype = 'null'; + obj.file = 'null'; - }).catch(function(err) { - console.log(err); - }); + add_obj_to_database(obj) + update_chat_obj_by_uuid(obj.uuid); - // Handle beacon + + + + // handle beacon } else if (item.beacon == 'received') { obj.timestamp = item.timestamp; obj.dxcallsign = item.dxcallsign; @@ -367,34 +332,13 @@ ipcRenderer.on('action-new-msg-received', (event, arg) => { obj.status = item.status; obj.snr = item.snr; obj.type = 'beacon'; - - db.put({ - _id: obj.uuid, - timestamp: obj.timestamp, - uuid: obj.uuid, - dxcallsign: obj.dxcallsign, - dxgrid: obj.dxgrid, - msg: obj.msg, - checksum: obj.checksum, - type: obj.type, - command: obj.command, - status: obj.status, - snr: obj.snr, - }).then(function(response) { - console.log("new database entry"); - console.log(response); - }).catch(function(err) { - console.log(err); - }); - - db.get(item.uuid, { - attachments: true - }).then(function(doc) { - console.log(doc); - update_chat(doc); - }).catch(function(err) { - console.log(err); - }); + obj.filename = 'null'; + obj.filetype = 'null'; + obj.file = 'null'; + + add_obj_to_database(obj); + update_chat_obj_by_uuid(obj.uuid); + // handle ARQ transmission } else if (item.arq == 'received') { @@ -414,46 +358,20 @@ ipcRenderer.on('action-new-msg-received', (event, arg) => { obj.filename = utf8.decode(splitted_data[5]); obj.filetype = utf8.decode(splitted_data[6]); obj.file = btoa(utf8.decode(splitted_data[7])); - db.put({ - _id: obj.uuid, - timestamp: obj.timestamp, - uuid: obj.uuid, - dxcallsign: obj.dxcallsign, - dxgrid: obj.dxgrid, - msg: obj.msg, - checksum: obj.checksum, - type: obj.type, - command: obj.command, - status: obj.status, - snr: obj.snr, - _attachments: { - [obj.filename]: { - content_type: obj.filetype, - data: obj.file - } - } - }).then(function(response) { - console.log("new database entry"); - console.log(response); - }).catch(function(err) { - console.log(err); - }); - - db.get(obj.uuid, { - attachments: true - }).then(function(doc) { - console.log(doc); - update_chat(doc); - }).catch(function(err) { - console.log(err); - }); + + add_obj_to_database(obj); + update_chat_obj_by_uuid(obj.uuid); + } }); //window.location = window.location; }); + + + + // Update chat list update_chat = function(obj) { - //console.log(obj); var dxcallsign = obj.dxcallsign; var timestamp = dateFormat.format(obj.timestamp * 1000); var timestampShort = dateFormatShort.format(obj.timestamp * 1000); @@ -471,7 +389,7 @@ update_chat = function(obj) { } try { - console.log(Object.keys(obj._attachments)[0].length) + //console.log(Object.keys(obj._attachments)[0].length) if (typeof(obj._attachments) !== 'undefined' && Object.keys(obj._attachments)[0].length > 0) { //var filename = obj._attachments; var filename = Object.keys(obj._attachments)[0] @@ -558,7 +476,7 @@ update_chat = function(obj) { // scroll to bottom var element = document.getElementById("message-container"); - console.log(element.scrollHeight) + //console.log(element.scrollHeight) element.scrollTo(0, element.scrollHeight); @@ -642,16 +560,14 @@ update_chat = function(obj) { if (obj.type == 'transmit') { - console.log('msg-' + obj._id + '-status') - - - if (obj.status == 'failed'){ - var progressbar_bg = 'bg-danger'; - } else { - var progressbar_bg = 'bg-primary'; - } - - + //console.log('msg-' + obj._id + '-status') + + if (obj.status == 'failed'){ + var progressbar_bg = 'bg-danger'; + } else { + var progressbar_bg = 'bg-primary'; + } + var new_message = `
@@ -703,7 +619,7 @@ update_chat = function(obj) { document.getElementById(id).insertAdjacentHTML("beforeend", new_message); var element = document.getElementById("message-container"); - console.log(element.scrollHeight) + //console.log(element.scrollHeight) @@ -823,39 +739,7 @@ update_chat = function(obj) { //window.location = window.location } -function getObjByID(id) { - /* - { - "timestamp": 1648139683, - "dxcallsign": "DN2LS-0", - "dxgrid": "null", - "msg": "", - "checksum": "null", - "type": "transmit", - "status": "transmit", - "uuid": "5b72a46c-49cf-40d6-8936-a64c95bc3da7", - "_attachments": { - "CMakeLists.txt": { - "content_type": "text/plain", - "digest": "md5-Cdk6Ol6uuJ7Gj5lin9o4SQ==", - "length": 7802, - "revpos": 1, - "stub": true - } - }, - "_id": "5b72a46c-49cf-40d6-8936-a64c95bc3da7", - "_rev": "1-6df2d7227c4f89f8a3a2b4978661dd79" -} -**/ - db.get(id, { - attachments: true - }).then(function(doc) { - return obj - }).catch(function(err) { - console.log(err); - return false - }); -} + function saveFileToFolder(id) { db.get(id, { @@ -905,3 +789,44 @@ function get_icon_for_state(state) { } return status_icon; }; + + + +update_chat_obj_by_uuid = function(uuid) { + db.get(uuid, { + attachments: true + }).then(function(doc) { + update_chat(doc) + //return doc + }).catch(function(err) { + console.log(err); + }); +} + + +add_obj_to_database = function(obj){ + db.put({ + _id: obj.uuid, + timestamp: obj.timestamp, + uuid: obj.uuid, + dxcallsign: obj.dxcallsign, + dxgrid: obj.dxgrid, + msg: obj.msg, + checksum: obj.checksum, + type: obj.type, + command: obj.command, + status: obj.status, + snr: obj.snr, + _attachments: { + [obj.filename]: { + content_type: obj.filetype, + data: obj.file + } + } + }).then(function(response) { + console.log("new database entry"); + console.log(response); + }).catch(function(err) { + console.log(err); + }); +} \ No newline at end of file diff --git a/gui/preload-main.js b/gui/preload-main.js index e790c0a3..14733be6 100644 --- a/gui/preload-main.js +++ b/gui/preload-main.js @@ -1933,6 +1933,8 @@ ipcRenderer.on('action-show-arq-toast-transmission-receiving', (event, data) => var toast = bootstrap.Toast.getOrCreateInstance(toastARQreceiving); // Returns a Bootstrap toast instance toast.show(); }); + + /* // TRANSMISSION STOPPED if (arg.info[i] == "TRANSMISSION;STOPPED"){ diff --git a/tnc/data_handler.py b/tnc/data_handler.py index 9beb5d71..8fcab05b 100644 --- a/tnc/data_handler.py +++ b/tnc/data_handler.py @@ -1863,9 +1863,13 @@ class DATA: self.send_data_to_socket_queue( freedata="tnc-message", - ping="receiving", + ping="received", + uuid=str(uuid.uuid4()), + timestamp=int(time.time()), + mycallsign=str(self.mycallsign, "UTF-8"), dxcallsign=str(static.DXCALLSIGN, "UTF-8"), dxgrid=str(static.DXGRID, "UTF-8"), + snr=str(static.SNR) ) # check if callsign ssid override valid, mycallsign = helpers.check_callsign(self.mycallsign, data_in[1:4]) From 1909087c6bd50e75f2b16584d474ebf8092f9a72 Mon Sep 17 00:00:00 2001 From: dj2ls Date: Thu, 9 Jun 2022 14:11:39 +0200 Subject: [PATCH 08/19] file transfer now working --- gui/preload-chat.js | 50 +++++++++++++------------- gui/sock.js | 85 ++++++++++++++++++++++----------------------- tnc/data_handler.py | 5 +++ 3 files changed, 71 insertions(+), 69 deletions(-) diff --git a/gui/preload-chat.js b/gui/preload-chat.js index 57208c2a..b991c74c 100644 --- a/gui/preload-chat.js +++ b/gui/preload-chat.js @@ -163,6 +163,7 @@ window.addEventListener('DOMContentLoaded', () => { db.post({ _id: uuid, + _rev: doc._rev, timestamp: Math.floor(Date.now() / 1000), dxcallsign: dxcallsign.toUpperCase(), dxgrid: '---', @@ -210,6 +211,7 @@ db.post({ ipcRenderer.send('run-tnc-command', Data); db.post({ _id: uuid, + _rev: doc._rev, timestamp: Math.floor(Date.now() / 1000), dxcallsign: dxcallsign, dxgrid: 'null', @@ -263,13 +265,13 @@ ipcRenderer.on('return-selected-files', (event, arg) => { `; }); ipcRenderer.on('action-update-transmission-status', (event, arg) => { - //console.log(arg.status); - console.log(arg.uuid); - db.get(arg.uuid, { + var data = arg["data"][0] + console.log(data.status); + db.get(data.uuid, { attachments: true }).then(function(doc) { return db.put({ - _id: arg.uuid, + _id: data.uuid, _rev: doc._rev, timestamp: doc.timestamp, dxcallsign: doc.dxcallsign, @@ -277,17 +279,18 @@ ipcRenderer.on('action-update-transmission-status', (event, arg) => { msg: doc.msg, checksum: doc.checksum, type: "transmit", - status: arg.status, - percent: arg.percent, - bytesperminute: arg.bytesperminute, + status: data.status, + percent: data.percent, + bytesperminute: data.bytesperminute, uuid: doc.uuid, _attachments: doc._attachments }); }).then(function(response) { - update_chat_obj_by_uuid(arg.uuid); + update_chat_obj_by_uuid(data.uuid); }).catch(function(err) { console.log(err); + console.log(data) }); }); ipcRenderer.on('action-new-msg-received', (event, arg) => { @@ -295,7 +298,7 @@ ipcRenderer.on('action-new-msg-received', (event, arg) => { var new_msg = arg.data; new_msg.forEach(function(item) { - console.log(item) + console.log(item.status) let obj = new Object(); //handle ping @@ -341,7 +344,7 @@ ipcRenderer.on('action-new-msg-received', (event, arg) => { // handle ARQ transmission - } else if (item.arq == 'received') { + } else if (item.arq == 'transmission' && item.status == 'received') { var encoded_data = atob(item.data); var splitted_data = encoded_data.split(split_char); obj.timestamp = item.timestamp; @@ -555,9 +558,7 @@ update_chat = function(obj) {
`; } - - - + if (obj.type == 'transmit') { //console.log('msg-' + obj._id + '-status') @@ -621,33 +622,28 @@ update_chat = function(obj) { var element = document.getElementById("message-container"); //console.log(element.scrollHeight) - - - + /* UPDATE EXISTING ELEMENTS */ } else if (document.getElementById('msg-' + obj._id)) { console.log("element already exists......") console.log(obj) - console.log(document.getElementById('msg-' + obj._id + '-progress').getAttribute("aria-valuenow")) + console.log(document.getElementById('msg-' + obj._id + '-progress').getAttribute("aria-valuenow")) document.getElementById('msg-' + obj._id + '-status').innerHTML = get_icon_for_state(obj.status); document.getElementById('msg-' + obj._id + '-progress').setAttribute("aria-valuenow", obj.percent); document.getElementById('msg-' + obj._id + '-progress').setAttribute("style", "width:" + obj.percent + "%;"); document.getElementById('msg-' + obj._id + '-progress-information').innerHTML = obj.percent + "% - " + obj.bytesperminute + " Bpm"; - - - + if (obj.percent >= 100){ - document.getElementById('msg-' + obj._id + '-progress').classList.remove("progress-bar-striped"); + //document.getElementById('msg-' + obj._id + '-progress').classList.remove("progress-bar-striped"); document.getElementById('msg-' + obj._id + '-progress').classList.remove("progress-bar-animated"); document.getElementById('msg-' + obj._id + '-progress').innerHTML = ''; } else { document.getElementById('msg-' + obj._id + '-progress').classList.add("progress-bar-striped"); document.getElementById('msg-' + obj._id + '-progress').classList.add("progress-bar-animated"); } - - + if (obj.status == 'failed'){ document.getElementById('msg-' + obj._id + '-progress').classList.remove("progress-bar-striped"); document.getElementById('msg-' + obj._id + '-progress').classList.remove("progress-bar-animated"); @@ -779,10 +775,13 @@ function get_icon_for_state(state) { if (state == 'transmit') { var status_icon = ''; } else if (state == 'transmitting') { - var status_icon = ''; + //var status_icon = ''; + var status_icon = ` + + `; } else if (state == 'failed') { var status_icon = ''; - } else if (state == 'success') { + } else if (state == 'transmitted') { var status_icon = ''; } else { var status_icon = ''; @@ -807,6 +806,7 @@ update_chat_obj_by_uuid = function(uuid) { add_obj_to_database = function(obj){ db.put({ _id: obj.uuid, + _rev: doc._rev, timestamp: obj.timestamp, uuid: obj.uuid, dxcallsign: obj.dxcallsign, diff --git a/gui/sock.js b/gui/sock.js index d91af922..b61835f6 100644 --- a/gui/sock.js +++ b/gui/sock.js @@ -232,7 +232,8 @@ client.on('data', function(socketdata) { socketLog.info(data) // update transmission status - if (data['arq'] == 'transmission'){ + /* + if (data['arq'] == 'transmission' && data['status'] == 'transmitting'){ let state = { status: data['status'], @@ -243,7 +244,7 @@ client.on('data', function(socketdata) { ipcRenderer.send('request-update-transmission-status', state); } - + */ // CQ TRANSMITTING if (data['cq'] == 'transmitting') { @@ -299,70 +300,66 @@ client.on('data', function(socketdata) { // ARQ OPEN if (data['status'] == 'open') { ipcRenderer.send('request-show-arq-toast-datachannel-open', {data: [data]}); + // ARQ OPENING } else if (data['status'] == 'opening') { ipcRenderer.send('request-show-arq-toast-datachannel-opening', {data: [data]}); + // ARQ TRANSMISSION FAILED } else if (data['status'] == 'failed') { ipcRenderer.send('request-show-arq-toast-transmission-failed', {data: [data]}); + ipcRenderer.send('request-update-transmission-status', {data: [data]}); + // ARQ TRANSMISSION RECEIVED } else if (data['status'] == 'received') { ipcRenderer.send('request-show-arq-toast-transmission-received', {data: [data]}); + dataArray = [] + messageArray = [] + + socketLog.info(data) + // we need to encode here to do a deep check for checking if file or message + var encoded_data = atob(data['data']) + var splitted_data = encoded_data.split(split_char) + + if(splitted_data[0] == 'f'){ + dataArray.push(data) + } + + if(splitted_data[0] == 'm'){ + messageArray.push(data) + console.log(data) + } + + rxBufferLengthGui = dataArray.length + let Files = { + data: dataArray, + }; + ipcRenderer.send('request-update-rx-buffer', Files); + ipcRenderer.send('request-new-msg-received', Files); + + rxMsgBufferLengthGui = messageArray.length + let Messages = { + data: messageArray, + }; + ipcRenderer.send('request-new-msg-received', Messages); + // ARQ TRANSMISSION TRANSMITTING } else if (data['status'] == 'transmitting') { ipcRenderer.send('request-show-arq-toast-transmission-transmitting', {data: [data]}); + ipcRenderer.send('request-update-transmission-status', {data: [data]}); + // ARQ TRANSMISSION TRANSMITTED } else if (data['status'] == 'transmitted') { ipcRenderer.send('request-show-arq-toast-transmission-transmitted', {data: [data]}); + ipcRenderer.send('request-update-transmission-status', {data: [data]}); } } - - - - - - - - - /* A TEST WITH STREAMING DATA .... */ - // if we received data through network stream, we get a single data item - if (data['arq'] == 'received') { - dataArray = [] - messageArray = [] - - socketLog.info(data) - // we need to encode here to do a deep check for checking if file or message - var encoded_data = atob(data['data']) - var splitted_data = encoded_data.split(split_char) - - - if(splitted_data[0] == 'f'){ - dataArray.push(data) - } - - if(splitted_data[0] == 'm'){ - messageArray.push(data) - console.log(data) - } - - rxBufferLengthGui = dataArray.length - let Files = { - data: dataArray, - }; - ipcRenderer.send('request-update-rx-buffer', Files); - ipcRenderer.send('request-new-msg-received', Files); - - rxMsgBufferLengthGui = messageArray.length - let Messages = { - data: messageArray, - }; - ipcRenderer.send('request-new-msg-received', Messages); - } } + // ----------- catch tnc info messages END ----------- diff --git a/tnc/data_handler.py b/tnc/data_handler.py index 8fcab05b..c2602765 100644 --- a/tnc/data_handler.py +++ b/tnc/data_handler.py @@ -1033,9 +1033,14 @@ class DATA: bytesperminute=static.ARQ_BYTES_PER_MINUTE, ) + # GOING TO NEXT ITERATION if self.data_frame_ack_received: + # we need to wait until sending "transmitted" state + # gui database is too slow for handling this within 0.001 seconds + # so let's sleep a little + time.sleep(0.1) self.send_data_to_socket_queue( freedata="tnc-message", arq="transmission", From 532eeb0e121f1f6daada8e36c52792f130c8952c Mon Sep 17 00:00:00 2001 From: dj2ls Date: Thu, 9 Jun 2022 14:14:31 +0200 Subject: [PATCH 09/19] fixed small typo --- gui/main.js | 4 ++-- gui/preload-chat.js | 1 - gui/sock.js | 4 ++-- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/gui/main.js b/gui/main.js index ff4fb9e4..87a4380c 100644 --- a/gui/main.js +++ b/gui/main.js @@ -567,8 +567,8 @@ ipcMain.on('request-show-arq-toast-datachannel-opening',(event,data)=>{ }); // ARQ DATA CHANNEL OPEN -ipcMain.on('request-show-arq-toast-datachannel-open',(event,data)=>{ - win.webContents.send('action-show-arq-toast-datachannel-open', data); +ipcMain.on('request-show-arq-toast-datachannel-opened',(event,data)=>{ + win.webContents.send('action-show-arq-toast-datachannel-opened', data); }); // ARQ DATA RECEIVED OPENER diff --git a/gui/preload-chat.js b/gui/preload-chat.js index b991c74c..3dceeaa7 100644 --- a/gui/preload-chat.js +++ b/gui/preload-chat.js @@ -806,7 +806,6 @@ update_chat_obj_by_uuid = function(uuid) { add_obj_to_database = function(obj){ db.put({ _id: obj.uuid, - _rev: doc._rev, timestamp: obj.timestamp, uuid: obj.uuid, dxcallsign: obj.dxcallsign, diff --git a/gui/sock.js b/gui/sock.js index b61835f6..c5b4a272 100644 --- a/gui/sock.js +++ b/gui/sock.js @@ -298,8 +298,8 @@ client.on('data', function(socketdata) { if (data['arq'] == 'transmission') { // ARQ OPEN - if (data['status'] == 'open') { - ipcRenderer.send('request-show-arq-toast-datachannel-open', {data: [data]}); + if (data['status'] == 'opened') { + ipcRenderer.send('request-show-arq-toast-datachannel-opened', {data: [data]}); // ARQ OPENING } else if (data['status'] == 'opening') { From 539b23cf6dd35acb9cc98ccc688dc54ee4ca5f7b Mon Sep 17 00:00:00 2001 From: dj2ls Date: Thu, 9 Jun 2022 14:54:42 +0200 Subject: [PATCH 10/19] improved info processing for chat messages --- gui/main.js | 4 ++++ gui/preload-chat.js | 15 ++++++++------- gui/sock.js | 1 + 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/gui/main.js b/gui/main.js index 87a4380c..81fec134 100644 --- a/gui/main.js +++ b/gui/main.js @@ -471,6 +471,10 @@ console.log(filepath.filePaths[0]) var filename = path.basename(filepath.filePaths[0]) var mimeType = mime.getType(filename) + console.log(mimeType) + if (mimeType == '' || typeof(mimeType) !== 'null'){ + mimeType = 'plain/text' + } chat.webContents.send('return-selected-files', {data : data, mime: mimeType, filename: filename}) }) diff --git a/gui/preload-chat.js b/gui/preload-chat.js index 3dceeaa7..e02063ef 100644 --- a/gui/preload-chat.js +++ b/gui/preload-chat.js @@ -163,7 +163,6 @@ window.addEventListener('DOMContentLoaded', () => { db.post({ _id: uuid, - _rev: doc._rev, timestamp: Math.floor(Date.now() / 1000), dxcallsign: dxcallsign.toUpperCase(), dxgrid: '---', @@ -193,6 +192,9 @@ db.post({ console.log(file); console.log(filename); console.log(filetype); + if (filetype == ''){ + filetype = 'plain/text' + } var data_with_attachment = chatmessage + split_char + filename + split_char + filetype + split_char + file; @@ -211,7 +213,6 @@ db.post({ ipcRenderer.send('run-tnc-command', Data); db.post({ _id: uuid, - _rev: doc._rev, timestamp: Math.floor(Date.now() / 1000), dxcallsign: dxcallsign, dxgrid: 'null', @@ -242,7 +243,7 @@ db.post({ // clear input document.getElementById('chatModuleMessage').value = '' - // after adding file data to our attachment varible, delete it from global + // after adding file data to our attachment variable, delete it from global filetype = ''; file = ''; filename = ''; @@ -256,6 +257,8 @@ db.post({ }); ipcRenderer.on('return-selected-files', (event, arg) => { filetype = arg.mime; + console.log(filetype) + file = arg.data; filename = arg.filename; document.getElementById('selectFilesButton').innerHTML = ` @@ -429,6 +432,7 @@ update_chat = function(obj) { } else { var filename = ''; var fileheader = ''; + var filetype = 'text/plain'; var controlarea_transmit = `
@@ -645,7 +649,7 @@ update_chat = function(obj) { } if (obj.status == 'failed'){ - document.getElementById('msg-' + obj._id + '-progress').classList.remove("progress-bar-striped"); + //document.getElementById('msg-' + obj._id + '-progress').classList.remove("progress-bar-striped"); document.getElementById('msg-' + obj._id + '-progress').classList.remove("progress-bar-animated"); document.getElementById('msg-' + obj._id + '-progress').classList.remove("bg-primary"); document.getElementById('msg-' + obj._id + '-progress').classList.add("bg-danger"); @@ -678,11 +682,8 @@ update_chat = function(obj) { // set Attribute to determine if we already created an EventListener for this element document.getElementById('retransmit-msg-' + obj._id).setAttribute('listenerOnClick', 'true'); - document.getElementById('retransmit-msg-' + obj._id).addEventListener("click", () => { - - db.get(obj._id, { attachments: true }).then(function(doc) { diff --git a/gui/sock.js b/gui/sock.js index c5b4a272..ecee28c1 100644 --- a/gui/sock.js +++ b/gui/sock.js @@ -315,6 +315,7 @@ client.on('data', function(socketdata) { // ARQ TRANSMISSION RECEIVED } else if (data['status'] == 'received') { ipcRenderer.send('request-show-arq-toast-transmission-received', {data: [data]}); + ipcRenderer.send('request-update-transmission-status', {data: [data]}); dataArray = [] messageArray = [] From a19a6c13c12e9fc903b13d76f2a0f1ceffb7b105 Mon Sep 17 00:00:00 2001 From: dj2ls Date: Thu, 9 Jun 2022 21:31:12 +0200 Subject: [PATCH 11/19] added qrv info toast --- gui/preload-chat.js | 2 +- gui/preload-main.js | 6 ++++++ gui/src/index.html | 14 ++++++++++++++ tnc/data_handler.py | 2 +- 4 files changed, 22 insertions(+), 2 deletions(-) diff --git a/gui/preload-chat.js b/gui/preload-chat.js index e02063ef..d17097a5 100644 --- a/gui/preload-chat.js +++ b/gui/preload-chat.js @@ -390,7 +390,7 @@ update_chat = function(obj) { var shortmsg = obj.type; } else { var shortmsg = obj.msg; - var maxlength = 40; + var maxlength = 30; var shortmsg = shortmsg.length > maxlength ? shortmsg.substring(0, maxlength - 3) + "..." : shortmsg; } diff --git a/gui/preload-main.js b/gui/preload-main.js index 14733be6..cea1285c 100644 --- a/gui/preload-main.js +++ b/gui/preload-main.js @@ -1813,10 +1813,16 @@ ipcRenderer.on('action-show-cq-toast-received', (event, data) => { // QRV TRANSMITTING ipcRenderer.on('action-show-qrv-toast-transmitting', (event, data) => { + var toastQRVtransmitting = document.getElementById('toastQRVtransmitting'); + var toast = bootstrap.Toast.getOrCreateInstance(toastQRVtransmitting); // Returns a Bootstrap toast instance + toast.show(); }); // QRV RECEIVED ipcRenderer.on('action-show-qrv-toast-received', (event, data) => { + var toastQRVreceiving = document.getElementById('toastQRVreceiving'); + var toast = bootstrap.Toast.getOrCreateInstance(toastQRVreceiving); // Returns a Bootstrap toast instance + toast.show(); }); // BEACON TRANSMITTING diff --git a/gui/src/index.html b/gui/src/index.html index 523b7cab..4c7ca8ff 100644 --- a/gui/src/index.html +++ b/gui/src/index.html @@ -102,6 +102,20 @@
+ + + + + + + + + + + + + + + + + + + From f758e10a357d8ba67967614d47a3070b367820b9 Mon Sep 17 00:00:00 2001 From: dj2ls Date: Wed, 15 Jun 2022 10:54:34 +0200 Subject: [PATCH 16/19] removed static.INFO fields --- tnc/data_handler.py | 29 ----------------------------- tnc/sock.py | 1 - 2 files changed, 30 deletions(-) diff --git a/tnc/data_handler.py b/tnc/data_handler.py index a5680492..4ebf328d 100644 --- a/tnc/data_handler.py +++ b/tnc/data_handler.py @@ -528,7 +528,6 @@ class DATA: static.TNC_STATE = "BUSY" static.ARQ_STATE = True - # static.INFO.append("ARQ;RECEIVING") # Update data_channel timestamp self.data_channel_last_received = int(time.time()) @@ -754,7 +753,6 @@ class DATA: dxgrid=str(static.DXGRID, "UTF-8"), data=base64_data, ) - # static.INFO.append("ARQ;RECEIVING;SUCCESS") self.log.info( "[TNC] ARQ | RX | SENDING DATA FRAME ACK", @@ -777,7 +775,6 @@ class DATA: ) else: - # static.INFO.append("ARQ;RECEIVING;FAILED") self.send_data_to_socket_queue( freedata="tnc-message", @@ -833,7 +830,6 @@ class DATA: # static.TOTAL_BYTES = round(len(data_out) / 1024, 2) static.TOTAL_BYTES = len(data_out) frame_total_size = len(data_out).to_bytes(4, byteorder="big") - # static.INFO.append("ARQ;TRANSMITTING") self.send_data_to_socket_queue( freedata="tnc-message", @@ -1049,7 +1045,6 @@ class DATA: percent=static.ARQ_TRANSMISSION_PERCENT, bytesperminute=static.ARQ_BYTES_PER_MINUTE, ) - # static.INFO.append("ARQ;TRANSMITTING;SUCCESS") self.log.info( "[TNC] ARQ | TX | DATA TRANSMITTED!", @@ -1067,7 +1062,6 @@ class DATA: percent=static.ARQ_TRANSMISSION_PERCENT, bytesperminute=static.ARQ_BYTES_PER_MINUTE, ) - # static.INFO.append("ARQ;TRANSMITTING;FAILED") self.log.info( "[TNC] ARQ | TX | TRANSMISSION FAILED OR TIME OUT!", @@ -1195,7 +1189,6 @@ class DATA: percent=static.ARQ_TRANSMISSION_PERCENT, bytesperminute=static.ARQ_BYTES_PER_MINUTE, ) - # static.INFO.append("ARQ;TRANSMITTING;FAILED") # Update data_channel timestamp self.arq_session_last_received = int(time.time()) @@ -1390,7 +1383,6 @@ class DATA: + "]", state=static.ARQ_SESSION_STATE, ) - # static.INFO.append("ARQ;SESSION;CLOSE") self.send_data_to_socket_queue( freedata="tnc-message", @@ -1433,7 +1425,6 @@ class DATA: + "]", state=static.ARQ_SESSION_STATE, ) - # static.INFO.append("ARQ;SESSION;CLOSE") self.send_data_to_socket_queue( freedata="tnc-message", @@ -1584,7 +1575,6 @@ class DATA: while not static.ARQ_STATE: time.sleep(0.01) for attempt in range(self.data_channel_max_retries): - # static.INFO.append("DATACHANNEL;OPENING") self.send_data_to_socket_queue( freedata="tnc-message", @@ -1611,7 +1601,6 @@ class DATA: return True # `data_channel_max_retries` attempts have been sent. Aborting attempt & cleaning up - # static.INFO.append("DATACHANNEL;FAILED") self.log.debug( "[TNC] arq_open_data_channel:", transmission_uuid=self.transmission_uuid @@ -1655,7 +1644,6 @@ class DATA: """ self.arq_file_transfer = True self.is_IRS = True - # static.INFO.append("DATACHANNEL;RECEIVEDOPENER") self.send_data_to_socket_queue( freedata="tnc-message", arq="transmission", @@ -1760,7 +1748,6 @@ class DATA: """ protocol_version = int.from_bytes(bytes(data_in[13:14]), "big") if protocol_version == static.ARQ_PROTOCOL_VERSION: - # static.INFO.append("DATACHANNEL;OPEN") self.send_data_to_socket_queue( freedata="tnc-message", arq="transmission", @@ -1805,7 +1792,6 @@ class DATA: else: static.TNC_STATE = "IDLE" static.ARQ_STATE = False - # static.INFO.append("PROTOCOL;VERSION_MISMATCH") self.send_data_to_socket_queue( freedata="tnc-message", arq="transmission", @@ -1831,7 +1817,6 @@ class DATA: static.DXCALLSIGN = dxcallsign static.DXCALLSIGN_CRC = helpers.get_crc_24(static.DXCALLSIGN) - # static.INFO.append("PING;SENDING") self.send_data_to_socket_queue( freedata="tnc-message", ping="transmitting", @@ -1879,8 +1864,6 @@ class DATA: static.HAMLIB_FREQUENCY, ) - # static.INFO.append("PING;RECEIVING") - self.send_data_to_socket_queue( freedata="tnc-message", ping="received", @@ -1953,8 +1936,6 @@ class DATA: static.HAMLIB_FREQUENCY, ) - # static.INFO.append("PING;RECEIVEDACK") - self.log.info( "[TNC] PING ACK [" + str(self.mycallsign, "UTF-8") @@ -1980,7 +1961,6 @@ class DATA: static.TNC_STATE = "IDLE" static.ARQ_STATE = False - # static.INFO.append("TRANSMISSION;STOPPED") self.send_data_to_socket_queue( freedata="tnc-message", arq="transmission", @@ -1995,7 +1975,6 @@ class DATA: self.log.warning("[TNC] Stopping transmission!") static.TNC_STATE = "IDLE" static.ARQ_STATE = False - # static.INFO.append("TRANSMISSION;STOPPED") self.send_data_to_socket_queue( freedata="tnc-message", arq="transmission", @@ -2026,7 +2005,6 @@ class DATA: and not self.arq_file_transfer and not static.BEACON_PAUSE ): - # static.INFO.append("BEACON;SENDING") self.send_data_to_socket_queue( freedata="tnc-message", beacon="transmitting", @@ -2082,7 +2060,6 @@ class DATA: dxgrid=str(dxgrid, "UTF-8"), snr=str(static.SNR), ) - # static.INFO.append("BEACON;RECEIVING") self.log.info( "[TNC] BEACON RCVD [" @@ -2106,7 +2083,6 @@ class DATA: Transmit a CQ """ self.log.info("[TNC] CQ CQ CQ") - # static.INFO.append("CQ;SENDING") self.send_data_to_socket_queue( freedata="tnc-message", cq="transmitting", @@ -2140,7 +2116,6 @@ class DATA: self.log.debug("[TNC] received_cq:", dxcallsign=dxcallsign) dxgrid = bytes(helpers.decode_grid(data_in[7:11]), "UTF-8") - # static.INFO.append("CQ;RECEIVING") self.send_data_to_socket_queue( freedata="tnc-message", cq="received", @@ -2180,7 +2155,6 @@ class DATA: # duration, plus overhead. Set the wait interval to be random between 0 and 2s # in 0.5s increments. helpers.wait(randrange(0, 20, 5) / 10.0) - # static.INFO.append("QRV;SENDING") self.send_data_to_socket_queue( freedata="tnc-message", qrv="transmitting", @@ -2216,7 +2190,6 @@ class DATA: freedata="tnc-message", qrv="received", ) - # static.INFO.append("QRV;RECEIVING") self.log.info( "[TNC] QRV RCVD [" @@ -2518,7 +2491,6 @@ class DATA: + str(static.DXCALLSIGN, "UTF-8") + "]" ) - # static.INFO.append("ARQ;RECEIVING;FAILED") self.send_data_to_socket_queue( freedata="tnc-message", arq="transmission", @@ -2547,7 +2519,6 @@ class DATA: + str(static.DXCALLSIGN, "UTF-8") + "]" ) - # static.INFO.append("ARQ;SESSION;TIMEOUT") self.send_data_to_socket_queue( freedata="tnc-message", arq="session", diff --git a/tnc/sock.py b/tnc/sock.py index a71ffc49..4b01cc13 100644 --- a/tnc/sock.py +++ b/tnc/sock.py @@ -467,7 +467,6 @@ def send_tnc_state(): "arq_compression_factor": str(static.ARQ_COMPRESSION_FACTOR), "arq_transmission_percent": str(static.ARQ_TRANSMISSION_PERCENT), "total_bytes": str(static.TOTAL_BYTES), - "info": static.INFO, "beacon_state": str(static.BEACON_STATE), "stations": [], "mycallsign": str(static.MYCALLSIGN, encoding), From bd531f2f07dfee594dd6217edc4404db85fe62d6 Mon Sep 17 00:00:00 2001 From: dj2ls Date: Wed, 15 Jun 2022 11:23:20 +0200 Subject: [PATCH 17/19] small gui breaking bug fix --- gui/sock.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/gui/sock.js b/gui/sock.js index 8eef313e..ad2d5819 100644 --- a/gui/sock.js +++ b/gui/sock.js @@ -314,9 +314,6 @@ client.on('data', function(socketdata) { ipcRenderer.send('request-show-arq-toast-session-failed', {data: [data]}); } - - } - } // ARQ TRANSMISSION if (data['arq'] == 'transmission') { From a6a77c2365de06f0d9834fe70f6890ad85f48050 Mon Sep 17 00:00:00 2001 From: dj2ls Date: Wed, 15 Jun 2022 12:21:03 +0200 Subject: [PATCH 18/19] fix chat not deleted --- gui/preload-chat.js | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/gui/preload-chat.js b/gui/preload-chat.js index bcdf5121..e0b09354 100644 --- a/gui/preload-chat.js +++ b/gui/preload-chat.js @@ -118,10 +118,15 @@ window.addEventListener('DOMContentLoaded', () => { result.docs.forEach(function(item) { console.log(item) db.get(item._id).then(function(doc) { - return db.remove(doc); + db.remove(doc).then(function(doc) { + return location.reload(); + }).catch(function(err) { + console.log(err); + }); + }).catch(function(err) { + console.log(err); }); - location.reload(); - + }); } }).catch(function(err) { From a85efe5bf4a311eed84c4efd6798db99a56a6f4d Mon Sep 17 00:00:00 2001 From: dj2ls Date: Wed, 15 Jun 2022 13:08:26 +0200 Subject: [PATCH 19/19] make textarea adjustable - not the correct PR for doing this... --- gui/preload-chat.js | 24 +++++++++++++++++++++++- gui/src/chat-module.html | 2 +- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/gui/preload-chat.js b/gui/preload-chat.js index e0b09354..507073ed 100644 --- a/gui/preload-chat.js +++ b/gui/preload-chat.js @@ -157,8 +157,22 @@ window.addEventListener('DOMContentLoaded', () => { } }); + // ADJUST TEXTAREA SIZE + document.getElementById("chatModuleMessage").addEventListener("input", () => { + var textarea = document.getElementById("chatModuleMessage"); + var text = textarea.value; + var lines = text.split("\n").length + if (lines >= 10){ + lines = 10; + } + var message_container_height_offset = 90 + (23*lines); + var message_container_height = `calc(100% - ${message_container_height_offset}px)`; + document.getElementById("message-container").style.height = message_container_height; + textarea.rows = lines; + }) + // NEW CHAT @@ -193,7 +207,15 @@ db.post({ document.getElementById('emojipickercontainer').style.display = "none"; var dxcallsign = selected_callsign.toUpperCase(); - var chatmessage = document.getElementById('chatModuleMessage').value; + var textarea = document.getElementById('chatModuleMessage') + var chatmessage = textarea.value; + + // reset textarea size + var message_container_height_offset = 110; + var message_container_height = `calc(100% - ${message_container_height_offset}px)`; + document.getElementById("message-container").style.height = message_container_height; + textarea.rows = 1 + console.log(file); console.log(filename); console.log(filetype); diff --git a/gui/src/chat-module.html b/gui/src/chat-module.html index 48410818..683df8fe 100644 --- a/gui/src/chat-module.html +++ b/gui/src/chat-module.html @@ -64,7 +64,7 @@ - +