diff --git a/discover/qml/ApplicationPage.qml b/discover/qml/ApplicationPage.qml --- a/discover/qml/ApplicationPage.qml +++ b/discover/qml/ApplicationPage.qml @@ -31,6 +31,13 @@ DiscoverPage { id: appInfo property QtObject application: null + + readonly property string homepage: application.homepage + readonly property string helpURL: application.helpURL + readonly property string bugURL: application.bugURL + readonly property string donationURL: application.donationURL + readonly property string version: appInfo.application.isInstalled ? appInfo.application.installedVersion : appInfo.application.availableVersion + clip: true title: application.name @@ -254,13 +261,11 @@ // Version row QQC2.Label { - readonly property string version: appInfo.application.isInstalled ? appInfo.application.installedVersion : appInfo.application.availableVersion visible: version.length > 0 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 Layout.fillWidth: true elide: Text.ElideRight @@ -310,20 +315,70 @@ // Homepage row QQC2.Label { - readonly property string homepage: application.homepage visible: homepage.length > 0 Layout.alignment: Qt.AlignRight text: i18n("Homepage:") } LinkButton { - readonly property string homepage: application.homepage visible: homepage.length > 0 text: homepage onClicked: Qt.openUrlExternally(application.homepage) elide: Text.ElideRight Layout.fillWidth: true horizontalAlignment: Text.AlignLeft } + + // "User Guide" row + QQC2.Label { + visible: helpURL.length > 0 + Layout.alignment: Qt.AlignRight + text: i18n("User Guide:") + } + LinkButton { + visible: helpURL.length > 0 + text: helpURL + onClicked: Qt.openUrlExternally(helpURL) + elide: Text.ElideRight + Layout.fillWidth: true + horizontalAlignment: Text.AlignLeft + } + + Item { + Layout.fillWidth: true + } + Item { + Layout.fillWidth: true + } + + // "Make a Donation" row + QQC2.Label { + visible: donationURL.length > 0 + Layout.alignment: Qt.AlignRight + text: i18n("Make a Donation:") + } + LinkButton { + visible: donationURL.length > 0 + text: donationURL + onClicked: Qt.openUrlExternally(donationURL) + elide: Text.ElideRight + Layout.fillWidth: true + horizontalAlignment: Text.AlignLeft + } + + // "Report a Droblem" row + QQC2.Label { + visible: bugURL.length > 0 + Layout.alignment: Qt.AlignRight + text: i18n("Report a Problem:") + } + LinkButton { + visible: bugURL.length > 0 + text: 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;