diff --git a/meshview/store.py b/meshview/store.py index ad13358..d21db74 100644 --- a/meshview/store.py +++ b/meshview/store.py @@ -23,7 +23,7 @@ async def get_fuzzy_nodes(query): return result.scalars() -async def get_packets(node_id=None, portnum=None, since=None, limit=1000, before=None, after=None): +async def get_packets(node_id=None, portnum=None, after=None, before=None, limit=100): async with database.async_session() as session: q = select(Packet) @@ -33,18 +33,20 @@ async def get_packets(node_id=None, portnum=None, since=None, limit=1000, before ) if portnum: q = q.where(Packet.portnum == portnum) - if since: - q = q.where(Packet.import_time > (datetime.datetime.now() - since)) - if before: - q = q.where(Packet.import_time < before) if after: q = q.where(Packet.import_time > after) + if before: + q = q.where(Packet.import_time < before) + + q = q.order_by(Packet.import_time.desc()) + if limit is not None: q = q.limit(limit) - result = await session.execute(q.order_by(Packet.import_time.desc())) - packets = list(result.scalars()) # Convert to list - return packets # Return the list + result = await session.execute(q) + packets = list(result.scalars()) + return packets + async def get_packets_from(node_id=None, portnum=None, since=None, limit=500): diff --git a/meshview/web.py b/meshview/web.py index df34a09..3d77c74 100644 --- a/meshview/web.py +++ b/meshview/web.py @@ -399,44 +399,39 @@ async def packet_details(request): @routes.get("/firehose/updates") async def firehose_updates(request): try: + # Parse `last_time` from query last_time_str = request.query.get("last_time", None) if last_time_str: try: last_time = datetime.datetime.fromisoformat(last_time_str) + if last_time.tzinfo is None: + last_time = last_time.replace(tzinfo=datetime.timezone.utc) except Exception as e: print(f"Failed to parse last_time '{last_time_str}': {e}") - last_time = datetime.datetime.min + last_time = None else: - last_time = datetime.datetime.min + last_time = None - portnum = request.query.get("portnum") - if portnum is not None and portnum != "": - portnum = int(portnum) - else: - portnum = None + # Query packets using `after=last_time` packets = await store.get_packets( - portnum=portnum, + after=last_time, limit=10, ) ui_packets = [Packet.from_model(p) for p in packets] - # Filter packets newer than last_time - new_packets = [p for p in ui_packets if p.import_time > last_time] - + # Render HTML using Jinja2 template = env.get_template("packet.html") - # Replace YOUR_NODE_ID with your current node ID (integer) - YOUR_NODE_ID = 0x12345678 # example, replace with actual - - rendered_packets = [template.render(packet=p, node_id=YOUR_NODE_ID) for p in new_packets] + rendered_packets = [template.render(packet=p) for p in ui_packets] + # Prepare response response = { "packets": rendered_packets, } - if new_packets: - latest_import_time = max(p.import_time for p in new_packets) - response["latest_import_time"] = latest_import_time.isoformat() + if ui_packets: + latest_import_time = max(p.import_time for p in ui_packets) + response["latest_import_time"] = latest_import_time.isoformat(timespec="seconds") return web.json_response(response)