20 #include "messagemodel.h"
21 #include "messageparts.h"
23 #include <akonadi/itemfetchscope.h>
24 #include <akonadi/monitor.h>
25 #include <akonadi/session.h>
27 #include <kmime/kmime_message.h>
28 #include <boost/shared_ptr.hpp>
29 typedef boost::shared_ptr<KMime::Message> MessagePtr;
34 #include <klocalizedstring.h>
36 #include <QtCore/QDebug>
38 using namespace Akonadi;
40 class Akonadi::MessageModel::Private
60 << QLatin1String(
"text/uri-list")
61 << QLatin1String(
"message/rfc822");
66 if ( collection().isValid()
67 && !collection().contentMimeTypes().contains( QLatin1String(
"message/rfc822") )
68 && collection().contentMimeTypes() != QStringList( QLatin1String(
"inode/directory") ) )
71 return ItemModel::rowCount();
76 if ( collection().isValid()
77 && !collection().contentMimeTypes().contains( QLatin1String(
"message/rfc822") )
78 && collection().contentMimeTypes() != QStringList( QLatin1String(
"inode/directory") ) )
81 if ( !parent.isValid() )
89 if ( !index.isValid() )
94 if ( !collection().contentMimeTypes().contains( QLatin1String(
"message/rfc822") ) ) {
95 if ( role == Qt::DisplayRole )
96 return i18nc(
"@label",
"This model can only handle email folders. The current collection holds mimetypes: %1",
97 collection().contentMimeTypes().join( QLatin1String(
",") ) );
102 Item item = itemForIndex( index );
103 if ( !item.hasPayload<MessagePtr>() )
105 MessagePtr msg = item.payload<MessagePtr>();
106 if ( role == Qt::DisplayRole ) {
107 switch ( index.column() ) {
109 return msg->subject()->asUnicodeString();
111 return msg->from()->asUnicodeString();
113 return msg->to()->asUnicodeString();
115 return KGlobal::locale()->formatDateTime( msg->date()->dateTime().toLocalZone(), KLocale::FancyLongDate );
117 if ( item.size() == 0 )
118 return i18nc(
"@label No size available",
"-" );
120 return KGlobal::locale()->formatByteSize( item.size() );
124 }
else if ( role == Qt::EditRole ) {
125 switch ( index.column() ) {
127 return msg->subject()->asUnicodeString();
129 return msg->from()->asUnicodeString();
131 return msg->to()->asUnicodeString();
133 return msg->date()->dateTime().dateTime();
140 return ItemModel::data( index, role );
146 if ( collection().isValid()
147 && !collection().contentMimeTypes().contains( QLatin1String(
"message/rfc822") )
148 && collection().contentMimeTypes() != QStringList( QLatin1String(
"inode/directory") ) )
151 if ( orientation == Qt::Horizontal && role == Qt::DisplayRole ) {
154 return i18nc(
"@title:column, message (e.g. email) subject",
"Subject" );
156 return i18nc(
"@title:column, sender of message (e.g. email)",
"Sender" );
158 return i18nc(
"@title:column, receiver of message (e.g. email)",
"Receiver" );
160 return i18nc(
"@title:column, message (e.g. email) timestamp",
"Date" );
162 return i18nc(
"@title:column, message (e.g. email) size",
"Size" );
167 return ItemModel::headerData( section, orientation, role );
virtual int rowCount(const QModelIndex &parent=QModelIndex()) const
Reimplemented from QAbstractItemModel.
AKONADI_KMIME_EXPORT const char * Envelope
The part identifier for envelope parts.
virtual QStringList mimeTypes() const
Reimplemented from QAbstractItemModel.
virtual QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const
Reimplemented from QAbstractItemModel.
MessageModel(QObject *parent=0)
Creates a new message model.
virtual int columnCount(const QModelIndex &parent=QModelIndex()) const
Reimplemented from QAbstractItemModel.
virtual QVariant headerData(int section, Qt::Orientation orientation, int role=Qt::DisplayRole) const
Reimplemented from QAbstractItemModel.
virtual ~MessageModel()
Deletes the message model.