diff --git a/modem/arq_data_type_handler.py b/modem/arq_data_type_handler.py index 487a88e4..7edc5133 100644 --- a/modem/arq_data_type_handler.py +++ b/modem/arq_data_type_handler.py @@ -82,8 +82,9 @@ class ARQDataTypeHandler: def handle_p2pmsg_lzma(self, data): decompressed_data = lzma.decompress(data) self.log(f"Handling LZMA compressed P2PMSG data: {len(decompressed_data)} Bytes from {len(data)} Bytes") - received_message_obj = MessageP2P.from_payload(decompressed_data) + decompressed_json_string = decompressed_data.decode('utf-8') + received_message_obj = MessageP2P.from_payload(decompressed_json_string) received_message_dict = MessageP2P.to_dict(received_message_obj, received=True) - DatabaseManager(uri='sqlite:///:memory:').add_message(received_message_dict) + result = DatabaseManager(uri='sqlite:///:memory:').add_message(received_message_dict) return decompressed_data diff --git a/modem/command_message_send.py b/modem/command_message_send.py index 36e92ae0..062230b1 100644 --- a/modem/command_message_send.py +++ b/modem/command_message_send.py @@ -15,12 +15,17 @@ class SendMessageCommand(TxCommand): self.message = MessageP2P.from_api_params(origin, apiParams) def transmit(self, modem): - data, data_type = self.arq_data_type_handler.prepare(self.message.to_payload, 'p2pmsg_lzma') - iss = ARQSessionISS(self.config, modem, - self.message.destination, - data, + # Convert JSON string to bytes (using UTF-8 encoding) + payload = self.message.to_payload().encode('utf-8') + json_bytearray = bytearray(payload) + data, data_type = self.arq_data_type_handler.prepare(json_bytearray, 'p2pmsg_lzma') + iss = ARQSessionISS(self.config, + modem, + self.message.destination, self.state_manager, - data_type) + data, + data_type + ) self.state_manager.register_arq_iss_session(iss) iss.start() diff --git a/modem/message_system_db_manager.py b/modem/message_system_db_manager.py index b5c07455..39bc37eb 100644 --- a/modem/message_system_db_manager.py +++ b/modem/message_system_db_manager.py @@ -6,6 +6,8 @@ from threading import local from message_system_db_model import Base, Station, Status, Attachment, P2PMessage from datetime import datetime import json +import structlog + class DatabaseManager: def __init__(self, uri='sqlite:///freedata-messages.db'): @@ -14,6 +16,11 @@ class DatabaseManager: self.session_factory = sessionmaker(bind=self.engine) Base.metadata.create_all(self.engine) + def log(self, message, isWarning=False): + msg = f"[{type(self).__name__}]: {message}" + logger = self.logger.warn if isWarning else self.logger.info + logger(msg) + def get_thread_scoped_session(self): if not hasattr(self.thread_local, "session"): self.thread_local.session = scoped_session(self.session_factory) @@ -71,6 +78,8 @@ class DatabaseManager: session.add(new_message) session.commit() + + self.log(f"Added data to database: {new_message.id}") return new_message.id except Exception as e: session.rollback() diff --git a/modem/server.py b/modem/server.py index 397846ef..180f33c1 100644 --- a/modem/server.py +++ b/modem/server.py @@ -238,7 +238,7 @@ def get_post_radio(): return api_response(app.state_manager.get_radio_status()) @app.route('/freedata/messages', methods=['POST', 'GET']) -def post_freedata_message(): +def get_post_freedata_message(): if request.method in ['GET']: result = DatabaseManager(uri='sqlite:///:memory:').get_all_messages_json() return api_response(result) diff --git a/tests/test_message_p2p.py b/tests/test_message_p2p.py index 4ba1b2e2..3c0fe285 100755 --- a/tests/test_message_p2p.py +++ b/tests/test_message_p2p.py @@ -34,7 +34,7 @@ class TestDataFrameFactory(unittest.TestCase): } message = MessageP2P(self.mycall, 'DJ2LS-3', 'Hello World!', [attachment]) payload = message.to_payload() - + print(payload) received_message = MessageP2P.from_payload(payload) received_message_dict = MessageP2P.to_dict(received_message, received=True) self.database_manager.add_message(received_message_dict)