Refactored getting Message instances from DB.

This commit is contained in:
Martin Rotter 2015-12-11 13:04:37 +01:00
parent c40961ccba
commit 62e87a941a
7 changed files with 67 additions and 68 deletions

View File

@ -17,6 +17,10 @@
#include "core/message.h"
#include "miscellaneous/textfactory.h"
#include <QVariant>
Enclosure::Enclosure(const QString &url, const QString &mime) : m_url(url), m_mimeType(mime) {
}
@ -66,3 +70,35 @@ Message::Message() {
m_accountId = m_id = 0;
m_isRead = m_isImportant = false;
}
Message Message::fromSqlRecord(const QSqlRecord &record, bool *result) {
if (record.count() != MSG_DB_CUSTOM_ID_INDEX + 1) {
if (result != NULL) {
*result = false;
return Message();
}
}
Message message;
message.m_id = record.value(MSG_DB_ID_INDEX).toInt();
message.m_isRead = record.value(MSG_DB_READ_INDEX).toBool();
//message = record.value(MSG_DB_DELETED_INDEX).toInt();
message.m_isImportant = record.value(MSG_DB_IMPORTANT_INDEX).toBool();
message.m_feedId = record.value(MSG_DB_FEED_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();
message.m_created = TextFactory::parseDateTime(record.value(MSG_DB_DCREATED_INDEX).value<qint64>());
message.m_contents = record.value(MSG_DB_CONTENTS_INDEX).toString();
//message = record.value(MSG_DB_PDELETED_INDEX).toInt();
message.m_enclosures = Enclosures::decodeEnclosuresFromString(record.value(MSG_DB_ENCLOSURES_INDEX).toString());
message.m_accountId = record.value(MSG_DB_ACCOUNT_ID_INDEX).toInt();
message.m_customId = record.value(MSG_DB_CUSTOM_ID_INDEX).toString();
if (result != NULL) {
*result = true;
}
return message;
}

View File

@ -22,6 +22,7 @@
#include <QDateTime>
#include <QStringList>
#include <QSqlRecord>
// Represents single enclosure.
@ -44,6 +45,10 @@ class Message {
public:
explicit Message();
// Creates Message from given record, which contains
// row from query SELECT * FROM Messages WHERE ....;
static Message fromSqlRecord(const QSqlRecord &record, bool *result = NULL);
QString m_title;
QString m_url;
QString m_author;

View File

@ -130,22 +130,7 @@ void MessagesModel::reloadWholeLayout() {
}
Message MessagesModel::messageAt(int row_index) const {
QSqlRecord rec = record(row_index);
Message message;
// Fill Message object with details.
message.m_author = rec.value(MSG_DB_AUTHOR_INDEX).toString();
message.m_contents = rec.value(MSG_DB_CONTENTS_INDEX).toString();
message.m_enclosures = Enclosures::decodeEnclosuresFromString(rec.value(MSG_DB_ENCLOSURES_INDEX).toString());
message.m_title = rec.value(MSG_DB_TITLE_INDEX).toString();
message.m_url = rec.value(MSG_DB_URL_INDEX).toString();
message.m_feedId = rec.value(MSG_DB_FEED_INDEX).toString();
message.m_accountId = rec.value(MSG_DB_ACCOUNT_ID_INDEX).toInt();
message.m_id = rec.value(MSG_DB_ID_INDEX).toInt();
message.m_customId = rec.value(MSG_DB_CUSTOM_ID_INDEX).toString();
message.m_created = TextFactory::parseDateTime(rec.value(MSG_DB_DCREATED_INDEX).value<qint64>()).toLocalTime();
return message;
return Message::fromSqlRecord(record(row_index));
}
void MessagesModel::setupHeaderData() {

View File

@ -93,7 +93,7 @@ QList<Message> RecycleBin::undeletedMessages() const {
QSqlQuery query_read_msg(database);
query_read_msg.setForwardOnly(true);
query_read_msg.prepare("SELECT title, url, author, date_created, contents, enclosures, custom_id, id, feed "
query_read_msg.prepare("SELECT * "
"FROM Messages "
"WHERE is_deleted = 1 AND is_pdeleted = 0 AND account_id = :account_id;");
query_read_msg.bindValue(QSL(":account_id"), account_id);
@ -102,18 +102,12 @@ QList<Message> RecycleBin::undeletedMessages() const {
if (query_read_msg.exec()) {
while (query_read_msg.next()) {
Message message;
bool decoded;
Message message = Message::fromSqlRecord(query_read_msg.record(), &decoded);
message.m_feedId = query_read_msg.value(7).toString();
message.m_title = query_read_msg.value(0).toString();
message.m_url = query_read_msg.value(1).toString();
message.m_author = query_read_msg.value(2).toString();
message.m_created = TextFactory::parseDateTime(query_read_msg.value(3).value<qint64>());
message.m_contents = query_read_msg.value(4).toString();
message.m_enclosures = Enclosures::decodeEnclosuresFromString(query_read_msg.value(5).toString());
message.m_accountId = account_id;
message.m_customId = query_read_msg.value(6).toString();
message.m_id = query_read_msg.value(7).toInt();
if (decoded) {
messages.append(message);
}
messages.append(message);
}

View File

@ -67,7 +67,7 @@ QList<Message> ServiceRoot::undeletedMessages() const {
QSqlQuery query_read_msg(database);
query_read_msg.setForwardOnly(true);
query_read_msg.prepare("SELECT title, url, author, date_created, contents, enclosures, custom_id, id, feed "
query_read_msg.prepare("SELECT * "
"FROM Messages "
"WHERE is_deleted = 0 AND is_pdeleted = 0 AND account_id = :account_id;");
query_read_msg.bindValue(QSL(":account_id"), account_id);
@ -76,22 +76,12 @@ QList<Message> ServiceRoot::undeletedMessages() const {
if (query_read_msg.exec()) {
while (query_read_msg.next()) {
Message message;
bool decoded;
Message message = Message::fromSqlRecord(query_read_msg.record(), &decoded);
// TODO: napsat funkci static Message Message::fromSqlRecord(const QSqlRecord &record)
// ta prostě bude brat record z SELECT * FROM Messages WHERE ....;
// a vrati ho jako objekt Message;
message.m_feedId = query_read_msg.value(7).toString();
message.m_title = query_read_msg.value(0).toString();
message.m_url = query_read_msg.value(1).toString();
message.m_author = query_read_msg.value(2).toString();
message.m_created = TextFactory::parseDateTime(query_read_msg.value(3).value<qint64>());
message.m_contents = query_read_msg.value(4).toString();
message.m_enclosures = Enclosures::decodeEnclosuresFromString(query_read_msg.value(5).toString());
message.m_accountId = account_id;
message.m_customId = query_read_msg.value(6).toString();
message.m_id = query_read_msg.value(7).toInt();
if (decoded) {
messages.append(message);
}
messages.append(message);
}

View File

@ -135,7 +135,7 @@ QList<Message> StandardFeed::undeletedMessages() const {
QSqlDatabase database = qApp->database()->connection(metaObject()->className(), DatabaseFactory::FromSettings);
QSqlQuery query_read_msg(database);
query_read_msg.setForwardOnly(true);
query_read_msg.prepare("SELECT title, url, author, date_created, contents, enclosures, id "
query_read_msg.prepare("SELECT * "
"FROM Messages "
"WHERE is_deleted = 0 AND feed = :feed AND account_id = :account_id;");
@ -146,17 +146,12 @@ QList<Message> StandardFeed::undeletedMessages() const {
if (query_read_msg.exec()) {
while (query_read_msg.next()) {
Message message;
bool decoded;
Message message = Message::fromSqlRecord(query_read_msg.record(), &decoded);
message.m_feedId = id();
message.m_title = query_read_msg.value(0).toString();
message.m_url = query_read_msg.value(1).toString();
message.m_author = query_read_msg.value(2).toString();
message.m_created = TextFactory::parseDateTime(query_read_msg.value(3).value<qint64>());
message.m_contents = query_read_msg.value(4).toString();
message.m_accountId = const_cast<StandardFeed*>(this)->serviceRoot()->accountId();
message.m_enclosures = Enclosures::decodeEnclosuresFromString(query_read_msg.value(5).toString());
message.m_id = query_read_msg.value(6).toInt();
if (decoded) {
messages.append(message);
}
messages.append(message);
}

View File

@ -118,7 +118,7 @@ QList<Message> TtRssFeed::undeletedMessages() const {
QSqlQuery query_read_msg(database);
query_read_msg.setForwardOnly(true);
query_read_msg.prepare("SELECT title, url, author, date_created, contents, enclosures, custom_id, id "
query_read_msg.prepare("SELECT * "
"FROM Messages "
"WHERE is_deleted = 0 AND is_pdeleted = 0 AND feed = :feed AND account_id = :account_id;");
@ -129,18 +129,12 @@ QList<Message> TtRssFeed::undeletedMessages() const {
if (query_read_msg.exec()) {
while (query_read_msg.next()) {
Message message;
bool decoded;
Message message = Message::fromSqlRecord(query_read_msg.record(), &decoded);
message.m_feedId = QString::number(customId());
message.m_title = query_read_msg.value(0).toString();
message.m_url = query_read_msg.value(1).toString();
message.m_author = query_read_msg.value(2).toString();
message.m_created = TextFactory::parseDateTime(query_read_msg.value(3).value<qint64>());
message.m_contents = query_read_msg.value(4).toString();
message.m_enclosures = Enclosures::decodeEnclosuresFromString(query_read_msg.value(5).toString());
message.m_accountId = account_id;
message.m_customId = query_read_msg.value(6).toString();
message.m_id = query_read_msg.value(7).toInt();
if (decoded) {
messages.append(message);
}
messages.append(message);
}