Line data Source code
1 : #include "LoadFolderOperation.h"
2 :
3 :
4 4 : LoadFolderOperation::LoadFolderOperation(OperationManager *parent, FolderFeedItem *feedItem, LoadNewsOperation::LoadMode mode, int loadLimit)
5 4 : : LisvelLoadNewsOperation(parent, feedItem, mode, loadLimit, true)
6 : {
7 :
8 4 : }
9 :
10 4 : LoadFolderOperation::~LoadFolderOperation()
11 : {
12 :
13 4 : }
14 :
15 4 : qint64 LoadFolderOperation::getFirstNewsID()
16 : {
17 : const QString queryString = "SELECT id FROM NewsItemTable WHERE feed_id IN "
18 : "(SELECT id FROM FeedItemTable F WHERE "
19 : "F.parent_folder = :parent_folder) "
20 4 : "ORDER BY timestamp ASC, id ASC LIMIT 1";
21 :
22 4 : QSqlQuery query(db());
23 4 : query.prepare(queryString);
24 4 : query.bindValue(":parent_folder", feedItem->getDbID());
25 :
26 4 : if (!query.exec() || !query.next()) {
27 : // No news yet!
28 0 : return -1;
29 : }
30 :
31 4 : return query.value("id").toULongLong();
32 4 : }
33 :
34 4 : QString LoadFolderOperation::appendNewQueryString()
35 : {
36 : return "SELECT * FROM NewsItemTable N WHERE N.feed_id IN "
37 : "(SELECT id FROM FeedItemTable WHERE parent_folder = :parent_folder) "
38 : "AND id > (SELECT bookmark_id FROM FeedItemTable WHERE id = N.feed_id) AND "
39 8 : "id NOT IN (" + getLoadedIDString() + ") "
40 8 : "ORDER BY timestamp ASC, id ASC LIMIT :load_limit";
41 : }
42 :
43 3 : QString LoadFolderOperation::prependNewQueryString()
44 : {
45 : return "SELECT * FROM NewsItemTable N WHERE N.feed_id IN "
46 : "(SELECT id FROM FeedItemTable WHERE parent_folder = :parent_folder) "
47 : "AND id <= (SELECT bookmark_id FROM FeedItemTable WHERE id = N.feed_id) AND "
48 6 : "id NOT IN (" + getLoadedIDString() + ") "
49 6 : "ORDER BY timestamp DESC, id DESC LIMIT :load_limit";
50 : }
51 :
52 1 : QString LoadFolderOperation::appendAfterPositionQueryString()
53 : {
54 : // Load items chronologically after a given position, regardless of bookmark.
55 : // Used to reload trimmed items when scrolling back down through read items.
56 : return "SELECT * FROM NewsItemTable N WHERE N.feed_id IN "
57 : "(SELECT id FROM FeedItemTable WHERE parent_folder = :parent_folder) "
58 : "AND (timestamp > :last_timestamp OR (timestamp = :last_timestamp AND id > :last_id)) "
59 2 : "AND id NOT IN (" + getLoadedIDString() + ") "
60 2 : "ORDER BY timestamp ASC, id ASC LIMIT :load_limit";
61 : }
62 :
63 8 : void LoadFolderOperation::bindQueryParameters(QSqlQuery& query)
64 : {
65 8 : query.bindValue(":parent_folder", feedItem->getDbID());
66 8 : }
|