Construct SQL queries for the model manually. This will greatly help in the future.
This commit is contained in:
parent
33981c350a
commit
905d3c533d
|
@ -84,7 +84,7 @@ Message Message::fromSqlRecord(const QSqlRecord &record, bool *result) {
|
|||
message.m_id = record.value(MSG_DB_ID_INDEX).toInt();
|
||||
message.m_isRead = record.value(MSG_DB_READ_INDEX).toBool();
|
||||
message.m_isImportant = record.value(MSG_DB_IMPORTANT_INDEX).toBool();
|
||||
message.m_feedId = record.value(MSG_DB_FEED_INDEX).toString();
|
||||
message.m_feedId = record.value(MSG_DB_FEED_CUSTOM_ID_INDEX).toString();
|
||||
message.m_title = record.value(MSG_DB_TITLE_INDEX).toString();
|
||||
message.m_url = record.value(MSG_DB_URL_INDEX).toString();
|
||||
message.m_author = record.value(MSG_DB_AUTHOR_INDEX).toString();
|
||||
|
|
|
@ -39,8 +39,6 @@ MessagesModel::MessagesModel(QObject *parent)
|
|||
// via model, but via DIRECT SQL calls are used to do persistent messages.
|
||||
setEditStrategy(QSqlTableModel::OnManualSubmit);
|
||||
setTable(QSL("Messages"));
|
||||
setRelation(MSG_DB_FEED_INDEX, QSqlRelation("Feeds", "custom_id", "title"));
|
||||
|
||||
loadMessages(nullptr);
|
||||
}
|
||||
|
||||
|
@ -76,7 +74,7 @@ void MessagesModel::loadMessages(RootItem *item) {
|
|||
m_selectedItem = item;
|
||||
|
||||
if (item == nullptr) {
|
||||
setFilter("true != true");
|
||||
setFilter("0 > 1");
|
||||
}
|
||||
else {
|
||||
if (!item->getParentServiceRoot()->loadMessagesForItem(item, this)) {
|
||||
|
@ -90,6 +88,8 @@ void MessagesModel::loadMessages(RootItem *item) {
|
|||
}
|
||||
}
|
||||
|
||||
qDebug("Select statement when selecting msg from item:\n'%s'", qPrintable(selectStatement()));
|
||||
|
||||
fetchAllData();
|
||||
}
|
||||
|
||||
|
@ -167,7 +167,8 @@ void MessagesModel::setupHeaderData() {
|
|||
/*: Tooltip for attachments of message.*/ tr("Attachments") <<
|
||||
/*: Tooltip for account ID of message.*/ tr("Account ID") <<
|
||||
/*: Tooltip for custom ID of message.*/ tr("Custom ID") <<
|
||||
/*: Tooltip for custom hash string of message.*/ tr("Custom hash");
|
||||
/*: Tooltip for custom hash string of message.*/ tr("Custom hash") <<
|
||||
/*: Tooltip for custom ID of feed of message.*/ tr("Feed ID");;
|
||||
|
||||
m_tooltipData << tr("Id of the message.") << tr("Is message read?") <<
|
||||
tr("Is message deleted?") << tr("Is message important?") <<
|
||||
|
@ -176,7 +177,7 @@ void MessagesModel::setupHeaderData() {
|
|||
tr("Author of the message.") << tr("Creation date of the message.") <<
|
||||
tr("Contents of the message.") << tr("Is message permanently deleted from recycle bin?") <<
|
||||
tr("List of attachments.") << tr("Account ID of the message.") << tr("Custom ID of the message") <<
|
||||
tr("Custom hash of the message.");
|
||||
tr("Custom hash of the message.") << tr("Custom ID of feed of the message.");
|
||||
}
|
||||
|
||||
Qt::ItemFlags MessagesModel::flags(const QModelIndex &index) const {
|
||||
|
@ -185,6 +186,14 @@ Qt::ItemFlags MessagesModel::flags(const QModelIndex &index) const {
|
|||
return Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsEditable | Qt::ItemNeverHasChildren;
|
||||
}
|
||||
|
||||
QString MessagesModel::selectStatement() const {
|
||||
//return QSqlRelationalTableModel::selectStatement();
|
||||
|
||||
return QL1S("SELECT Messages.\"id\" as \"id\", \"is_read\", \"is_deleted\", \"is_important\", Feeds.\"title\" as \"feed_title\", Messages.\"title\" as \"title\", Messages.\"url\" as \"url\", \"author\", Messages.\"date_created\" as \"date_created\", \"contents\", \"is_pdeleted\", \"enclosures\", Messages.\"account_id\" as \"account_id\", Messages.\"custom_id\" as \"custom_id\", \"custom_hash\", Messages.\"feed\" as \"feed_custom_id\" "
|
||||
"FROM Messages LEFT JOIN Feeds ON Messages.feed = Feeds.custom_id WHERE ") +
|
||||
filter() + " " + orderByClause();
|
||||
}
|
||||
|
||||
QVariant MessagesModel::data(int row, int column, int role) const {
|
||||
return data(index(row, column), role);
|
||||
}
|
||||
|
|
|
@ -52,6 +52,8 @@ class MessagesModel : public QSqlRelationalTableModel {
|
|||
QVariant headerData(int section, Qt::Orientation orientation, int role) const;
|
||||
Qt::ItemFlags flags(const QModelIndex &index) const;
|
||||
|
||||
QString selectStatement() const;
|
||||
|
||||
// Returns message at given index.
|
||||
Message messageAt(int row_index) const;
|
||||
int messageId(int row_index) const;
|
||||
|
|
|
@ -151,7 +151,7 @@
|
|||
#define MSG_DB_READ_INDEX 1
|
||||
#define MSG_DB_DELETED_INDEX 2
|
||||
#define MSG_DB_IMPORTANT_INDEX 3
|
||||
#define MSG_DB_FEED_INDEX 4
|
||||
#define MSG_DB_FEED_TITLE_INDEX 4
|
||||
#define MSG_DB_TITLE_INDEX 5
|
||||
#define MSG_DB_URL_INDEX 6
|
||||
#define MSG_DB_AUTHOR_INDEX 7
|
||||
|
@ -162,6 +162,7 @@
|
|||
#define MSG_DB_ACCOUNT_ID_INDEX 12
|
||||
#define MSG_DB_CUSTOM_ID_INDEX 13
|
||||
#define MSG_DB_CUSTOM_HASH_INDEX 14
|
||||
#define MSG_DB_FEED_CUSTOM_ID_INDEX 15
|
||||
|
||||
// Indexes of columns as they are DEFINED IN THE TABLE for CATEGORIES.
|
||||
#define CAT_DB_ID_INDEX 0
|
||||
|
|
|
@ -530,7 +530,7 @@ void MessagesView::adjustColumns() {
|
|||
header()->setSectionResizeMode(MSG_DB_READ_INDEX, QHeaderView::ResizeToContents);
|
||||
header()->setSectionResizeMode(MSG_DB_DELETED_INDEX, QHeaderView::Interactive);
|
||||
header()->setSectionResizeMode(MSG_DB_IMPORTANT_INDEX, QHeaderView::ResizeToContents);
|
||||
header()->setSectionResizeMode(MSG_DB_FEED_INDEX, QHeaderView::Interactive);
|
||||
header()->setSectionResizeMode(MSG_DB_FEED_TITLE_INDEX, QHeaderView::Interactive);
|
||||
header()->setSectionResizeMode(MSG_DB_TITLE_INDEX, QHeaderView::Stretch);
|
||||
header()->setSectionResizeMode(MSG_DB_URL_INDEX, QHeaderView::Interactive);
|
||||
header()->setSectionResizeMode(MSG_DB_AUTHOR_INDEX, QHeaderView::Interactive);
|
||||
|
@ -549,6 +549,7 @@ void MessagesView::adjustColumns() {
|
|||
hideColumn(MSG_DB_ACCOUNT_ID_INDEX);
|
||||
hideColumn(MSG_DB_CUSTOM_ID_INDEX);
|
||||
hideColumn(MSG_DB_CUSTOM_HASH_INDEX);
|
||||
hideColumn(MSG_DB_FEED_CUSTOM_ID_INDEX);
|
||||
|
||||
qDebug("Adjusting column resize modes for MessagesView.");
|
||||
}
|
||||
|
|
|
@ -394,8 +394,8 @@ bool ServiceRoot::loadMessagesForItem(RootItem *item, QSqlTableModel *model) {
|
|||
QList<Feed*> children = item->getSubTreeFeeds();
|
||||
QString filter_clause = textualFeedIds(children).join(QSL(", "));
|
||||
|
||||
model->setFilter(QString("Messages.feed IN (%1) AND Messages.is_deleted = 0 AND Messages.is_pdeleted = 0 AND Messages.account_id = %2").arg(filter_clause,
|
||||
QString::number(accountId())));
|
||||
model->setFilter(QString("Feeds.custom_id IN (%1) AND Messages.is_deleted = 0 AND Messages.is_pdeleted = 0 AND Messages.account_id = %2").arg(filter_clause,
|
||||
QString::number(accountId())));
|
||||
qDebug("Loading messages from feeds: %s.", qPrintable(filter_clause));
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue