diff --git a/libdiscover/backends/KNSBackend/KNSResource.cpp b/libdiscover/backends/KNSBackend/KNSResource.cpp index 416b92b5..f2b3dc99 100644 --- a/libdiscover/backends/KNSBackend/KNSResource.cpp +++ b/libdiscover/backends/KNSBackend/KNSResource.cpp @@ -1,247 +1,251 @@ /*************************************************************************** * Copyright © 2012 Aleix Pol Gonzalez * * * * 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 2 of * * the License or (at your option) version 3 or any later version * * accepted by the membership of KDE e.V. (or its successor approved * * by the membership of KDE e.V.), which shall act as a proxy * * defined in Section 14 of version 3 of the license. * * * * This 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. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * ***************************************************************************/ #include "KNSResource.h" #include "KNSBackend.h" #include #include #include #include #include #include KNSResource::KNSResource(const KNSCore::EntryInternal& entry, QStringList categories, KNSBackend* parent) : AbstractResource(parent) , m_categories(std::move(categories)) , m_entry(entry) , m_lastStatus(entry.status()) { connect(this, &KNSResource::stateChanged, parent, &KNSBackend::updatesCountChanged); } KNSResource::~KNSResource() = default; AbstractResource::State KNSResource::state() { switch(m_entry.status()) { case KNS3::Entry::Invalid: return Broken; case KNS3::Entry::Downloadable: return None; case KNS3::Entry::Installed: return Installed; case KNS3::Entry::Updateable: return Upgradeable; case KNS3::Entry::Deleted: case KNS3::Entry::Installing: case KNS3::Entry::Updating: return None; } return None; } KNSBackend * KNSResource::knsBackend() const { return qobject_cast(parent()); } QVariant KNSResource::icon() const { const QString thumbnail = m_entry.previewUrl(KNSCore::EntryInternal::PreviewSmall1); return thumbnail.isEmpty() ? knsBackend()->iconName() : m_entry.previewUrl(KNSCore::EntryInternal::PreviewSmall1); } QString KNSResource::comment() { QString ret = m_entry.shortSummary(); if(ret.isEmpty()) { ret = m_entry.summary(); int newLine = ret.indexOf(QLatin1Char('\n')); if(newLine>0) { ret=ret.left(newLine); } ret = ret.replace(QRegularExpression(QStringLiteral("\\[/?[a-z]*\\]")), QString()); ret = ret.remove(QRegularExpression(QStringLiteral("<[^>]*>"))); } return ret; } QString KNSResource::longDescription() { QString ret = m_entry.summary(); if (m_entry.shortSummary().isEmpty()) { const int newLine = ret.indexOf(QLatin1Char('\n')); if (newLine<0) ret.clear(); else ret = ret.mid(newLine+1).trimmed(); } ret = ret.replace(QLatin1Char('\r'), QString()); ret = ret.replace(QStringLiteral("[li]"), QStringLiteral("\n* ")); ret = ret.replace(QRegularExpression(QStringLiteral("\\[/?[a-z]*\\]")), QString()); return ret; } QString KNSResource::name() const { return m_entry.name(); } QString KNSResource::packageName() const { return m_entry.uniqueId(); } QStringList KNSResource::categories() { return m_categories; } QUrl KNSResource::homepage() { return m_entry.homepage(); } void KNSResource::setEntry(const KNSCore::EntryInternal& entry) { const bool diff = entry.status() != m_lastStatus; m_entry = entry; if (diff) { m_lastStatus = entry.status(); Q_EMIT stateChanged(); } } KNSCore::EntryInternal KNSResource::entry() const { return m_entry; } QString KNSResource::license() { return m_entry.license(); } int KNSResource::size() { const auto downloadInfo = m_entry.downloadLinkInformationList(); return downloadInfo.isEmpty() ? 0 : downloadInfo.at(0).size; } QString KNSResource::installedVersion() const { return m_entry.version(); } QString KNSResource::availableVersion() const { return !m_entry.updateVersion().isEmpty() ? m_entry.updateVersion() : m_entry.version(); } QString KNSResource::origin() const { return m_entry.providerId(); } QString KNSResource::section() { return m_entry.category(); } static void appendIfValid(QList& list, const QUrl &value, const QUrl &fallback = {}) { if (!list.contains(value)) { if (value.isValid() && !value.isEmpty()) list << value; else if (!fallback.isEmpty()) appendIfValid(list, fallback); } } void KNSResource::fetchScreenshots() { QList preview; appendIfValid(preview, QUrl(m_entry.previewUrl(KNSCore::EntryInternal::PreviewSmall1))); appendIfValid(preview, QUrl(m_entry.previewUrl(KNSCore::EntryInternal::PreviewSmall2))); appendIfValid(preview, QUrl(m_entry.previewUrl(KNSCore::EntryInternal::PreviewSmall3))); QList screenshots; appendIfValid(screenshots, QUrl(m_entry.previewUrl(KNSCore::EntryInternal::PreviewBig1)), QUrl(m_entry.previewUrl(KNSCore::EntryInternal::PreviewSmall1))); appendIfValid(screenshots, QUrl(m_entry.previewUrl(KNSCore::EntryInternal::PreviewBig2)), QUrl(m_entry.previewUrl(KNSCore::EntryInternal::PreviewSmall2))); appendIfValid(screenshots, QUrl(m_entry.previewUrl(KNSCore::EntryInternal::PreviewBig3)), QUrl(m_entry.previewUrl(KNSCore::EntryInternal::PreviewSmall3))); emit screenshotsFetched(preview, screenshots); } void KNSResource::fetchChangelog() { emit changelogFetched(m_entry.changelog()); } QStringList KNSResource::extends() const { return knsBackend()->extends(); } QStringList KNSResource::executables() const { if (knsBackend()->engine()->hasAdoptionCommand()) return {knsBackend()->engine()->adoptionCommand(m_entry)}; else return {}; } QUrl KNSResource::url() const { return QUrl(QStringLiteral("kns://")+knsBackend()->name() + QLatin1Char('/') + QUrl(m_entry.providerId()).host() + QLatin1Char('/') + m_entry.uniqueId()); } void KNSResource::invokeApplication() const { QStringList exes = executables(); if(!exes.isEmpty()) { const QString exe = exes.constFirst(); auto args = KShell::splitArgs(exe); QProcess::startDetached(args.takeFirst(), args); } else { qWarning() << "cannot execute" << packageName(); } } QString KNSResource::executeLabel() const { return i18n("Use"); } QDate KNSResource::releaseDate() const { return m_entry.updateReleaseDate().isNull() ? m_entry.releaseDate() : m_entry.updateReleaseDate(); } QVector KNSResource::linkIds() const { QVector ids; for(auto e : m_entry.downloadLinkInformationList()) { if (e.isDownloadtypeLink) ids << e.id; } return ids; } +QUrl KNSResource::donationURL() +{ + return QUrl(m_entry.donationLink()); +} diff --git a/libdiscover/backends/KNSBackend/KNSResource.h b/libdiscover/backends/KNSBackend/KNSResource.h index 4aa9035c..73de50d4 100644 --- a/libdiscover/backends/KNSBackend/KNSResource.h +++ b/libdiscover/backends/KNSBackend/KNSResource.h @@ -1,78 +1,79 @@ /*************************************************************************** * Copyright © 2012 Aleix Pol Gonzalez * * * * 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 2 of * * the License or (at your option) version 3 or any later version * * accepted by the membership of KDE e.V. (or its successor approved * * by the membership of KDE e.V.), which shall act as a proxy * * defined in Section 14 of version 3 of the license. * * * * This 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. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * ***************************************************************************/ #ifndef KNSRESOURCE_H #define KNSRESOURCE_H #include #include #include #include "discovercommon_export.h" class KNSBackend; class DISCOVERCOMMON_EXPORT KNSResource : public AbstractResource { Q_OBJECT public: explicit KNSResource(const KNSCore::EntryInternal & c, QStringList categories, KNSBackend* parent); ~KNSResource() override; AbstractResource::State state() override; QVariant icon() const override; QString comment() override; QString name() const override; QString packageName() const override; QStringList categories() override; QUrl homepage() override; QString license() override; QString longDescription() override; QList addonsInformation() override { return QList(); } QString availableVersion() const override; QString installedVersion() const override; QString origin() const override; QString section() override; void fetchScreenshots() override; int size() override; void fetchChangelog() override; QStringList extends() const override; KNSBackend* knsBackend() const; void setEntry(const KNSCore::EntryInternal& entry); KNSCore::EntryInternal entry() const; bool canExecute() const override { return !executables().isEmpty(); } QStringList executables() const; void invokeApplication() const override; QUrl url() const override; QString executeLabel() const override; QString sourceIcon() const override { return QStringLiteral("get-hot-new-stuff"); } QDate releaseDate() const override; QVector linkIds() const; + QUrl donationURL() override; private: const QStringList m_categories; KNSCore::EntryInternal m_entry; KNS3::Entry::Status m_lastStatus; }; #endif // KNSRESOURCE_H