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"