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:
marcus hinz
2026-07-24 21:42:03 +02:00
parent f58b9887c7
commit 47951a615b
64 changed files with 1454 additions and 4679 deletions
+18 -45
View File
@@ -1,57 +1,30 @@
import { invoke } from "@tauri-apps/api/core";
import { initSearchView } from "../search-view";
import { initWikiView } from "../wiki-view";
import type { PanelTab } from "./index";
export const wikiTab: PanelTab = {
mode: "wiki",
module: "archive",
buffer: "wiki",
labelKey: "panel.tabWiki",
titleKey: "panel.tabWikiTitle",
// Dokument-/Ordner-Operationen laufen als Commands; der neue Stand kommt
// über den Wiki-Puffer (wiki-update) zurück, Fehler als Toast. Der
// Dokument-Sprung lädt wie ein Suchtreffer in den Dokument-Tab.
init: (container, ctx) => {
const run = (cmd: string, args: Record<string, string>) =>
void invoke(cmd, { project: ctx.project, ...args }).catch((e) =>
ctx.toast(String(e)),
);
return initWikiView(container, {
openDoc: ctx.openDoc,
openWiki: ctx.openWiki,
actions: {
rename: (relpath, name) => run("archive_rename", { relpath, name }),
remove: (relpath) => run("archive_delete", { relpath }),
moveFolder: (folder, to) => run("archive_move_folder", { folder, to }),
createFolder: (folder) => run("archive_create_folder", { folder }),
createDoc: (folder, name) => run("archive_create_doc", { folder, name }),
},
});
},
// Beim Aktivieren die Übersicht frisch laden: das Anlegen eines Dokuments
// öffnet den Dokument-Tab, ohne den Wiki-Puffer anzufassen — und auch
// direkt archivierte oder von Hand abgelegte Dateien erscheinen so.
onActivate: (_view, ctx) => ctx.openWiki("tag:"),
};
export const searchTab: PanelTab = {
mode: "search",
module: "archive",
module: "trilium",
buffer: "search",
labelKey: "panel.tabSearch",
titleKey: "panel.tabSearchTitle",
sepAfter: true,
// Treffer-Klick lädt das Dokument in den Dokument-Tab (dort editier- und
// archivierbar); der Sprung ins Wiki geht von dort aus.
// Treffer-Klick öffnet die Notiz im Trilium-Fenster des Projekts.
init: (container, ctx) =>
initSearchView(container, ctx.openDoc, (raw) => {
// `#tag`-Tokens filtern aufs Schlagwort, der Rest ist die Volltext-Query.
const words = raw.split(/\s+/).filter(Boolean);
const tag = words.find((w) => w.startsWith("#"))?.slice(1) ?? null;
const query = words.filter((w) => !w.startsWith("#")).join(" ");
void invoke("search_run", { project: ctx.project, query, tag }).catch((e) =>
ctx.toast(`Suche fehlgeschlagen: ${e}`),
);
}),
initSearchView(
container,
(noteId) =>
void invoke("trilium_open", { project: ctx.project, noteId }).catch((e) =>
ctx.toast(String(e)),
),
(raw) => {
// `#tag`-Tokens filtern aufs Schlagwort, der Rest ist die Volltext-Query.
const words = raw.split(/\s+/).filter(Boolean);
const tag = words.find((w) => w.startsWith("#"))?.slice(1) ?? null;
const query = words.filter((w) => !w.startsWith("#")).join(" ");
void invoke("search_run", { project: ctx.project, query, tag }).catch((e) =>
ctx.toast(`Suche fehlgeschlagen: ${e}`),
);
},
),
};