LCOV - code coverage report
Current view: top level - src/models - FeedItem.cpp (source / functions) Coverage Total Hit
Test: coverage.info.cleaned Lines: 93.8 % 225 211
Test Date: 2026-03-23 10:19:47 Functions: 92.3 % 26 24

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

Generated by: LCOV version 2.0-1