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:
1 parent
fe72c401c4
commit
10f5030995
2 files changed
+59
-14
No files matched your search
@@ -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):
|
||||
|
||||
@@ -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;
|
||||
Reference in new issue
Block a user