From adae003ed5b7c9579a5d9b2bd3204df805cf18a5 Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Mon, 23 Nov 2015 10:55:44 +0100 Subject: [PATCH] =?UTF-8?q?Work=20on=20restoring.=CB=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/core/feedsmodel.cpp | 2 +- src/core/messagesmodel.cpp | 23 +++++++++++-------- src/services/abstract/serviceroot.h | 12 +++++++++- src/services/standard/standardserviceroot.cpp | 15 ++++++++++++ src/services/standard/standardserviceroot.h | 9 ++++++++ src/services/tt-rss/ttrssserviceroot.h | 8 +++++++ 6 files changed, 57 insertions(+), 12 deletions(-) diff --git a/src/core/feedsmodel.cpp b/src/core/feedsmodel.cpp index 2976c032a..9b103efb7 100755 --- a/src/core/feedsmodel.cpp +++ b/src/core/feedsmodel.cpp @@ -318,7 +318,7 @@ QList FeedsModel::feedsForScheduledUpdate(bool auto_update_now) { QList FeedsModel::messagesForFeeds(const QList &feeds) { QList messages; - foreach (const Feed *feed, feeds) { + foreach (Feed *feed, feeds) { messages.append(feed->undeletedMessages()); } diff --git a/src/core/messagesmodel.cpp b/src/core/messagesmodel.cpp index 28c96b3ca..03f9a3ec3 100755 --- a/src/core/messagesmodel.cpp +++ b/src/core/messagesmodel.cpp @@ -431,27 +431,30 @@ bool MessagesModel::setBatchMessagesRead(const QModelIndexList &messages, RootIt } bool MessagesModel::setBatchMessagesRestored(const QModelIndexList &messages) { - QSqlDatabase db_handle = database(); - QSqlQuery query_read_msg(db_handle); QStringList message_ids; - - query_read_msg.setForwardOnly(true); + QList message_ids_num; // Obtain IDs of all desired messages. foreach (const QModelIndex &message, messages) { - message_ids.append(QString::number(messageId(message.row()))); + int msg_id = messageId(message.row()); + + message_ids_num.append(msg_id); + message_ids.append(QString::number(msg_id)); } + if (!m_selectedItem->getParentServiceRoot()->onBeforeMessagesRestoredFromBin(m_selectedItem, message_ids_num)) { + return false; + } + + QSqlQuery query_read_msg(database()); QString sql_delete_query = QString(QSL("UPDATE Messages SET is_deleted = 0 WHERE id IN (%1);")).arg(message_ids.join(QSL(", "))); + query_read_msg.setForwardOnly(true); + if (query_read_msg.exec(sql_delete_query)) { fetchAllData(); - //emit messageCountsChanged(); - - // TODO: counts changed - //emit messageCountsChanged(m_selectedItem.mode(), true, true); - return true; + return m_selectedItem->getParentServiceRoot()->onAfterMessagesRestoredFromBin(m_selectedItem, message_ids_num); } else { return false; diff --git a/src/services/abstract/serviceroot.h b/src/services/abstract/serviceroot.h index 174a7e490..ed3e7e78a 100755 --- a/src/services/abstract/serviceroot.h +++ b/src/services/abstract/serviceroot.h @@ -105,10 +105,20 @@ class ServiceRoot : public RootItem { // by the user from message list. virtual bool onBeforeMessagesDelete(RootItem *selected_item, QList message_db_ids) = 0; - // Called AFTER the list of messages is about to be deleted + // Called AFTER the list of messages was deleted // by the user from message list. virtual bool onAfterMessagesDelete(RootItem *selected_item, QList message_db_ids) = 0; + // Called BEFORE the list of messages is about to be restored from recycle bin + // by the user from message list. + // Selected item is naturally recycle bin. + virtual bool onBeforeMessagesRestoredFromBin(RootItem *selected_item, QList message_db_ids) = 0; + + // Called AFTER the list of messages was restored from recycle bin + // by the user from message list. + // Selected item is naturally recycle bin. + virtual bool onAfterMessagesRestoredFromBin(RootItem *selected_item, QList message_db_ids) = 0; + // Access to feed model. FeedsModel *feedsModel() const; diff --git a/src/services/standard/standardserviceroot.cpp b/src/services/standard/standardserviceroot.cpp index 4269baa6c..286b19376 100755 --- a/src/services/standard/standardserviceroot.cpp +++ b/src/services/standard/standardserviceroot.cpp @@ -610,6 +610,21 @@ bool StandardServiceRoot::onAfterMessagesDelete(RootItem *selected_item, QList message_db_ids) { + return true; +} + +bool StandardServiceRoot::onAfterMessagesRestoredFromBin(RootItem *selected_item, QList message_db_ids) { + // TODO: ok, nejake zpravy obnoveny z koše, ale nevíme přesně + // do jakých původně kanálů, obnovíme všecko. + Q_UNUSED(selected_item) + Q_UNUSED(message_db_ids) + + emit dataChanged(getSubTree()); + emit readFeedsFilterInvalidationRequested(); + return true; +} + void StandardServiceRoot::assembleCategories(CategoryAssignment categories) { QHash assignments; assignments.insert(NO_PARENT_CATEGORY, this); diff --git a/src/services/standard/standardserviceroot.h b/src/services/standard/standardserviceroot.h index c25abad7a..387793790 100755 --- a/src/services/standard/standardserviceroot.h +++ b/src/services/standard/standardserviceroot.h @@ -22,6 +22,7 @@ #include #include +#include class StandardRecycleBin; @@ -69,6 +70,9 @@ class StandardServiceRoot : public ServiceRoot { bool onBeforeMessagesDelete(RootItem *selected_item, QList message_db_ids); bool onAfterMessagesDelete(RootItem *selected_item, QList message_db_ids); + bool onBeforeMessagesRestoredFromBin(RootItem *selected_item, QList message_db_ids); + bool onAfterMessagesRestoredFromBin(RootItem *selected_item, QList message_db_ids); + // Returns all standard categories which are lying under given root node. // This does NOT include the root node even if the node is category. QHash categoriesForItem(RootItem *root); @@ -92,6 +96,9 @@ class StandardServiceRoot : public ServiceRoot { bool markRecycleBinReadUnread(ReadStatus read); bool cleanFeeds(QList items, bool clean_read_only); + // DB connection to be used by child items - feeds/categories. + QSqlDatabase dbConnection() const; + public slots: void addNewCategory(); void addNewFeed(); @@ -121,6 +128,8 @@ class StandardServiceRoot : public ServiceRoot { QList m_feedContextMenu; QAction *m_actionFeedFetchMetadata; + + QSqlDatabase m_database; }; #endif // STANDARDSERVICEROOT_H diff --git a/src/services/tt-rss/ttrssserviceroot.h b/src/services/tt-rss/ttrssserviceroot.h index 7fc16f69a..617d9a6da 100755 --- a/src/services/tt-rss/ttrssserviceroot.h +++ b/src/services/tt-rss/ttrssserviceroot.h @@ -60,6 +60,14 @@ class TtRssServiceRoot : public ServiceRoot { bool onAfterMessagesDelete(RootItem *selected_item, QList message_db_ids) { return false; } + + bool onBeforeMessagesRestoredFromBin(RootItem *selected_item, QList message_db_ids) { + return false; + } + + bool onAfterMessagesRestoredFromBin(RootItem *selected_item, QList message_db_ids) { + return false; + } }; #endif // TTRSSSERVICEROOT_H