Fixed a bug on news loading.

Leonardo Robol [2011-10-23 16:27]
Fixed a bug on news loading.
Filename
feedpoller.cpp
diff --git a/feedpoller.cpp b/feedpoller.cpp
index 94f40a5..5c2c032 100644
--- a/feedpoller.cpp
+++ b/feedpoller.cpp
@@ -64,6 +64,8 @@ FeedPoller::stopPolling ()
 void
 FeedPoller::queueWork(const QModelIndex &index)
 {
+    if (index.internalId() < FEEDMODEL_MAX_CATEGORIES)
+        return;
     workQueue->append(index);
 }

@@ -76,6 +78,19 @@ FeedPoller::networkManagerReplyFinished(QNetworkReply *reply)
     QDomDocument doc;
     if (doc.setContent(rssContent->value(nowLoading)))
     {
+        // Try to catch other news_feed with the same link, so preload all of them.
+        QSqlQuery query(parser->db);
+        query.prepare ("SELECT link from news WHERE feed=:feed");
+        query.bindValue("feed", nowLoading - FEEDMODEL_MAX_CATEGORIES);
+        if (!query.exec ())
+            return;
+        QStringList links;
+        query.first();
+        do
+        {
+            links.append(query.value(0).toString());
+        } while (query.next());
+
         QDomElement doc_el = doc.documentElement();
         QDomNodeList items = doc_el.elementsByTagName("item");

@@ -94,27 +109,19 @@ FeedPoller::networkManagerReplyFinished(QNetworkReply *reply)
             // QString guid = element.elementsByTagName("guid").item(0).firstChild().nodeValue();
             // QString pubDate = element.elementsByTagName("pubDate").item(0).firstChild().nodeValue();

-            // Try to catch other news_feed with the same link
-            QSqlQuery query(parser->db);
-            query.prepare ("SELECT id from news WHERE feed=:feed AND link=:link;");
-            query.bindValue("feed", nowLoading);
-            query.bindValue("link", link);
-            if (query.exec())
+            if (!links.contains(link))
             {
-                if (!query.first())
-                {
-                    // That means that no results were found, so let's insert this one.
-                    QSqlRecord record = parser->record();
-                    record.setValue("time", 0);
-                    record.setValue("read", 0);
-                    record.setValue("title", title);
-                    record.setValue("link", link);
-                    record.setValue("description", description);
-                    record.setValue("feed", nowLoading - FEEDMODEL_MAX_CATEGORIES);
-
-                    if (!parser->insertRecord(-1, record))
-                        qDebug () << "Error inserting record";
-                }
+                // That means that no results were found, so let's insert this one.
+                QSqlRecord record = parser->record();
+                record.setValue("time", 0);
+                record.setValue("read", 0);
+                record.setValue("title", title);
+                record.setValue("link", link);
+                record.setValue("description", description);
+                record.setValue("feed", nowLoading - FEEDMODEL_MAX_CATEGORIES);
+
+                if (!parser->insertRecord(-1, record))
+                    qDebug () << "Error inserting record";
             }
         }
     }
ViewGit