From b1cf18a2f05d47adabcbf9299fd0912ed8046866 Mon Sep 17 00:00:00 2001 From: Davide Scaini Date: Sun, 26 Apr 2026 21:37:19 +0200 Subject: [PATCH] fix(feed): update feed.json after every upload so browser sees new activities merge_all(user_dir) updates the per-user _merged/ shard but the home page loads feed.json first via loadCombinedFeed. write_combined_feed was only called by the CLI render command, not by the API upload endpoints or the dev watcher, leaving feed.json permanently stale after any runtime upload. Add write_combined_feed(_get_data_dir()) after every merge_all call in /api/upload/bas, /api/upload/raw, the dev.py file watcher, and dev startup. --- bincio/dev.py | 5 ++++- bincio/serve/server.py | 6 ++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/bincio/dev.py b/bincio/dev.py index 3f9ddae..8e7f6df 100644 --- a/bincio/dev.py +++ b/bincio/dev.py @@ -66,8 +66,10 @@ def _user_dirs(data: Path) -> list[Path]: def _merge_all_users(data: Path) -> None: from bincio.render.cli import _merge_edits, _write_root_manifest + from bincio.render.merge import write_combined_feed _merge_edits(data) _write_root_manifest(data) + write_combined_feed(data) def _local_ip() -> str: @@ -148,8 +150,9 @@ def _watch_data(data: Path) -> None: for user_dir in affected: handle = user_dir.name try: - from bincio.render.merge import merge_all + from bincio.render.merge import merge_all, write_combined_feed merge_all(user_dir) + write_combined_feed(data) console.print(f" [dim]↺ {handle}: merged[/dim]") except Exception as exc: console.print(f" [yellow]⚠ {handle}: merge failed — {exc}[/yellow]") diff --git a/bincio/serve/server.py b/bincio/serve/server.py index e220929..8f1864c 100644 --- a/bincio/serve/server.py +++ b/bincio/serve/server.py @@ -532,8 +532,9 @@ async def upload_bas_activity( if not gj_path.exists(): gj_path.write_text(json.dumps(body["geojson"], ensure_ascii=False), encoding="utf-8") - from bincio.render.merge import merge_all + from bincio.render.merge import merge_all, write_combined_feed merge_all(user_dir) + write_combined_feed(_get_data_dir()) log.info("upload/bas[%s]: imported %s", user.handle, activity_id) return JSONResponse({"ok": True, "id": activity_id, "status": "imported"}) @@ -621,8 +622,9 @@ async def upload_raw_activity( if geojson and not (acts_dir / f"{act_id}.geojson").exists(): (acts_dir / f"{act_id}.geojson").write_text(json.dumps(geojson), encoding="utf-8") - from bincio.render.merge import merge_all + from bincio.render.merge import merge_all, write_combined_feed merge_all(user_dir) + write_combined_feed(_get_data_dir()) except Exception as exc: log.warning("upload/raw[%s]: extraction failed: %s", user.handle, exc)