akonadi
item.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef AKONADI_ITEM_H
00022 #define AKONADI_ITEM_H
00023
00024 #include "akonadi_export.h"
00025
00026 #include <akonadi/entity.h>
00027
00028 #include <QtCore/QByteArray>
00029 #include <QtCore/QMetaType>
00030 #include <QtCore/QSet>
00031
00032 #include <typeinfo>
00033
00034 class KUrl;
00035
00036 namespace Akonadi {
00037
00038 class ItemPrivate;
00039
00040 #include "itempayloadinternals_p.h"
00041
00062 class AKONADI_EXPORT Item : public Entity
00063 {
00064 public:
00068 typedef QList<Item> List;
00069
00073 typedef QByteArray Flag;
00074
00078 typedef QSet<QByteArray> Flags;
00079
00084 static const char* FullPayload;
00085
00089 Item();
00090
00094 explicit Item( Id id );
00095
00101 explicit Item( const QString &mimeType );
00102
00106 Item( const Item &other );
00107
00111 ~Item();
00112
00116 static Item fromUrl( const KUrl &url );
00117
00121 Flags flags() const;
00122
00127 QDateTime modificationTime() const;
00128
00136 void setModificationTime( const QDateTime &datetime );
00137
00142 bool hasFlag( const QByteArray &name ) const;
00143
00147 void setFlag( const QByteArray &name );
00148
00152 void clearFlag( const QByteArray &name );
00153
00157 void setFlags( const Flags &flags );
00158
00162 void clearFlags();
00163
00171 void setPayloadFromData( const QByteArray &data );
00172
00179 QByteArray payloadData() const;
00180
00185 QSet<QByteArray> loadedPayloadParts() const;
00186
00193 void setRevision( int revision );
00194
00198 int revision() const;
00199
00205 void setSize( qint64 size );
00206
00212 qint64 size() const;
00213
00217 void setMimeType( const QString &mimeType );
00218
00222 QString mimeType() const;
00223
00230 template <typename T>
00231 void setPayload( T p )
00232 {
00233 setPayloadBase( new Payload<T>( p ) );
00234 }
00235
00243 template <typename T>
00244 T payload() const
00245 {
00246 if ( !payloadBase() ) Q_ASSERT_X(false, "Akonadi::Item::payload()", "No valid payload set.");
00247
00248 Payload<T> *p = dynamic_cast<Payload<T>*>( payloadBase() );
00249
00250 if ( !p && strcmp( payloadBase()->typeName(), typeid(p).name() ) == 0 ) {
00251 p = reinterpret_cast<Payload<T>*>( payloadBase() );
00252 }
00253 if ( !p )
00254 qFatal( "Akonadi::Item::payload(): Wrong payload type (is '%s', requested '%s')",
00255 payloadBase()->typeName(), typeid(p).name() );
00256 return p->payload;
00257 }
00258
00262 bool hasPayload() const;
00263
00267 template <typename T>
00268 bool hasPayload() const
00269 {
00270 if ( !hasPayload() )
00271 return false;
00272 Payload<T> *p = dynamic_cast<Payload<T>*>( payloadBase() );
00273
00274 if ( !p && strcmp( payloadBase()->typeName(), typeid(p).name() ) == 0 ) {
00275 p = reinterpret_cast<Payload<T>*>( payloadBase() );
00276 }
00277 return p;
00278 }
00279
00283 enum UrlType
00284 {
00285 UrlShort = 0,
00286 UrlWithMimeType = 1
00287 };
00288
00292 KUrl url( UrlType type = UrlShort ) const;
00293
00294 private:
00295
00296 friend class ItemModifyJob;
00297 friend class ItemFetchJob;
00298 PayloadBase* payloadBase() const;
00299 void setPayloadBase( PayloadBase* );
00300
00301
00302 AKONADI_DECLARE_PRIVATE( Item )
00303 };
00304
00305 }
00306
00307 Q_DECLARE_METATYPE(Akonadi::Item)
00308 Q_DECLARE_METATYPE(Akonadi::Item::List)
00309
00310 #endif