NEWS
Lokal Notizen verwalten
-
OK, wenn ich es über die alte Version drüber installiere, läuft es.
Leider wurden die alten Notizen nicht importiert und können auch nicht aus dem Backup importiert werden.

Ein älteres Backup zum manuellen Extrahieren der Texte lässt sich leider nicht bequem herunterladen.
Komisch, bei mir hat er beim Setup der SQL Version alles sauber importiert aus der json.
Die neue Version lässt auch nur einen restore einer DB zu, da eigentlich die json importiert sein sollte.
Hast du setup_sql oder setup_sql2 installiert?
Ersteres hat bei mir den Import gemacht. Auf die 2 bin ich in einem Schritt mit sehr vielen Änderungen gegangen. Evtl ist das da verloren gegangen.P. S.
Gemini meint zu 2 Versionen gleichzeitig:Kurz und knapp: Damit sich zwei Instanzen auf demselben Server nicht gegenseitig überschreiben, musst du im Setup-Skript an ein paar Stellen die Namen und Pfade "klonen" (z. B. eine "2" dranhängen). Hier sind die 5 Dinge, die du im Code anpassen musst: ### 1. Die Haupt-Variablen (ca. Zeile 28) Ändere das Installationsverzeichnis und den Namen des Systemdienstes: * `INSTALL_DIR="/opt/notiz-tool-2"` * `SERVICE_NAME="notizen2.service"` ### 2. Die hardcodierten Pfade in den Hintergrund-Skripten In der `cleanup.py` (ca. Zeile 606) und in der `backup.sh` (ca. Zeile 641) stehen aktuell noch feste Pfade. Ändere diese auf dein neues Verzeichnis: * In `cleanup.py`: `DB = '/opt/notiz-tool-2/data.db'` und `UPL = '/opt/notiz-tool-2/uploads'` * In `backup.sh`: `cd /opt/notiz-tool-2` ### 3. Der Linux-Systembenutzer (ca. ab Zeile 899) Ersetze im unteren Teil des Skripts (bei den Rechten, im Systemd-Service und beim Cronjob) den Benutzer `notizen` durch z.B. `notizen2`. Beispiel: `if ! id -u notizen2 > /dev/null 2>&1; then useradd -r -s /bin/false notizen2` und `chown -R notizen2:notizen2 $INSTALL_DIR`. ### 4. Der Dateiname für den Cronjob (ca. Zeile 925) Damit der Cronjob der ersten Instanz nicht gelöscht wird, ändere den Namen der Datei, die in `/etc/cron.d/` abgelegt wird: * `rm -f /etc/cron.d/notizen-tool-2` * Und entsprechend bei den `echo`-Befehlen danach auch `>> /etc/cron.d/notizen-tool-2` schreiben. ### 5. Der Port Das passiert nicht im Code, sondern ist selbsterklärend: Wenn das Skript dich am Anfang fragt, gibst du einfach einen anderen Port an (z. B. `8081`). --- Wenn du diese Anpassungen machst, laufen beide Tools komplett isoliert voneinander. Bist du bereit, dir als Nächstes die Swipe-Geste für die Sidebar auf dem Smartphone anzuschauen? -
OK, wenn ich es über die alte Version drüber installiere, läuft es.
Leider wurden die alten Notizen nicht importiert und können auch nicht aus dem Backup importiert werden.

