61 lines
2.5 KiB
Python
61 lines
2.5 KiB
Python
import streamlit as st
|
|
import os
|
|
from ui_utils import build_markdown_doc
|
|
|
|
def switch_to_editor_callback(note_payload):
|
|
"""
|
|
Callback für den 'Bearbeiten'-Button im Graphen.
|
|
Versucht, die Datei direkt aus dem Vault (Dateisystem) zu lesen.
|
|
Das garantiert, dass Frontmatter und Inhalt vollständig sind (Single Source of Truth).
|
|
"""
|
|
# 1. Pfad ermitteln (Priorität auf 'path' aus Qdrant)
|
|
origin_fname = note_payload.get('path')
|
|
|
|
# Fallback für Legacy-Datenfelder
|
|
if not origin_fname:
|
|
origin_fname = note_payload.get('file_path') or note_payload.get('filename')
|
|
|
|
content = ""
|
|
file_loaded = False
|
|
|
|
# 2. Versuch: Direkt von der Festplatte lesen
|
|
# Wir prüfen, ob der Pfad existiert und lesen den aktuellen Stand der Datei.
|
|
if origin_fname and os.path.exists(origin_fname):
|
|
try:
|
|
with open(origin_fname, "r", encoding="utf-8") as f:
|
|
content = f.read()
|
|
file_loaded = True
|
|
except Exception as e:
|
|
# Fehler im Terminal loggen, aber UI nicht crashen lassen
|
|
print(f"Fehler beim Lesen von {origin_fname}: {e}")
|
|
|
|
# 3. Fallback: Inhalt aus Qdrant nehmen (wenn Datei nicht zugreifbar)
|
|
if not file_loaded:
|
|
# Wir nehmen 'fulltext' aus dem Payload
|
|
content = note_payload.get('fulltext', '')
|
|
|
|
if not content:
|
|
# Letzter Ausweg: Metadaten nehmen und Dummy-Content bauen
|
|
content = build_markdown_doc(note_payload, "Inhalt konnte nicht geladen werden (Datei nicht gefunden).")
|
|
else:
|
|
# Check: Hat der Text ein Frontmatter? Wenn nein, rekonstruieren wir es.
|
|
if not content.strip().startswith("---"):
|
|
content = build_markdown_doc(note_payload, content)
|
|
|
|
# Notfall-Pfad Konstruktion (falls gar kein Pfad im System ist)
|
|
if not origin_fname and 'note_id' in note_payload:
|
|
origin_fname = f"{note_payload['note_id']}.md"
|
|
|
|
# 4. Daten an den Editor übergeben
|
|
# Wir nutzen den Chat-Verlauf als Transportmittel für den State
|
|
st.session_state.messages.append({
|
|
"role": "assistant",
|
|
"intent": "INTERVIEW",
|
|
"content": content,
|
|
"query_id": f"edit_{note_payload.get('note_id', 'unknown')}", # Trigger für den Editor
|
|
"origin_filename": origin_fname,
|
|
"origin_note_id": note_payload.get('note_id')
|
|
})
|
|
|
|
# 5. Modus umschalten (wechselt den Tab beim nächsten Rerun)
|
|
st.session_state["sidebar_mode_selection"] = "📝 Manueller Editor" |