Skip to content

[V0.8.2] XDG-Stufe in AppLauncher implementieren + Snackbar-Feedback + Doku #34

Closed

Description

@Toqsick

Scope (Task 2, Steps 3–8 — GREEN)

Ziel-Reihenfolge: preferred_browser → XDG-Standardbrowser (xdg-settings + .desktop-Prüfung, dann detached gtk-launch; mit URL xdg-open) → Binary-Liste kKnownBrowsers als letzter Fallback.

Dateien

  • lib/services/app_launcher.dart (komplett ersetzen — neuer BrowserLaunchResult-Enum, injizierbare Zugriffe whichRunner/processStarter/outputReader/desktopEntryExists/configuredBrowser; vollständiger Code im Plan Task 2, Step 3)
  • lib/layouts/hub/hub_shell.dart:166-181 (Doc-Kommentar exakt 5 Zeilen + Fallback-Info-Snackbar; failed-Zweig ab Z. 182 unverändert)
  • Doku: docs/wiki/Admin-Hub.md:19-27, docs/handoff/panels/hub-shell.md:55 (Zeilennummern via grep), docs/design/feature-spec-admin-hub.md:42, docs/design/admin-hub-followups.md:23

Hinweise

  • Die .desktop-Prüfung bleibt nötig: aus einem detached Start kommt kein Exit-Code zurück — ohne Prüfung meldete der Launcher Erfolg, obwohl sich nichts öffnet
  • Wiederverwendet: CommandHelper.runWithArguments, ConfigHandler().getValueUnsafe('preferred_browser', ''), bestehendes debugOverride-Muster

Gates

  • Test-Gate: flutter test test/app_launcher_test.dart komplett grün (RED → GREEN)
  • dart format lib test, dann alle globalen Gates: check-versions.sh, flutter analyze (0 Findings), flutter test, Python-Unittests
  • Commit „fix(launcher): start the XDG default browser instead of the first listed binary"

Quelle: Implementierungsplan V0.8.X, Task 2 (Steps 3–8).

Activity

  1. added
    bugSomething isn't working
    xdg-launcherAppLauncher / XDG-Standardbrowser-Kette
    gate:testGate: automatisierte Tests müssen grün sein
    gate:verifyGate: Verifikation per belegbarem Befehl/Build
    on Sep 11, 2026
  2. added a commit that references this issue on Oct 19, 2026
  3. Toqsick commented on Oct 23, 2026

    @Toqsick
    OwnerAuthor

    Abnahme — erledigt

    Alle drei Gates aus diesem Issue sind erfüllt. Umsetzung in main als add73e3 (PR #118, Squash).

    Dateien laut Scope:

    Datei Beleg Status
    lib/services/app_launcher.dart — BrowserLaunchResult-Enum app_launcher.dart:6-16 erfüllt
    … 5 injizierbare Zugriffe :46 (_which), :49 (_starter), :53 (_outputReader), :57 (_desktopEntryExists), :61 (_configuredBrowser) erfüllt
    … Ziel-Reihenfolge preferred → XDG → kKnownBrowsers app_launcher.dart:174-207 erfüllt
    … .desktop-Existenzprüfung vor dem detached Start app_launcher.dart:184-198 erfüllt
    lib/layouts/hub/hub_shell.dart — Doc-Kommentar exakt 5 Zeilen hub_shell.dart:143-147 erfüllt
    … Fallback-Info-Snackbar hub_shell.dart:154-158 erfüllt
    … failed-Zweig unverändert hub_shell.dart:159-162 erfüllt
    docs/wiki/Admin-Hub.md :23-28 erfüllt
    docs/handoff/panels/hub-shell.md :55 erfüllt
    docs/design/feature-spec-admin-hub.md :44-46 erfüllt
    docs/design/admin-hub-followups.md :23 erfüllt (Checkliste ist manuell, bleibt offen)

    Gate-Test-Gate: flutter test grün (223 Tests gesamt), davon 19 neue in test/app_launcher_test.dart.
    Gate-Formate + globale Gates: dart format lib test 123 Dateien 0 geändert · check-versions.sh OK · flutter analyze 0 Findings · Python-Unittests 58 + 96 grün · packages/la_core analyze 0 Findings, format 25 Dateien 0 geändert, 68 Tests grün.
    Gate-Commit: liegt als Squash in add73e3; der Original-Branch-Commit mit der Nachricht fix(launcher): start the XDG default browser instead of the first listed binary steht als 388811d auf dem superseded Branch hardening/0.8.x-browser-xdg.

    Härtung über die Spezifikation hinaus: _validDesktopId() (app_launcher.dart:216-220) prüft die von xdg-settings gelieferte Desktop-ID gegen /, .. und ein Namens-Regex.

    Manueller Rest (bleibt offen, bei Basti): das Erfolgskriterium des Meilensteins — „auf Bastis Rechner öffnet das Browser-Werkzeug Brave Origin ohne Snackbar" — braucht Zorin OS 18.1 mit Desktop und ist aus der Cloud-Sandbox nicht prüfbar. Status ist in meilensteine-v0.8.1-v0.8.5.md (Meilenstein 2) ausdrücklich als offen vermerkt, ebenso die Checkliste in docs/design/admin-hub-followups.md:19-28.

    Nachweis: docs/handoff/v0.8.2-xdg-browser-abschluss.md — folgt mit PR #154.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workinggate:testGate: automatisierte Tests müssen grün seingate:verifyGate: Verifikation per belegbarem Befehl/Buildxdg-launcherAppLauncher / XDG-Standardbrowser-Kette

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions