File indexing completed on 2024-03-24 15:36:50

0001 /*
0002     SPDX-FileCopyrightText: 2010 Frederik Gladhorn <gladhorn@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.1-or-later
0005 */
0006 
0007 #include "downloadmanager.h"
0008 
0009 #include <QCoreApplication>
0010 #include <knewstuff_debug.h>
0011 
0012 #include "core/engine.h"
0013 #include "entry_p.h"
0014 #include "ui/widgetquestionlistener.h"
0015 
0016 #if KNEWSTUFF_BUILD_DEPRECATED_SINCE(5, 29)
0017 namespace KNS3
0018 {
0019 class DownloadManagerPrivate
0020 {
0021 public:
0022     DownloadManager *const q;
0023     KNSCore::Engine *const engine;
0024 
0025     DownloadManagerPrivate(DownloadManager *qq)
0026         : q(qq)
0027         , engine(new KNSCore::Engine)
0028     {
0029     }
0030     ~DownloadManagerPrivate()
0031     {
0032         delete engine;
0033     }
0034 
0035     bool isInitialized = false;
0036     bool checkForUpdates = false;
0037     bool checkForInstalled = false;
0038     bool doSearch = false;
0039 
0040     int page = 0;
0041     int pageSize = 100;
0042 
0043     void init(const QString &configFile);
0044     void _k_slotProvidersLoaded();
0045     void _k_slotEngineError(const QString &error);
0046     void _k_slotUpdatesLoaded(const KNSCore::EntryInternal::List &entries);
0047     void _k_slotEntryStatusChanged(const KNSCore::EntryInternal &entry);
0048     void _k_slotEntriesLoaded(const KNSCore::EntryInternal::List &entries);
0049 };
0050 }
0051 
0052 using namespace KNS3;
0053 
0054 DownloadManager::DownloadManager(QObject *parent)
0055     : QObject(parent)
0056     , d(new DownloadManagerPrivate(this))
0057 {
0058     QString name = QCoreApplication::applicationName();
0059     d->init(name + QStringLiteral(".knsrc"));
0060 }
0061 
0062 DownloadManager::DownloadManager(const QString &configFile, QObject *parent)
0063     : QObject(parent)
0064     , d(new DownloadManagerPrivate(this))
0065 {
0066     d->init(configFile);
0067 }
0068 
0069 void DownloadManagerPrivate::init(const QString &configFile)
0070 {
0071     q->connect(engine, SIGNAL(signalProvidersLoaded()), q, SLOT(_k_slotProvidersLoaded()));
0072     q->connect(engine, SIGNAL(signalUpdateableEntriesLoaded(KNSCore::EntryInternal::List)), q, SLOT(_k_slotEntriesLoaded(KNSCore::EntryInternal::List)));
0073     q->connect(engine, SIGNAL(signalEntriesLoaded(KNSCore::EntryInternal::List)), q, SLOT(_k_slotEntriesLoaded(KNSCore::EntryInternal::List)));
0074     q->connect(engine, SIGNAL(signalEntryChanged(KNSCore::EntryInternal)), q, SLOT(_k_slotEntryStatusChanged(KNSCore::EntryInternal)));
0075     q->connect(engine, SIGNAL(signalError(QString)), q, SLOT(_k_slotEngineError(QString)));
0076     engine->init(configFile);
0077     WidgetQuestionListener::instance();
0078 }
0079 
0080 DownloadManager::~DownloadManager()
0081 {
0082     delete d;
0083 }
0084 
0085 void DownloadManagerPrivate::_k_slotEngineError(const QString &error)
0086 {
0087     qCWarning(KNEWSTUFF) << "engine error" << error;
0088 
0089     Q_EMIT q->errorFound(error);
0090 }
0091 
0092 void DownloadManagerPrivate::_k_slotProvidersLoaded()
0093 {
0094     qCDebug(KNEWSTUFF) << "providers loaded";
0095     isInitialized = true;
0096     if (checkForInstalled) {
0097         engine->checkForInstalled();
0098     } else if (checkForUpdates) {
0099         engine->checkForUpdates();
0100     } else if (doSearch) {
0101         engine->requestData(page, pageSize);
0102     }
0103 }
0104 
0105 void DownloadManager::checkForUpdates()
0106 {
0107     if (d->isInitialized) {
0108         d->engine->checkForUpdates();
0109     } else {
0110         d->checkForUpdates = true;
0111     }
0112 }
0113 
0114 void KNS3::DownloadManager::checkForInstalled()
0115 {
0116     if (d->isInitialized) {
0117         d->engine->checkForInstalled();
0118     } else {
0119         d->checkForInstalled = true;
0120     }
0121 }
0122 
0123 void DownloadManagerPrivate::_k_slotEntriesLoaded(const KNSCore::EntryInternal::List &entries)
0124 {
0125     KNS3::Entry::List result;
0126     result.reserve(entries.size());
0127     for (const KNSCore::EntryInternal &entry : entries) {
0128         result.append(EntryPrivate::fromInternal(&entry));
0129     }
0130     Q_EMIT q->searchResult(result);
0131 }
0132 
0133 void KNS3::DownloadManagerPrivate::_k_slotEntryStatusChanged(const KNSCore::EntryInternal &entry)
0134 {
0135     Q_EMIT q->entryStatusChanged(EntryPrivate::fromInternal(&entry));
0136 }
0137 
0138 void DownloadManager::installEntry(const KNS3::Entry &entry)
0139 {
0140     KNSCore::EntryInternal entryInternal = KNSCore::EntryInternal::fromEntry(entry);
0141     if (entryInternal.isValid()) {
0142         d->engine->install(entryInternal);
0143     }
0144 }
0145 
0146 void DownloadManager::uninstallEntry(const KNS3::Entry &entry)
0147 {
0148     KNSCore::EntryInternal entryInternal = KNSCore::EntryInternal::fromEntry(entry);
0149     if (entryInternal.isValid()) {
0150         d->engine->uninstall(entryInternal);
0151     }
0152 }
0153 
0154 void DownloadManager::search(int page, int pageSize)
0155 {
0156     d->page = page;
0157     d->pageSize = pageSize;
0158 
0159     if (d->isInitialized) {
0160         d->engine->requestData(page, pageSize);
0161     } else {
0162         d->doSearch = true;
0163     }
0164 }
0165 
0166 void DownloadManager::setSearchOrder(DownloadManager::SortOrder order)
0167 {
0168     switch (order) {
0169     case Newest:
0170         d->engine->setSortMode(KNSCore::Provider::Newest);
0171         break;
0172     case Rating:
0173         d->engine->setSortMode(KNSCore::Provider::Rating);
0174         break;
0175     case Alphabetical:
0176         d->engine->setSortMode(KNSCore::Provider::Alphabetical);
0177         break;
0178     case Downloads:
0179         d->engine->setSortMode(KNSCore::Provider::Downloads);
0180         break;
0181     }
0182 }
0183 
0184 void DownloadManager::setSearchTerm(const QString &searchTerm)
0185 {
0186     d->engine->setSearchTerm(searchTerm);
0187 }
0188 
0189 void KNS3::DownloadManager::fetchEntryById(const QString &id)
0190 {
0191     d->engine->fetchEntryById(id);
0192 }
0193 
0194 #include "moc_downloadmanager.cpp"
0195 #endif