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 : }
|