SVN commit 1196428 by vkrause: Store the source Akonadi item in MessageItem. This not only allows us to get rid of a few other member variables, but also to return a full item in Model::data(), so subsequent ItemModifyJobs run on them use the correct item revision. M +13 -13 core/messageitem.cpp M +6 -3 core/messageitem.h M +1 -1 core/model.cpp M +1 -5 storagemodel.cpp --- trunk/KDE/kdepim/messagelist/core/messageitem.cpp #1196427:1196428 @@ -24,6 +24,8 @@ #include "ontologies/email.h" #include "messagecore/annotationdialog.h" +#include + #include #include #include @@ -152,10 +154,9 @@ QString mInReplyToIdMD5; ///< set only if we're doing threading QString mReferencesIdMD5; ///< set only if we're doing threading QString mStrippedSubjectMD5; ///< set only if we're doing threading - QUrl mNepomukResourceUri; ///< The URI under which this item can be found in Nepomuk EncryptionState mEncryptionState; SignatureState mSignatureState; - unsigned long mUniqueId; ///< The unique id of this message (serial number of KMMsgBase at the moment of writing) + Akonadi::Item mAkonadiItem; bool mAboutToBeRemoved : 1; ///< Set to true when this item is going to be deleted and shouldn't be selectable bool mSubjectIsPrefixed : 1; ///< set only if we're doing subject based threading @@ -194,7 +195,6 @@ MessageItem::Private::Private() : mThreadingStatus( MessageItem::ParentMissing ), - mUniqueId( 0 ), mAboutToBeRemoved( false ), mAnnotationStateChecked( false ), mTagList( 0 ) @@ -238,7 +238,7 @@ // TODO: The tag pointers here could be shared between all items, there really is no point in // creating them for each item that has tags - const Nepomuk::Resource resource( mNepomukResourceUri ); + const Nepomuk::Resource resource( mAkonadiItem.url() ); const QList< Nepomuk::Tag > nepomukTagList = resource.tags(); if ( !nepomukTagList.isEmpty() ) { foreach( const Nepomuk::Tag &nepomukTag, nepomukTagList ) { @@ -308,7 +308,7 @@ if ( d->mAnnotationStateChecked ) return d->mHasAnnotation; - Nepomuk::Resource resource( d->mNepomukResourceUri ); + Nepomuk::Resource resource( d->mAkonadiItem.url() ); if ( resource.hasProperty( QUrl( Nepomuk::Resource::descriptionUri() ) ) ) { d->mHasAnnotation = !resource.description().isEmpty(); } else { @@ -322,7 +322,7 @@ QString MessageItem::annotation() const { if ( hasAnnotation() ) { - Nepomuk::Resource resource( d->mNepomukResourceUri ); + Nepomuk::Resource resource( d->mAkonadiItem.url() ); return resource.description(); } else return QString(); @@ -330,7 +330,7 @@ void MessageItem::editAnnotation() { - MessageCore::AnnotationEditDialog *dialog = new MessageCore::AnnotationEditDialog( d->mNepomukResourceUri ); + MessageCore::AnnotationEditDialog *dialog = new MessageCore::AnnotationEditDialog( d->mAkonadiItem.url() ); dialog->setAttribute( Qt::WA_DeleteOnClose ); dialog->show(); // invalidate the cached mHasAnnotation value @@ -339,7 +339,7 @@ QString MessageItem::contentSummary() const { - Nepomuk::Resource mail( d->mNepomukResourceUri ); + Nepomuk::Resource mail( d->mAkonadiItem.url() ); const QString content = mail.property( NepomukFast::Message::plainTextMessageContentUri() ).toString(); @@ -546,17 +546,17 @@ unsigned long MessageItem::uniqueId() const { - return d->mUniqueId; + return d->mAkonadiItem.id(); } -void MessageItem::setUniqueId( unsigned long uniqueId ) +Akonadi::Item MessageList::Core::MessageItem::akonadiItem() const { - d->mUniqueId = uniqueId; + return d->mAkonadiItem; } -void MessageItem::setNepomukResourceURI( const QUrl &nepomukUri ) +void MessageList::Core::MessageItem::setAkonadiItem(const Akonadi::Item& item) { - d->mNepomukResourceUri = nepomukUri; + d->mAkonadiItem = item; } MessageItem * MessageItem::topmostMessage() --- trunk/KDE/kdepim/messagelist/core/messageitem.h #1196427:1196428 @@ -30,6 +30,10 @@ #include +namespace Akonadi { +class Item; +} + namespace MessageList { @@ -170,10 +174,9 @@ unsigned long uniqueId() const; - void setUniqueId( unsigned long uniqueId ); + Akonadi::Item akonadiItem() const; + void setAkonadiItem( const Akonadi::Item &item ); - void setNepomukResourceURI( const QUrl &nepomukUri ); - MessageItem * topmostMessage(); /** --- trunk/KDE/kdepim/messagelist/core/model.cpp #1196427:1196428 @@ -474,7 +474,7 @@ case Qt::UserRole + 2: //EntityTreeModel::ItemRole if( item->type() == MessageList::Core::Item::Message ) { MessageItem* mItem = static_cast( item ); - return QVariant::fromValue( Akonadi::Item( mItem->uniqueId() ) ); + return QVariant::fromValue( mItem->akonadiItem() ); } else return QVariant(); break; --- trunk/KDE/kdepim/messagelist/storagemodel.cpp #1196427:1196428 @@ -252,12 +252,8 @@ sender, receiver, bUseReceiver ? receiver : sender ); - mi->setUniqueId( item.id() ); + mi->setAkonadiItem( item ); - // Storing the Nepomuk resource URI could be avoided, since we already store the item ID, but that - // would mean that MessageItem needs to depend on Akonadi, which we don't want (yet?) - mi->setNepomukResourceURI( item.url() ); - QString subject = mail->subject()->asUnicodeString(); if ( subject.isEmpty() ) { subject = QLatin1Char( '(' ) + noSubject + QLatin1Char( ')' );