diff --git a/discover/qml/ApplicationPage.qml b/discover/qml/ApplicationPage.qml --- a/discover/qml/ApplicationPage.qml +++ b/discover/qml/ApplicationPage.qml @@ -45,47 +45,6 @@ } } - Kirigami.OverlaySheet { - id: originsOverlay - bottomPadding: Kirigami.Units.largeSpacing - topPadding: Kirigami.Units.largeSpacing - readonly property alias model: alternativeResourcesView.model - function listBackends() { - var first = true; - var ret = ""; - var m = alternativeResourcesView.model; - for(var i=0, count=m.rowCount(); i" + res.displayOrigin + "" - first = false - } - } - return ret - } - readonly property string sentence: alternativeResourcesView.count <= 1 ? "" : i18n("\nAlso available in %1", listBackends()) - ListView { - id: alternativeResourcesView - model: ResourcesProxyModel { - allBackends: true - resourcesUrl: appInfo.application.url - } - delegate: Kirigami.BasicListItem { - label: displayOrigin - checked: appInfo.application == model.application - onClicked: if(index>=0) { - var res = model.application - console.assert(res) - window.stack.pop() - Navigation.openApplication(res) - } - } - } - } - header: QQC2.ToolBar { anchors { right: parent.right @@ -191,13 +150,7 @@ Layout.fillWidth: true horizontalAlignment: Text.AlignJustify wrapMode: Text.WordWrap - text: appInfo.application.longDescription + originsOverlay.sentence - onLinkActivated: { - var idx = parseInt(link, 10) - var res = originsOverlay.model.resourceAt(idx) - window.stack.pop() - Navigation.openApplication(res) - } + text: appInfo.application.longDescription } LinkButton { @@ -256,17 +209,35 @@ // 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:") } + // Show a regular label for the version and source when there's only one source QQC2.Label { - readonly property string version: appInfo.application.isInstalled ? appInfo.application.installedVersion : appInfo.application.availableVersion - visible: version.length > 0 + visible: sourcesCombo.count == 1 + horizontalAlignment: Text.AlignLeft Layout.fillWidth: true elide: Text.ElideRight - text: version ? version : "" + text: appInfo.application.displayOrigin + } + // Show a combobox chooser when there's more than one source available + QQC2.ComboBox { + id: sourcesCombo + visible: sourcesCombo.count > 1 + model: ResourcesProxyModel { + allBackends: true + onIsBusyChanged: if (!isBusy) { + sourcesCombo.currentIndex = indexOf(appInfo.application) + } + resourcesUrl: appInfo.application.url + } + onActivated: if(index>=0) { + var res = model.resourceAt(index) + console.assert(res) + window.stack.pop() + Navigation.openApplication(res) + } + textRole: "displayOrigin" } // Size row @@ -280,20 +251,6 @@ text: i18n("%1", appInfo.application.sizeDescription) } - // Source row - QQC2.Label { - Layout.alignment: Qt.AlignRight - text: i18n("Source:") - } - LinkButton { - Layout.fillWidth: true - horizontalAlignment: Text.AlignLeft - enabled: alternativeResourcesView.count > 1 - text: appInfo.application.displayOrigin - elide: Text.ElideRight - onClicked: originsOverlay.open() - } - // License row QQC2.Label { Layout.alignment: Qt.AlignRight 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 @@ -97,7 +97,7 @@ QString section() override; int size() override; QString sizeDescription() override; - AbstractResource::State state() override; + AbstractResource::State state() const override; ResourceType type() const; QString typeAsString() const; QString uniqueId() const; 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 @@ -344,7 +344,7 @@ } } -AbstractResource::State FlatpakResource::state() +AbstractResource::State FlatpakResource::state() const { return m_state; } diff --git a/libdiscover/backends/KNSBackend/KNSResource.h b/libdiscover/backends/KNSBackend/KNSResource.h --- a/libdiscover/backends/KNSBackend/KNSResource.h +++ b/libdiscover/backends/KNSBackend/KNSResource.h @@ -35,7 +35,7 @@ explicit KNSResource(const KNSCore::EntryInternal & c, QStringList categories, KNSBackend* parent); ~KNSResource() override; - AbstractResource::State state() override; + AbstractResource::State state() const override; QVariant icon() const override; QString comment() override; QString name() override; diff --git a/libdiscover/backends/KNSBackend/KNSResource.cpp b/libdiscover/backends/KNSBackend/KNSResource.cpp --- a/libdiscover/backends/KNSBackend/KNSResource.cpp +++ b/libdiscover/backends/KNSBackend/KNSResource.cpp @@ -37,7 +37,7 @@ KNSResource::~KNSResource() = default; -AbstractResource::State KNSResource::state() +AbstractResource::State KNSResource::state() const { switch(m_entry.status()) { case KNS3::Entry::Invalid: diff --git a/libdiscover/backends/PackageKitBackend/LocalFilePKResource.h b/libdiscover/backends/PackageKitBackend/LocalFilePKResource.h --- a/libdiscover/backends/PackageKitBackend/LocalFilePKResource.h +++ b/libdiscover/backends/PackageKitBackend/LocalFilePKResource.h @@ -32,7 +32,7 @@ QString name() override; QString comment() override; - AbstractResource::State state() override { return m_state; } + AbstractResource::State state() const override { return m_state; } int size() override; void markInstalled(); diff --git a/libdiscover/backends/PackageKitBackend/PackageKitResource.h b/libdiscover/backends/PackageKitBackend/PackageKitResource.h --- a/libdiscover/backends/PackageKitBackend/PackageKitResource.h +++ b/libdiscover/backends/PackageKitBackend/PackageKitResource.h @@ -47,7 +47,7 @@ void fetchChangelog() override; QList addonsInformation() override; - State state() override; + State state() const override; QString installedVersion() const override; QString availableVersion() const override; diff --git a/libdiscover/backends/PackageKitBackend/PackageKitResource.cpp b/libdiscover/backends/PackageKitBackend/PackageKitResource.cpp --- a/libdiscover/backends/PackageKitBackend/PackageKitResource.cpp +++ b/libdiscover/backends/PackageKitBackend/PackageKitResource.cpp @@ -122,15 +122,17 @@ QString PackageKitResource::origin() const { auto pkgid = availablePackageId(); - return PackageKit::Daemon::packageData(pkgid); + // PackageKit folks expect us to format this string, so this is okay + QString pkOrigin = PackageKit::Daemon::packageData(pkgid); + return pkOrigin.remove(QStringLiteral("installed:")); } QString PackageKitResource::section() { return QString(); } -AbstractResource::State PackageKitResource::state() +AbstractResource::State PackageKitResource::state() const { if (backend()->isPackageNameUpgradeable(this)) return Upgradeable; 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 @@ -44,7 +44,7 @@ int size() override; QUrl homepage() override; QStringList categories() override; - AbstractResource::State state() override; + AbstractResource::State state() const override; QVariant icon() const override; QString comment() override; QString name() 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 @@ -136,7 +136,7 @@ return QStringLiteral("snap"); } -AbstractResource::State SnapResource::state() +AbstractResource::State SnapResource::state() const { return m_state; } diff --git a/libdiscover/resources/AbstractResource.h b/libdiscover/resources/AbstractResource.h --- a/libdiscover/resources/AbstractResource.h +++ b/libdiscover/resources/AbstractResource.h @@ -122,7 +122,7 @@ ///executes the resource, if applies. Q_SCRIPTABLE virtual void invokeApplication() const = 0; - virtual State state() = 0; + virtual State state() const = 0; virtual QStringList categories() = 0; ///@returns a URL that points to the content diff --git a/libdiscover/resources/AbstractResource.cpp b/libdiscover/resources/AbstractResource.cpp --- a/libdiscover/resources/AbstractResource.cpp +++ b/libdiscover/resources/AbstractResource.cpp @@ -223,5 +223,6 @@ QString AbstractResource::displayOrigin() const { - return i18nc("origin (backend name)", "%1 (%2)", origin(), backend()->displayName()); + const QString version = state() >= Installed ? installedVersion() : availableVersion(); + return i18nc("version from source (backend)", "%1 from %2 (%3)", version, origin(), backend()->displayName()); }