From db8496b2e3f411423b84130361931e91f1150e08 Mon Sep 17 00:00:00 2001 From: Russell Schmidt Date: Mon, 31 Mar 2025 19:23:15 -0500 Subject: [PATCH] Fix updating data on existing nodes Since 4bc1654 changed the defaults of the parameters to update_node_info_in_db(), any call to that funciton that didn't specify a value for chat_archived would cause chat_archived to be set to 0, because 0 is not None, we wouldn't preserve the existing value stored in the DB. Update to use None paramters so we can tell what the caller specified and did not specify again. --- utilities/db_handler.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/utilities/db_handler.py b/utilities/db_handler.py index c471fb7..8368f38 100644 --- a/utilities/db_handler.py +++ b/utilities/db_handler.py @@ -190,21 +190,15 @@ def maybe_store_nodeinfo_in_db(packet): except Exception as e: logging.error(f"Unexpected error in maybe_store_nodeinfo_in_db: {e}") -def update_node_info_in_db(user_id, long_name=None, short_name=None, hw_model="UNSET", is_licensed=0, role="CLIENT", public_key="", chat_archived=0): +def update_node_info_in_db(user_id, long_name=None, short_name=None, hw_model=None, is_licensed=None, role=None, public_key=None, chat_archived=None): """Update or insert node information into the database, preserving unchanged fields.""" try: ensure_node_table_exists() # Ensure the table exists before any operation - if long_name == None: - long_name = "Meshtastic " + str(decimal_to_hex(user_id)[-4:]) - if short_name == None: - short_name = str(decimal_to_hex(user_id)[-4:]) - with sqlite3.connect(config.db_file_path) as db_connection: db_cursor = db_connection.cursor() table_name = f'"{globals.myNodeNum}_nodedb"' # Quote in case of numeric names - table_columns = [i[1] for i in db_cursor.execute(f'PRAGMA table_info({table_name})')] if "chat_archived" not in table_columns: update_table_query = f"ALTER TABLE {table_name} ADD COLUMN chat_archived INTEGER" @@ -225,6 +219,14 @@ def update_node_info_in_db(user_id, long_name=None, short_name=None, hw_model="U public_key = public_key if public_key is not None else existing_public_key chat_archived = chat_archived if chat_archived is not None else existing_chat_archived + long_name = long_name if long_name is not None else "Meshtastic " + str(decimal_to_hex(user_id)[-4:]) + short_name = short_name if short_name is not None else str(decimal_to_hex(user_id)[-4:]) + hw_model = hw_model if hw_model is not None else "UNSET" + is_licensed = is_licensed if is_licensed is not None else 0 + role = role if role is not None else "CLIENT" + public_key = public_key if public_key is not None else "" + chat_archived = chat_archived if chat_archived is not None else 0 + # Upsert logic upsert_query = f''' INSERT INTO {table_name} (user_id, long_name, short_name, hw_model, is_licensed, role, public_key, chat_archived)