LCOV - code coverage report
Current view: top level - src/models - FeedItem.cpp (source / functions) Coverage Total Hit
Test: coverage.info.cleaned Lines: 97.1 % 208 202
Test Date: 2026-01-27 22:31:25 Functions: 100.0 % 24 24

            Line data    Source code
       1              : #include "NewsItem.h"
       2              : #include "NewsList.h"
       3              : #include "FeedItem.h"
       4              : 
       5              : #include <QDebug>
       6              : 
       7           36 : FeedItem::FeedItem(QObject *parent) :
       8              :     ListItem(parent),
       9           36 :     _id(0),
      10           36 :     ordinal(-1),
      11           36 :     title(""),
      12           36 :     subtitle(""),
      13           36 :     lastUpdated(),
      14           36 :     minutesToUpdate(0),
      15           36 :     url(),
      16           36 :     siteURL(),
      17           36 :     imageURL(),
      18           36 :     newsList(),
      19           36 :     isUpdating(false),
      20           36 :     unreadCount(0),
      21           36 :     _bookmarkID(-1),
      22           36 :     dropTarget("none"),
      23           36 :     _errorFlag(false),
      24           36 :     isSelected(false),
      25           36 :     lastIconUpdate(),
      26           36 :     firstNewsID(-1),
      27           36 :     _parentFolder(-1),
      28           72 :     _folderOpen(true)
      29              :     
      30              : {
      31           36 : }
      32              : 
      33           72 : FeedItem::FeedItem(qint64 id, const qint32 ordinal, const QString &title, const QString &subtitle,
      34              :                    const QDateTime &lastUpdated, quint32 minutesToUpdate, const QUrl &url,
      35              :                    const QUrl& siteURL, const QString& userURL, const QUrl &imageURL,
      36           72 :                    const QDateTime& lastIconUpdate, qint64 parentFolder, bool folderOpen, QObject* parent) :
      37              :     ListItem(parent),
      38           72 :     _id(id),
      39           72 :     ordinal(ordinal),
      40           72 :     title(title),
      41           72 :     subtitle(subtitle),
      42           72 :     lastUpdated(lastUpdated),
      43           72 :     minutesToUpdate(minutesToUpdate),
      44           72 :     url(url),
      45           72 :     siteURL(siteURL),
      46           72 :     userURL(userURL),
      47           72 :     imageURL(imageURL),
      48           72 :     newsList(),
      49           72 :     isUpdating(false),
      50           72 :     unreadCount(0),
      51           72 :     _bookmarkID(-1),
      52           72 :     dropTarget("none"),
      53           72 :     _errorFlag(false),
      54           72 :     isSelected(false),
      55           72 :     lastIconUpdate(lastIconUpdate),
      56           72 :     firstNewsID(-1),
      57           72 :     _parentFolder(parentFolder),
      58           72 :     _folderOpen(folderOpen)
      59              : {
      60           72 : }
      61              : 
      62          178 : FeedItem::~FeedItem()
      63              : {
      64              :     //qDebug() << "Feed destroyed " << title;
      65          178 : }
      66              : 
      67           17 : QHash<int, QByteArray> FeedItem::roleNames() const
      68              : {
      69           17 :     QHash<int, QByteArray> names;
      70           17 :     names[TitleRole] = "title";
      71           17 :     names[SubtitleRole] = "subtitle";
      72           17 :     names[LastUpdatedRole] = "lastUpdated";
      73           17 :     names[MinutesToUpdateRole] = "minutesToUpdate";
      74           17 :     names[UrlRole] = "url";
      75           17 :     names[SiteURLRole] = "siteURL";
      76           17 :     names[ImageURLRole] = "imageURL";
      77           17 :     names[IsUpdatingRole] = "isUpdating";
      78           17 :     names[SelfRole] = "self";
      79           17 :     names[UnreadCountRole] = "unreadCount";
      80           17 :     names[DropTargetRole] = "dropTarget";
      81           17 :     names[ErrorFlagRole] = "errorFlag";
      82           17 :     names[IsSelectedRole] = "isSelected";
      83           17 :     names[IsSpecialFeedRole] = "isSpecialFeed";
      84           17 :     names[IsFolderRole] = "isFolder";
      85           17 :     names[ParentFolderRole] = "parentFolder";
      86           17 :     names[FolderOpenRole] = "folderOpen";
      87           17 :     names[BookmarksEnabledRole] = "bookmarksEnabled";
      88           17 :     names[UIDRole] = "uid";
      89           17 :     return names;
      90            0 : }
      91              : 
      92           22 : QVariant FeedItem::data(int role) const
      93              : {
      94           22 :     switch(role) {
      95            1 :         case TitleRole:
      96            1 :             return getTitle();
      97            1 :         case SubtitleRole:
      98            1 :             return getSubtitle();
      99            1 :         case LastUpdatedRole:
     100            1 :             return getLastUpdated();
     101            1 :         case MinutesToUpdateRole:
     102            1 :             return getMinutesToUpdate();
     103            1 :         case UrlRole:
     104            1 :             return getURL();
     105            1 :         case SiteURLRole:
     106            1 :             return getSiteURL();
     107            1 :         case ImageURLRole:
     108            1 :             return getImageURL();
     109            1 :         case IsUpdatingRole:
     110            1 :             return getIsUpdating();
     111            1 :         case SelfRole:
     112            1 :             return QVariant::fromValue(getSelf());
     113            1 :         case UnreadCountRole:
     114            1 :             return getUnreadCount();
     115            1 :         case DropTargetRole:
     116            1 :             return getDropTarget();
     117            1 :         case ErrorFlagRole:
     118            1 :             return getErrorFlag();
     119            1 :         case IsSelectedRole:
     120            1 :             return getIsSelected();
     121            1 :         case IsSpecialFeedRole:
     122            1 :             return isSpecialFeed();
     123            1 :         case IsFolderRole:
     124            1 :             return isFolder();
     125            1 :         case ParentFolderRole:
     126            1 :             return QVariant::fromValue(_parentFolder);
     127            4 :         case FolderOpenRole:
     128            4 :             return QVariant::fromValue(_folderOpen);
     129            1 :         case BookmarksEnabledRole:
     130            1 :             return bookmarksEnabled();
     131            1 :         case UIDRole:
     132            1 :             return getDbID();
     133            0 :         default:
     134            0 :             return QVariant();
     135              :     }
     136              : }
     137              : 
     138            5 : bool FeedItem::setData(const QVariant &value, int role)
     139              : {
     140            5 :     switch(role) {
     141            1 :     case DropTargetRole:
     142            1 :         setDropTarget(value.toString());
     143            1 :         return true;
     144            1 :     case IsSelectedRole:
     145            1 :         setIsSelected(value.toBool());
     146            1 :         return true;
     147            0 :     case IsFolderRole:
     148            0 :         setIsFolder(value.toBool());
     149            0 :         return true;
     150            1 :     case ParentFolderRole:
     151            1 :         setParentFolder(value.toLongLong());
     152            1 :         return true;
     153            1 :     case FolderOpenRole:
     154            1 :         setFolderOpen(value.toBool());
     155            1 :         return true;
     156              :     }
     157              :     
     158            1 :     return false;
     159              : }
     160              : 
     161            1 : Qt::ItemFlags FeedItem::flags() const
     162              : {
     163            1 :     return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable;
     164              : }
     165              : 
     166            3 : bool FeedItem::operator<(const FeedItem& rhs) {
     167            3 :     return ordinal < rhs.getOrdinal();
     168              : }
     169              : 
     170              : 
     171           39 : void FeedItem::setIsUpdating(bool isUpdating)
     172              : {
     173           39 :     this->isUpdating = isUpdating;
     174           39 :     emit dataChanged();
     175           39 : }
     176              : 
     177            2 : void FeedItem::setImageURL(const QUrl &url)
     178              : {
     179            2 :     if (imageURL == url) {
     180            1 :         return;
     181              :     }
     182              :     
     183            1 :     imageURL = url;
     184            1 :     emit dataChanged();
     185              : }
     186              : 
     187            2 : void FeedItem::setTitle(const QString &newTitle)
     188              : {
     189            2 :     if (title == newTitle) {
     190            1 :         return;
     191              :     }
     192              :     
     193            1 :     title = newTitle;
     194            1 :     emit titleChanged();
     195            1 :     emit dataChanged();
     196              : }
     197              : 
     198            3 : void FeedItem::setDropTarget(const QString& newDropTarget)
     199              : {
     200            3 :     if (newDropTarget == dropTarget) {
     201            1 :         return;
     202              :     }
     203              :     
     204            2 :     dropTarget = newDropTarget;
     205            2 :     emit dataChanged();
     206              : }
     207              : 
     208           19 : void FeedItem::setIsSelected(bool s)
     209              : {
     210           19 :     if (isSelected == s) {
     211            1 :         return;
     212              :     }
     213              :     
     214           18 :     isSelected = s;
     215           18 :     emit dataChanged();
     216              : }
     217              : 
     218            2 : void FeedItem::setParentFolder(qint64 parentFolder)
     219              : {
     220            2 :     _parentFolder = parentFolder;
     221            2 :     emit dataChanged();
     222            2 : }
     223              : 
     224            2 : void FeedItem::setFolderOpen(bool folderOpen)
     225              : {
     226            2 :     _folderOpen = folderOpen;
     227            2 :     emit dataChanged();
     228            2 : }
     229              : 
     230            1 : void FeedItem::clearNews()
     231              : {
     232            1 :     newsList.clear();
     233            1 : }
     234              : 
     235           17 : bool FeedItem::canBookmark(qint64 proposedBookmarkID, bool allowBackward)
     236              : {
     237              :     // What is this? I don't even.
     238           17 :     if (proposedBookmarkID < -1) {
     239            3 :         return false;
     240              :     }
     241              :     
     242              :     // Given no current bookmark, anything will do.
     243           14 :     if (_bookmarkID < 0) {
     244            4 :         return true;
     245              :     }
     246              :     
     247              :     // That's a no-op for you, young man.
     248           10 :     if (_bookmarkID == proposedBookmarkID) {
     249            2 :         return false;
     250              :     }
     251              :     
     252              :     // Sure, whatever you want.
     253            8 :     if (allowBackward) {
     254            4 :         return true;
     255              :     }
     256              : 
     257              :     // We asked SQLite to always increase our IDs, remember.
     258            4 :     return proposedBookmarkID > _bookmarkID;
     259              : }
     260              : 
     261            5 : void FeedItem::setBookmark(qint64 toBookmarkID)
     262              : {
     263            5 :     qDebug() << "FeedItem::setBookmark to " << toBookmarkID;
     264            5 :     if (toBookmarkID == _bookmarkID) {
     265            1 :         return; // Nothing to do.
     266              :     }
     267              :     
     268            4 :     _bookmarkID = toBookmarkID;
     269            4 :     emit dataChanged();
     270              : }
     271              : 
     272            2 : void FeedItem::setUnreadCount(qint32 unreadCount)
     273              : {
     274            2 :     if (this->unreadCount == unreadCount) {
     275            1 :         return;
     276              :     }
     277              :     
     278            1 :     this->unreadCount = unreadCount;
     279            1 :     emit dataChanged();
     280            1 :     emit unreadCountChanged(unreadCount);
     281              : }
     282              : 
     283            1 : void FeedItem::setOrdinal(int newOrdinal)
     284              : {
     285            1 :     ordinal = newOrdinal;
     286            1 : }
     287              : 
     288            5 : void FeedItem::setErrorFlag(bool errorFlag)
     289              : {
     290            5 :     if (_errorFlag == errorFlag) {
     291            1 :         return;
     292              :     }
     293              :     
     294            4 :     _errorFlag = errorFlag;
     295            4 :     emit dataChanged();
     296              : }
     297              : 
     298           37 : void FeedItem::setURL(QUrl url)
     299              : {
     300           37 :     if (this->url == url) {
     301            1 :         return;
     302              :     }
     303              :     
     304           36 :     this->url = url;
     305           36 :     emit dataChanged();
     306              : }
     307              : 
     308            2 : bool FeedItem::bookmarksEnabled() const
     309              : {
     310            2 :     return true;
     311              : }
        

Generated by: LCOV version 2.0-1