From 98bce1b0da675715b2e5482c0ad61ba21135f62f Mon Sep 17 00:00:00 2001
From: Server-Bibliothek <server-bibliothek@lokal>
Date: Di, 04 Aug 2026 07:00:04 +0200
Subject: [PATCH] Add a desktop client that knows what is installed locally
---
packages/bibliothek-server/src/pfade.ts | 45 +++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 45 insertions(+), 0 deletions(-)
diff --git a/packages/bibliothek-server/src/pfade.ts b/packages/bibliothek-server/src/pfade.ts
new file mode 100644
index 0000000..0ebad90
--- /dev/null
+++ b/packages/bibliothek-server/src/pfade.ts
@@ -0,0 +1,45 @@
+import * as path from 'path';
+
+/** Läuft die Anwendung als gebündelte Einzeldatei (Node SEA / exe)? */
+export function istEinzeldatei(): boolean {
+ try {
+ return (require('node:sea') as { isSea(): boolean }).isSea();
+ } catch {
+ return false; // node:sea nicht verfügbar -> normaler Node-Start
+ }
+}
+
+const ANWENDUNGSNAME = 'Software-Bibliothek';
+
+/**
+ * Ordner für Konfiguration und Daten der Anwendung.
+ *
+ * Bewusst neutral unter `%ProgramData%` (üblicher Ort für maschinenweite
+ * Anwendungsdaten unter Windows) statt neben der exe oder gar im Quellcode-
+ * Verzeichnis: So liegen die Daten immer am selben Ort, egal wo die exe
+ * abgelegt oder wohin sie verschoben wird — und ein Entwicklungslauf
+ * verschmutzt das Projektverzeichnis nicht.
+ *
+ * Der Datenordner selbst lässt sich in den Einstellungen frei umlegen.
+ */
+export function anwendungsDatenOrdner(): string {
+ const programmDaten = process.env.ProgramData?.trim();
+ if (programmDaten) {
+ return path.join(programmDaten, ANWENDUNGSNAME);
+ }
+ // Kein Windows bzw. Variable nicht gesetzt: neben der Anwendung ablegen.
+ return path.join(anwendungsOrdner(), `.${ANWENDUNGSNAME.toLowerCase()}`);
+}
+
+/** Ordner der Anwendung selbst: als exe der Ordner neben der exe, sonst die Projekt-Wurzel. */
+export function anwendungsOrdner(): string {
+ if (istEinzeldatei()) {
+ return path.dirname(process.execPath);
+ }
+ return path.join(__dirname, '..', '..', '..');
+}
+
+/** Ordner mit der gebauten Oberfläche (nur im Nicht-exe-Betrieb genutzt). */
+export function oberflaechenOrdner(): string {
+ return path.join(__dirname, '..', '..', 'bibliothek-client', 'dist');
+}
--
Gitblit v1.9.3