SQL refactoring.
This commit is contained in:
parent
74194ea6a6
commit
78d6301f35
@ -26,10 +26,6 @@
|
|||||||
#include "services/abstract/serviceroot.h"
|
#include "services/abstract/serviceroot.h"
|
||||||
#include "miscellaneous/databasequeries.h"
|
#include "miscellaneous/databasequeries.h"
|
||||||
|
|
||||||
#include <QSqlRecord>
|
|
||||||
#include <QSqlError>
|
|
||||||
#include <QSqlQuery>
|
|
||||||
|
|
||||||
|
|
||||||
MessagesModel::MessagesModel(QObject *parent)
|
MessagesModel::MessagesModel(QObject *parent)
|
||||||
: QSqlTableModel(parent, qApp->database()->connection(QSL("MessagesModel"), DatabaseFactory::FromSettings)),
|
: QSqlTableModel(parent, qApp->database()->connection(QSL("MessagesModel"), DatabaseFactory::FromSettings)),
|
||||||
@ -259,7 +255,7 @@ bool MessagesModel::setMessageRead(int row_index, RootItem::ReadStatus read) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (DatabaseQueries::markMessageRead(database(), message.m_id, read)) {
|
if (DatabaseQueries::markMessagesRead(database(), QStringList() << QString::number(message.m_id), read)) {
|
||||||
return m_selectedItem->getParentServiceRoot()->onAfterSetMessagesRead(m_selectedItem, QList<Message>() << message, read);
|
return m_selectedItem->getParentServiceRoot()->onAfterSetMessagesRead(m_selectedItem, QList<Message>() << message, read);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -300,12 +296,9 @@ bool MessagesModel::switchMessageImportance(int row_index) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool MessagesModel::switchBatchMessageImportance(const QModelIndexList &messages) {
|
bool MessagesModel::switchBatchMessageImportance(const QModelIndexList &messages) {
|
||||||
QSqlQuery query_read_msg(database());
|
|
||||||
QStringList message_ids;
|
QStringList message_ids;
|
||||||
QList<QPair<Message,RootItem::Importance> > message_states;
|
QList<QPair<Message,RootItem::Importance> > message_states;
|
||||||
|
|
||||||
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) {
|
||||||
const Message msg = messageAt(message.row());
|
const Message msg = messageAt(message.row());
|
||||||
@ -321,8 +314,7 @@ bool MessagesModel::switchBatchMessageImportance(const QModelIndexList &messages
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (query_read_msg.exec(QString(QSL("UPDATE Messages SET is_important = NOT is_important WHERE id IN (%1);"))
|
if (DatabaseQueries::switchMessagesImportance(database(), message_ids)) {
|
||||||
.arg(message_ids.join(QSL(", "))))) {
|
|
||||||
fetchAllData();
|
fetchAllData();
|
||||||
return m_selectedItem->getParentServiceRoot()->onAfterSwitchMessageImportance(m_selectedItem, message_states);
|
return m_selectedItem->getParentServiceRoot()->onAfterSwitchMessageImportance(m_selectedItem, message_states);
|
||||||
}
|
}
|
||||||
@ -347,19 +339,16 @@ bool MessagesModel::setBatchMessagesDeleted(const QModelIndexList &messages) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
QSqlQuery query_read_msg(database());
|
bool deleted;
|
||||||
QString sql_delete_query;
|
|
||||||
|
|
||||||
query_read_msg.setForwardOnly(true);
|
|
||||||
|
|
||||||
if (m_selectedItem->kind() != RootItemKind::Bin) {
|
if (m_selectedItem->kind() != RootItemKind::Bin) {
|
||||||
sql_delete_query = QString(QSL("UPDATE Messages SET is_deleted = 1 WHERE id IN (%1);")).arg(message_ids.join(QSL(", ")));
|
deleted = DatabaseQueries::deleteOrRestoreMessagesToFromBin(database(), message_ids, true);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
sql_delete_query = QString(QSL("UPDATE Messages SET is_pdeleted = 1 WHERE id IN (%1);")).arg(message_ids.join(QSL(", ")));
|
deleted = DatabaseQueries::permanentlyDeleteMessages(database(), message_ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (query_read_msg.exec(sql_delete_query)) {
|
if (deleted) {
|
||||||
fetchAllData();
|
fetchAllData();
|
||||||
return m_selectedItem->getParentServiceRoot()->onAfterMessagesDelete(m_selectedItem, msgs);
|
return m_selectedItem->getParentServiceRoot()->onAfterMessagesDelete(m_selectedItem, msgs);
|
||||||
}
|
}
|
||||||
@ -384,13 +373,8 @@ bool MessagesModel::setBatchMessagesRead(const QModelIndexList &messages, RootIt
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
QSqlQuery query_read_msg(database());
|
if (DatabaseQueries::markMessagesRead(database(), message_ids, read)) {
|
||||||
query_read_msg.setForwardOnly(true);
|
|
||||||
|
|
||||||
if (query_read_msg.exec(QString(QSL("UPDATE Messages SET is_read = %2 WHERE id IN (%1);"))
|
|
||||||
.arg(message_ids.join(QSL(", ")), read == RootItem::Read ? QSL("1") : QSL("0")))) {
|
|
||||||
fetchAllData();
|
fetchAllData();
|
||||||
|
|
||||||
return m_selectedItem->getParentServiceRoot()->onAfterSetMessagesRead(m_selectedItem, msgs, read);
|
return m_selectedItem->getParentServiceRoot()->onAfterSetMessagesRead(m_selectedItem, msgs, read);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -414,14 +398,8 @@ bool MessagesModel::setBatchMessagesRestored(const QModelIndexList &messages) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
QSqlQuery query_read_msg(database());
|
if (DatabaseQueries::deleteOrRestoreMessagesToFromBin(database(), message_ids, false)) {
|
||||||
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();
|
fetchAllData();
|
||||||
|
|
||||||
return m_selectedItem->getParentServiceRoot()->onAfterMessagesRestoredFromBin(m_selectedItem, msgs);
|
return m_selectedItem->getParentServiceRoot()->onAfterMessagesRestoredFromBin(m_selectedItem, msgs);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -19,13 +19,13 @@
|
|||||||
|
|
||||||
#include "miscellaneous/application.h"
|
#include "miscellaneous/application.h"
|
||||||
#include "network-web/webfactory.h"
|
#include "network-web/webfactory.h"
|
||||||
|
#include "miscellaneous/databasequeries.h"
|
||||||
#include "gui/messagebox.h"
|
#include "gui/messagebox.h"
|
||||||
#include "gui/dialogs/formmain.h"
|
#include "gui/dialogs/formmain.h"
|
||||||
#include "services/abstract/serviceroot.h"
|
#include "services/abstract/serviceroot.h"
|
||||||
|
|
||||||
#include <QScrollBar>
|
#include <QScrollBar>
|
||||||
#include <QToolBar>
|
#include <QToolBar>
|
||||||
#include <QSqlQuery>
|
|
||||||
#include <QToolTip>
|
#include <QToolTip>
|
||||||
|
|
||||||
|
|
||||||
@ -136,14 +136,9 @@ void MessagePreviewer::markMessageAsRead() {
|
|||||||
if (m_root->getParentServiceRoot()->onBeforeSetMessagesRead(m_root.data(),
|
if (m_root->getParentServiceRoot()->onBeforeSetMessagesRead(m_root.data(),
|
||||||
QList<Message>() << m_message,
|
QList<Message>() << m_message,
|
||||||
RootItem::Read)) {
|
RootItem::Read)) {
|
||||||
QSqlQuery query_read_msg(qApp->database()->connection(objectName(), DatabaseFactory::FromSettings));
|
DatabaseQueries::markMessagesRead(qApp->database()->connection(objectName(), DatabaseFactory::FromSettings),
|
||||||
query_read_msg.setForwardOnly(true);
|
QStringList() << QString::number(m_message.m_id),
|
||||||
|
RootItem::Read);
|
||||||
query_read_msg.prepare(QSL("UPDATE Messages SET is_read = :read WHERE id = :id;"));
|
|
||||||
query_read_msg.bindValue(QSL(":id"), m_message.m_id);
|
|
||||||
query_read_msg.bindValue(QSL(":read"), 1);
|
|
||||||
query_read_msg.exec();
|
|
||||||
|
|
||||||
m_root->getParentServiceRoot()->onAfterSetMessagesRead(m_root.data(),
|
m_root->getParentServiceRoot()->onAfterSetMessagesRead(m_root.data(),
|
||||||
QList<Message>() << m_message,
|
QList<Message>() << m_message,
|
||||||
RootItem::Read);
|
RootItem::Read);
|
||||||
@ -161,14 +156,9 @@ void MessagePreviewer::markMessageAsUnread() {
|
|||||||
if (m_root->getParentServiceRoot()->onBeforeSetMessagesRead(m_root.data(),
|
if (m_root->getParentServiceRoot()->onBeforeSetMessagesRead(m_root.data(),
|
||||||
QList<Message>() << m_message,
|
QList<Message>() << m_message,
|
||||||
RootItem::Unread)) {
|
RootItem::Unread)) {
|
||||||
QSqlQuery query_read_msg(qApp->database()->connection(objectName(), DatabaseFactory::FromSettings));
|
DatabaseQueries::markMessagesRead(qApp->database()->connection(objectName(), DatabaseFactory::FromSettings),
|
||||||
query_read_msg.setForwardOnly(true);
|
QStringList() << QString::number(m_message.m_id),
|
||||||
|
RootItem::Unread);
|
||||||
query_read_msg.prepare(QSL("UPDATE Messages SET is_read = :read WHERE id = :id;"));
|
|
||||||
query_read_msg.bindValue(QSL(":id"), m_message.m_id);
|
|
||||||
query_read_msg.bindValue(QSL(":read"), 0);
|
|
||||||
query_read_msg.exec();
|
|
||||||
|
|
||||||
m_root->getParentServiceRoot()->onAfterSetMessagesRead(m_root.data(),
|
m_root->getParentServiceRoot()->onAfterSetMessagesRead(m_root.data(),
|
||||||
QList<Message>() << m_message,
|
QList<Message>() << m_message,
|
||||||
RootItem::Unread);
|
RootItem::Unread);
|
||||||
@ -188,13 +178,8 @@ void MessagePreviewer::switchMessageImportance(bool checked) {
|
|||||||
m_message.m_isImportant ?
|
m_message.m_isImportant ?
|
||||||
RootItem::NotImportant :
|
RootItem::NotImportant :
|
||||||
RootItem::Important))) {
|
RootItem::Important))) {
|
||||||
QSqlQuery query_read_msg(qApp->database()->connection(objectName(), DatabaseFactory::FromSettings));
|
DatabaseQueries::switchMessagesImportance(qApp->database()->connection(objectName(), DatabaseFactory::FromSettings),
|
||||||
query_read_msg.setForwardOnly(true);
|
QStringList() << QString::number(m_message.m_id));
|
||||||
|
|
||||||
query_read_msg.prepare(QSL("UPDATE Messages SET is_important = :important WHERE id = :id;"));
|
|
||||||
query_read_msg.bindValue(QSL(":id"), m_message.m_id);
|
|
||||||
query_read_msg.bindValue(QSL(":important"), (int) checked);
|
|
||||||
query_read_msg.exec();
|
|
||||||
|
|
||||||
m_root->getParentServiceRoot()->onBeforeSwitchMessageImportance(m_root.data(),
|
m_root->getParentServiceRoot()->onBeforeSwitchMessageImportance(m_root.data(),
|
||||||
QList<ImportanceChange>() << ImportanceChange(m_message,
|
QList<ImportanceChange>() << ImportanceChange(m_message,
|
||||||
|
@ -20,35 +20,50 @@
|
|||||||
#include <QVariant>
|
#include <QVariant>
|
||||||
|
|
||||||
|
|
||||||
bool DatabaseQueries::markMessageRead(QSqlDatabase db, int id, RootItem::ReadStatus read) {
|
bool DatabaseQueries::markMessagesRead(QSqlDatabase db, const QStringList &ids, RootItem::ReadStatus read) {
|
||||||
QSqlQuery query_read_msg(db);
|
QSqlQuery query_read_msg(db);
|
||||||
query_read_msg.setForwardOnly(true);
|
query_read_msg.setForwardOnly(true);
|
||||||
|
|
||||||
if (!query_read_msg.prepare(QSL("UPDATE Messages SET is_read = :read WHERE id = :id;"))) {
|
return query_read_msg.exec(QString(QSL("UPDATE Messages SET is_read = %2 WHERE id IN (%1);"))
|
||||||
qWarning("Query preparation failed for message read change.");
|
.arg(ids.join(QSL(", ")), read == RootItem::Read ? QSL("1") : QSL("0")));
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
query_read_msg.bindValue(QSL(":id"), id);
|
|
||||||
query_read_msg.bindValue(QSL(":read"), (int) read);
|
|
||||||
|
|
||||||
return query_read_msg.exec();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DatabaseQueries::markMessageImportant(QSqlDatabase db, int id, RootItem::Importance importance) {
|
bool DatabaseQueries::markMessageImportant(QSqlDatabase db, int id, RootItem::Importance importance) {
|
||||||
QSqlQuery query_importance_msg(db);
|
QSqlQuery q;(db);
|
||||||
query_importance_msg.setForwardOnly(true);
|
q.setForwardOnly(true);
|
||||||
|
|
||||||
if (!query_importance_msg.prepare(QSL("UPDATE Messages SET is_important = :important WHERE id = :id;"))) {
|
if (!q.prepare(QSL("UPDATE Messages SET is_important = :important WHERE id = :id;"))) {
|
||||||
qWarning("Query preparation failed for message importance switch.");
|
qWarning("Query preparation failed for message importance switch.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
query_importance_msg.bindValue(QSL(":id"), id);
|
q.bindValue(QSL(":id"), id);
|
||||||
query_importance_msg.bindValue(QSL(":important"), (int) importance);
|
q.bindValue(QSL(":important"), (int) importance);
|
||||||
|
|
||||||
// Commit changes.
|
// Commit changes.
|
||||||
return query_importance_msg.exec();
|
return q.exec();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DatabaseQueries::switchMessagesImportance(QSqlDatabase db, const QStringList &ids) {
|
||||||
|
QSqlQuery q(db);
|
||||||
|
q.setForwardOnly(true);
|
||||||
|
|
||||||
|
return q.exec(QString(QSL("UPDATE Messages SET is_important = NOT is_important WHERE id IN (%1);")).arg(ids.join(QSL(", "))));
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DatabaseQueries::permanentlyDeleteMessages(QSqlDatabase db, const QStringList &ids) {
|
||||||
|
QSqlQuery q(db);
|
||||||
|
q.setForwardOnly(true);
|
||||||
|
|
||||||
|
return q.exec(QString(QSL("UPDATE Messages SET is_pdeleted = 1 WHERE id IN (%1);")).arg(ids.join(QSL(", "))));
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DatabaseQueries::deleteOrRestoreMessagesToFromBin(QSqlDatabase db, const QStringList &ids, bool deleted) {
|
||||||
|
QSqlQuery q(db);
|
||||||
|
q.setForwardOnly(true);
|
||||||
|
|
||||||
|
return q.exec(QString(QSL("UPDATE Messages SET is_deleted = %2 WHERE id IN (%1);")).arg(ids.join(QSL(", ")),
|
||||||
|
QString::number(deleted ? 1 : 0)));
|
||||||
}
|
}
|
||||||
|
|
||||||
DatabaseQueries::DatabaseQueries() {
|
DatabaseQueries::DatabaseQueries() {
|
||||||
|
@ -25,8 +25,11 @@
|
|||||||
|
|
||||||
class DatabaseQueries {
|
class DatabaseQueries {
|
||||||
public:
|
public:
|
||||||
static bool markMessageRead(QSqlDatabase db, int id, RootItem::ReadStatus read);
|
static bool markMessagesRead(QSqlDatabase db, const QStringList &ids, RootItem::ReadStatus read);
|
||||||
static bool markMessageImportant(QSqlDatabase db, int id, RootItem::Importance importance);
|
static bool markMessageImportant(QSqlDatabase db, int id, RootItem::Importance importance);
|
||||||
|
static bool switchMessagesImportance(QSqlDatabase db, const QStringList &ids);
|
||||||
|
static bool permanentlyDeleteMessages(QSqlDatabase db, const QStringList &ids);
|
||||||
|
static bool deleteOrRestoreMessagesToFromBin(QSqlDatabase db, const QStringList &ids, bool deleted);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
explicit DatabaseQueries();
|
explicit DatabaseQueries();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user