diff --git a/resources/desktop/rssguard.metainfo.xml.in b/resources/desktop/rssguard.metainfo.xml.in
index 5da01b359..9f4b74f4e 100644
--- a/resources/desktop/rssguard.metainfo.xml.in
+++ b/resources/desktop/rssguard.metainfo.xml.in
@@ -60,7 +60,7 @@
-
+
@APP_LOW_NAME@
diff --git a/src/librssguard/core/feeddownloader.cpp b/src/librssguard/core/feeddownloader.cpp
index 02b683622..a78cfb3b9 100644
--- a/src/librssguard/core/feeddownloader.cpp
+++ b/src/librssguard/core/feeddownloader.cpp
@@ -223,9 +223,7 @@ void FeedDownloader::updateOneFeed(ServiceRoot* acc,
tmr.start();
try {
- bool is_main_thread = QThread::currentThread() == qApp->thread();
- QSqlDatabase database = is_main_thread ? qApp->database()->driver()->connection(metaObject()->className())
- : qApp->database()->driver()->connection(QSL("feed_upd_%1").arg(thread_id));
+ QSqlDatabase database = qApp->database()->driver()->threadSafeConnection(metaObject()->className());
QList msgs = feed->getParentServiceRoot()->obtainNewMessages(feed, stated_messages, tagged_messages);
qDebugNN << LOGSEC_FEEDDOWNLOADER << "Downloaded" << NONQUOTE_W_SPACE(msgs.size()) << "messages for feed ID"
diff --git a/src/librssguard/services/abstract/feed.cpp b/src/librssguard/services/abstract/feed.cpp
index 6550baf53..2ce2240b2 100644
--- a/src/librssguard/services/abstract/feed.cpp
+++ b/src/librssguard/services/abstract/feed.cpp
@@ -196,11 +196,7 @@ void Feed::appendMessageFilter(MessageFilter* filter) {
}
void Feed::updateCounts(bool including_total_count) {
- bool is_main_thread = QThread::currentThread() == qApp->thread();
- qlonglong thread_id = qlonglong(QThread::currentThreadId());
- QSqlDatabase database = is_main_thread ? qApp->database()->driver()->connection(metaObject()->className())
- : qApp->database()->driver()->connection(QSL("feed_upd_%1").arg(thread_id));
-
+ QSqlDatabase database = qApp->database()->driver()->threadSafeConnection(metaObject()->className());
int account_id = getParentServiceRoot()->accountId();
if (including_total_count) {
diff --git a/src/librssguard/services/abstract/importantnode.cpp b/src/librssguard/services/abstract/importantnode.cpp
index 684b1a683..9526f96d4 100644
--- a/src/librssguard/services/abstract/importantnode.cpp
+++ b/src/librssguard/services/abstract/importantnode.cpp
@@ -25,10 +25,7 @@ QList ImportantNode::undeletedMessages() const {
}
void ImportantNode::updateCounts(bool including_total_count) {
- bool is_main_thread = QThread::currentThread() == qApp->thread();
- qlonglong thread_id = qlonglong(QThread::currentThreadId());
- QSqlDatabase database = is_main_thread ? qApp->database()->driver()->connection(metaObject()->className())
- : qApp->database()->driver()->connection(QSL("feed_upd_%1").arg(thread_id));
+ QSqlDatabase database = qApp->database()->driver()->threadSafeConnection(metaObject()->className());
int account_id = getParentServiceRoot()->accountId();
if (including_total_count) {
diff --git a/src/librssguard/services/abstract/label.cpp b/src/librssguard/services/abstract/label.cpp
index b292873c3..9fb7e1c83 100644
--- a/src/librssguard/services/abstract/label.cpp
+++ b/src/librssguard/services/abstract/label.cpp
@@ -76,10 +76,7 @@ bool Label::deleteViaGui() {
}
void Label::updateCounts(bool including_total_count) {
- bool is_main_thread = QThread::currentThread() == qApp->thread();
- qlonglong thread_id = qlonglong(QThread::currentThreadId());
- QSqlDatabase database = is_main_thread ? qApp->database()->driver()->connection(metaObject()->className())
- : qApp->database()->driver()->connection(QSL("feed_upd_%1").arg(thread_id));
+ QSqlDatabase database = qApp->database()->driver()->threadSafeConnection(metaObject()->className());
int account_id = getParentServiceRoot()->accountId();
if (including_total_count) {
@@ -110,9 +107,7 @@ QIcon Label::generateIcon(const QColor& color) {
}
void Label::assignToMessage(const Message& msg) {
- bool is_main_thread = QThread::currentThread() == qApp->thread();
- QSqlDatabase database = is_main_thread ? qApp->database()->driver()->connection(metaObject()->className())
- : qApp->database()->driver()->connection(QSL("feed_upd"));
+ QSqlDatabase database = qApp->database()->driver()->threadSafeConnection(metaObject()->className());
if (getParentServiceRoot()->onBeforeLabelMessageAssignmentChanged({this}, {msg}, true)) {
DatabaseQueries::assignLabelToMessage(database, this, msg);
@@ -122,9 +117,7 @@ void Label::assignToMessage(const Message& msg) {
}
void Label::deassignFromMessage(const Message& msg) {
- bool is_main_thread = QThread::currentThread() == qApp->thread();
- QSqlDatabase database = is_main_thread ? qApp->database()->driver()->connection(metaObject()->className())
- : qApp->database()->driver()->connection(QSL("feed_upd"));
+ QSqlDatabase database = qApp->database()->driver()->threadSafeConnection(metaObject()->className());
if (getParentServiceRoot()->onBeforeLabelMessageAssignmentChanged({this}, {msg}, false)) {
DatabaseQueries::deassignLabelFromMessage(database, this, msg);
diff --git a/src/librssguard/services/abstract/recyclebin.cpp b/src/librssguard/services/abstract/recyclebin.cpp
index e54e839dc..d80c4ce1a 100644
--- a/src/librssguard/services/abstract/recyclebin.cpp
+++ b/src/librssguard/services/abstract/recyclebin.cpp
@@ -32,10 +32,7 @@ int RecycleBin::countOfAllMessages() const {
}
void RecycleBin::updateCounts(bool update_total_count) {
- bool is_main_thread = QThread::currentThread() == qApp->thread();
- qlonglong thread_id = qlonglong(QThread::currentThreadId());
- QSqlDatabase database = is_main_thread ? qApp->database()->driver()->connection(metaObject()->className())
- : qApp->database()->driver()->connection(QSL("feed_upd_%1").arg(thread_id));
+ QSqlDatabase database = qApp->database()->driver()->threadSafeConnection(metaObject()->className());
m_unreadCount = DatabaseQueries::getMessageCountsForBin(database, getParentServiceRoot()->accountId(), false);
diff --git a/src/librssguard/services/abstract/serviceroot.cpp b/src/librssguard/services/abstract/serviceroot.cpp
index b59b64952..c5e6d541e 100644
--- a/src/librssguard/services/abstract/serviceroot.cpp
+++ b/src/librssguard/services/abstract/serviceroot.cpp
@@ -954,14 +954,10 @@ QPair ServiceRoot::updateMessages(QList& messages, Feed* feed
}
QList items_to_update;
- bool is_main_thread = QThread::currentThread() == qApp->thread();
-
- qDebugNN << LOGSEC_CORE << "Updating messages in DB. Main thread:" << QUOTE_W_SPACE_DOT(is_main_thread);
-
bool ok = false;
- qlonglong thread_id = qlonglong(QThread::currentThreadId());
- QSqlDatabase database = is_main_thread ? qApp->database()->driver()->connection(metaObject()->className())
- : qApp->database()->driver()->connection(QSL("feed_upd_%1").arg(thread_id));
+ QSqlDatabase database = qApp->database()->driver()->threadSafeConnection(metaObject()->className());
+
+ qDebugNN << LOGSEC_CORE << "Updating messages in DB.";
updated_messages = DatabaseQueries::updateMessages(database, messages, feed, force_update, &ok);
diff --git a/src/librssguard/services/abstract/unreadnode.cpp b/src/librssguard/services/abstract/unreadnode.cpp
index f143ff34c..d71be05f5 100644
--- a/src/librssguard/services/abstract/unreadnode.cpp
+++ b/src/librssguard/services/abstract/unreadnode.cpp
@@ -25,10 +25,7 @@ QList UnreadNode::undeletedMessages() const {
void UnreadNode::updateCounts(bool including_total_count) {
Q_UNUSED(including_total_count)
- bool is_main_thread = QThread::currentThread() == qApp->thread();
- qlonglong thread_id = qlonglong(QThread::currentThreadId());
- QSqlDatabase database = is_main_thread ? qApp->database()->driver()->connection(metaObject()->className())
- : qApp->database()->driver()->connection(QSL("feed_upd_%1").arg(thread_id));
+ QSqlDatabase database = qApp->database()->driver()->threadSafeConnection(metaObject()->className());
int account_id = getParentServiceRoot()->accountId();
m_totalCount = m_unreadCount = DatabaseQueries::getUnreadMessageCounts(database, account_id);