LCOV - code coverage report
Current view: top level - src/models - NewsList.cpp (source / functions) Coverage Total Hit
Test: coverage.info.cleaned Lines: 89.7 % 58 52
Test Date: 2026-01-27 22:31:25 Functions: 100.0 % 16 16

            Line data    Source code
       1              : #include "NewsItem.h"
       2              : #include "NewsList.h"
       3              : #include "../utilities/ErrorHandling.h"
       4              : 
       5              : 
       6          130 : NewsList::NewsList(QObject *parent)
       7          130 :     : FangObject{parent}
       8          130 : {}
       9              : 
      10          133 : NewsList::~NewsList()
      11              : {
      12          111 :     clear();
      13          133 : }
      14              : 
      15          113 : void NewsList::clear()
      16              : {
      17              :     // Delete each and every news item.
      18          170 :     while(list.size() > 0) {
      19           57 :         list.takeFirst()->deleteLater();
      20              :     }
      21              : 
      22          113 :     set.clear();
      23          113 : }
      24              : 
      25           18 : qsizetype NewsList::size() const
      26              : {
      27           18 :     return list.size();
      28              : }
      29              : 
      30            5 : bool NewsList::isEmpty() const
      31              : {
      32            5 :     return list.isEmpty();
      33              : }
      34              : 
      35            6 : NewsItem *NewsList::first() const
      36              : {
      37            6 :     return list.first();
      38              : }
      39              : 
      40            6 : NewsItem *NewsList::last() const
      41              : {
      42            6 :     return list.last();
      43              : }
      44              : 
      45            5 : NewsItem *NewsList::at(qsizetype i) const
      46              : {
      47            5 :     return list.at(i);
      48              : }
      49              : 
      50           25 : bool NewsList::contains(NewsItem* value) const
      51              : {
      52           25 :     return set.contains(value);
      53              : }
      54              : 
      55            4 : qsizetype NewsList::indexOf(const NewsItem *value, qsizetype from) const
      56              : {
      57            4 :     return list.indexOf(value, from);
      58              : }
      59              : 
      60           64 : void NewsList::append(NewsItem *value)
      61              : {
      62           64 :     if (set.contains(value)) {
      63            0 :         qCritical() << "NewsList::append: Attempting to add duplicate item with ID" << value->getDbID();
      64            0 :         return;
      65              :     }
      66              : 
      67           64 :     set.insert(value);
      68           64 :     list.append(value);
      69              : }
      70              : 
      71            4 : void NewsList::prepend(NewsItem *value)
      72              : {
      73            4 :     if (set.contains(value)) {
      74            0 :         qCritical() << "NewsList::prepend: Attempting to add duplicate item with ID" << value->getDbID();
      75            0 :         return;
      76              :     }
      77              : 
      78            4 :     set.insert(value);
      79            4 :     list.prepend(value);
      80              : }
      81              : 
      82            5 : void NewsList::removeAndDelete(bool fromStart, qsizetype numberToRemove)
      83              : {
      84              :     // Remove from list, free memory.
      85           16 :     for (qsizetype i = 0; i < numberToRemove; i++) {
      86           11 :         if (fromStart) {
      87            7 :             NewsItem* n = list.takeFirst();
      88            7 :             set.remove(n);
      89            7 :             n->deleteLater();
      90              :         } else {
      91            4 :             NewsItem* n = list.takeLast();
      92            4 :             set.remove(n);
      93            4 :             n->deleteLater();
      94              :         }
      95              :     }
      96            5 : }
      97              : 
      98            4 : NewsItem *NewsList::newsItemForID(const qint64 id) const
      99              : {
     100            4 :     if (id < 0) {
     101              :         // Invalid ID.
     102            0 :         qCritical() << "NewsList::newsItemForID: Invalid news ID" << id;
     103            0 :         return nullptr;
     104              :     }
     105              : 
     106            4 :     qsizetype index = indexForItemID(id);
     107            4 :     return index < 0 ? nullptr : list.at(index);
     108              : }
     109              : 
     110            8 : qsizetype NewsList::indexForItemID(const qint64 id) const
     111              : {
     112           16 :     for (qsizetype i = 0; i < list.count(); ++i) {
     113           14 :         if (list.at(i)->getDbID() == id) {
     114            6 :             return i;
     115              :         }
     116              :     }
     117              : 
     118            2 :     return -1;
     119              : }
        

Generated by: LCOV version 2.0-1