Ein älteres Backup zum manuellen Extrahieren der Texte lässt sich leider nicht bequem herunterladen.
Ist in meiner v2 wirklich ausgeflogen.
Hiermit kannst du es importieren. Achtung, überschreibt die DB falls schon was drinnen ist. Json muss im Ordner liegen.
#!/bin/bash # Installationsverzeichnis (passe dies an, falls deine 2. Instanz z.B. /opt/notiz-tool-2 heißt) INSTALL_DIR="/opt/notiz-tool" JSON_FILE="$INSTALL_DIR/data.json" DB_FILE="$INSTALL_DIR/data.db" TEMP_SCRIPT="$INSTALL_DIR/run_import.py" echo "--- JSON zu SQLite Import-Tool ---" # 1. Root-Rechte prüfen if [ "$EUID" -ne 0 ]; then echo "FEHLER: Bitte führe dieses Skript als Root (z.B. sudo) aus!" exit 1 fi # 2. Prüfen, ob die JSON-Datei existiert if [ ! -f "$JSON_FILE" ]; then echo "FEHLER: Die Datei $JSON_FILE wurde nicht gefunden." echo "Bitte lade deine alte data.json zuerst in den Ordner $INSTALL_DIR hoch." exit 1 fi # 3. Existierende Datenbank radikal löschen echo "Lösche existierende Datenbank..." rm -f "$DB_FILE" rm -f "$DB_FILE-wal" rm -f "$DB_FILE-shm" echo "Erstelle temporäres Python-Import-Skript..." # 4. Python-Skript generieren cat << 'EOF' > $TEMP_SCRIPT import json import sqlite3 import sys import os json_file = sys.argv[1] db_file = sys.argv[2] try: with open(json_file, 'r', encoding='utf-8') as f: data = json.load(f) except Exception as e: print(f"Fehler beim Lesen der JSON-Datei: {e}") sys.exit(1) conn = sqlite3.connect(db_file) # Aktiviere Write-Ahead-Logging wie im Hauptprogramm conn.execute('PRAGMA journal_mode=WAL') cursor = conn.cursor() # Tabellenstruktur neu anlegen, da die DB frisch ist cursor.execute(''' CREATE TABLE IF NOT EXISTS settings ( key TEXT PRIMARY KEY, value TEXT ) ''') cursor.execute(''' CREATE TABLE IF NOT EXISTS notes ( id TEXT PRIMARY KEY, parent_id TEXT, sort_order INTEGER, title TEXT, text TEXT, reminder TEXT, locked_by TEXT, locked_at REAL ) ''') cursor.execute(''' CREATE TABLE IF NOT EXISTS note_history ( id INTEGER PRIMARY KEY AUTOINCREMENT, note_id TEXT, title TEXT, text TEXT, saved_at REAL ) ''') # Standard-Einstellungen schreiben cursor.execute("INSERT INTO settings (key, value) VALUES ('theme', 'dark')") cursor.execute("INSERT INTO settings (key, value) VALUES ('accent', '#27ae60')") cursor.execute("INSERT INTO settings (key, value) VALUES ('password_enabled', 'false')") cursor.execute("INSERT INTO settings (key, value) VALUES ('history_enabled', 'true')") cursor.execute("INSERT INTO settings (key, value) VALUES ('history_days', '30')") cursor.execute("INSERT INTO settings (key, value) VALUES ('tree_last_modified', '0')") # Rekursive Funktion für den sauberen Baum-Aufbau def insert_node(node, parent_id=None, sort_order=0): cursor.execute(''' INSERT INTO notes (id, parent_id, sort_order, title, text, reminder) VALUES (?, ?, ?, ?, ?, ?) ''', ( node.get('id'), parent_id, sort_order, node.get('title', 'Neu'), node.get('text', ''), node.get('reminder', None) )) # Kinder-Elemente (Unterordner/Notizen) verarbeiten children = node.get('children', []) for index, child in enumerate(children): insert_node(child, node.get('id'), index) try: if isinstance(data, dict) and 'content' in data: nodes = data['content'] elif isinstance(data, list): nodes = data else: print("Fehler: Unbekanntes JSON-Format. Weder Liste noch 'content'-Objekt gefunden.") sys.exit(1) print(f"Gefundene Hauptknoten: {len(nodes)}. Starte Import...") for index, node in enumerate(nodes): insert_node(node, None, index) conn.commit() print("Erfolg! Alle Notizen wurden sauber in die neue SQLite-Datenbank übertragen.") except Exception as e: print(f"Datenbank-Fehler während des Imports: {e}") finally: conn.close() EOF # 5. Import ausführen echo "Starte Datenmigration..." python3 $TEMP_SCRIPT "$JSON_FILE" "$DB_FILE" # 6. Rechte für den Systemdienst korrigieren echo "Korrigiere Dateirechte..." chown notizen:notizen "$DB_FILE" if [ -f "$DB_FILE-wal" ]; then chown notizen:notizen "$DB_FILE-wal"; fi if [ -f "$DB_FILE-shm" ]; then chown notizen:notizen "$DB_FILE-shm"; fi # 7. Aufräumen echo "Räume auf..." rm -f $TEMP_SCRIPT # Service neustarten systemctl restart notizen.service echo "--- Import komplett abgeschlossen! ---"Edit
https://github.com/ipod86/Notizen/blob/main/json2sql.shEdit 2
Jab auf git die Versionen jetzt entsprechend umbenannt und die zwischenversion gelöscht.EDIT 3
Hab grad alle Dienste, Ordner etc gelöscht und das Script lief problemlos durch. Auch mein DB Backup lies sich problemlos wiederherstellen. -