tabule nabídne všechny adresy, ne jednu

Detekce vracela jedinou adresu podle výchozí trasy. Když ta nevede tam,
kam je připojený telefon, QR kód míří do prázdna a nezbývá než sahat do
konfigurace. Při ladění se ukázalo i to, že záložní větev může vrátit
127.0.0.1, tedy QR kód na localhost.

- net.py hledá adresy všech rozhraní přes if_nameindex a ioctl, se zálohou
  přes getaddrinfo; DICE_HOST má poslední slovo
- řadí se podle rozsahu adresy a obecného typu rozhraní, ne podle seznamu
  konkrétních jmen: výchozí trasa, místní sítě, tailnet, virtuální sítě
- loopback a link-local vypadnou, nic dalšího se nezahazuje — o tom, co
  funguje, rozhoduje člověk u stolu
- tailnet adresu vědomě necháváme: funguje i napříč sítěmi
- adresy se hledají při každém načtení; když se notebook přesune na jinou
  síť, tabule to pozná podle data-address a načte se znovu
- když se nenajde nic, tabule řekne, co s tím, místo QR kódu naslepo
- 20 testů nad klasifikací a řazením, nezávislých na aktuální síti
- README doplněn o řešení potíží s připojením

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
gitea-actionsandClaude Opus 5 committed 2026-08-20 19:52:32 +02:00
1 parent cd10db1a72
commit 5052a48611
10 files changed
+374 -35

No files matched your search

+10 -6
View File
@@ -4,11 +4,8 @@
{% block body %}
<div class="board">
<header class="masthead">
<div id="head">{% include "_head.html" %}</div>
<div class="join">
{{ qr }}
<p class="address"><span>Zapisuje se z telefonu</span>{{ address }}</p>
</div>
<div id="head" data-address="{{ primary_ip }}">{% include "_head.html" %}</div>
{% include "_join.html" %}
</header>
<div id="sheet">{% include "_sheet.html" %}</div>
@@ -16,7 +13,6 @@
<script>
// Tabule se doptává serveru; není co udržovat na klientovi.
// QR kód a adresa se needitují, takže zůstávají mimo obnovovanou část.
const url = "{{ url_for('board_panel', game_id=game_id) }}";
setInterval(async () => {
@@ -25,6 +21,14 @@
if (!response.ok) return;
const fresh = new DOMParser().parseFromString(await response.text(), "text/html");
// Notebook se přesunul na jinou síť — adresa v QR kódu už neplatí.
const head = fresh.getElementById("head");
if (head && head.dataset.address !== document.getElementById("head").dataset.address) {
location.reload();
return;
}
for (const id of ["head", "sheet"]) {
const updated = fresh.getElementById(id);
if (updated) document.getElementById(id).replaceWith(updated);