From a9f286bfdea47ea3c5866d659ba1347caab3d848 Mon Sep 17 00:00:00 2001 From: Sebastian Palencsar Date: Mon, 22 Jun 2026 17:32:10 +0200 Subject: [PATCH] fix: About dialog crash and flatpak build id (1.0.5 pkgrel 8) Replace the tall ScrollView/license layout that crashed under KDE Dialog with a compact layout matching the other dialogs. Inject BEARWAVE_GIT_HASH into flatpak builds via manifest env (no .git in builder sandbox). --- PKGBUILD | 2 +- scripts/build-flatpak.sh | 18 ++- src/CMakeLists.txt | 20 ++- src/qml/components/AboutDialog.qml | 234 ++++++++--------------------- 4 files changed, 93 insertions(+), 181 deletions(-) diff --git a/PKGBUILD b/PKGBUILD index 2410faf..92ddeb4 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -1,7 +1,7 @@ # Maintainer: Sebastian Palencsar pkgname=bearwave-git pkgver=1.0.5 -pkgrel=7 +pkgrel=8 pkgdesc="KDE-focused desktop internet radio app" arch=('x86_64') url="https://github.com/spalencsar/bearwave" diff --git a/scripts/build-flatpak.sh b/scripts/build-flatpak.sh index 6c7aa9a..3dd7af4 100755 --- a/scripts/build-flatpak.sh +++ b/scripts/build-flatpak.sh @@ -19,20 +19,34 @@ for arg in "$@"; do esac done +git_hash="$(git -C "${root}" rev-parse --short HEAD 2>/dev/null || echo unknown)" +build_manifest="${root}/.flatpak-builder-manifest.json" +python3 - "${root}/de.nerdbear.bearwave.json" "${build_manifest}" "${git_hash}" <<'PY' +import json, sys +src, dst, git_hash = sys.argv[1], sys.argv[2], sys.argv[3] +with open(src, encoding="utf-8") as f: + manifest = json.load(f) +module = manifest["modules"][0] +module.setdefault("build-options", {}).setdefault("env", {})["BEARWAVE_GIT_HASH"] = git_hash +with open(dst, "w", encoding="utf-8") as f: + json.dump(manifest, f, indent=4) + f.write("\n") +PY + if [[ "${mode}" == "reexport" ]]; then flatpak-builder \ --repo=flatpak_repo \ --gpg-sign="${gpg_key_id}" \ --export-only \ flatpak_build \ - de.nerdbear.bearwave.json + "${build_manifest}" else flatpak-builder \ --repo=flatpak_repo \ --gpg-sign="${gpg_key_id}" \ --force-clean \ flatpak_build \ - de.nerdbear.bearwave.json + "${build_manifest}" fi flatpak build-update-repo --gpg-sign="${gpg_key_id}" flatpak_repo diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2efd28f..d4cc1f4 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -18,13 +18,19 @@ set(SOURCES # Create executable add_executable(bearwave ${SOURCES}) -execute_process( - COMMAND git rev-parse --short HEAD - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/.. - OUTPUT_VARIABLE BEARWAVE_GIT_HASH - OUTPUT_STRIP_TRAILING_WHITESPACE - ERROR_QUIET -) +if(BEARWAVE_GIT_HASH) + # set via -D from build scripts +elseif(DEFINED ENV{BEARWAVE_GIT_HASH} AND NOT "$ENV{BEARWAVE_GIT_HASH}" STREQUAL "") + set(BEARWAVE_GIT_HASH "$ENV{BEARWAVE_GIT_HASH}") +else() + execute_process( + COMMAND git rev-parse --short HEAD + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/.. + OUTPUT_VARIABLE BEARWAVE_GIT_HASH + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET + ) +endif() if(NOT BEARWAVE_GIT_HASH) set(BEARWAVE_GIT_HASH "unknown") endif() diff --git a/src/qml/components/AboutDialog.qml b/src/qml/components/AboutDialog.qml index 126a8b2..26f37c9 100644 --- a/src/qml/components/AboutDialog.qml +++ b/src/qml/components/AboutDialog.qml @@ -14,6 +14,12 @@ Dialog { property string appVersion: Qt.application.version property string buildId: "?" + title: qsTr("About BearWave") + modal: true + anchors.centerIn: parent + width: compactMode ? 360 : 480 + standardButtons: Dialog.Ok + readonly property string versionLine: { var version = root.appVersion if (version === undefined || version === null || version === "") @@ -24,189 +30,75 @@ Dialog { return qsTr("Version") + " " + String(version) + " · " + qsTr("build") + " " + String(build) } - modal: true - anchors.centerIn: parent - width: compactMode ? 360 : 520 - height: compactMode ? 560 : 680 - standardButtons: Dialog.Ok - contentItem: ColumnLayout { - spacing: 16 + spacing: 12 - ColumnLayout { + Image { Layout.alignment: Qt.AlignHCenter - spacing: 6 + Layout.preferredWidth: 72 + Layout.preferredHeight: 72 + source: "qrc:/assets/app/bearwave.png" + fillMode: Image.PreserveAspectFit + smooth: true + } - Image { - Layout.alignment: Qt.AlignHCenter - Layout.preferredWidth: 72 - Layout.preferredHeight: 72 - sourceSize.width: 72 - sourceSize.height: 72 - source: "qrc:/assets/app/bearwave.png" - fillMode: Image.PreserveAspectFit - smooth: true + Label { + Layout.alignment: Qt.AlignHCenter + text: qsTr("BearWave") + color: BearTheme.textMain + font.bold: true + font.pixelSize: 22 + } + + Label { + Layout.alignment: Qt.AlignHCenter + text: qsTr("Internet Radio Player for KDE") + color: BearTheme.textMuted + font.pixelSize: 13 + } + + Label { + Layout.alignment: Qt.AlignHCenter + text: root.versionLine + color: BearTheme.textMuted + font.pixelSize: 12 + } + + Label { + Layout.alignment: Qt.AlignHCenter + text: qsTr("Author: Sebastian Palencsár") + color: BearTheme.textMain + font.pixelSize: 13 + } + + RowLayout { + Layout.alignment: Qt.AlignHCenter + spacing: 12 + + Button { + text: qsTr("Website") + onClicked: Qt.openUrlExternally("https://palencsar.pro") } - Label { - Layout.alignment: Qt.AlignHCenter - text: qsTr("BearWave") - color: BearTheme.textMain - font.bold: true - font.pixelSize: 26 + Button { + text: qsTr("GitHub") + onClicked: Qt.openUrlExternally("https://github.com/spalencsar") } - Label { - Layout.alignment: Qt.AlignHCenter - text: qsTr("Internet Radio Player for KDE") - color: BearTheme.textMuted - font.pixelSize: 14 - } - - Label { - Layout.alignment: Qt.AlignHCenter - text: root.versionLine - color: BearTheme.textMuted - font.pixelSize: 12 + Button { + text: qsTr("LinkedIn") + onClicked: Qt.openUrlExternally("https://www.linkedin.com/in/spalencsar/") } } - ColumnLayout { - Layout.alignment: Qt.AlignHCenter - spacing: 8 - Layout.topMargin: 8 - Layout.bottomMargin: 8 - - Label { - Layout.alignment: Qt.AlignHCenter - text: qsTr("Author: Sebastian Palencsár") - color: BearTheme.textMain - font.bold: true - font.pixelSize: 14 - } - - RowLayout { - Layout.alignment: Qt.AlignHCenter - spacing: 16 - - ToolButton { - Layout.preferredWidth: 40 - Layout.preferredHeight: 40 - onClicked: Qt.openUrlExternally("https://palencsar.pro") - ToolTip.visible: hovered - ToolTip.text: qsTr("Open website") - contentItem: Item { - Image { - anchors.centerIn: parent - width: 19 - height: 19 - source: "qrc:/assets/ui/globe.svg" - fillMode: Image.PreserveAspectFit - smooth: true - } - } - background: Rectangle { - radius: 20 - color: parent.hovered ? "#274261" : "#1f3147" - border.color: BearTheme.cardBorder - border.width: 1 - } - } - - ToolButton { - Layout.preferredWidth: 40 - Layout.preferredHeight: 40 - onClicked: Qt.openUrlExternally("https://github.com/spalencsar") - ToolTip.visible: hovered - ToolTip.text: qsTr("Open GitHub") - contentItem: Item { - Image { - anchors.centerIn: parent - width: 19 - height: 19 - source: "qrc:/assets/ui/github.svg" - fillMode: Image.PreserveAspectFit - smooth: true - } - } - background: Rectangle { - radius: 20 - color: parent.hovered ? "#274261" : "#1f3147" - border.color: BearTheme.cardBorder - border.width: 1 - } - } - - ToolButton { - Layout.preferredWidth: 40 - Layout.preferredHeight: 40 - onClicked: Qt.openUrlExternally("https://www.linkedin.com/in/spalencsar/") - ToolTip.visible: hovered - ToolTip.text: qsTr("Open LinkedIn") - contentItem: Item { - Image { - anchors.centerIn: parent - width: 19 - height: 19 - source: "qrc:/assets/ui/linkedin.svg" - fillMode: Image.PreserveAspectFit - smooth: true - } - } - background: Rectangle { - radius: 20 - color: parent.hovered ? "#274261" : "#1f3147" - border.color: BearTheme.cardBorder - border.width: 1 - } - } - } - } - - ColumnLayout { + Label { Layout.fillWidth: true - Layout.fillHeight: true - spacing: 8 - - RowLayout { - Layout.fillWidth: true - Label { - Layout.fillWidth: true - text: qsTr("GNU GPLv3 License") - color: BearTheme.textMain - font.bold: true - } - Label { - text: qsTr("Copyright (c) 2026") - color: BearTheme.textMuted - font.pixelSize: 11 - } - } - - Rectangle { - Layout.fillWidth: true - Layout.fillHeight: true - Layout.minimumHeight: 140 - radius: 8 - color: "#101a26" - border.color: BearTheme.cardBorder - - ScrollView { - id: licenseScroll - anchors.fill: parent - anchors.margins: 10 - clip: true - ScrollBar.vertical.policy: ScrollBar.AlwaysOn - - Label { - width: licenseScroll.availableWidth - color: BearTheme.textMain - font.pixelSize: 11 - wrapMode: Text.WordWrap - text: "This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with this program. If not, see ." - } - } - } + Layout.preferredWidth: root.width - 48 + color: BearTheme.textMuted + font.pixelSize: 10 + wrapMode: Text.WordWrap + horizontalAlignment: Text.AlignHCenter + text: qsTr("Licensed under GNU GPLv3-or-later. Copyright (c) 2026 Sebastian Palencsar.") } } } \ No newline at end of file