Performance enhancements for message list..

This commit is contained in:
Martin Rotter 2014-03-01 15:09:10 +01:00
parent 96951c2588
commit 1f5fa55bc0
3 changed files with 15 additions and 15 deletions

@ -93,7 +93,7 @@ QStringList MessagesModel::textualFeeds() const {
} }
int MessagesModel::messageId(int row_index) const { int MessagesModel::messageId(int row_index) const {
return record(row_index).value(MSG_DB_ID_INDEX).toInt(); return data(row_index, MSG_DB_ID_INDEX).toInt();
} }
Message MessagesModel::messageAt(int row_index) const { Message MessagesModel::messageAt(int row_index) const {
@ -140,24 +140,26 @@ QVariant MessagesModel::data(int row, int column, int role) const {
return data(index(row, column), role); return data(index(row, column), role);
} }
QVariant MessagesModel::data(const QModelIndex &index, int role) const { QVariant MessagesModel::data(const QModelIndex &idx, int role) const {
switch (role) { switch (role) {
// Human readable data for viewing. // Human readable data for viewing.
case Qt::DisplayRole: { case Qt::DisplayRole: {
int index_column = index.column(); int index_column = idx.column();
if (index_column == MSG_DB_DCREATED_INDEX) { if (index_column == MSG_DB_DCREATED_INDEX) {
return TextFactory::parseDateTime(QSqlTableModel::data(index, // TODO: toLocalTime() may be unnecessary here
// because parseDateTime already returns localtime.
return TextFactory::parseDateTime(QSqlTableModel::data(idx,
role).value<qint64>()).toLocalTime().toString(Qt::DefaultLocaleShortDate); role).value<qint64>()).toLocalTime().toString(Qt::DefaultLocaleShortDate);
} }
else if (index_column == MSG_DB_AUTHOR_INDEX) { else if (index_column == MSG_DB_AUTHOR_INDEX) {
QString author_name = QSqlTableModel::data(index, role).toString(); QString author_name = QSqlTableModel::data(idx, role).toString();
return author_name.isEmpty() ? "-" : author_name; return author_name.isEmpty() ? "-" : author_name;
} }
else if (index_column != MSG_DB_IMPORTANT_INDEX && else if (index_column != MSG_DB_IMPORTANT_INDEX &&
index_column != MSG_DB_READ_INDEX) { index_column != MSG_DB_READ_INDEX) {
return QSqlTableModel::data(index, role); return QSqlTableModel::data(idx, role);
} }
else { else {
return QVariant(); return QVariant();
@ -165,23 +167,24 @@ QVariant MessagesModel::data(const QModelIndex &index, int role) const {
} }
case Qt::EditRole: case Qt::EditRole:
return QSqlTableModel::data(index, role); return QSqlTableModel::data(idx, role);
case Qt::FontRole: case Qt::FontRole:
return record(index.row()).value(MSG_DB_READ_INDEX).toInt() == 1 ? return QSqlTableModel::data(index(idx.row(),
MSG_DB_READ_INDEX)).toInt() == 1 ?
m_normalFont : m_normalFont :
m_boldFont; m_boldFont;
case Qt::DecorationRole: { case Qt::DecorationRole: {
int index_column = index.column(); int index_column = idx.column();
if (index_column == MSG_DB_READ_INDEX) { if (index_column == MSG_DB_READ_INDEX) {
return record(index.row()).value(MSG_DB_READ_INDEX).toInt() == 1 ? return QSqlTableModel::data(idx).toInt() == 1 ?
m_readIcon : m_readIcon :
m_unreadIcon; m_unreadIcon;
} }
else if (index_column == MSG_DB_IMPORTANT_INDEX) { else if (index_column == MSG_DB_IMPORTANT_INDEX) {
return record(index.row()).value(MSG_DB_IMPORTANT_INDEX).toInt() == 1 ? return QSqlTableModel::data(idx).toInt() == 1 ?
m_favoriteIcon : m_favoriteIcon :
QVariant(); QVariant();
} }

@ -72,7 +72,6 @@ class MessagesModel : public QSqlTableModel {
// To disable persistent changes submissions. // To disable persistent changes submissions.
inline bool submitAll() { inline bool submitAll() {
qFatal("Submitting changes via model is not allowed."); qFatal("Submitting changes via model is not allowed.");
return false; return false;
} }

@ -40,9 +40,7 @@ class TextFactory {
static QDateTime parseDateTime(const QString &date_time); static QDateTime parseDateTime(const QString &date_time);
// Converts 1970-epoch miliseconds to date/time. // Converts 1970-epoch miliseconds to date/time.
// NOTE: This method returns date/time local-time // NOTE: This apparently returns date/time in localtime.
// which is calculated from the system settings.
// NOTE: On Windows UTC is known to be broken.
static QDateTime parseDateTime(qint64 milis_from_epoch); static QDateTime parseDateTime(qint64 milis_from_epoch);
// Strips "<....>" (HTML, XML) tags from given text. // Strips "<....>" (HTML, XML) tags from given text.