fix: briefing refresh — weather not populated + workspace conv bleed
Two bugs: 1. Manual 'Refresh' button didn't refresh weather/RSS before compiling. The daily scheduler calls refresh_all_feeds + refresh_location_cache before run_compilation; the manual trigger route called run_compilation directly, reading a stale cache. Manual trigger now mirrors the scheduler: refresh feeds and all configured weather locations first. 2. Navigating to WorkspaceView during a long briefing compilation caused the workspace chat to show the briefing content. triggerNow awaits ~30-60s; on completion it called loadAll() → chatStore.fetchConversation which overwrote the workspace's currentConversation in the shared store. Fixed with a _mounted flag — all post-async state writes in BriefingView are now guarded so they no-op if the component has been unmounted. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -242,12 +242,30 @@ async def get_conversation_messages(conv_id: int):
|
||||
@briefing_bp.route("/trigger", methods=["POST"])
|
||||
@_REQUIRE
|
||||
async def manual_trigger():
|
||||
"""Dev/admin endpoint to manually trigger a briefing compilation."""
|
||||
"""Manually trigger a briefing compilation, including a fresh data refresh."""
|
||||
data = await request.get_json() or {}
|
||||
slot = data.get("slot", "compilation")
|
||||
if slot not in ("compilation", "morning", "midday", "afternoon"):
|
||||
return jsonify({"error": "invalid slot"}), 400
|
||||
|
||||
# Refresh external data first (mirrors what the scheduler does)
|
||||
try:
|
||||
from fabledassistant.services.rss import refresh_all_feeds
|
||||
config_raw = await get_setting(g.user.id, "briefing_config", "{}")
|
||||
config = json.loads(config_raw) if isinstance(config_raw, str) else {}
|
||||
await refresh_all_feeds(g.user.id)
|
||||
for key, loc in config.get("locations", {}).items():
|
||||
if loc.get("lat") and loc.get("lon"):
|
||||
await weather_svc.refresh_location_cache(
|
||||
user_id=g.user.id,
|
||||
location_key=key,
|
||||
location_label=loc.get("label", key),
|
||||
lat=loc["lat"],
|
||||
lon=loc["lon"],
|
||||
)
|
||||
except Exception:
|
||||
logger.warning("Pre-trigger refresh failed for user %d", g.user.id, exc_info=True)
|
||||
|
||||
from fabledassistant.services.briefing_pipeline import run_compilation
|
||||
|
||||
model = await get_setting(g.user.id, "default_model", "")
|
||||
|
||||
Reference in New Issue
Block a user