akonadi
item.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "item.h"
00021 #include "item_p.h"
00022 #include "itemserializer.h"
00023 #include "protocol_p.h"
00024
00025 #include <kurl.h>
00026
00027 #include <QtCore/QStringList>
00028
00029 using namespace Akonadi;
00030
00031
00032 const char* Item::FullPayload = "RFC822";
00033
00034 Item::Item()
00035 : Entity( new ItemPrivate )
00036 {
00037 }
00038
00039 Item::Item( Id id )
00040 : Entity( new ItemPrivate( id ) )
00041 {
00042 }
00043
00044 Item::Item( const QString & mimeType )
00045 : Entity( new ItemPrivate )
00046 {
00047 d_func()->mMimeType = mimeType;
00048 }
00049
00050 Item::Item( const Item &other )
00051 : Entity( other )
00052 {
00053 }
00054
00055 Item::~Item()
00056 {
00057 }
00058
00059 Item::Flags Item::flags() const
00060 {
00061 return d_func()->mFlags;
00062 }
00063
00064 void Item::setFlag( const QByteArray & name )
00065 {
00066 Q_D( Item );
00067 d->mFlags.insert( name );
00068 if ( !d->mFlagsOverwritten )
00069 d->mAddedFlags.insert( name );
00070 }
00071
00072 void Item::clearFlag( const QByteArray & name )
00073 {
00074 Q_D( Item );
00075 d->mFlags.remove( name );
00076 if ( !d->mFlagsOverwritten )
00077 d->mDeletedFlags.insert( name );
00078 }
00079
00080 void Item::setFlags( const Flags &flags )
00081 {
00082 Q_D( Item );
00083 d->mFlags = flags;
00084 d->mFlagsOverwritten = true;
00085 }
00086
00087 void Item::clearFlags()
00088 {
00089 Q_D( Item );
00090 d->mFlags.clear();
00091 d->mFlagsOverwritten = true;
00092 }
00093
00094 bool Item::hasFlag( const QByteArray & name ) const
00095 {
00096 return d_func()->mFlags.contains( name );
00097 }
00098
00099 QSet<QByteArray> Item::loadedPayloadParts() const
00100 {
00101 return ItemSerializer::parts( *this );
00102 }
00103
00104 QByteArray Item::payloadData() const
00105 {
00106 int version = 0;
00107 QByteArray data;
00108 ItemSerializer::serialize( *this, FullPayload, data, version );
00109 return data;
00110 }
00111
00112 void Item::setPayloadFromData( const QByteArray &data )
00113 {
00114 ItemSerializer::deserialize( *this, FullPayload, data, 0 );
00115 }
00116
00117 int Item::revision() const
00118 {
00119 return d_func()->mRevision;
00120 }
00121
00122 void Item::setRevision( int rev )
00123 {
00124 d_func()->mRevision = rev;
00125 }
00126
00127 QString Item::mimeType() const
00128 {
00129 return d_func()->mMimeType;
00130 }
00131
00132 void Item::setMimeType( const QString & mimeType )
00133 {
00134 d_func()->mMimeType = mimeType;
00135 }
00136
00137 bool Item::hasPayload() const
00138 {
00139 return d_func()->mPayload != 0;
00140 }
00141
00142 KUrl Item::url( UrlType type ) const
00143 {
00144 KUrl url;
00145 url.setProtocol( QString::fromLatin1("akonadi") );
00146 url.addQueryItem( QLatin1String( "item" ), QString::number( id() ) );
00147
00148 if ( type == UrlWithMimeType )
00149 url.addQueryItem( QLatin1String( "type" ), mimeType() );
00150
00151 return url;
00152 }
00153
00154 Item Item::fromUrl( const KUrl &url )
00155 {
00156 if ( url.protocol() != QLatin1String( "akonadi" ) )
00157 return Item();
00158
00159 const QString itemStr = url.queryItem( QLatin1String( "item" ) );
00160 bool ok = false;
00161 Item::Id itemId = itemStr.toLongLong( &ok );
00162 if ( !ok )
00163 return Item();
00164
00165 return Item( itemId );
00166 }
00167
00168 PayloadBase* Item::payloadBase() const
00169 {
00170 return d_func()->mPayload;
00171 }
00172
00173 void Item::setPayloadBase( PayloadBase* p )
00174 {
00175 Q_D( Item );
00176 delete d->mPayload;
00177 d->mPayload = p;
00178 }
00179
00180 AKONADI_DEFINE_PRIVATE( Item )