diff --git a/public/index.html b/public/index.html
index e0a8083..872b11b 100644
--- a/public/index.html
+++ b/public/index.html
@@ -217,7 +217,9 @@
-
{{ chatItem.lxmf_message.state }}
+
+ {{ chatItem.lxmf_message.state }} {{ chatItem.lxmf_message.progress }}%
+
diff --git a/web.py b/web.py
index 25840de..bb92c57 100644
--- a/web.py
+++ b/web.py
@@ -371,7 +371,11 @@ class ReticulumWebChat:
# broadcast provided data to all connected websocket clients
async def websocket_broadcast(self, data):
for websocket_client in self.websocket_clients:
- await websocket_client.send_str(data)
+ try:
+ await websocket_client.send_str(data)
+ except:
+ # do nothing if failed to broadcast to a specific websocket client
+ pass
# broadcasts config to all websocket clients
async def send_config_to_websocket_clients(self):
@@ -614,6 +618,22 @@ class ReticulumWebChat:
"lxmf_message": self.convert_lxmf_message_to_dict(lxmf_message),
}))
+ # FIXME: there's no register_progress_callback on the lxmf message, so manually send progress until delivered or failed
+ # we also can't use on_lxmf_sending_state_updated method to do this, because of async/await issues...
+ while lxmf_message.state != LXMF.LXMessage.DELIVERED and lxmf_message.state != LXMF.LXMessage.FAILED:
+
+ # wait 1 second between sending updates
+ await asyncio.sleep(1)
+
+ # upsert lxmf message to database (as we want to update the progress in database too)
+ self.db_upsert_lxmf_message(lxmf_message)
+
+ # send update to websocket clients
+ await self.websocket_broadcast(json.dumps({
+ "type": "lxmf_message_state_updated",
+ "lxmf_message": self.convert_lxmf_message_to_dict(lxmf_message),
+ }))
+
except:
# FIXME send error to websocket?
print("failed to send lxmf message")