From 10272ff8e2230b1a9e1541e2b2c3d7704d2cf0cd Mon Sep 17 00:00:00 2001 From: jbergner Date: Mon, 31 Aug 2026 16:27:10 +0200 Subject: [PATCH] v0.6.4 --- INSTALLATION.md | 8 +- Panel.qml | 48 +++-- README.md | 18 +- backend/bin/omarchy-citizen-backend | Bin 2166936 -> 2166936 bytes backend/cmd/omarchy-citizen-backend/main.go | 2 +- citizenctl | 191 +++++++++++--------- install.sh | 2 +- manifest.json | 4 +- 8 files changed, 165 insertions(+), 108 deletions(-) diff --git a/INSTALLATION.md b/INSTALLATION.md index ba5221d..a56a787 100644 --- a/INSTALLATION.md +++ b/INSTALLATION.md @@ -1,4 +1,4 @@ -# Omarchy Citizen 0.6.3 – Plug-&-Play-Installation +# Omarchy Citizen 0.6.4 – Plug-&-Play-Installation ## Ziel @@ -275,9 +275,9 @@ Damit brauchst du im ersten Supportkontakt normalerweise keine Terminalbefehle vom Nutzer anzufordern. -## Hotfix 0.6.3 – Setup-Button +## Hotfix 0.6.4 – Setup-Button -Version 0.6.3 ändert die Ausführung der Panel-Aktionen grundlegend. +Version 0.6.4 ändert die Ausführung der Panel-Aktionen grundlegend. Beim Klick auf **EINRICHTEN & STARTKLAR MACHEN** wird die Aktion nun direkt als Quickshell-Prozess gestartet. Das Panel zeigt sofort **WIRD GESTARTET**. @@ -290,7 +290,7 @@ im Support-Paket. Nach der Installation wird der Omarchy-Shellprozess einmal neu gestartet, damit die neue QML-Version sicher aktiv ist. -## 0.6.3 – unvollständiger Wine-Prefix +## 0.6.4 – unvollständiger Wine-Prefix Ein Ordner wie `~/Games/star-citizen` gilt jetzt erst dann als fertiger Wine-Prefix, wenn mindestens `drive_c`, `system.reg` und `user.reg` existieren. diff --git a/Panel.qml b/Panel.qml index 12ab468..c735690 100644 --- a/Panel.qml +++ b/Panel.qml @@ -12,7 +12,7 @@ Panel { property var anchorItem: null property var hostWidget: null - property string pluginVersion: "0.6.3" + property string pluginVersion: "0.6.4" property string health: "checking" property string depsState: "checking" property string depsMissing: "" @@ -97,7 +97,7 @@ Panel { values[lines[i].slice(0, p)] = lines[i].slice(p + 1) } - pluginVersion = values.plugin_version || "0.6.3" + pluginVersion = values.plugin_version || "0.6.4" health = values.health || "setup" depsState = values.deps || "missing" depsMissing = values.deps_missing || "" @@ -122,6 +122,7 @@ Panel { function stateIcon(state) { if (state === "ready" || state === "current") return "✓" if (state === "available") return "↑" + if (state === "warning") return "!" if (state === "partial" || state === "unknown") return "…" if (state === "checking") return "·" return "!" @@ -129,11 +130,28 @@ Panel { function stateColor(state) { if (state === "ready" || state === "current") return success - if (state === "available") return warning + if (state === "available" || state === "warning") return warning if (state === "partial" || state === "unknown" || state === "checking") return accent return danger } + function pluginUpdateText() { + if (root.pluginUpdate === "available") return "Update verfügbar" + if (root.pluginUpdate === "current") return "aktuell" + if (root.pluginUpdate === "blocked-dirty") return "lokale Änderungen · Update pausiert" + if (root.pluginUpdate === "blocked-diverged") return "Git-Stand abweichend · Update pausiert" + if (root.pluginUpdate === "blocked-remote") return "Updatequelle geändert · Update pausiert" + if (root.pluginUpdate === "zip") return "ZIP-Installation" + return root.pluginUpdate + } + + function pluginUpdateState() { + if (root.pluginUpdate === "available") return "available" + if (root.pluginUpdate === "current") return "current" + if (String(root.pluginUpdate).indexOf("blocked-") === 0) return "warning" + return "unknown" + } + function healthColor() { if (health === "ready") return success if (health === "recover-prefix" || health === "repair") return warning @@ -219,17 +237,22 @@ Panel { } onStarted: { - root.actionStatus = root.actionKind === "primary" - ? "Setup/Start wird vorbereitet…" - : "Aktion wird ausgeführt…" + if (root.actionKind === "primary" && root.health === "recover-prefix") + root.actionStatus = "Reparatur-Fenster wird geöffnet…" + else if (root.actionKind === "primary") + root.actionStatus = "Setup/Start wird vorbereitet…" + else + root.actionStatus = "Aktion wird ausgeführt…" } onExited: function(exitCode) { if (exitCode === 0) { root.actionError = "" - root.actionStatus = root.actionKind === "primary" && root.health !== "ready" - ? "Setup-Fenster wurde geöffnet. Folge dort einfach den angezeigten Schritten." - : "Aktion wurde gestartet." + root.actionStatus = root.actionKind === "primary" && root.health === "recover-prefix" + ? "Reparatur-Fenster wurde geöffnet. Dort läuft die sichere Wiederherstellung." + : (root.actionKind === "primary" && root.health !== "ready" + ? "Setup-Fenster wurde geöffnet. Folge dort einfach den angezeigten Schritten." + : "Aktion wurde gestartet.") root.refreshStatus() if (root.actionCloseOnSuccess) @@ -594,11 +617,8 @@ Panel { StatusLine { label: "Plugin-Stand" - state: root.pluginUpdate === "available" ? "available" : - (root.pluginUpdate === "current" ? "current" : "unknown") - value: root.pluginUpdate === "available" - ? "Update verfügbar" - : (root.pluginUpdate === "current" ? "aktuell" : root.pluginUpdate) + state: root.pluginUpdateState() + value: root.pluginUpdateText() } Grid { diff --git a/README.md b/README.md index afd8b5e..19b4c44 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Omarchy Citizen 0.6.3 +# Omarchy Citizen 0.6.4 A plug-and-play Star Citizen control panel for Omarchy. @@ -70,7 +70,7 @@ remote; unattended updates stop if that remote changes or the checkout is dirty. See [`backend/README.md`](backend/README.md) and [`GIT_DISTRIBUTION.md`](GIT_DISTRIBUTION.md). -## 0.6.3 hotfix +## 0.6.4 hotfix - primary/setup actions now run through a Quickshell `Process` instead of fire-and-forget `bar.run` - the panel shows `WIRD GESTARTET` immediately after a click @@ -78,7 +78,7 @@ See [`backend/README.md`](backend/README.md) and [`GIT_DISTRIBUTION.md`](GIT_DIS - terminal launch has a monitored fallback path and logs immediate launcher failures - installers restart the Omarchy shell after QML changes to avoid stale third-party plugin QML -## 0.6.3 UI / setup hotfix +## 0.6.4 UI / setup hotfix - fixed `undefined` in reusable status rows and chips - panel no longer inherits the bar's theme font; uses a neutral system sans font @@ -86,7 +86,7 @@ See [`backend/README.md`](backend/README.md) and [`GIT_DISTRIBUTION.md`](GIT_DIS - setup terminal is launched directly through `xdg-terminal-exec`/UWSM with separate argv - failed package/AUR setup remains visible instead of the terminal disappearing immediately -## 0.6.3 incomplete-prefix recovery +## 0.6.4 incomplete-prefix recovery - a configured folder is no longer considered a valid Wine prefix merely because it exists - valid prefixes require `drive_c`, `system.reg`, and `user.reg` @@ -95,3 +95,13 @@ See [`backend/README.md`](backend/README.md) and [`GIT_DISTRIBUTION.md`](GIT_DIS - stale LUG target config files are backed up before a clean reinstall - existing `Data.p4k` is never moved by Omarchy Citizen; migration is delegated to the LUG Helper - support bundles now include the newest `/tmp/lughelper-install-*.log` and a prefix-health report + +## 0.6.4 visible recovery hotfix + +- incomplete-prefix recovery no longer spawns a hidden second background process +- `SETUP SICHER REPARIEREN` opens a visible terminal directly +- the incomplete prefix is automatically renamed to a timestamped backup; it is never deleted +- LUG reinstall output remains visible and is logged at the same time +- if recovery fails, the terminal stays open with the error code and support instructions +- guided setup, repair assistant, support bundle creation and NGL file selection no longer use nested `nohup` wrappers +- updater status `blocked-dirty` is displayed as the user-friendly `lokale Änderungen · Update pausiert` diff --git a/backend/bin/omarchy-citizen-backend b/backend/bin/omarchy-citizen-backend index a15d2ba0413fcb86b7c7ca9b42a5fb6d1a85c5de..0b03aa8cb6f5c4dc38f5ef735ab8700a9a27dc30 100644 GIT binary patch delta 236 zcmWm5xemc_00-dIeb;?oFF^6v!B`|DRY~gz76TDN)5aYuiC3^1n;2|;9#7yA>Sy@I z@A14*4|u=m9=G3e<31rJxkehYIA+%^k?B^piYf~mzEB^qLRBH7a)+7oD{i?tkJg7v zufY+Sv|B?)nyeP;sXi?4W>Z#`n)9QmTn+ke&=i=!3>L704ea0mC%C{39`J$>{?`uy l-JpY7ma5*hVh}k+c3}hjvYsLKc^8=I%SO)+A delta 236 zcmWm5xemc_00-dIeV4j#FHnsXWo#G>702Jbh_2|NP5J;NeFdwriNWT1Jb_23pWz$7 z`{PF4;q|1+UTLel`Bqz2Yv`Z5JC`!2t*+UaY(@bCL#59 jX~wBhyzMj@NJ9p)kb^uFpa>->Lj|f(gZkTPHol)9tZG;O diff --git a/backend/cmd/omarchy-citizen-backend/main.go b/backend/cmd/omarchy-citizen-backend/main.go index c574449..405dc06 100644 --- a/backend/cmd/omarchy-citizen-backend/main.go +++ b/backend/cmd/omarchy-citizen-backend/main.go @@ -16,7 +16,7 @@ import ( ) const ( - appVersion = "0.6.3" + appVersion = "0.6.4" pluginID = "local.omarchy-citizen" ) diff --git a/citizenctl b/citizenctl index a099cdf..e3efb40 100644 --- a/citizenctl +++ b/citizenctl @@ -2,7 +2,7 @@ set -u PLUGIN_ID="local.omarchy-citizen" -PLUGIN_VERSION="0.6.3" +PLUGIN_VERSION="0.6.4" CONFIG_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/starcitizen-lug" DATA_DIR="${XDG_DATA_HOME:-$HOME/.local/share}" @@ -198,6 +198,21 @@ run_helper_sync() { fi } +run_helper_visible() { + local helper + helper="$(find_helper)" || { + echo "Der Star Citizen LUG Helper wurde nicht gefunden." >&2 + return 1 + } + + log_line "lug-helper visible args=$*" + if [[ "$helper" == *.sh ]]; then + bash "$helper" "$@" + else + "$helper" "$@" + fi +} + run_helper_gui() { local helper helper="$(find_helper)" || { @@ -518,103 +533,113 @@ stop_prefix_wineserver() { fi } -recover_incomplete_prefix_interactive() { +recover_incomplete_prefix_terminal() { + set -Ee + exec > >(tee -a "$LOG_FILE") 2>&1 + local prefix stamp backup datap4k="" + recovery_failed() { + local rc=$? + trap - ERR + echo + echo "==================================================" + echo " REPARATUR KONNTE NICHT ABGESCHLOSSEN WERDEN" + echo "==================================================" + echo + echo "Fehlercode: $rc" + echo + echo "Dein vorheriger Ordner wurde nicht gelöscht." + echo "Im SC-Panel kannst du jetzt „Support-Paket erstellen“ wählen." + echo + log_line "recover-prefix-terminal failed rc=$rc" + notify "Omarchy Citizen" "Setup-Reparatur fehlgeschlagen. Bitte erstelle ein Support-Paket." + if [[ -t 0 ]]; then + read -r -p "Drücke Enter, um dieses Fenster zu schließen … " _ || true + else + sleep 10 + fi + exit "$rc" + } + trap recovery_failed ERR + prefix="$(find_incomplete_prefix 2>/dev/null)" || { - log_line "recover-prefix requested but no incomplete prefix found" - guided_setup_interactive - return + echo "Es wurde kein unvollständiger Wine-Prefix mehr gefunden." + echo "Starte stattdessen die normale Einrichtung." + log_line "recover-prefix-terminal no incomplete prefix found" + trap - ERR + return 0 } datap4k="$prefix/drive_c/Program Files/Roberts Space Industries/StarCitizen/LIVE/Data.p4k" - # If real game data is present, never move it ourselves. Let the LUG Helper's - # built-in reinstall/migration path handle it. + echo + echo "==================================================" + echo " Omarchy Citizen – Setup sicher reparieren" + echo "==================================================" + echo + echo "Unvollständiger Wine-Prefix:" + echo " $prefix" + echo + + # Never move real game data ourselves. if [[ -f "$datap4k" ]]; then - log_line "incomplete prefix contains Data.p4k; delegating migration to LUG Helper" - run_helper_sync --install || true - return + echo "Vorhandene Star-Citizen-Spieldaten wurden erkannt." + echo "Omarchy Citizen verschiebt diese Daten nicht selbst." + echo "Die Reparatur wird an den LUG Helper übergeben." + echo + log_line "recover-prefix-terminal Data.p4k present; delegate to LUG" + run_helper_visible --install + trap - ERR + return 0 fi stamp="$(date '+%Y%m%d-%H%M%S')" backup="${prefix}-incomplete-${stamp}" - if command -v zenity >/dev/null 2>&1; then - if ! zenity --question \ - --width=600 \ - --title="Omarchy Citizen – unvollständiges Setup reparieren" \ - --ok-label="Automatisch reparieren" \ - --cancel-label="Abbrechen" \ - --text="Omarchy Citizen hat einen halbfertigen Star-Citizen-Wine-Prefix erkannt: + echo "Der halbfertige Ordner wird NICHT gelöscht." + echo "Er wird gesichert als:" + echo " $backup" + echo + echo "Danach wird der offizielle LUG-Installer sauber neu gestartet." + echo -$prefix + log_line "recover-prefix-terminal prefix=$prefix backup=$backup" -Es fehlen drive_c und/oder die Wine-Registrydateien. Fertige Star-Citizen-Spieldaten (Data.p4k) wurden nicht gefunden. - -Der Ordner wird NICHT gelöscht, sondern sicher umbenannt nach: - -$backup - -Danach startet der offizielle LUG-Installer sauber neu." 2>/dev/null; then - return 0 - fi - else - printf '\nUnvollständiges Star-Citizen-Setup gefunden:\n%s\n\n' "$prefix" - printf 'Es wird gesichert als:\n%s\n\n' "$backup" - read -r -p "Automatisch reparieren? [j/N]: " answer - case "${answer,,}" in - j|ja|y|yes) ;; - *) return 0 ;; - esac - fi - - log_line "recovering incomplete prefix=$prefix backup=$backup" stop_prefix_wineserver "$prefix" - if ! mv -- "$prefix" "$backup"; then - notify_error "Der unvollständige Star-Citizen-Ordner konnte nicht gesichert werden. - -Bitte erstelle ein Support-Paket." - return 1 - fi - + mv -- "$prefix" "$backup" backup_lug_target_configs "$stamp" - notify "Omarchy Citizen" "Unvollständiges Setup wurde gesichert. Der LUG-Installer startet jetzt neu." - run_helper_sync --install || { - log_line "fresh LUG install after incomplete-prefix recovery failed" - if command -v zenity >/dev/null 2>&1; then - if zenity --question \ - --width=560 \ - --title="Star-Citizen-Setup fehlgeschlagen" \ - --ok-label="Support-Paket erstellen" \ - --cancel-label="Später" \ - --text="Auch der saubere Neuversuch konnte den Wine-Prefix nicht vollständig erstellen. + echo "✓ Backup erstellt." + echo + echo "Starte frische LUG-Einrichtung …" + echo -Deine vorherige Installation wurde nicht gelöscht; sie liegt als Backup vor. - -Soll Omarchy Citizen jetzt direkt ein Support-Paket erstellen?" 2>/dev/null; then - "$SELF" support-build - fi - fi - return 1 - } + run_helper_visible --install + echo + echo "Prüfe den neu angelegten Wine-Prefix …" if read_prefix >/dev/null 2>&1; then - notify "Omarchy Citizen" "Wine-Prefix wurde erfolgreich erstellt." - log_line "incomplete-prefix recovery succeeded" - else - log_line "LUG install returned but prefix still incomplete" - notify_error "Der LUG-Installer wurde beendet, aber der Wine-Prefix ist weiterhin unvollständig. - -Bitte erstelle ein Support-Paket." - return 1 + echo "✓ Wine-Prefix ist vollständig initialisiert." + log_line "recover-prefix-terminal succeeded" + trap - ERR + notify "Omarchy Citizen" "Wine-Prefix wurde erfolgreich neu erstellt." + echo + echo "Reparatur abgeschlossen. Du kannst dieses Fenster schließen." + return 0 fi + + echo + echo "Der LUG-Installer wurde beendet, aber drive_c/system.reg/user.reg" + echo "sind weiterhin nicht vollständig vorhanden." + echo + log_line "recover-prefix-terminal LUG returned but prefix still incomplete" + return 1 } recover_incomplete_prefix() { - nohup bash "$SELF" recover-prefix-interactive >>"$LOG_FILE" 2>&1 & + launch_terminal_action recover-prefix-terminal } guided_setup_interactive() { @@ -626,8 +651,8 @@ guided_setup_interactive() { fi if find_incomplete_prefix >/dev/null 2>&1; then - log_line "guided setup found incomplete prefix; switching to recovery" - recover_incomplete_prefix_interactive + log_line "guided setup found incomplete prefix; opening visible recovery terminal" + launch_terminal_action recover-prefix-terminal return $? fi @@ -657,7 +682,7 @@ guided_setup() { launch_terminal_action install-stack-terminal return fi - nohup bash "$SELF" guided-setup-interactive >>"$LOG_FILE" 2>&1 & + guided_setup_interactive } install_stack_terminal() { @@ -722,9 +747,11 @@ install_stack_terminal() { if find_incomplete_prefix >/dev/null 2>&1; then echo echo "Eine frühere, unvollständige Wine-Prefix-Erstellung wurde erkannt." - echo "Die Reparatur wird jetzt grafisch fortgesetzt." + echo "Öffne die sichere Reparatur in einem eigenen Fenster." echo - recover_incomplete_prefix_interactive + trap - ERR + launch_terminal_action recover-prefix-terminal + return 0 elif ! read_prefix >/dev/null 2>&1; then run_helper_sync --install || true fi @@ -824,7 +851,7 @@ repair_assistant_interactive() { return ;; recover-prefix) - recover_incomplete_prefix_interactive + launch_terminal_action recover-prefix-terminal return ;; install) @@ -896,7 +923,7 @@ repair_assistant_interactive() { } repair_assistant() { - nohup bash "$SELF" repair-interactive >>"$LOG_FILE" 2>&1 & + repair_assistant_interactive } sanitize_to() { @@ -1131,7 +1158,7 @@ Schicke dieses Archiv zusammen mit der Support-ID an den Plugin-Support." \ } support_start() { - nohup bash "$SELF" support-build >>"$LOG_FILE" 2>&1 & + support_build } open_debug_log() { @@ -1260,7 +1287,7 @@ Fortfahren?" 2>/dev/null; then } ngl_install() { - nohup bash "$SELF" ngl-install-interactive >>"$LOG_FILE" 2>&1 & + ngl_install_interactive } case "$ACTION" in @@ -1268,7 +1295,7 @@ case "$ACTION" in primary) primary_action ;; setup) guided_setup ;; recover-prefix) recover_incomplete_prefix ;; - recover-prefix-interactive) recover_incomplete_prefix_interactive ;; + recover-prefix-terminal) recover_incomplete_prefix_terminal ;; guided-setup-interactive) guided_setup_interactive ;; repair) repair_assistant ;; repair-interactive) repair_assistant_interactive ;; diff --git a/install.sh b/install.sh index dc776e2..c58ef7a 100644 --- a/install.sh +++ b/install.sh @@ -44,7 +44,7 @@ omarchy plugin enable "$PLUGIN_ID" omarchy restart shell >/dev/null 2>&1 || true echo -echo "Omarchy Citizen 0.6.3 wurde installiert:" +echo "Omarchy Citizen 0.6.4 wurde installiert:" echo " $DEST" echo echo "Links-Klick auf 'SC' in der Omarchy-Leiste öffnet das Star-Citizen-Panel." diff --git a/manifest.json b/manifest.json index 1a62484..bce64d4 100644 --- a/manifest.json +++ b/manifest.json @@ -2,10 +2,10 @@ "schemaVersion": 1, "id": "local.omarchy-citizen", "name": "Omarchy Citizen", - "version": "0.6.3", + "version": "0.6.4", "author": "Community prototype", "license": "MIT", - "description": "Plug-and-play Star Citizen controls for Omarchy. 0.6.3 detects and safely recovers incomplete Wine prefixes and improves LUG install diagnostics.", + "description": "Plug-and-play Star Citizen controls for Omarchy. 0.6.4 removes nested background UI actions and performs incomplete-prefix recovery in a visible, logged terminal.", "kinds": [ "bar-widget" ],