SVN commit 1186546 by vkrause: Reduce calls to the expensive itemForRow() method by 40%, speeds up initial message list population by about 15%. M +18 -12 storagemodel.cpp --- trunk/KDE/kdepim/messagelist/storagemodel.cpp #1186545:1186546 @@ -78,6 +78,19 @@ using namespace Akonadi; using namespace MessageList; +namespace { + +KMime::Message::Ptr messageForItem( const Akonadi::Item &item ) +{ + if ( !item.hasPayload() ) { + kWarning() << "Not a message" << item.id() << item.remoteId() << item.mimeType(); + return KMime::Message::Ptr(); + } + return item.payload(); +} + +} + static QAtomicInt _k_attributeInitialized; StorageModel::StorageModel( QAbstractItemModel *model, QItemSelectionModel *selectionModel, QObject *parent ) @@ -216,8 +229,8 @@ bool StorageModel::initializeMessageItem( MessageList::Core::MessageItem *mi, int row, bool bUseReceiver ) const { - Item item = itemForRow( row ); - const KMime::Message::Ptr mail = messageForRow( row ); + const Item item = itemForRow( row ); + const KMime::Message::Ptr mail = messageForItem( item ); if ( !mail ) return false; QString sender = mail->from()->asUnicodeString(); @@ -301,8 +314,8 @@ void StorageModel::updateMessageItemData( MessageList::Core::MessageItem *mi, int row ) const { - Item item = itemForRow( row ); - const KMime::Message::Ptr mail = messageForRow( row ); + const Item item = itemForRow( row ); + const KMime::Message::Ptr mail = messageForItem( item ); Q_ASSERT( mail ); Akonadi::MessageStatus stat; @@ -486,16 +499,9 @@ KMime::Message::Ptr StorageModel::messageForRow( int row ) const { - Item item = itemForRow( row ); - - if ( !item.hasPayload() ) { - kWarning() << "Not a message" << item.id() << item.remoteId() << item.mimeType(); - return KMime::Message::Ptr(); + return messageForItem( itemForRow( row ) ); } - return item.payload(); -} - void StorageModel::resetModelStorage() { reset();