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_p.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 QDateTime Item::modificationTime() const
00095 {
00096 return d_func()->mModificationTime;
00097 }
00098
00099 void Item::setModificationTime( const QDateTime &datetime )
00100 {
00101 d_func()->mModificationTime = datetime;
00102 }
00103
00104 bool Item::hasFlag( const QByteArray & name ) const
00105 {
00106 return d_func()->mFlags.contains( name );
00107 }
00108
00109 QSet<QByteArray> Item::loadedPayloadParts() const
00110 {
00111 return ItemSerializer::parts( *this );
00112 }
00113
00114 QByteArray Item::payloadData() const
00115 {
00116 int version = 0;
00117 QByteArray data;
00118 ItemSerializer::serialize( *this, FullPayload, data, version );
00119 return data;
00120 }
00121
00122 void Item::setPayloadFromData( const QByteArray &data )
00123 {
00124 ItemSerializer::deserialize( *this, FullPayload, data, 0, false );
00125 }
00126
00127 int Item::revision() const
00128 {
00129 return d_func()->mRevision;
00130 }
00131
00132 void Item::setRevision( int rev )
00133 {
00134 d_func()->mRevision = rev;
00135 }
00136
00137 Entity::Id Item::storageCollectionId() const
00138 {
00139 return d_func()->mCollectionId;
00140 }
00141
00142 void Item::setStorageCollectionId( Entity::Id collectionId )
00143 {
00144 d_func()->mCollectionId = collectionId;
00145 }
00146
00147 QString Item::mimeType() const
00148 {
00149 return d_func()->mMimeType;
00150 }
00151
00152 void Item::setSize( qint64 size )
00153 {
00154 Q_D( Item );
00155 d->mSize = size;
00156 d->mSizeChanged = true;
00157 }
00158
00159 qint64 Item::size() const
00160 {
00161 return d_func()->mSize;
00162 }
00163
00164 void Item::setMimeType( const QString & mimeType )
00165 {
00166 d_func()->mMimeType = mimeType;
00167 }
00168
00169 bool Item::hasPayload() const
00170 {
00171 return d_func()->mPayload != 0;
00172 }
00173
00174 KUrl Item::url( UrlType type ) const
00175 {
00176 KUrl url;
00177 url.setProtocol( QString::fromLatin1("akonadi") );
00178 url.addQueryItem( QLatin1String( "item" ), QString::number( id() ) );
00179
00180 if ( type == UrlWithMimeType )
00181 url.addQueryItem( QLatin1String( "type" ), mimeType() );
00182
00183 return url;
00184 }
00185
00186 Item Item::fromUrl( const KUrl &url )
00187 {
00188 if ( url.protocol() != QLatin1String( "akonadi" ) )
00189 return Item();
00190
00191 const QString itemStr = url.queryItem( QLatin1String( "item" ) );
00192 bool ok = false;
00193 Item::Id itemId = itemStr.toLongLong( &ok );
00194 if ( !ok )
00195 return Item();
00196
00197 return Item( itemId );
00198 }
00199
00200 PayloadBase* Item::payloadBase() const
00201 {
00202 return d_func()->mPayload;
00203 }
00204
00205 void Item::setPayloadBase( PayloadBase* p )
00206 {
00207 Q_D( Item );
00208 delete d->mPayload;
00209 d->mPayload = p;
00210 }
00211
00212 AKONADI_DEFINE_PRIVATE( Item )