[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdelibs/knewstuff/knewstuff3
From:       Frederik Gladhorn <gladhorn () kde ! org>
Date:       2010-03-31 18:57:02
Message-ID: 20100331185702.3472EAC84E () svn ! kde ! org
[Download RAW message or body]

SVN commit 1109697 by gladhorn:

implement searching via downloadmanager


 M  +11 -0     core/engine.cpp  
 M  +3 -0      core/engine.h  
 M  +56 -10    downloadmanager.cpp  
 M  +25 -6     downloadmanager.h  


--- trunk/KDE/kdelibs/knewstuff/knewstuff3/core/engine.cpp #1109696:1109697
@@ -355,7 +355,18 @@
     }
 
     m_currentRequest.page++;
+    doRequest();
+}
 
+void Engine::requestData(int page, int pageSize)
+{
+    m_currentRequest.page = page;
+    m_currentRequest.pageSize = pageSize;
+    doRequest();
+}
+
+void Engine::doRequest()
+{
     foreach (const QSharedPointer<KNS3::Provider> &p, m_providers) {
         if (p->isInitialized()) {
             p->loadEntries(m_currentRequest);
--- trunk/KDE/kdelibs/knewstuff/knewstuff3/core/engine.h #1109696:1109697
@@ -108,6 +108,7 @@
     void setSearchTerm(const QString& searchString);
     void reloadEntries();
     void requestMoreData();
+    void requestData(int page, int pageSize);
 
     void checkForUpdates();
 
@@ -190,6 +191,8 @@
     void addProvider(QSharedPointer<KNS3::Provider> provider);
 
     void updateStatus();
+    
+    void doRequest();
 
     // If the provider is ready to be used
     bool m_initialized;
--- trunk/KDE/kdelibs/knewstuff/knewstuff3/downloadmanager.cpp #1109696:1109697
@@ -23,7 +23,6 @@
 
 #include "core/engine.h"
 
-
 namespace KNS3 {
 class DownloadManager::Private
 {
@@ -36,15 +35,24 @@
         , engine(new Engine)
         , isInitialized(false)
         , checkForUpdates(false)
+        , doSearch(false)
+        , page(0)
+        , pageSize(100)
     {}
     ~Private() { delete engine; }
     
     bool isInitialized;
     bool checkForUpdates;
-
+    bool doSearch;
+    
+    int page;
+    int pageSize;
+    
+    void init(const QString& configFile);
     void _k_slotProvidersLoaded();
     void _k_slotUpdatesLoaded(const KNS3::EntryInternal::List& entries);
     void _k_slotEntryStatusChanged(const KNS3::EntryInternal& entry);
+    void _k_slotEntriesLoaded(const KNS3::EntryInternal::List& entries);
 };
 }
 
@@ -56,22 +64,23 @@
 {
     KComponentData component = KGlobal::activeComponent();
     QString name = component.componentName();
-    init(name + ".knsrc");
+    d->init(name + ".knsrc");
 }
 
 DownloadManager::DownloadManager(const QString& configFile, QObject * parent)
         : QObject(parent)
         , d(new Private(this))
 {
-    init(configFile);
+    d->init(configFile);
 }
 
-void DownloadManager::init(const QString& configFile)
+void DownloadManager::Private::init(const QString& configFile)
 {
-    connect(d->engine, SIGNAL(signalProvidersLoaded()), this, \
                SLOT(_k_slotProvidersLoaded()));
-    connect(d->engine, \
SIGNAL(signalUpdateableEntriesLoaded(KNS3::EntryInternal::List)), this, \
                SLOT(_k_slotUpdatesLoaded(KNS3::EntryInternal::List)));
-    connect(d->engine, SIGNAL(signalEntryChanged(KNS3::EntryInternal)), this, \
                SLOT(_k_slotEntryStatusChanged(KNS3::EntryInternal)));
-    d->engine->init(configFile);
+    q->connect(engine, SIGNAL(signalProvidersLoaded()), q, \
SLOT(_k_slotProvidersLoaded())); +    q->connect(engine, \
SIGNAL(signalUpdateableEntriesLoaded(KNS3::EntryInternal::List)), q, \
SLOT(_k_slotEntriesLoaded(KNS3::EntryInternal::List))); +    q->connect(engine, \
SIGNAL(signalEntriesLoaded(KNS3::EntryInternal::List)), q, \
SLOT(_k_slotEntriesLoaded(KNS3::EntryInternal::List))); +    q->connect(engine, \
SIGNAL(signalEntryChanged(KNS3::EntryInternal)), q, \
SLOT(_k_slotEntryStatusChanged(KNS3::EntryInternal))); +    engine->init(configFile);
 }
 
 DownloadManager::~DownloadManager()
@@ -85,6 +94,8 @@
     isInitialized = true;
     if (checkForUpdates) {
         engine->checkForUpdates();
+    } else if (doSearch) {
+        engine->requestData(page, pageSize);
     }
 }
 
@@ -97,7 +108,7 @@
     }
 }
 
