diff --git a/src/core/message.cpp b/src/core/message.cpp index e47791322..e74789fff 100755 --- a/src/core/message.cpp +++ b/src/core/message.cpp @@ -17,6 +17,10 @@ #include "core/message.h" +#include "miscellaneous/textfactory.h" + +#include + 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()); + 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; +} diff --git a/src/core/message.h b/src/core/message.h index a9f9769fb..299299230 100755 --- a/src/core/message.h +++ b/src/core/message.h @@ -22,6 +22,7 @@ #include #include +#include // 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; diff --git a/src/core/messagesmodel.cpp b/src/core/messagesmodel.cpp index 8663f5466..baacb58ab 100755 --- a/src/core/messagesmodel.cpp +++ b/src/core/messagesmodel.cpp @@ -129,23 +129,8 @@ void MessagesModel::reloadWholeLayout() { emit layoutChanged(); } -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()).toLocalTime(); - - return message; +Message MessagesModel::messageAt(int row_index) const { + return Message::fromSqlRecord(record(row_index)); } void MessagesModel::setupHeaderData() { diff --git a/src/services/abstract/recyclebin.cpp b/src/services/abstract/recyclebin.cpp index a616714bf..5cc27df93 100755 --- a/src/services/abstract/recyclebin.cpp +++ b/src/services/abstract/recyclebin.cpp @@ -93,7 +93,7 @@ QList 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 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()); - 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); } diff --git a/src/services/abstract/serviceroot.cpp b/src/services/abstract/serviceroot.cpp index f84b288d4..455b9e4f8 100755 --- a/src/services/abstract/serviceroot.cpp +++ b/src/services/abstract/serviceroot.cpp @@ -67,7 +67,7 @@ QList 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 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()); - 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); } diff --git a/src/services/standard/standardfeed.cpp b/src/services/standard/standardfeed.cpp index 0eeb522b0..9057b67d9 100755 --- a/src/services/standard/standardfeed.cpp +++ b/src/services/standard/standardfeed.cpp @@ -135,7 +135,7 @@ QList 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 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()); - message.m_contents = query_read_msg.value(4).toString(); - message.m_accountId = const_cast(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); } diff --git a/src/services/tt-rss/ttrssfeed.cpp b/src/services/tt-rss/ttrssfeed.cpp index 075ef70bc..bc1c5a3df 100755 --- a/src/services/tt-rss/ttrssfeed.cpp +++ b/src/services/tt-rss/ttrssfeed.cpp @@ -118,7 +118,7 @@ QList 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 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()); - 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); }