diff --git a/src/gui/feedmessageviewer.cpp b/src/gui/feedmessageviewer.cpp index f17d806a1..2002cd3a3 100755 --- a/src/gui/feedmessageviewer.cpp +++ b/src/gui/feedmessageviewer.cpp @@ -209,7 +209,7 @@ void FeedMessageViewer::updateFeedButtonsAvailability() { form_main->m_ui->m_actionMarkSelectedItemsAsUnread->setEnabled(anything_selected); form_main->m_ui->m_actionUpdateAllItems->setEnabled(!critical_action_running); form_main->m_ui->m_actionUpdateSelectedItems->setEnabled(!critical_action_running && (feed_selected || category_selected || service_selected)); - form_main->m_ui->m_actionViewSelectedItemsNewspaperMode->setEnabled(feed_selected || category_selected || service_selected); + form_main->m_ui->m_actionViewSelectedItemsNewspaperMode->setEnabled(anything_selected); form_main->m_ui->m_actionExpandCollapseItem->setEnabled(anything_selected); form_main->m_ui->m_menuAddItem->setEnabled(!critical_action_running); form_main->m_ui->m_menuRecycleBin->setEnabled(!critical_action_running); diff --git a/src/services/abstract/recyclebin.cpp b/src/services/abstract/recyclebin.cpp index 051c7f37c..a616714bf 100755 --- a/src/services/abstract/recyclebin.cpp +++ b/src/services/abstract/recyclebin.cpp @@ -19,6 +19,7 @@ #include "miscellaneous/application.h" #include "miscellaneous/iconfactory.h" +#include "miscellaneous/textfactory.h" #include "services/abstract/serviceroot.h" #include @@ -85,6 +86,42 @@ QVariant RecycleBin::data(int column, int role) const { } } +QList RecycleBin::undeletedMessages() const { + QList messages; + int account_id = const_cast(this)->getParentServiceRoot()->accountId(); + QSqlDatabase database = qApp->database()->connection(metaObject()->className(), DatabaseFactory::FromSettings); + QSqlQuery query_read_msg(database); + + query_read_msg.setForwardOnly(true); + query_read_msg.prepare("SELECT title, url, author, date_created, contents, enclosures, custom_id, id, feed " + "FROM Messages " + "WHERE is_deleted = 1 AND is_pdeleted = 0 AND account_id = :account_id;"); + query_read_msg.bindValue(QSL(":account_id"), account_id); + + // FIXME: Fix those const functions, this is fucking ugly. + + if (query_read_msg.exec()) { + while (query_read_msg.next()) { + Message message; + + message.m_feedId = query_read_msg.value(7).toString(); + message.m_title = query_read_msg.value(0).toString(); + message.m_url = query_read_msg.value(1).toString(); + message.m_author = query_read_msg.value(2).toString(); + message.m_created = TextFactory::parseDateTime(query_read_msg.value(3).value()); + message.m_contents = query_read_msg.value(4).toString(); + message.m_enclosures = Enclosures::decodeEnclosuresFromString(query_read_msg.value(5).toString()); + message.m_accountId = account_id; + message.m_customId = query_read_msg.value(6).toString(); + message.m_id = query_read_msg.value(7).toInt(); + + messages.append(message); + } + } + + return messages; +} + bool RecycleBin::markAsReadUnread(RootItem::ReadStatus status) { QSqlDatabase db_handle = qApp->database()->connection(metaObject()->className(), DatabaseFactory::FromSettings); diff --git a/src/services/abstract/recyclebin.h b/src/services/abstract/recyclebin.h index 4d702d8ac..a7d26278f 100755 --- a/src/services/abstract/recyclebin.h +++ b/src/services/abstract/recyclebin.h @@ -30,6 +30,8 @@ class RecycleBin : public RootItem { QVariant data(int column, int role) const; + QList undeletedMessages() const; + bool markAsReadUnread(ReadStatus status); bool cleanMessages(bool clear_only_read); diff --git a/src/services/abstract/rootitem.cpp b/src/services/abstract/rootitem.cpp index ea9962cbb..db3f6d039 100755 --- a/src/services/abstract/rootitem.cpp +++ b/src/services/abstract/rootitem.cpp @@ -73,7 +73,13 @@ bool RootItem::markAsReadUnread(ReadStatus status) { } QList RootItem::undeletedMessages() const { - return QList(); + QList messages; + + foreach (RootItem *child, m_childItems) { + messages.append(child->undeletedMessages()); + } + + return messages; } bool RootItem::cleanMessages(bool clear_only_read) { diff --git a/src/services/abstract/serviceroot.cpp b/src/services/abstract/serviceroot.cpp index cc454b411..f84b288d4 100755 --- a/src/services/abstract/serviceroot.cpp +++ b/src/services/abstract/serviceroot.cpp @@ -19,6 +19,7 @@ #include "core/feedsmodel.h" #include "miscellaneous/application.h" +#include "miscellaneous/textfactory.h" #include "services/abstract/category.h" #include @@ -59,6 +60,46 @@ bool ServiceRoot::deleteViaGui() { return data_removed; } +QList ServiceRoot::undeletedMessages() const { + QList messages; + int account_id = accountId(); + QSqlDatabase database = qApp->database()->connection(metaObject()->className(), DatabaseFactory::FromSettings); + QSqlQuery query_read_msg(database); + + query_read_msg.setForwardOnly(true); + query_read_msg.prepare("SELECT title, url, author, date_created, contents, enclosures, custom_id, id, feed " + "FROM Messages " + "WHERE is_deleted = 0 AND is_pdeleted = 0 AND account_id = :account_id;"); + query_read_msg.bindValue(QSL(":account_id"), account_id); + + // FIXME: Fix those const functions, this is fucking ugly. + + if (query_read_msg.exec()) { + while (query_read_msg.next()) { + Message message; + + // TODO: napsat funkci static Message Message::fromSqlRecord(const QSqlRecord &record) + // ta prostÄ› bude brat record z SELECT * FROM Messages WHERE ....; + // a vrati ho jako objekt Message; + + message.m_feedId = query_read_msg.value(7).toString(); + message.m_title = query_read_msg.value(0).toString(); + message.m_url = query_read_msg.value(1).toString(); + message.m_author = query_read_msg.value(2).toString(); + message.m_created = TextFactory::parseDateTime(query_read_msg.value(3).value()); + message.m_contents = query_read_msg.value(4).toString(); + message.m_enclosures = Enclosures::decodeEnclosuresFromString(query_read_msg.value(5).toString()); + message.m_accountId = account_id; + message.m_customId = query_read_msg.value(6).toString(); + message.m_id = query_read_msg.value(7).toInt(); + + messages.append(message); + } + } + + return messages; +} + void ServiceRoot::itemChanged(const QList &items) { emit dataChanged(items); } diff --git a/src/services/abstract/serviceroot.h b/src/services/abstract/serviceroot.h index 9cc47dfc4..aca20bf3d 100755 --- a/src/services/abstract/serviceroot.h +++ b/src/services/abstract/serviceroot.h @@ -66,6 +66,8 @@ class ServiceRoot : public RootItem { // Access to recycle bin of this account if there is any. virtual RecycleBin *recycleBin() = 0; + QList undeletedMessages() const; + // Start/stop services. // Start method is called when feed model gets initialized OR after user adds new service. // Account should synchronously initialize its children (load them from DB is recommended diff --git a/src/services/tt-rss/ttrssfeed.cpp b/src/services/tt-rss/ttrssfeed.cpp index 2dd8ccc48..075ef70bc 100755 --- a/src/services/tt-rss/ttrssfeed.cpp +++ b/src/services/tt-rss/ttrssfeed.cpp @@ -120,7 +120,7 @@ QList TtRssFeed::undeletedMessages() const { query_read_msg.setForwardOnly(true); query_read_msg.prepare("SELECT title, url, author, date_created, contents, enclosures, custom_id, id " "FROM Messages " - "WHERE is_deleted = 0 AND feed = :feed AND account_id = :account_id;"); + "WHERE is_deleted = 0 AND is_pdeleted = 0 AND feed = :feed AND account_id = :account_id;"); query_read_msg.bindValue(QSL(":feed"), customId()); query_read_msg.bindValue(QSL(":account_id"), account_id);