diff --git a/resources/text/CHANGELOG b/resources/text/CHANGELOG index c453734b6..374194b05 100755 --- a/resources/text/CHANGELOG +++ b/resources/text/CHANGELOG @@ -1,3 +1,13 @@ +3.3.5 +————— + +Added: + +Changed: +▪ Made some tweaks regarding bug #41. Number of new messages is now determined in feed downloader working thread too. + +Fixed: + 3.3.4 ————— diff --git a/rssguard.pro b/rssguard.pro index ae8d3b59f..5c02c8fe4 100755 --- a/rssguard.pro +++ b/rssguard.pro @@ -73,7 +73,7 @@ APP_LOW_NAME = "rssguard" APP_LOW_H_NAME = ".rssguard" APP_AUTHOR = "Martin Rotter" APP_COPYRIGHT = "(C) 2011-2016 $$APP_AUTHOR" -APP_VERSION = "3.3.4" +APP_VERSION = "3.3.5" APP_LONG_NAME = "$$APP_NAME $$APP_VERSION" APP_EMAIL = "rotter.martinos@gmail.com" APP_URL = "https://github.com/martinrotter/rssguard" diff --git a/src/core/feeddownloader.cpp b/src/core/feeddownloader.cpp index b0ad83307..564548959 100755 --- a/src/core/feeddownloader.cpp +++ b/src/core/feeddownloader.cpp @@ -106,11 +106,13 @@ void FeedDownloader::oneFeedUpdateFinished(const QList &messages) { << feed->id() << " in thread: \'" << QThread::currentThreadId() << "\'."; - int updated_messages; + int updated_messages = feed->updateMessages(messages); + /* QMetaObject::invokeMethod(feed, "updateMessages", Qt::BlockingQueuedConnection, Q_RETURN_ARG(int, updated_messages), Q_ARG(QList, messages)); + */ if (updated_messages > 0) { m_results.appendUpdatedFeed(QPair(feed->title(), updated_messages)); diff --git a/src/main.cpp b/src/main.cpp index a11138349..7144a758d 100755 --- a/src/main.cpp +++ b/src/main.cpp @@ -38,7 +38,6 @@ #include #include - int main(int argc, char *argv[]) { for (int i = 0; i < argc; i++) { const QString str = QString::fromLocal8Bit(argv[i]); diff --git a/src/services/abstract/feed.cpp b/src/services/abstract/feed.cpp index 3320712cf..3becdd061 100755 --- a/src/services/abstract/feed.cpp +++ b/src/services/abstract/feed.cpp @@ -49,16 +49,16 @@ QVariant Feed::data(int column, int role) const { switch (status()) { case NewMessages: return QColor(Qt::blue); - + case Error: case ParsingError: case OtherError: return QColor(Qt::red); - + default: return QVariant(); } - + default: return RootItem::data(column, role); } @@ -84,7 +84,7 @@ void Feed::setCountOfUnreadMessages(int count_unread_messages) { if (status() == NewMessages && count_unread_messages < countOfUnreadMessages()) { setStatus(Normal); } - + m_unreadCount = count_unread_messages; } @@ -128,13 +128,16 @@ void Feed::setUrl(const QString &url) { } void Feed::updateCounts(bool including_total_count) { - QSqlDatabase database = qApp->database()->connection(metaObject()->className(), DatabaseFactory::FromSettings); + bool is_main_thread = QThread::currentThread() == qApp->thread(); + QSqlDatabase database = is_main_thread ? + qApp->database()->connection(metaObject()->className(), DatabaseFactory::FromSettings) : + qApp->database()->connection(QSL("feed_upd"), DatabaseFactory::FromSettings); int account_id = getParentServiceRoot()->accountId(); - + if (including_total_count) { setCountOfAllMessages(DatabaseQueries::getMessageCountsForFeed(database, customId(), account_id, true)); } - + setCountOfUnreadMessages(DatabaseQueries::getMessageCountsForFeed(database, customId(), account_id, false)); } @@ -142,23 +145,25 @@ void Feed::run() { qDebug().nospace() << "Downloading new messages for feed " << customId() << " in thread: \'" << QThread::currentThreadId() << "\'."; - + QList msgs = obtainNewMessages(); emit messagesObtained(msgs); } int Feed::updateMessages(const QList &messages) { - qDebug().nospace() << "Updating messages in DB. Main thread: " << - (QThread::currentThread() == qApp->thread() ? "true." : "false."); + bool is_main_thread = QThread::currentThread() == qApp->thread(); + qDebug("Updating messages in DB. Main thread: '%s'.", qPrintable(is_main_thread ? "true." : "false.")); + int custom_id = customId(); int account_id = getParentServiceRoot()->accountId(); bool anything_updated = false; bool ok; - QSqlDatabase database = qApp->database()->connection(metaObject()->className(), DatabaseFactory::FromSettings); - int updated_messages = DatabaseQueries::updateMessages(database, messages, custom_id, account_id, url(), - &anything_updated, &ok); - + QSqlDatabase database = is_main_thread ? + qApp->database()->connection(metaObject()->className(), DatabaseFactory::FromSettings) : + qApp->database()->connection(QSL("feed_upd"), DatabaseFactory::FromSettings); + int updated_messages = DatabaseQueries::updateMessages(database, messages, custom_id, account_id, url(), &anything_updated, &ok); + if (ok) { if (updated_messages > 0) { setStatus(NewMessages); @@ -166,19 +171,19 @@ int Feed::updateMessages(const QList &messages) { else { setStatus(Normal); } - + QList items_to_update; - + updateCounts(true); items_to_update.append(this); - + if (getParentServiceRoot()->recycleBin() != nullptr && anything_updated) { getParentServiceRoot()->recycleBin()->updateCounts(true); items_to_update.append(getParentServiceRoot()->recycleBin()); } - + getParentServiceRoot()->itemChanged(items_to_update); } - + return updated_messages; } diff --git a/src/services/abstract/recyclebin.cpp b/src/services/abstract/recyclebin.cpp index da450258f..8e621d937 100755 --- a/src/services/abstract/recyclebin.cpp +++ b/src/services/abstract/recyclebin.cpp @@ -23,6 +23,8 @@ #include "miscellaneous/databasequeries.h" #include "services/abstract/serviceroot.h" +#include + RecycleBin::RecycleBin(RootItem *parent_item) : RootItem(parent_item), m_totalCount(0), m_unreadCount(0), m_contextMenu(QList()) { @@ -46,7 +48,10 @@ int RecycleBin::countOfAllMessages() const { } void RecycleBin::updateCounts(bool update_total_count) { - QSqlDatabase database = qApp->database()->connection(metaObject()->className(), DatabaseFactory::FromSettings); + bool is_main_thread = QThread::currentThread() == qApp->thread(); + QSqlDatabase database = is_main_thread ? + qApp->database()->connection(metaObject()->className(), DatabaseFactory::FromSettings) : + qApp->database()->connection(QSL("feed_upd"), DatabaseFactory::FromSettings); m_unreadCount = DatabaseQueries::getMessageCountsForBin(database, getParentServiceRoot()->accountId(), false);