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