mirror of
https://github.com/pdxlocations/contact.git
synced 2026-07-04 00:41:18 +02:00
+43
-6
@@ -79,6 +79,8 @@ channel_list = []
|
||||
selected_channel = 0
|
||||
selected_node = 0
|
||||
direct_message = False
|
||||
packet_buffer = []
|
||||
display_log = False
|
||||
|
||||
def get_channels():
|
||||
global channel_list
|
||||
@@ -136,7 +138,16 @@ def get_name_from_number(number, type='long'):
|
||||
|
||||
|
||||
def on_receive(packet, interface):
|
||||
global all_messages, selected_channel, channel_list
|
||||
global all_messages, selected_channel, channel_list, packet_buffer
|
||||
|
||||
# update packet log
|
||||
packet_buffer.append(packet)
|
||||
if len(packet_buffer) > 20:
|
||||
# trim buffer to 20 packets
|
||||
packet_buffer = packet_buffer[-20:]
|
||||
|
||||
if display_log:
|
||||
update_packetlog_win()
|
||||
try:
|
||||
if 'decoded' in packet and packet['decoded']['portnum'] == 'NODEINFO_APP':
|
||||
get_node_list()
|
||||
@@ -272,15 +283,26 @@ def update_messages_window():
|
||||
|
||||
messages_win.box()
|
||||
messages_win.refresh()
|
||||
update_packetlog_win()
|
||||
|
||||
|
||||
def update_packetlog_win():
|
||||
if display_log:
|
||||
packetlog_win.clear()
|
||||
packetlog_win.box()
|
||||
# Get the dimensions of the packet log window
|
||||
height, width = packetlog_win.getmaxyx()
|
||||
for i, packet in enumerate(reversed(packet_buffer)):
|
||||
if i < height - 2:
|
||||
logString = f"From: {get_name_from_number(packet['from'])} To: {get_name_from_number(packet['to'])} Port: {packet['decoded']['portnum']} Payload: {packet['decoded']['payload']}"
|
||||
logString = logString[:width - 5] + '-' if len(logString) > width - 5 else logString
|
||||
packetlog_win.addstr(i+1, 1, logString.replace('\n', '').replace('\r', '') .strip())
|
||||
packetlog_win.refresh()
|
||||
|
||||
def draw_text_field(win, text):
|
||||
win.clear()
|
||||
win.border()
|
||||
win.addstr(1, 1, text)
|
||||
|
||||
|
||||
def draw_channel_list():
|
||||
global direct_message
|
||||
|
||||
@@ -357,7 +379,7 @@ def select_nodes(direction):
|
||||
|
||||
|
||||
def main(stdscr):
|
||||
global messages_win, nodes_win, channel_win, function_win, selected_node, selected_channel, direct_message
|
||||
global messages_win, nodes_win, channel_win, function_win, selected_node, selected_channel, direct_message, packetlog_win, display_log
|
||||
|
||||
stdscr.keypad(True)
|
||||
|
||||
@@ -380,10 +402,11 @@ def main(stdscr):
|
||||
|
||||
channel_win = curses.newwin(height - 6, channel_width, 3, 0)
|
||||
messages_win = curses.newwin(height - 6, messages_width, 3, channel_width)
|
||||
packetlog_win = curses.newwin(int(height/3), messages_width, int(height - (height / 3) - 3), channel_width)
|
||||
nodes_win = curses.newwin(height - 6, nodes_width, 3, channel_width + messages_width)
|
||||
function_win = curses.newwin(3, width, height - 3, 0)
|
||||
|
||||
draw_text_field(function_win, f"↑↓ = Switch Channels ← → = Channels/Nodes ENTER = Send / Select DM ESC = Quit ` = Settings")
|
||||
draw_text_field(function_win, f"↑↓ = Switch Channels ← → = Channels/Nodes ENTER = Send / Select DM ` = Settings / = Display Packet Log ESC = Quit")
|
||||
|
||||
# Enable scrolling for messages and nodes windows
|
||||
messages_win.scrollok(True)
|
||||
@@ -486,7 +509,21 @@ def main(stdscr):
|
||||
curses.curs_set(0) # Hide cursor
|
||||
settings(stdscr, interface)
|
||||
curses.curs_set(1) # Show cursor again
|
||||
|
||||
|
||||
elif char == 47:
|
||||
# Display packet log
|
||||
if display_log is False:
|
||||
display_log = True
|
||||
if not packet_buffer:
|
||||
packetlog_win.addstr(1, 1, "Packet Log")
|
||||
packetlog_win.box()
|
||||
packetlog_win.refresh()
|
||||
else:
|
||||
update_messages_window()
|
||||
else:
|
||||
display_log = False
|
||||
packetlog_win.clear()
|
||||
update_messages_window()
|
||||
else:
|
||||
# Append typed character to input text
|
||||
input_text += chr(char)
|
||||
|
||||
Reference in New Issue
Block a user