feat(desktop): Verbundenen Server im Infobereich zeigen, Server-Adresse nachträglich änderbar
- Tray zeigt erste (gesperrte) Menüzeile "Verbunden mit {host}" und Tooltip "Tessera – {host}" (bzw. "nicht verbunden")
- Neuer Menüpunkt "Server-Adresse ändern…" navigiert zur gebündelten Setup-Seite (lokaler Ursprung, kein Capability-Eintrag nötig)
- setup.html erkennt per neuem Command get_server_url den Änderungsmodus (Feld vorbelegt, "Aktuell verbunden mit: …", Knopf "Abbrechen" → open_server)
- Nach save_server_url aktualisieren apply_server (Tooltip + Menüzeile) und spawn_version_check (aus setup herausgezogen, läuft neu gegen den neuen Server) ohne Neustart; Tray-Klick "update" liest die Adresse jetzt beim Klick aus dem Store
- Reine Helfer server_host, tray_labels, setup_page_url, parse_server_url mit 13 neuen Tests (RED zuerst: 13 Compile-Fehler auf die fehlenden Helfer, dann GREEN); 18 Rust-Tests gesamt, fmt/check/clippy sauber
- capabilities/default.json unverändert (T-JN2-01, kein remote-Block)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -140,6 +140,25 @@
|
||||
opacity: 0.5;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
.current-server {
|
||||
display: none;
|
||||
text-align: left;
|
||||
font-size: 0.8125rem;
|
||||
color: oklch(0.75 0 0);
|
||||
margin: -20px 0 24px;
|
||||
}
|
||||
|
||||
button.secondary {
|
||||
margin-top: 12px;
|
||||
background: transparent;
|
||||
color: oklch(0.85 0 0);
|
||||
border: 1px solid oklch(0.30 0.01 260);
|
||||
}
|
||||
|
||||
button[hidden] {
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
@@ -155,7 +174,8 @@
|
||||
</g>
|
||||
</svg>
|
||||
<h1>Tessera</h1>
|
||||
<p class="subtitle">Desktop-App einrichten</p>
|
||||
<p class="subtitle" id="subtitle">Desktop-App einrichten</p>
|
||||
<p id="current-server" class="current-server"></p>
|
||||
|
||||
<label for="server-url">Adresse Ihres Tessera-Servers</label>
|
||||
<p class="hint">Das ist die Adresse, unter der Sie Tessera auch im Browser öffnen.</p>
|
||||
@@ -171,6 +191,7 @@
|
||||
<p id="info-msg" class="info-message"></p>
|
||||
|
||||
<button id="connect-btn" type="button">Verbinden</button>
|
||||
<button id="cancel-btn" type="button" class="secondary" hidden>Abbrechen</button>
|
||||
</div>
|
||||
|
||||
<script type="module">
|
||||
@@ -178,9 +199,12 @@
|
||||
|
||||
const urlInput = document.getElementById('server-url');
|
||||
const connectBtn = document.getElementById('connect-btn');
|
||||
const cancelBtn = document.getElementById('cancel-btn');
|
||||
const errorMsg = document.getElementById('error-msg');
|
||||
const warningMsg = document.getElementById('warning-msg');
|
||||
const infoMsg = document.getElementById('info-msg');
|
||||
const subtitle = document.getElementById('subtitle');
|
||||
const currentServer = document.getElementById('current-server');
|
||||
|
||||
/**
|
||||
* Validate a server URL using the URL constructor.
|
||||
@@ -303,6 +327,50 @@
|
||||
|
||||
// Clear error messages on input change
|
||||
urlInput.addEventListener('input', clearMessages);
|
||||
|
||||
/**
|
||||
* Aenderungsmodus: die Adresse steht bereits im Store (get_server_url
|
||||
* liefert einen Wert). Feld vorbelegen, aktuelle Adresse anzeigen und
|
||||
* den "Abbrechen"-Knopf einblenden. Der eingesetzte Wert kommt per
|
||||
* textContent/value in die Seite, nie als HTML (T-JN2-05).
|
||||
*/
|
||||
function enterChangeMode(current) {
|
||||
urlInput.value = current;
|
||||
currentServer.textContent = 'Aktuell verbunden mit: ' + current;
|
||||
currentServer.style.display = 'block';
|
||||
subtitle.textContent = 'Server-Adresse ändern';
|
||||
cancelBtn.hidden = false;
|
||||
urlInput.focus();
|
||||
urlInput.select();
|
||||
}
|
||||
|
||||
cancelBtn.addEventListener('click', async () => {
|
||||
clearMessages();
|
||||
cancelBtn.disabled = true;
|
||||
try {
|
||||
await invoke('open_server');
|
||||
} catch (err) {
|
||||
showError(String(err));
|
||||
cancelBtn.disabled = false;
|
||||
}
|
||||
});
|
||||
|
||||
// Beim Laden pruefen, ob bereits eine Server-Adresse gespeichert ist --
|
||||
// dann ist dies der Aenderungsmodus, nicht der Erststart. Ohne
|
||||
// gespeicherte Adresse (oder wenn der Aufruf fehlschlaegt) bleibt es
|
||||
// beim bisherigen Erststart-Verhalten.
|
||||
async function init() {
|
||||
try {
|
||||
const current = await invoke('get_server_url');
|
||||
if (typeof current === 'string' && current) {
|
||||
enterChangeMode(current);
|
||||
}
|
||||
} catch {
|
||||
// Erststart-Verhalten: Feld bleibt leer, kein Aenderungsmodus.
|
||||
}
|
||||
}
|
||||
|
||||
init();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user