diff --git a/discover/qml/ApplicationPage.qml b/discover/qml/ApplicationPage.qml --- a/discover/qml/ApplicationPage.qml +++ b/discover/qml/ApplicationPage.qml @@ -254,14 +254,14 @@ // Version row QQC2.Label { - readonly property string version: appInfo.application.isInstalled ? appInfo.application.installedVersion : appInfo.application.availableVersion - visible: version.length > 0 + visible: versionLabel.visible Layout.alignment: Qt.AlignRight text: i18n("Version:") } QQC2.Label { readonly property string version: appInfo.application.isInstalled ? appInfo.application.installedVersion : appInfo.application.availableVersion - visible: version.length > 0 + id: versionLabel + visible: text.length > 0 Layout.fillWidth: true elide: Text.ElideRight text: version ? version : "" @@ -310,20 +310,67 @@ // Homepage row QQC2.Label { - readonly property string homepage: application.homepage - visible: homepage.length > 0 + visible: homepageLink.visible Layout.alignment: Qt.AlignRight text: i18n("Homepage:") } LinkButton { - readonly property string homepage: application.homepage - visible: homepage.length > 0 - text: homepage + id: homepageLink + visible: text.length > 0 + text: application.homepage onClicked: Qt.openUrlExternally(application.homepage) elide: Text.ElideRight Layout.fillWidth: true horizontalAlignment: Text.AlignLeft } + + // "User Guide" row + QQC2.Label { + visible: docsLink.visible + Layout.alignment: Qt.AlignRight + text: i18n("User Guide:") + } + LinkButton { + id: docsLink + visible: text.length > 0 + text: application.helpURL + onClicked: Qt.openUrlExternally(helpURL) + elide: Text.ElideRight + Layout.fillWidth: true + horizontalAlignment: Text.AlignLeft + } + + // Donate row + QQC2.Label { + visible: donationLink.visible + Layout.alignment: Qt.AlignRight + text: i18n("Donate:") + } + LinkButton { + id: donationLink + visible: text.length > 0 + text: application.donationURL + onClicked: Qt.openUrlExternally(donationURL) + elide: Text.ElideRight + Layout.fillWidth: true + horizontalAlignment: Text.AlignLeft + } + + // "Report a Droblem" row + QQC2.Label { + visible: bugLink.visible + Layout.alignment: Qt.AlignRight + text: i18n("Report a Problem:") + } + LinkButton { + id: bugLink + visible: text.length > 0 + text: application.bugURL + onClicked: Qt.openUrlExternally(bugURL) + elide: Text.ElideRight + Layout.fillWidth: true + horizontalAlignment: Text.AlignLeft + } } } diff --git a/libdiscover/backends/DummyBackend/DummyResource.h b/libdiscover/backends/DummyBackend/DummyResource.h --- a/libdiscover/backends/DummyBackend/DummyResource.h +++ b/libdiscover/backends/DummyBackend/DummyResource.h @@ -39,6 +39,9 @@ QString license() override; int size() override; QUrl homepage() override; + QUrl helpURL() override; + QUrl bugURL() override; + QUrl donationURL() override; QStringList categories() override; AbstractResource::State state() override; QVariant icon() const override; diff --git a/libdiscover/backends/DummyBackend/DummyResource.cpp b/libdiscover/backends/DummyBackend/DummyResource.cpp --- a/libdiscover/backends/DummyBackend/DummyResource.cpp +++ b/libdiscover/backends/DummyBackend/DummyResource.cpp @@ -76,6 +76,21 @@ return QUrl(QStringLiteral("http://kde.org")); } +QUrl DummyResource::helpURL() +{ + return QUrl(QStringLiteral("http://very-very-excellent-docs.lol")); +} + +QUrl DummyResource::bugURL() +{ + return QUrl(QStringLiteral("file:///dev/null")); +} + +QUrl DummyResource::donationURL() +{ + return QUrl(QStringLiteral("https://youtu.be/0o8XMlL8rqY")); +} + QVariant DummyResource::icon() const { return isTechnical() ? QStringLiteral("kalarm") : m_iconName; diff --git a/libdiscover/backends/FlatpakBackend/FlatpakResource.h b/libdiscover/backends/FlatpakBackend/FlatpakResource.h --- a/libdiscover/backends/FlatpakBackend/FlatpakResource.h +++ b/libdiscover/backends/FlatpakBackend/FlatpakResource.h @@ -84,6 +84,9 @@ int installedSize() const; bool isTechnical() const override; QUrl homepage() override; + QUrl helpURL() override; + QUrl bugURL() override; + QUrl donationURL() override; QString flatpakFileType() const; QString flatpakName() const; QString license() override; diff --git a/libdiscover/backends/FlatpakBackend/FlatpakResource.cpp b/libdiscover/backends/FlatpakBackend/FlatpakResource.cpp --- a/libdiscover/backends/FlatpakBackend/FlatpakResource.cpp +++ b/libdiscover/backends/FlatpakBackend/FlatpakResource.cpp @@ -243,6 +243,21 @@ return m_appdata.url(AppStream::Component::UrlKindHomepage); } +QUrl FlatpakResource::helpURL() +{ + return m_appdata.url(AppStream::Component::UrlKindHelp); +} + +QUrl FlatpakResource::bugURL() +{ + return m_appdata.url(AppStream::Component::UrlKindBugtracker); +} + +QUrl FlatpakResource::donationURL() +{ + return m_appdata.url(AppStream::Component::UrlKindDonation); +} + QString FlatpakResource::flatpakFileType() const { return m_flatpakFileType; diff --git a/libdiscover/backends/PackageKitBackend/AppPackageKitResource.h b/libdiscover/backends/PackageKitBackend/AppPackageKitResource.h --- a/libdiscover/backends/PackageKitBackend/AppPackageKitResource.h +++ b/libdiscover/backends/PackageKitBackend/AppPackageKitResource.h @@ -39,6 +39,9 @@ QStringList categories() override; QString longDescription() override; QUrl homepage() override; + QUrl helpURL() override; + QUrl bugURL() override; + QUrl donationURL() override; QString comment() override; QString license() override; QStringList allPackageNames() const override; diff --git a/libdiscover/backends/PackageKitBackend/AppPackageKitResource.cpp b/libdiscover/backends/PackageKitBackend/AppPackageKitResource.cpp --- a/libdiscover/backends/PackageKitBackend/AppPackageKitResource.cpp +++ b/libdiscover/backends/PackageKitBackend/AppPackageKitResource.cpp @@ -124,6 +124,21 @@ return m_appdata.url(AppStream::Component::UrlKindHomepage); } +QUrl AppPackageKitResource::helpURL() +{ + return m_appdata.url(AppStream::Component::UrlKindHelp); +} + +QUrl AppPackageKitResource::bugURL() +{ + return m_appdata.url(AppStream::Component::UrlKindBugtracker); +} + +QUrl AppPackageKitResource::donationURL() +{ + return m_appdata.url(AppStream::Component::UrlKindDonation); +} + bool AppPackageKitResource::isTechnical() const { static QString desktop = QString::fromUtf8(qgetenv("XDG_CURRENT_DESKTOP")); diff --git a/libdiscover/backends/SnapBackend/SnapResource.h b/libdiscover/backends/SnapBackend/SnapResource.h --- a/libdiscover/backends/SnapBackend/SnapResource.h +++ b/libdiscover/backends/SnapBackend/SnapResource.h @@ -42,7 +42,6 @@ QString installedVersion() const override; QString license() override; int size() override; - QUrl homepage() override; QStringList categories() override; AbstractResource::State state() override; QVariant icon() const override; diff --git a/libdiscover/backends/SnapBackend/SnapResource.cpp b/libdiscover/backends/SnapBackend/SnapResource.cpp --- a/libdiscover/backends/SnapBackend/SnapResource.cpp +++ b/libdiscover/backends/SnapBackend/SnapResource.cpp @@ -54,11 +54,6 @@ return m_snap->downloadSize(); } -QUrl SnapResource::homepage() -{ - return {}; -} - QVariant SnapResource::icon() const { if (m_icon.isNull()) { diff --git a/libdiscover/resources/AbstractResource.h b/libdiscover/resources/AbstractResource.h --- a/libdiscover/resources/AbstractResource.h +++ b/libdiscover/resources/AbstractResource.h @@ -56,6 +56,9 @@ Q_PROPERTY(QStringList category READ categories CONSTANT) Q_PROPERTY(bool isTechnical READ isTechnical CONSTANT) Q_PROPERTY(QUrl homepage READ homepage CONSTANT) + Q_PROPERTY(QUrl helpURL READ helpURL CONSTANT) + Q_PROPERTY(QUrl bugURL READ bugURL CONSTANT) + Q_PROPERTY(QUrl donationURL READ donationURL CONSTANT) Q_PROPERTY(bool canUpgrade READ canUpgrade NOTIFY stateChanged) Q_PROPERTY(bool isInstalled READ isInstalled NOTIFY stateChanged) Q_PROPERTY(QString license READ license CONSTANT) @@ -125,8 +128,14 @@ virtual State state() = 0; virtual QStringList categories() = 0; - ///@returns a URL that points to the content - virtual QUrl homepage() = 0; + ///@returns a URL that points to the app's website + virtual QUrl homepage(); + ///@returns a URL that points to the app's online documentation + virtual QUrl helpURL(); + ///@returns a URL that points to the place where you can file a bug + virtual QUrl bugURL(); + ///@returns a URL that points to the place where you can donate money to the app developer + virtual QUrl donationURL(); virtual bool isTechnical() const; diff --git a/libdiscover/resources/AbstractResource.cpp b/libdiscover/resources/AbstractResource.cpp --- a/libdiscover/resources/AbstractResource.cpp +++ b/libdiscover/resources/AbstractResource.cpp @@ -38,6 +38,26 @@ AbstractResource::~AbstractResource() = default; +QUrl AbstractResource::homepage() +{ + return QUrl(); +} + +QUrl AbstractResource::helpURL() +{ + return QUrl(); +} + +QUrl AbstractResource::bugURL() +{ + return QUrl(); +} + +QUrl AbstractResource::donationURL() +{ + return QUrl(); +} + bool AbstractResource::isTechnical() const { return false;