diff --git a/api/router.py b/api/router.py index 7b29ae2..12d7a2d 100644 --- a/api/router.py +++ b/api/router.py @@ -216,7 +216,15 @@ async def open_file(body: dict, user: dict = Depends(current_user)): mode = body.get("mode", "editor") # "editor" | "folder" | "obsidian" if mode == "obsidian": from urllib.parse import quote - subprocess.Popen(["xdg-open", f"obsidian://open?path={quote(path, safe='/')}"]) + cfg = load_config() + vault = cfg.get("obsidian", {}).get("vault", "").strip() + if vault and os.path.isdir(vault): + dest = os.path.join(vault, os.path.basename(path)) + shutil.copy2(path, dest) + target = dest + else: + target = path + subprocess.Popen(["xdg-open", f"obsidian://open?path={quote(target, safe='/')}"]) elif mode == "folder" and shutil.which("dolphin"): subprocess.Popen(["dolphin", "--select", path]) elif mode == "folder": diff --git a/config.py b/config.py index 31f8af0..1a3e857 100644 --- a/config.py +++ b/config.py @@ -33,6 +33,9 @@ DEFAULTS = { "enabled": False, "hf_token": "", }, + "obsidian": { + "vault": "", + }, "pid_file": os.path.expanduser("~/.local/run/tueit-transcriber.pid"), } diff --git a/frontend/settings.html b/frontend/settings.html index f97f902..9423d91 100644 --- a/frontend/settings.html +++ b/frontend/settings.html @@ -97,6 +97,10 @@ +
+ + +
diff --git a/frontend/settings.js b/frontend/settings.js index 52f81cd..1192d52 100644 --- a/frontend/settings.js +++ b/frontend/settings.js @@ -62,6 +62,7 @@ async function loadConfig() { const diarCfg = cfg.diarization || {}; document.getElementById('diar-enabled').checked = !!diarCfg.enabled; document.getElementById('diar-hf-token').value = diarCfg.hf_token || ''; + document.getElementById('obsidian-vault').value = (cfg.obsidian && cfg.obsidian.vault) || ''; } document.getElementById('refresh-devices-btn').addEventListener('click', loadDevices); @@ -103,6 +104,9 @@ document.getElementById('save-btn').addEventListener('click', async function() { base_url: document.getElementById('ollama-url').value, model: document.getElementById('ollama-model').value, }, + obsidian: { + vault: document.getElementById('obsidian-vault').value.trim(), + }, diarization: { enabled: document.getElementById('diar-enabled').checked, hf_token: document.getElementById('diar-hf-token').value.trim(),