LCOV - code coverage report
Current view: top level - src/utilities - UnreadCountReader.cpp (source / functions) Coverage Total Hit
Test: coverage.info.cleaned Lines: 18.0 % 61 11
Test Date: 2026-03-23 10:19:47 Functions: 33.3 % 6 2

            Line data    Source code
       1              : #include "UnreadCountReader.h"
       2              : #include "FangLogging.h"
       3              : #include "ErrorHandling.h"
       4              : 
       5            0 : UnreadCountReader::UnreadCountReader()
       6              : {
       7            0 : }
       8              : 
       9            4 : void UnreadCountReader::update(QSqlDatabase db, FeedItem *feed)
      10              : {
      11            4 :     if (feed->isSpecialFeed()) {
      12            0 :         switch (feed->getDbID()) {
      13            0 :         case FEED_ID_ALLNEWS:
      14            0 :             feed->setUnreadCount(forAllNews(db));
      15            0 :             break;
      16              : 
      17            0 :         case FEED_ID_PINNED:
      18            0 :             feed->setUnreadCount(forPinned(db));
      19            0 :             break;
      20              : 
      21            0 :         case FEED_ID_SEARCH:
      22              :             // Nothing to do, search doesn't support read/unread or bookmarks.
      23            0 :             break;
      24              : 
      25            0 :         default:
      26            0 :             FANG_UNREACHABLE("UnreadCountReader: Invalid special feed type");
      27              :             break;
      28              :         }
      29            0 :         return;
      30              :     }
      31              : 
      32              :     // All other feed types.
      33            4 :     if (feed->isFolder()) {
      34            4 :         feed->setUnreadCount(forFolder(db, feed->getDbID()));
      35              :     } else {
      36            0 :         feed->setUnreadCount(forFeed(db, feed->getDbID()));
      37              :     }
      38              : }
      39              : 
      40            0 : qint32 UnreadCountReader::forAllNews(QSqlDatabase db)
      41              : {
      42            0 :     QSqlQuery query(db);
      43            0 :     query.prepare("SELECT count(id) FROM NewsItemTable N where id > "
      44              :                   "(SELECT bookmark_id from FeedItemTable WHERE id = N.feed_id)");
      45              :     
      46            0 :     if (!query.exec() || !query.next()) {
      47            0 :        qCDebug(logUtility) << "Could not update unread count for all news feed";
      48            0 :        qCDebug(logUtility) << query.lastError();
      49              :        
      50            0 :        return -1;
      51              :     }
      52              :     
      53            0 :     int ret = query.value(0).toInt();
      54            0 :     return ret;
      55            0 : }
      56              : 
      57            0 : qint32 UnreadCountReader::forPinned(QSqlDatabase db)
      58              : {
      59            0 :     QSqlQuery query(db);
      60            0 :     query.prepare("SELECT count(id) FROM NewsItemTable WHERE pinned");
      61              : 
      62            0 :     if (!query.exec() || !query.next()) {
      63            0 :        qCDebug(logUtility) << "Could not update unread count for pinned news feed";
      64            0 :        qCDebug(logUtility) << query.lastError();
      65              : 
      66            0 :        return -1;
      67              :     }
      68              : 
      69            0 :     int ret = query.value(0).toInt();
      70              :     //qCDebug(logUtility) << "Unread count for pinned: " << ret;
      71            0 :     return ret;
      72            0 : }
      73              : 
      74            4 : qint32 UnreadCountReader::forFolder(QSqlDatabase db, qint64 folderID)
      75              : {
      76            4 :     QSqlQuery query(db);
      77            4 :     query.prepare("SELECT count(id) FROM NewsItemTable N WHERE "
      78              :                   "(SELECT parent_folder FROM FeedItemTable WHERE id = N.feed_id) = :folder_id "
      79              :                   "AND id > "
      80              :                   "(SELECT bookmark_id from FeedItemTable WHERE id = N.feed_id)");
      81            4 :     query.bindValue(":folder_id", folderID);
      82              : 
      83            4 :     if (!query.exec() || !query.next()) {
      84            0 :        qCDebug(logUtility) << "Could not update unread count for folder";
      85            0 :        qCDebug(logUtility) << query.lastError();
      86              : 
      87            0 :        return -1;
      88              :     }
      89              : 
      90            4 :     return query.value(0).toInt();;
      91            4 : }
      92              : 
      93            0 : qint32 UnreadCountReader::forFeed(QSqlDatabase db, quint64 id)
      94              : {
      95            0 :     QSqlQuery query(db);
      96            0 :     query.prepare("SELECT count(id) FROM NewsItemTable WHERE feed_id = :id1 AND "
      97              :                   "id > (SELECT bookmark_id FROM FeedItemTable WHERE id = :id2)");
      98            0 :     query.bindValue(":id1", id);
      99            0 :     query.bindValue(":id2", id);
     100              :     
     101            0 :     if (!query.exec() || !query.next()) {
     102            0 :        qCDebug(logUtility) << "Could not update unread count for feed id: " << id;
     103            0 :        qCDebug(logUtility) << query.lastError();
     104              :        
     105            0 :        return -1;
     106              :     }
     107              :     
     108            0 :     int ret = query.value(0).toInt();
     109            0 :     return ret;
     110            0 : }
        

Generated by: LCOV version 2.0-1