-void DownloadManager::Private::_k_slotUpdatesLoaded(const KNS3::EntryInternal::List& \
entries) +void DownloadManager::Private::_k_slotEntriesLoaded(const \
KNS3::EntryInternal::List& entries)  {
     KNS3::Entry::List result;
     foreach (const KNS3::EntryInternal& entry, entries) {
@@ -119,5 +130,40 @@
     }
 }
 
+void DownloadManager::search(int page, int pageSize)
+{
+    d->page = page;
+    d->pageSize = pageSize;
 
+    if (d->isInitialized) {
+        d->engine->requestData(page, pageSize);
+    } else {
+        d->doSearch = true;
+    }
+}
+
+void DownloadManager::setSearchOrder(DownloadManager::SortOrder order)
+{
+    switch (order) {
+        case Newest:
+            d->engine->setSortMode(Provider::Newest);
+            break;
+        case Rating:
+            d->engine->setSortMode(Provider::Rating);
+            break;
+        case Alphabetical:
+            d->engine->setSortMode(Provider::Alphabetical);
+            break;
+        case Downloads:
+            d->engine->setSortMode(Provider::Downloads);
+            break;
+    }
+}
+
+void DownloadManager::setSearchTerm(const QString& searchTerm)
+{
+    d->engine->setSearchTerm(searchTerm);
+}
+
+
 #include "downloadmanager.moc"
--- trunk/KDE/kdelibs/knewstuff/knewstuff3/downloadmanager.h #1109696:1109697
@@ -36,10 +36,16 @@
     Q_OBJECT
 
 public:
+    enum SortOrder {
+        Newest,
+        Alphabetical,
+        Rating,
+        Downloads
+    };
 
     /**
      * Create a DownloadManager
-     * It will try to find a appname.knsrc file with the configuration.
+     * It will try to find a appname.knsrc file (using KComponentData).
      * Appname is the name of your application as provided in the about data->
      *
      * @param parent the parent of the dialog
@@ -59,10 +65,10 @@
      */
     ~DownloadManager();
 
-    /*
+    /**
       Search for a list of entries. searchResult will be emitted with the requested \
                list.    
     */
-    //void search(const QStringList& categories = QStringList(), const QString& \
searchTerm = QString(), int page = 0, int pageSize = 100); +    void search(int page \
= 0, int pageSize = 100);  
     /**
       Check for available updates.
@@ -76,6 +82,21 @@
       */
     void installEntry(const KNS3::Entry& entry);
 
+    /**
+      Sets the search term to filter the results on the server.
+      Note that this function does not trigger a search. Use search after setting \
this. +      @param searchTerm
+      */
+    void setSearchTerm(const QString& searchTerm);
+    
+    /**
+      Set the sort order of the results. This depends on the server.
+      Note that this function does not trigger a search. Use search after setting \
this. +      @see SortOrder
+      @param order
+      */
+    void setSearchOrder(SortOrder order);
+    
 Q_SIGNALS:
     /**
       Returns the search result.
@@ -92,11 +113,9 @@
     void entryStatusChanged(const KNS3::Entry& entry);
 
 private:
-    void init(const QString& configFile);
-
     Q_PRIVATE_SLOT( d, void _k_slotProvidersLoaded() )
     Q_PRIVATE_SLOT( d, void _k_slotEntryStatusChanged(const KNS3::EntryInternal& \
                entry) )
-    Q_PRIVATE_SLOT( d, void _k_slotUpdatesLoaded(const KNS3::EntryInternal::List& \
entries) ) +    Q_PRIVATE_SLOT( d, void _k_slotEntriesLoaded(const \
KNS3::EntryInternal::List& entries) )  class Private;
     Private *const d;
     Q_DISABLE_COPY(DownloadManager)


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic