Work on restoring.ˇ

This commit is contained in:
Martin Rotter 2015-11-23 10:55:44 +01:00
parent 54cf90baa3
commit adae003ed5
6 changed files with 57 additions and 12 deletions

View File

@ -318,7 +318,7 @@ QList<Feed*> FeedsModel::feedsForScheduledUpdate(bool auto_update_now) {
QList<Message> FeedsModel::messagesForFeeds(const QList<Feed*> &feeds) { QList<Message> FeedsModel::messagesForFeeds(const QList<Feed*> &feeds) {
QList<Message> messages; QList<Message> messages;
foreach (const Feed *feed, feeds) { foreach (Feed *feed, feeds) {
messages.append(feed->undeletedMessages()); messages.append(feed->undeletedMessages());
} }

View File

@ -431,27 +431,30 @@ bool MessagesModel::setBatchMessagesRead(const QModelIndexList &messages, RootIt
} }
bool MessagesModel::setBatchMessagesRestored(const QModelIndexList &messages) { bool MessagesModel::setBatchMessagesRestored(const QModelIndexList &messages) {
QSqlDatabase db_handle = database();
QSqlQuery query_read_msg(db_handle);
QStringList message_ids; QStringList message_ids;
QList<int> message_ids_num;
query_read_msg.setForwardOnly(true);
// Obtain IDs of all desired messages. // Obtain IDs of all desired messages.
foreach (const QModelIndex &message, 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(", "))); 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)) { if (query_read_msg.exec(sql_delete_query)) {
fetchAllData(); fetchAllData();
//emit messageCountsChanged(); return m_selectedItem->getParentServiceRoot()->onAfterMessagesRestoredFromBin(m_selectedItem, message_ids_num);
// TODO: counts changed
//emit messageCountsChanged(m_selectedItem.mode(), true, true);
return true;
} }
else { else {
return false; return false;

View File

@ -105,10 +105,20 @@ class ServiceRoot : public RootItem {
// by the user from message list. // by the user from message list.
virtual bool onBeforeMessagesDelete(RootItem *selected_item, QList<int> message_db_ids) = 0; virtual bool onBeforeMessagesDelete(RootItem *selected_item, QList<int> 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. // by the user from message list.
virtual bool onAfterMessagesDelete(RootItem *selected_item, QList<int> message_db_ids) = 0; virtual bool onAfterMessagesDelete(RootItem *selected_item, QList<int> 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<int> 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<int> message_db_ids) = 0;
// Access to feed model. // Access to feed model.
FeedsModel *feedsModel() const; FeedsModel *feedsModel() const;

View File

@ -610,6 +610,21 @@ bool StandardServiceRoot::onAfterMessagesDelete(RootItem *selected_item, QList<i
return true; return true;
} }
bool StandardServiceRoot::onBeforeMessagesRestoredFromBin(RootItem *selected_item, QList<int> message_db_ids) {
return true;
}
bool StandardServiceRoot::onAfterMessagesRestoredFromBin(RootItem *selected_item, QList<int> 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) { void StandardServiceRoot::assembleCategories(CategoryAssignment categories) {
QHash<int,RootItem*> assignments; QHash<int,RootItem*> assignments;
assignments.insert(NO_PARENT_CATEGORY, this); assignments.insert(NO_PARENT_CATEGORY, this);

View File

@ -22,6 +22,7 @@
#include <QCoreApplication> #include <QCoreApplication>
#include <QPair> #include <QPair>
#include <QSqlDatabase>
class StandardRecycleBin; class StandardRecycleBin;
@ -69,6 +70,9 @@ class StandardServiceRoot : public ServiceRoot {
bool onBeforeMessagesDelete(RootItem *selected_item, QList<int> message_db_ids); bool onBeforeMessagesDelete(RootItem *selected_item, QList<int> message_db_ids);
bool onAfterMessagesDelete(RootItem *selected_item, QList<int> message_db_ids); bool onAfterMessagesDelete(RootItem *selected_item, QList<int> message_db_ids);
bool onBeforeMessagesRestoredFromBin(RootItem *selected_item, QList<int> message_db_ids);
bool onAfterMessagesRestoredFromBin(RootItem *selected_item, QList<int> message_db_ids);
// Returns all standard categories which are lying under given root node. // Returns all standard categories which are lying under given root node.
// This does NOT include the root node even if the node is category. // This does NOT include the root node even if the node is category.
QHash<int,StandardCategory*> categoriesForItem(RootItem *root); QHash<int,StandardCategory*> categoriesForItem(RootItem *root);
@ -92,6 +96,9 @@ class StandardServiceRoot : public ServiceRoot {
bool markRecycleBinReadUnread(ReadStatus read); bool markRecycleBinReadUnread(ReadStatus read);
bool cleanFeeds(QList<Feed*> items, bool clean_read_only); bool cleanFeeds(QList<Feed*> items, bool clean_read_only);
// DB connection to be used by child items - feeds/categories.
QSqlDatabase dbConnection() const;
public slots: public slots:
void addNewCategory(); void addNewCategory();
void addNewFeed(); void addNewFeed();
@ -121,6 +128,8 @@ class StandardServiceRoot : public ServiceRoot {
QList<QAction*> m_feedContextMenu; QList<QAction*> m_feedContextMenu;
QAction *m_actionFeedFetchMetadata; QAction *m_actionFeedFetchMetadata;
QSqlDatabase m_database;
}; };
#endif // STANDARDSERVICEROOT_H #endif // STANDARDSERVICEROOT_H

View File

@ -60,6 +60,14 @@ class TtRssServiceRoot : public ServiceRoot {
bool onAfterMessagesDelete(RootItem *selected_item, QList<int> message_db_ids) { bool onAfterMessagesDelete(RootItem *selected_item, QList<int> message_db_ids) {
return false; return false;
} }
bool onBeforeMessagesRestoredFromBin(RootItem *selected_item, QList<int> message_db_ids) {
return false;
}
bool onAfterMessagesRestoredFromBin(RootItem *selected_item, QList<int> message_db_ids) {
return false;
}
}; };
#endif // TTRSSSERVICEROOT_H #endif // TTRSSSERVICEROOT_H