Line data Source code
1 : #include "NewsItem.h"
2 : #include "NewsList.h"
3 : #include "FeedItem.h"
4 :
5 : #include "../utilities/FangLogging.h"
6 :
7 150 : FeedItem::FeedItem(QObject *parent) :
8 : ListItem(parent),
9 150 : _id(0),
10 150 : ordinal(-1),
11 150 : title(""),
12 150 : subtitle(""),
13 150 : lastUpdated(),
14 150 : minutesToUpdate(0),
15 150 : url(),
16 150 : siteURL(),
17 150 : imageURL(),
18 150 : newsList(),
19 150 : isUpdating(false),
20 150 : unreadCount(0),
21 150 : _bookmarkID(-1),
22 150 : dropTarget("none"),
23 150 : _errorFlag(false),
24 150 : isSelected(false),
25 150 : lastIconUpdate(),
26 150 : firstNewsID(-1),
27 150 : _parentFolder(-1),
28 150 : _folderOpen(true),
29 150 : _feedType(FeedTypeRSS),
30 150 : etag(),
31 450 : lastModified()
32 : {
33 150 : }
34 :
35 330 : 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 330 : FeedType feedType, QObject* parent) :
40 : ListItem(parent),
41 330 : _id(id),
42 330 : ordinal(ordinal),
43 330 : title(title),
44 330 : subtitle(subtitle),
45 330 : lastUpdated(lastUpdated),
46 330 : minutesToUpdate(minutesToUpdate),
47 330 : url(url),
48 330 : siteURL(siteURL),
49 330 : userURL(userURL),
50 330 : imageURL(imageURL),
51 330 : newsList(),
52 330 : isUpdating(false),
53 330 : unreadCount(0),
54 330 : _bookmarkID(-1),
55 330 : dropTarget("none"),
56 330 : _errorFlag(false),
57 330 : isSelected(false),
58 330 : lastIconUpdate(lastIconUpdate),
59 330 : firstNewsID(-1),
60 330 : _parentFolder(parentFolder),
61 330 : _folderOpen(folderOpen),
62 330 : _feedType(feedType),
63 330 : etag(),
64 660 : lastModified()
65 : {
66 330 : }
67 :
68 787 : FeedItem::~FeedItem()
69 : {
70 : //qDebug() << "Feed destroyed " << title;
71 787 : }
72 :
73 133 : QHash<int, QByteArray> FeedItem::roleNames() const
74 : {
75 133 : QHash<int, QByteArray> names;
76 133 : names[TitleRole] = "title";
77 133 : names[SubtitleRole] = "subtitle";
78 133 : names[LastUpdatedRole] = "lastUpdated";
79 133 : names[MinutesToUpdateRole] = "minutesToUpdate";
80 133 : names[UrlRole] = "url";
81 133 : names[SiteURLRole] = "siteURL";
82 133 : names[ImageURLRole] = "imageURL";
83 133 : names[IsUpdatingRole] = "isUpdating";
84 133 : names[SelfRole] = "self";
85 133 : names[UnreadCountRole] = "unreadCount";
86 133 : names[DropTargetRole] = "dropTarget";
87 133 : names[ErrorFlagRole] = "errorFlag";
88 133 : names[IsSelectedRole] = "isSelected";
89 133 : names[IsSpecialFeedRole] = "isSpecialFeed";
90 133 : names[IsFolderRole] = "isFolder";
91 133 : names[ParentFolderRole] = "parentFolder";
92 133 : names[FolderOpenRole] = "folderOpen";
93 133 : names[BookmarksEnabledRole] = "bookmarksEnabled";
94 133 : names[UIDRole] = "uid";
95 133 : names[IsSearchFeedRole] = "isSearchFeed";
96 133 : return names;
97 0 : }
98 :
99 69 : QVariant FeedItem::data(int role) const
100 : {
101 69 : switch(role) {
102 21 : case TitleRole:
103 21 : return getTitle();
104 2 : case SubtitleRole:
105 2 : return getSubtitle();
106 2 : case LastUpdatedRole:
107 2 : return getLastUpdated();
108 2 : case MinutesToUpdateRole:
109 2 : return getMinutesToUpdate();
110 2 : case UrlRole:
111 2 : return getURL();
112 2 : case SiteURLRole:
113 2 : return getSiteURL();
114 2 : case ImageURLRole:
115 2 : return getImageURL();
116 2 : case IsUpdatingRole:
117 2 : return getIsUpdating();
118 2 : case SelfRole:
119 2 : return QVariant::fromValue(getSelf());
120 2 : case UnreadCountRole:
121 2 : return getUnreadCount();
122 2 : case DropTargetRole:
123 2 : return getDropTarget();
124 2 : case ErrorFlagRole:
125 2 : return getErrorFlag();
126 2 : case IsSelectedRole:
127 2 : return getIsSelected();
128 2 : case IsSpecialFeedRole:
129 2 : return isSpecialFeed();
130 2 : case IsFolderRole:
131 2 : return isFolder();
132 2 : case ParentFolderRole:
133 2 : return QVariant::fromValue(_parentFolder);
134 9 : case FolderOpenRole:
135 9 : return QVariant::fromValue(_folderOpen);
136 2 : case BookmarksEnabledRole:
137 2 : return bookmarksEnabled();
138 3 : case UIDRole:
139 3 : return getDbID();
140 4 : case IsSearchFeedRole:
141 4 : return getDbID() == FEED_ID_SEARCH;
142 0 : default:
143 0 : return QVariant();
144 : }
145 : }
146 :
147 8 : bool FeedItem::setData(const QVariant &value, int role)
148 : {
149 8 : switch(role) {
150 4 : case DropTargetRole:
151 4 : setDropTarget(value.toString());
152 4 : 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 2 : Qt::ItemFlags FeedItem::flags() const
171 : {
172 2 : 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 17 : void FeedItem::setTitle(const QString &newTitle)
197 : {
198 17 : if (title == newTitle) {
199 14 : return;
200 : }
201 :
202 3 : title = newTitle;
203 3 : emit titleChanged();
204 3 : emit dataChanged();
205 : }
206 :
207 6 : void FeedItem::setDropTarget(const QString& newDropTarget)
208 : {
209 6 : if (newDropTarget == dropTarget) {
210 1 : return;
211 : }
212 :
213 5 : dropTarget = newDropTarget;
214 5 : 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 26 : void FeedItem::setParentFolder(qint64 parentFolder)
228 : {
229 26 : _parentFolder = parentFolder;
230 26 : emit dataChanged();
231 26 : }
232 :
233 26 : void FeedItem::setFolderOpen(bool folderOpen)
234 : {
235 26 : if (_folderOpen == folderOpen) {
236 21 : return; // Nothing to do!
237 : }
238 :
239 5 : _folderOpen = folderOpen;
240 5 : emit folderOpenChanged();
241 5 : emit dataChanged();
242 : }
243 :
244 30 : void FeedItem::clearNews()
245 : {
246 30 : newsList.clear();
247 30 : }
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 98 : void FeedItem::setBookmark(qint64 toBookmarkID)
276 : {
277 196 : qCDebug(logModel) << "FeedItem::setBookmark to " << toBookmarkID;
278 98 : if (toBookmarkID == _bookmarkID) {
279 3 : return; // Nothing to do.
280 : }
281 :
282 95 : _bookmarkID = toBookmarkID;
283 95 : emit dataChanged();
284 : }
285 :
286 12 : void FeedItem::setUnreadCount(qint32 unreadCount)
287 : {
288 12 : if (this->unreadCount == unreadCount) {
289 8 : return;
290 : }
291 :
292 4 : this->unreadCount = unreadCount;
293 4 : emit dataChanged();
294 4 : 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 39 : void FeedItem::setURL(QUrl url)
313 : {
314 39 : if (this->url == url) {
315 1 : return;
316 : }
317 :
318 38 : this->url = url;
319 38 : emit dataChanged();
320 : }
321 :
322 4 : bool FeedItem::bookmarksEnabled() const
323 : {
324 4 : return true;
325 : }
326 :
327 1 : void FeedItem::setEtag(const QString& value)
328 : {
329 1 : etag = value;
330 1 : }
331 :
332 1 : void FeedItem::setLastModified(const QString& value)
333 : {
334 1 : lastModified = value;
335 1 : }
|