Trilium als Archiv: verwaltete Instanz pro Projekt, MD-Archiv und Dokument-Tab entfernt
- domain/trilium.rs: Runtime-Download (gepinnt 0.104.0), Instanz pro Projekt auf 127.0.0.1 mit FNV-Port, ETAPI (archive_note, search_notes), Token im Keyring - Setup bis aufs Passwort automatisiert: trilium_connect macht new-document (skipDemoDb), set-password und ETAPI-Login; Modul-Flag erst nach Token-Erfolg - write_panel legt direkt eine Trilium-Notiz an (text|path, folder/description/tags); noteopen-Kanal, das Terminal-Fenster öffnet die Notiz (ersetzt archive_panel) - MD-Altbestand raus: archive*/wiki*, archiveHome samt Permissions, panel_set/panel_load/ wiki_open, panel_archive*/archive_docs/*_archive_home, reveal_path, spellcheck - Dokument-Tab raus: Panel = ToDo/Befehle/Suche + Archiv-Knopf (trilium_open); panel-view/archive-form gelöscht, Markup/CSS/Messages bereinigt - Lösch-Stufe Archiv: Instanz stoppen, Trilium-Datadir und Keyring-Token löschen
This commit is contained in:
+16
-40
@@ -15,8 +15,7 @@ import { getCurrentWebviewWindow } from "@tauri-apps/api/webviewWindow";
|
||||
import { listen } from "@tauri-apps/api/event";
|
||||
import { wirePanel } from "./panel-wiring";
|
||||
import { applyTheme, THEMES } from "./themes";
|
||||
import { flash, panelToast } from "./tiles";
|
||||
import { initArchiveForm } from "./archive-form";
|
||||
import { panelToast } from "./tiles";
|
||||
import { applyI18n, t } from "./messages";
|
||||
|
||||
// Debug-Instrumentierung: Fehler auf der Seite anzeigen und ins Dev-Log spiegeln.
|
||||
@@ -189,10 +188,10 @@ window.addEventListener("resize", () => fit.fit());
|
||||
await invoke("term_start", { project, rows: term.rows, cols: term.cols });
|
||||
term.focus();
|
||||
|
||||
// --- Andockbares Entwurfs-Panel -------------------------------------------
|
||||
// Der Skill schreibt Entwürfe in eine Datei; terminal.rs meldet neuen Inhalt
|
||||
// per `panel-update`. Das Panel blendet sich dann ein — außer es ist gerade in
|
||||
// ein eigenes Fenster abgelöst (`panel-detached`).
|
||||
// --- Andockbares Panel ----------------------------------------------------
|
||||
// Die MCP-Tools schreiben in die Puffer-Dateien; terminal.rs meldet neuen
|
||||
// Inhalt als `<buffer>-update`. Das Panel blendet sich dann ein — außer es
|
||||
// ist gerade in ein eigenes Fenster abgelöst (`panel-detached`).
|
||||
const panel = document.getElementById("panel")!;
|
||||
const splitter = document.getElementById("splitter")!;
|
||||
|
||||
@@ -212,10 +211,20 @@ function hidePanel() {
|
||||
|
||||
// Gemeinsame Verdrahtung (Views, Modi, Update-Events); jedes eingehende
|
||||
// Update blendet das angedockte Panel ein, solange es nicht abgelöst ist.
|
||||
const { view, views, mode } = await wirePanel(project, () => {
|
||||
const { views, mode } = await wirePanel(project, () => {
|
||||
hasContent = true;
|
||||
if (!detached) showPanel();
|
||||
});
|
||||
|
||||
// write_panel hat eine Notiz angelegt: das Trilium-Fenster des Projekts
|
||||
// zeigt sie. Leerer Puffer = Session-Start, keine Notiz.
|
||||
await listen<string>("noteopen-update", (e) => {
|
||||
if (!e.payload.trim()) return;
|
||||
const { noteId } = JSON.parse(e.payload);
|
||||
void invoke("trilium_open", { project, noteId }).catch((err) =>
|
||||
panelToast(String(err)),
|
||||
);
|
||||
});
|
||||
// Panel startet zugeklappt — außer das ToDo-Modul ist gewählt und die Liste
|
||||
// nicht leer: dann öffnet das Panel beim Start mit der ToDo-Ansicht.
|
||||
const todos = views.get("todo");
|
||||
@@ -265,39 +274,6 @@ document.getElementById("panel-hide")!.addEventListener("click", () => {
|
||||
mode.clear();
|
||||
});
|
||||
|
||||
// Archivieren: Button klappt das Formular (Ordner/Beschreibung/Schlagwörter)
|
||||
// auf; Abschicken wählt notfalls erst das Archiv-Home per Dialog.
|
||||
const archiveBtn = document.getElementById("panel-archive")!;
|
||||
const archiveForm = initArchiveForm(archiveBtn, async (meta) => {
|
||||
try {
|
||||
const configured = await invoke<string | null>("panel_archive_dir_cmd", {
|
||||
project,
|
||||
});
|
||||
let dir: string | undefined;
|
||||
if (!configured) {
|
||||
const { open } = await import("@tauri-apps/plugin-dialog");
|
||||
const chosen = await open({ directory: true, title: t("panel.chooseArchiveDir") });
|
||||
if (!chosen) return;
|
||||
dir = chosen as string;
|
||||
}
|
||||
await view.flush(); // offene Bearbeitung erst speichern — archiviert, was zu sehen ist
|
||||
const path = await invoke<string>("panel_archive_cmd", {
|
||||
project,
|
||||
dir,
|
||||
folder: meta.folder ?? null,
|
||||
description: meta.description ?? null,
|
||||
tags: meta.tags,
|
||||
});
|
||||
flash(archiveBtn, "copied", 1400);
|
||||
invoke("reveal_path_cmd", { path });
|
||||
} catch (e) {
|
||||
flash(archiveBtn, "error", 1400);
|
||||
panelToast(`Archivieren fehlgeschlagen: ${e}`);
|
||||
invoke("term_log", { msg: `archive: ${e}` });
|
||||
}
|
||||
});
|
||||
archiveBtn.addEventListener("click", () => archiveForm.toggle());
|
||||
|
||||
// Splitter: Panelbreite ziehen.
|
||||
splitter.addEventListener("mousedown", (e) => {
|
||||
e.preventDefault();
|
||||
|
||||
Reference in New Issue
Block a user