Webapps standardmäßig nur im Menü, Desktop-Symbol per Häkchen

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
adminandClaude Opus 5.5 committed 2026-10-22 15:01:53 +02:00
1 parent fe72c401c4
commit 10f5030995
2 files changed
+59 -14

No files matched your search

+48 -14
View File
@@ -329,6 +329,11 @@ class CreateWebappRequest(BaseModel):
sort_order: int = 0
kategorie_id: str | None = None
kiosk_modus: bool = False
auf_desktop: bool = False
class WebappDesktopRequest(BaseModel):
auf_desktop: bool
class UpdateWebappRequest(BaseModel):
@@ -1172,21 +1177,21 @@ def fetch_workspace_webapps(device_id: str):
cur.execute(
"""
SELECT w.id, w.name, w.url, w.icon_filename, w.kiosk_modus, k.key, w.sort_order
SELECT w.id, w.name, w.url, w.icon_filename, w.kiosk_modus, k.key, w.auf_desktop, w.sort_order
FROM workspace_webapps w
LEFT JOIN kategorien k ON k.id = w.kategorie_id
WHERE w.workspace_version_id = %s
UNION ALL
SELECT gw.id, gw.name, gw.url, gw.icon_filename, gw.kiosk_modus, k.key, gw.sort_order
SELECT gw.id, gw.name, gw.url, gw.icon_filename, gw.kiosk_modus, k.key, gw.auf_desktop, gw.sort_order
FROM gruppen_webapps gw
JOIN device_gruppen dg ON dg.gruppe_id = gw.gruppe_id
LEFT JOIN kategorien k ON k.id = gw.kategorie_id
WHERE dg.device_id = %s
ORDER BY 7, 2
ORDER BY 8, 2
""",
(version_id, device_id),
)
zeilen = [row[:6] for row in cur.fetchall()]
zeilen = [row[:7] for row in cur.fetchall()]
kiosk_browser = _resolve_kiosk_browser(version_id) if any(row[4] for row in zeilen) else None
@@ -1207,8 +1212,11 @@ def fetch_workspace_webapps(device_id: str):
# .desktop-Vorlage faellt in beiden Faellen auf den normalen
# xdg-open-Start zurueck (siehe webapp-shortcuts-Rolle).
"kiosk_browser": kiosk_browser if kiosk_modus else None,
# Starter zusätzlich auf dem Desktop; sonst nur im Menü
# (Migration 0070).
"auf_desktop": auf_desktop,
}
for webapp_id, name, url, icon_filename, kiosk_modus, kategorie_key in zeilen
for webapp_id, name, url, icon_filename, kiosk_modus, kategorie_key, auf_desktop in zeilen
]
@@ -4540,9 +4548,10 @@ def _version_kopieren(cur, quelle_version_id, ziel_version_id, ziel_workspace_id
cur.execute(
"""
INSERT INTO workspace_webapps (id, workspace_id, workspace_version_id, name, url, icon_filename,
icon_content_type, sort_order, template_id, kategorie_id, kiosk_modus)
icon_content_type, sort_order, template_id, kategorie_id, kiosk_modus,
auf_desktop)
SELECT gen_random_uuid(), %s, %s, name, url, icon_filename, icon_content_type, sort_order,
template_id, kategorie_id, kiosk_modus
template_id, kategorie_id, kiosk_modus, auf_desktop
FROM workspace_webapps WHERE workspace_version_id = %s
""",
(ziel_workspace_id, ziel_version_id, quelle_version_id),
@@ -5152,7 +5161,7 @@ def fetch_webapps_for_workspace(workspace_id: str):
cur.execute(
"""
SELECT w.id, w.name, w.url, w.icon_filename, w.sort_order,
w.kategorie_id, k.name, w.kiosk_modus
w.kategorie_id, k.name, w.kiosk_modus, w.auf_desktop
FROM workspace_webapps w
LEFT JOIN kategorien k ON k.id = w.kategorie_id
WHERE w.workspace_version_id = %s
@@ -5170,14 +5179,16 @@ def fetch_webapps_for_workspace(workspace_id: str):
"kategorie_id": str(kategorie_id) if kategorie_id else None,
"kategorie_name": kategorie_name,
"kiosk_modus": kiosk_modus,
"auf_desktop": auf_desktop,
}
for webapp_id, name, url, icon_filename, sort_order, kategorie_id, kategorie_name, kiosk_modus in cur.fetchall()
for (webapp_id, name, url, icon_filename, sort_order, kategorie_id, kategorie_name,
kiosk_modus, auf_desktop) in cur.fetchall()
]
def create_webapp(
workspace_id: str, name: str, url: str, sort_order: int,
kategorie_id: str | None = None, kiosk_modus: bool = False,
kategorie_id: str | None = None, kiosk_modus: bool = False, auf_desktop: bool = False,
):
webapp_id = uuid4()
favicon = fetch_favicon(url)
@@ -5190,12 +5201,12 @@ def create_webapp(
"""
INSERT INTO workspace_webapps
(id, workspace_id, workspace_version_id, name, url, icon_filename, icon_content_type,
sort_order, kategorie_id, kiosk_modus)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
sort_order, kategorie_id, kiosk_modus, auf_desktop)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
""",
(
webapp_id, workspace_id, arbeitsversion_id(cur, workspace_id), name, url,
icon_filename, icon_content_type, sort_order, kategorie_id, kiosk_modus,
icon_filename, icon_content_type, sort_order, kategorie_id, kiosk_modus, auf_desktop,
),
)
@@ -8357,11 +8368,34 @@ def create_workspace_webapp(workspace_id: str, payload: CreateWebappRequest, aut
"success": True,
"webapp": create_webapp(
workspace_id, payload.name, payload.url, payload.sort_order,
payload.kategorie_id, payload.kiosk_modus,
payload.kategorie_id, payload.kiosk_modus, payload.auf_desktop,
),
}
@app.put("/api/v1/workspaces/{workspace_id}/webapps/{webapp_id}/desktop")
def set_workspace_webapp_desktop(
workspace_id: str, webapp_id: str, payload: WebappDesktopRequest, authorization: str | None = Header(default=None),
):
"""Nur das Häkchen „auf dem Desktop“ umschalten - ohne Name, URL und
neuen Favicon-Abruf wie beim vollständigen PUT."""
if not require_service_token(authorization):
return {"success": False, "error": "unauthorized", "message": "Fehlendes oder ungültiges Service-Token."}
if fehler := _nur_im_entwurf(workspace_id, webapp_id=webapp_id):
return fehler
with get_database_connection() as conn:
with conn.cursor() as cur:
cur.execute(
"UPDATE workspace_webapps SET auf_desktop = %s, updated_at = now() WHERE id = %s",
(payload.auf_desktop, webapp_id),
)
return {"success": True, "auf_desktop": payload.auf_desktop}
@app.put("/api/v1/workspaces/{workspace_id}/webapps/{webapp_id}")
def update_workspace_webapp(workspace_id: str, webapp_id: str, payload: UpdateWebappRequest, authorization: str | None = Header(default=None)):
if not require_service_token(authorization):
+11
View File
@@ -0,0 +1,11 @@
BEGIN;
-- Webapps auf dem Desktop (22.10.2026, Roadmap Punkt 7): Webapps erscheinen
-- standardmäßig nur noch im Menü. Ein Starter auf dem Desktop kommt nur noch
-- mit diesem Häkchen dazu. Auch bestehende Webapps stehen auf FALSE: Der
-- Nutzer wollte die Desktop-Symbole ausdrücklich weg, die Rolle
-- webapp-shortcuts räumt sie beim nächsten Lauf ab.
ALTER TABLE workspace_webapps ADD COLUMN auf_desktop BOOLEAN NOT NULL DEFAULT FALSE;
ALTER TABLE gruppen_webapps ADD COLUMN auf_desktop BOOLEAN NOT NULL DEFAULT FALSE;
COMMIT;