diff --git a/app/device_manager.py b/app/device_manager.py index f2e192f..34f440a 100644 --- a/app/device_manager.py +++ b/app/device_manager.py @@ -1669,6 +1669,9 @@ class DeviceManager: dm_id=dm_id, ) + # Mark delivery_status so reloading messages from DB shows delivered + self.db.update_dm_delivery_status(dm_id, 'delivered') + logger.info(f"DM delivery confirmed: dm_id={dm_id}, ack={ack_code}") if self.socketio: diff --git a/app/routes/api.py b/app/routes/api.py index 109568f..ad4a229 100644 --- a/app/routes/api.py +++ b/app/routes/api.py @@ -2032,7 +2032,16 @@ def get_dm_messages(): elif msg['direction'] == 'outgoing' and msg.get('recipient'): display_name = msg['recipient'] - # Merge delivery status from ACK tracking + # Set delivery status from DB field (covers both delivered and failed) + for msg in messages: + if msg.get('direction') == 'outgoing': + ds = msg.get('delivery_status') + if ds == 'delivered': + msg['status'] = 'delivered' + elif ds == 'failed': + msg['status'] = 'failed' + + # Merge additional delivery info from ACK tracking ack_codes = [msg['expected_ack'] for msg in messages if msg.get('direction') == 'outgoing' and msg.get('expected_ack')] if ack_codes: @@ -2049,12 +2058,6 @@ def get_dm_messages(): except Exception as e: logger.debug(f"ACK status fetch failed (non-critical): {e}") - # Set failed status for messages without ACK but marked failed in DB - for msg in messages: - if msg.get('direction') == 'outgoing' and msg.get('status') != 'delivered': - if msg.get('delivery_status') == 'failed': - msg['status'] = 'failed' - return jsonify({ 'success': True, 'conversation_id': conversation_id,