From 8c20ca7025b108ec7203e13b030509784cfbcbf1 Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Fri, 19 Aug 2016 10:52:25 +0200 Subject: [PATCH] Fixed newspaper handling. --- rssguard.pro | 2 +- src/core/messagesmodel.cpp | 14 +++++------ src/gui/messagepreviewer.cpp | 46 ++++++++++++++++++++++++++++-------- src/gui/messagepreviewer.h | 1 + src/gui/webbrowser.cpp | 34 ++++++++++++++++++++++---- 5 files changed, 74 insertions(+), 23 deletions(-) diff --git a/rssguard.pro b/rssguard.pro index 9c7d8e825..36a37e57a 100755 --- a/rssguard.pro +++ b/rssguard.pro @@ -148,7 +148,7 @@ message(rssguard: Prefix directory: \"$$PREFIX\".) message(rssguard: Build revision: \"$$APP_REVISION\".) message(rssguard: lrelease executable name: \"$$LRELEASE_EXECUTABLE\".) -QT += core gui widgets sql network xml printsupport # webenginewidgets +QT += core gui widgets sql network xml printsupport CONFIG *= c++11 debug_and_release warn_on DEFINES *= QT_USE_QSTRINGBUILDER QT_USE_FAST_CONCATENATION QT_USE_FAST_OPERATOR_PLUS UNICODE _UNICODE VERSION = $$APP_VERSION diff --git a/src/core/messagesmodel.cpp b/src/core/messagesmodel.cpp index e7231c8b7..c0ca29790 100755 --- a/src/core/messagesmodel.cpp +++ b/src/core/messagesmodel.cpp @@ -88,19 +88,17 @@ void MessagesModel::loadMessages(RootItem *item) { } bool MessagesModel::setMessageImportantById(int id, RootItem::Importance important) { - Q_UNUSED(important) - for (int i = 0; i < rowCount(); i++) { int found_id = data(i, MSG_DB_ID_INDEX, Qt::EditRole).toInt(); if (found_id == id) { - bool result; + bool set = setData(index(i, MSG_DB_IMPORTANT_INDEX), important); - if (result = switchMessageImportance(i)) { + if (set) { emit dataChanged(index(i, 0), index(i, MSG_DB_CUSTOM_HASH_INDEX)); } - return result; + return set; } } @@ -287,13 +285,13 @@ bool MessagesModel::setMessageReadById(int id, RootItem::ReadStatus read) { int found_id = data(i, MSG_DB_ID_INDEX, Qt::EditRole).toInt(); if (found_id == id) { - bool result; + bool set = setData(index(i, MSG_DB_READ_INDEX), read); - if (result = setMessageRead(i, read)) { + if (set) { emit dataChanged(index(i, 0), index(i, MSG_DB_CUSTOM_HASH_INDEX)); } - return result; + return set; } } diff --git a/src/gui/messagepreviewer.cpp b/src/gui/messagepreviewer.cpp index 59ccb8af8..b072afbff 100755 --- a/src/gui/messagepreviewer.cpp +++ b/src/gui/messagepreviewer.cpp @@ -137,25 +137,51 @@ void MessagePreviewer::loadMessage(const Message &message, RootItem *root) { } void MessagePreviewer::markMessageAsRead() { - if (!m_root.isNull()) { - emit markMessageRead(m_message.m_id, RootItem::Read); - m_message.m_isRead = true; - updateButtons(); - } + markMessageAsReadUnread(RootItem::Read); } void MessagePreviewer::markMessageAsUnread() { + markMessageAsReadUnread(RootItem::Unread); +} + +void MessagePreviewer::markMessageAsReadUnread(RootItem::ReadStatus read) { if (!m_root.isNull()) { - emit markMessageRead(m_message.m_id, RootItem::Unread); - m_message.m_isRead = false; - updateButtons(); + if (m_root->getParentServiceRoot()->onBeforeSetMessagesRead(m_root.data(), + QList() << m_message, + read)) { + DatabaseQueries::markMessagesReadUnread(qApp->database()->connection(objectName(), DatabaseFactory::FromSettings), + QStringList() << QString::number(m_message.m_id), + read); + m_root->getParentServiceRoot()->onAfterSetMessagesRead(m_root.data(), + QList() << m_message, + read); + m_message.m_isRead = true; + + emit markMessageRead(m_message.m_id, read); + updateButtons(); + } } } void MessagePreviewer::switchMessageImportance(bool checked) { if (!m_root.isNull()) { - emit markMessageImportant(m_message.m_id, checked ? RootItem::Important : RootItem::NotImportant); - m_message.m_isImportant = checked; + if (m_root->getParentServiceRoot()->onBeforeSwitchMessageImportance(m_root.data(), + QList() << ImportanceChange(m_message, + m_message.m_isImportant ? + RootItem::NotImportant : + RootItem::Important))) { + DatabaseQueries::switchMessagesImportance(qApp->database()->connection(objectName(), DatabaseFactory::FromSettings), + QStringList() << QString::number(m_message.m_id)); + + m_root->getParentServiceRoot()->onBeforeSwitchMessageImportance(m_root.data(), + QList() << ImportanceChange(m_message, + m_message.m_isImportant ? + RootItem::NotImportant : + RootItem::Important)); + + emit markMessageImportant(m_message.m_id, checked ? RootItem::Important : RootItem::NotImportant); + m_message.m_isImportant = checked; + } } } diff --git a/src/gui/messagepreviewer.h b/src/gui/messagepreviewer.h index 35f8fedd8..d53b7c8e3 100755 --- a/src/gui/messagepreviewer.h +++ b/src/gui/messagepreviewer.h @@ -51,6 +51,7 @@ class MessagePreviewer : public QWidget { private slots: void markMessageAsRead(); void markMessageAsUnread(); + void markMessageAsReadUnread(RootItem::ReadStatus read); void switchMessageImportance(bool checked); signals: diff --git a/src/gui/webbrowser.cpp b/src/gui/webbrowser.cpp index 6f3e21862..c9abb4584 100755 --- a/src/gui/webbrowser.cpp +++ b/src/gui/webbrowser.cpp @@ -262,8 +262,19 @@ void WebBrowser::markMessageAsRead(int id, bool read) { if (!m_root.isNull()) { Message *msg = findMessage(id); - emit markMessageRead(msg->m_id, read ? RootItem::Read : RootItem::Unread); - msg->m_isRead = read ? RootItem::Read : RootItem::Unread; + if (msg != nullptr && m_root->getParentServiceRoot()->onBeforeSetMessagesRead(m_root.data(), + QList() << *msg, + read ? RootItem::Read : RootItem::Unread)) { + DatabaseQueries::markMessagesReadUnread(qApp->database()->connection(objectName(), DatabaseFactory::FromSettings), + QStringList() << QString::number(msg->m_id), + read ? RootItem::Read : RootItem::Unread); + m_root->getParentServiceRoot()->onAfterSetMessagesRead(m_root.data(), + QList() << *msg, + read ? RootItem::Read : RootItem::Unread); + + emit markMessageRead(msg->m_id, read ? RootItem::Read : RootItem::Unread); + msg->m_isRead = read ? RootItem::Read : RootItem::Unread; + } } } @@ -271,8 +282,23 @@ void WebBrowser::switchMessageImportance(int id, bool checked) { if (!m_root.isNull()) { Message *msg = findMessage(id); - emit markMessageImportant(msg->m_id, msg->m_isImportant ? RootItem::NotImportant : RootItem::Important); - msg->m_isImportant = checked; + if (msg != nullptr && m_root->getParentServiceRoot()->onBeforeSwitchMessageImportance(m_root.data(), + QList() << ImportanceChange(*msg, + msg->m_isImportant ? + RootItem::NotImportant : + RootItem::Important))) { + DatabaseQueries::switchMessagesImportance(qApp->database()->connection(objectName(), DatabaseFactory::FromSettings), + QStringList() << QString::number(msg->m_id)); + + m_root->getParentServiceRoot()->onBeforeSwitchMessageImportance(m_root.data(), + QList() << ImportanceChange(*msg, + msg->m_isImportant ? + RootItem::NotImportant : + RootItem::Important)); + + emit markMessageImportant(msg->m_id, msg->m_isImportant ? RootItem::NotImportant : RootItem::Important); + msg->m_isImportant = checked; + } } }