File indexing completed on 2024-04-21 03:56:23

0001 /*
0002     knewstuff3/provider.cpp
0003     SPDX-FileCopyrightText: 2002 Cornelius Schumacher <schumacher@kde.org>
0004     SPDX-FileCopyrightText: 2003-2007 Josef Spillner <spillner@kde.org>
0005     SPDX-FileCopyrightText: 2009 Jeremy Whiting <jpwhiting@kde.org>
0006     SPDX-FileCopyrightText: 2009 Frederik Gladhorn <gladhorn@kde.org>
0007 
0008     SPDX-License-Identifier: LGPL-2.1-or-later
0009 */
0010 
0011 #include "provider.h"
0012 
0013 #include "xmlloader_p.h"
0014 
0015 #include <KLocalizedString>
0016 
0017 #include <QTimer>
0018 
0019 namespace KNSCore
0020 {
0021 class ProviderPrivate
0022 {
0023 public:
0024     ProviderPrivate(Provider *qq)
0025         : q(qq)
0026     {
0027     }
0028     Provider *const q;
0029     QStringList tagFilter;
0030     QStringList downloadTagFilter;
0031 
0032     QTimer *basicsThrottle{nullptr};
0033     QString version;
0034     QUrl website;
0035     QUrl host;
0036     QString contactEmail;
0037     QString name;
0038     QUrl icon;
0039     bool supportsSsl{false};
0040     bool basicsGot{false};
0041 
0042     void updateOnFirstBasicsGet()
0043     {
0044         if (!basicsGot) {
0045             basicsGot = true;
0046             QTimer::singleShot(0, q, &Provider::loadBasics);
0047         }
0048     };
0049     void throttleBasics()
0050     {
0051         if (!basicsThrottle) {
0052             basicsThrottle = new QTimer(q);
0053             basicsThrottle->setInterval(0);
0054             basicsThrottle->setSingleShot(true);
0055             QObject::connect(basicsThrottle, &QTimer::timeout, q, &Provider::basicsLoaded);
0056         }
0057         basicsThrottle->start();
0058     }
0059 };
0060 
0061 QString Provider::SearchRequest::hashForRequest() const
0062 {
0063     return QString::number((int)sortMode) + QLatin1Char(',') + searchTerm + QLatin1Char(',') + categories.join(QLatin1Char('-')) + QLatin1Char(',')
0064         + QString::number(page) + QLatin1Char(',') + QString::number(pageSize);
0065 }
0066 
0067 Provider::Provider()
0068     : d(new ProviderPrivate(this))
0069 {
0070 }
0071 
0072 Provider::~Provider() = default;
0073 
0074 QString Provider::name() const
0075 {
0076     return d->name;
0077 }
0078 
0079 QUrl Provider::icon() const
0080 {
0081     return d->icon;
0082 }
0083 
0084 void Provider::setTagFilter(const QStringList &tagFilter)
0085 {
0086     d->tagFilter = tagFilter;
0087 }
0088 
0089 QStringList Provider::tagFilter() const
0090 {
0091     return d->tagFilter;
0092 }
0093 
0094 void Provider::setDownloadTagFilter(const QStringList &downloadTagFilter)
0095 {
0096     d->downloadTagFilter = downloadTagFilter;
0097 }
0098 
0099 QStringList Provider::downloadTagFilter() const
0100 {
0101     return d->downloadTagFilter;
0102 }
0103 
0104 QDebug operator<<(QDebug dbg, const Provider::SearchRequest &search)
0105 {
0106     QDebugStateSaver saver(dbg);
0107     dbg.nospace();
0108     dbg << "Provider::SearchRequest(";
0109     dbg << "searchTerm: " << search.searchTerm << ',';
0110     dbg << "categories: " << search.categories << ',';
0111     dbg << "filter: " << search.filter << ',';
0112     dbg << "page: " << search.page << ',';
0113     dbg << "pageSize: " << search.pageSize;
0114     dbg << ')';
0115     return dbg;
0116 }
0117 
0118 QString Provider::version() const
0119 {
0120     d->updateOnFirstBasicsGet();
0121     return d->version;
0122 }
0123 
0124 void Provider::setVersion(const QString &version)
0125 {
0126     if (d->version != version) {
0127         d->version = version;
0128         d->throttleBasics();
0129     }
0130 }
0131 
0132 QUrl Provider::website() const
0133 {
0134     d->updateOnFirstBasicsGet();
0135     return d->website;
0136 }
0137 
0138 void Provider::setWebsite(const QUrl &website)
0139 {
0140     if (d->website != website) {
0141         d->website = website;
0142         d->throttleBasics();
0143     }
0144 }
0145 
0146 QUrl Provider::host() const
0147 {
0148     d->updateOnFirstBasicsGet();
0149     return d->host;
0150 }
0151 
0152 void Provider::setHost(const QUrl &host)
0153 {
0154     if (d->host != host) {
0155         d->host = host;
0156         d->throttleBasics();
0157     }
0158 }
0159 
0160 QString Provider::contactEmail() const
0161 {
0162     d->updateOnFirstBasicsGet();
0163     return d->contactEmail;
0164 }
0165 
0166 void Provider::setContactEmail(const QString &contactEmail)
0167 {
0168     if (d->contactEmail != contactEmail) {
0169         d->contactEmail = contactEmail;
0170         d->throttleBasics();
0171     }
0172 }
0173 
0174 bool Provider::supportsSsl() const
0175 {
0176     d->updateOnFirstBasicsGet();
0177     return d->supportsSsl;
0178 }
0179 
0180 void Provider::setSupportsSsl(bool supportsSsl)
0181 {
0182     if (d->supportsSsl != supportsSsl) {
0183         d->supportsSsl = supportsSsl;
0184         d->throttleBasics();
0185     }
0186 }
0187 
0188 void Provider::setName(const QString &name)
0189 {
0190     d->name = name;
0191 }
0192 
0193 void Provider::setIcon(const QUrl &icon)
0194 {
0195     d->icon = icon;
0196 }
0197 }
0198 
0199 #include "moc_provider.cpp"