diff --git a/contact/ui/curses_ui.py b/contact/ui/curses_ui.py index c71a172..379a7f3 100644 --- a/contact/ui/curses_ui.py +++ b/contact/ui/curses_ui.py @@ -7,6 +7,7 @@ from contact.settings import settings_menu from contact.message_handlers.tx_handler import send_message, send_traceroute from contact.ui.colors import setup_colors, get_color from contact.utilities.db_handler import get_name_from_database, update_node_info_in_db, is_chat_archived +from contact.utilities.input_handlers import get_list_input import contact.ui.default_config as config import contact.ui.dialog import contact.globals as globals @@ -293,10 +294,57 @@ def main_ui(stdscr): draw_channel_list() draw_messages_window() + # ^/ elif char == chr(31): if(globals.current_window == 2 or globals.current_window == 0): search(globals.current_window) + # ^F + elif char == chr(6): + if globals.current_window == 2: + selectedNode = globals.interface.nodesByNum[globals.node_list[globals.selected_node]] + + curses.curs_set(0) + + if 'isFavorite' not in selectedNode or selectedNode['isFavorite'] == False: + confirmation = get_list_input(f"Set {get_name_from_database(globals.node_list[globals.selected_node])} as Favorite?", "no", ["yes", "no"]) + if confirmation == "yes": + globals.interface.localNode.setFavorite(globals.node_list[globals.selected_node]) + # Maybe we shouldn't be modifying the nodedb, but maybe it should update itself + globals.interface.nodesByNum[globals.node_list[globals.selected_node]]['isFavorite'] = True + + refresh_node_list() + + else: + confirmation = get_list_input(f"Remove {get_name_from_database(globals.node_list[globals.selected_node])} from Favorites?", "no", ["yes", "no"]) + if confirmation == "yes": + globals.interface.localNode.removeFavorite(globals.node_list[globals.selected_node]) + # Maybe we shouldn't be modifying the nodedb, but maybe it should update itself + globals.interface.nodesByNum[globals.node_list[globals.selected_node]]['isFavorite'] = False + + refresh_node_list() + + handle_resize(stdscr, False) + + elif char == chr(7): + if globals.current_window == 2: + selectedNode = globals.interface.nodesByNum[globals.node_list[globals.selected_node]] + + curses.curs_set(0) + + if 'isIgnored' not in selectedNode or selectedNode['isIgnored'] == False: + confirmation = get_list_input(f"Set {get_name_from_database(globals.node_list[globals.selected_node])} as Ignored?", "no", ["yes", "no"]) + if confirmation == "yes": + globals.interface.localNode.setIgnored(globals.node_list[globals.selected_node]) + globals.interface.nodesByNum[globals.node_list[globals.selected_node]]['isIgnored'] = True + else: + confirmation = get_list_input(f"Remove {get_name_from_database(globals.node_list[globals.selected_node])} from Ignored?", "no", ["yes", "no"]) + if confirmation == "yes": + globals.interface.localNode.removeIgnored(globals.node_list[globals.selected_node]) + globals.interface.nodesByNum[globals.node_list[globals.selected_node]]['isIgnored'] = False + + handle_resize(stdscr, False) + else: # Append typed character to input text if(isinstance(char, str)): @@ -618,7 +666,7 @@ def draw_node_details(): draw_centered_text_field(function_win, nodestr, 0, get_color("commands")) def draw_help(): - cmds = ["↑→↓← = Select", " ENTER = Send", " ` = Settings", " ^P = Packet Log", " ESC = Quit", " ^t = Traceroute", " ^d = Archive Chat"] + cmds = ["↑→↓← = Select", " ENTER = Send", " ` = Settings", " ^P = Packet Log", " ESC = Quit", " ^t = Traceroute", " ^d = Archive Chat", " ^f = Favorite", " ^g = Ignore"] function_str = "" for s in cmds: if(len(function_str) + len(s) < function_win.getmaxyx()[1] - 2): @@ -703,4 +751,4 @@ def draw_centered_text_field(win, text, y_offset, color): def draw_debug(value): function_win.addstr(1, 1, f"debug: {value} ") - function_win.refresh() \ No newline at end of file + function_win.refresh() diff --git a/contact/utilities/utils.py b/contact/utilities/utils.py index 6392899..ea8d4a4 100644 --- a/contact/utilities/utils.py +++ b/contact/utilities/utils.py @@ -48,6 +48,7 @@ def get_node_list(): else: return node sorted_nodes = sorted(globals.interface.nodes.values(), key = node_sort) + sorted_nodes = sorted(sorted_nodes, key = lambda node: node['isFavorite'] if 'isFavorite' in node else False, reverse = True) node_list = [node['num'] for node in sorted_nodes if node['num'] != my_node_num] return [my_node_num] + node_list # Ensuring your node is always first return []