Nachtrag zu #560 (68d8d6f). File.SetUnixFileMode stand hinter "mode.HasValue".
Das ist inhaltlich richtig, denn mode wird nur ausserhalb von Windows gesetzt.
Der Analyzer kann diesen Zusammenhang aber nicht verfolgen und meldete CA1416.
Damit war die Zahl der Build-Warnungen von 15 auf 16 gestiegen (#155 fuehrt die
15). Die Plattformpruefung steht jetzt mit in der Bedingung, und es sind wieder
15.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Umsetzung von #560.
Die Ansicht "Moduleinstellungen" zeigte bisher nur an, ob ein Modul laeuft. Jetzt
laesst sich dort wie im Modul-Tab des Desktops festlegen, welche Module beim
naechsten Start geladen werden. POST /api/modules/{name}/enabled nimmt den
gewuenschten Zustand ausdruecklich entgegen ({"enabled": true|false}) und
schaltet nicht einfach um. Zwei Klicks aus zwei Fenstern heben sich damit
nicht auf, und ein wiederholter Aufruf aendert nichts mehr.
Fehlerfaelle:
- Unbekanntes Modul: 404.
- Modul mit Aktivierungs-Blocker: 409.
- Fehlender Zustand: 400. Die Pruefung war zuerst lueckenhaft, der Test hat es
gefunden: Mit "bool Enabled" machte ein leerer Rumpf {} daraus false, und ein
unvollstaendiger Aufruf haette das Modul deaktiviert.
Gemeinsame Quelle statt Kopien:
- KnownModules: Die Modulliste stand viermal im Code (Program, CoreViews,
ModuleViews, hartkodiert im WebUI). Der Start registriert jetzt die eine
Liste.
- ModuleActivationView: Die Statusregeln des Desktops ("Aktiv - stoppt nach
Neustart" usw.) liegen im Core. Desktop und WebUI zeigen dasselbe.
ServerSettingsFile - gefunden, bevor das WebUI in die Datei schreiben durfte:
ServerSettings.Load verschluckt jeden Lesefehler und liefert Vorgaben. "Frisch
lesen, ein Feld aendern, speichern" haette eine gesperrte oder beschaedigte
server_settings.xml durch Vorgaben ersetzt, und mit ihr Lizenzschluessel,
Watchdog-Token, Mullvad-Account und Alchemy-Key. Genau so schrieb auch der
Modul-Schalter des Desktops. ServerSettingsFile:
- liest streng und schreibt bei unlesbarer Datei nichts,
- schreibt atomar ueber eine Nachbardatei,
- erhaelt unter Linux die Dateirechte,
- serialisiert Aenderungen prozessweit.
Der Desktop-Schalter benutzt ihn jetzt ebenfalls.
Tests: Lizenzschluessel, Token und Alchemy-Key bleiben beim Umschalten in der
Datei; eine kaputte Datei bleibt Byte fuer Byte unveraendert und die Anzeige
bietet dann kein Umschalten an; Blocker, 404, 400, Idempotenz; die
Statustabelle; strenges Lesen, atomares Schreiben und Rechte am Dateiobjekt.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>