diff --git a/message_handlers/rx_handler.py b/message_handlers/rx_handler.py index 6eabe17..cff5842 100644 --- a/message_handlers/rx_handler.py +++ b/message_handlers/rx_handler.py @@ -5,13 +5,15 @@ from ui.curses_ui import draw_packetlog_win, draw_node_list, draw_messages_windo from db_handler import save_message_to_db, maybe_store_nodeinfo_in_db +from datetime import datetime + def on_receive(packet, interface): global nodes_win - # update packet log + # Update packet log globals.packet_buffer.append(packet) if len(globals.packet_buffer) > 20: - # trim buffer to 20 packets + # Trim buffer to 20 packets globals.packet_buffer = globals.packet_buffer[-20:] if globals.display_log: @@ -20,10 +22,9 @@ def on_receive(packet, interface): if 'decoded' not in packet: return - # Assume any incoming packet could update the last seen time for a node, so we - # may need to reorder the list. This could probably be limited to specific packets. + # Assume any incoming packet could update the last seen time for a node new_node_list = get_node_list() - if(new_node_list != globals.node_list): + if new_node_list != globals.node_list: globals.node_list = new_node_list draw_node_list() @@ -42,6 +43,7 @@ def on_receive(packet, interface): channel_number = packet['channel'] else: channel_number = 0 + if packet['to'] == globals.myNodeNum: if packet['from'] in globals.channel_list: pass @@ -65,15 +67,35 @@ def on_receive(packet, interface): if globals.channel_list[channel_number] not in globals.all_messages: globals.all_messages[globals.channel_list[channel_number]] = [] + # Timestamp handling + current_timestamp = int(packet['rxTime']) # Use the packet's rxTime for timestamp + current_hour = datetime.fromtimestamp(current_timestamp).strftime('%Y-%m-%d %H:00') + + # Retrieve the last timestamp if available + channel_messages = globals.all_messages[globals.channel_list[channel_number]] + if channel_messages: + # Check the last entry for a timestamp + for entry in reversed(channel_messages): + if entry[0].startswith("--"): + last_hour = entry[0].strip("- ").strip() + break + else: + last_hour = None + else: + last_hour = None + + # Add a new timestamp if it's a new hour + if last_hour != current_hour: + globals.all_messages[globals.channel_list[channel_number]].append((f"-- {current_hour} --", "")) + globals.all_messages[globals.channel_list[channel_number]].append((f"{globals.message_prefix} {message_from_string} ", message_string)) - if(refresh_channels): + if refresh_channels: draw_channel_list() - if(refresh_messages): + if refresh_messages: draw_messages_window(True) save_message_to_db(globals.channel_list[channel_number], message_from_id, message_string) except KeyError as e: - print(f"Error processing packet: {e}") - + print(f"Error processing packet: {e}") \ No newline at end of file diff --git a/message_handlers/tx_handler.py b/message_handlers/tx_handler.py index 5b697dd..0f4f726 100644 --- a/message_handlers/tx_handler.py +++ b/message_handlers/tx_handler.py @@ -1,3 +1,4 @@ +from datetime import datetime from meshtastic import BROADCAST_NUM from db_handler import save_message_to_db, update_ack_nak from meshtastic.protobuf import mesh_pb2, portnums_pb2 @@ -106,14 +107,14 @@ def on_response_traceroute(packet): globals.all_messages[globals.channel_list[channel_number]] = [] globals.all_messages[globals.channel_list[channel_number]].append((f"{globals.message_prefix} {message_from_string}", msg_str)) - if(refresh_channels): + if refresh_channels: draw_channel_list() - if(refresh_messages): + if refresh_messages: draw_messages_window(True) save_message_to_db(globals.channel_list[channel_number], packet['from'], msg_str) -def send_message(message, destination=BROADCAST_NUM, channel=0): +def send_message(message, destination=BROADCAST_NUM, channel=0): myid = globals.myNodeNum send_on_channel = 0 channel_id = globals.channel_list[channel] @@ -136,11 +137,32 @@ def send_message(message, destination=BROADCAST_NUM, channel=0): if channel_id not in globals.all_messages: globals.all_messages[channel_id] = [] + # Handle timestamp logic + current_timestamp = int(datetime.now().timestamp()) # Get current timestamp + current_hour = datetime.fromtimestamp(current_timestamp).strftime('%Y-%m-%d %H:00') + + # Retrieve the last timestamp if available + channel_messages = globals.all_messages[channel_id] + if channel_messages: + # Check the last entry for a timestamp + for entry in reversed(channel_messages): + if entry[0].startswith("--"): + last_hour = entry[0].strip("- ").strip() + break + else: + last_hour = None + else: + last_hour = None + + # Add a new timestamp if it's a new hour + if last_hour != current_hour: + globals.all_messages[channel_id].append((f"-- {current_hour} --", "")) + globals.all_messages[channel_id].append((globals.sent_message_prefix + globals.ack_unknown_str + ": ", message)) timestamp = save_message_to_db(channel_id, myid, message) - ack_naks[sent_message_data.id] = {'channel' : channel_id, 'messageIndex' : len(globals.all_messages[channel_id]) - 1, 'timestamp' : timestamp } + ack_naks[sent_message_data.id] = {'channel': channel_id, 'messageIndex': len(globals.all_messages[channel_id]) - 1, 'timestamp': timestamp} def send_traceroute(): r = mesh_pb2.RouteDiscovery()