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 bool hasFlag( const QByteArray &name ) const;
00128
00132 void setFlag( const QByteArray &name );
00133
00137 void clearFlag( const QByteArray &name );
00138
00142 void setFlags( const Flags &flags );
00143
00147 void clearFlags();
00148
00156 void setPayloadFromData( const QByteArray &data );
00157
00164 QByteArray payloadData() const;
00165
00170 QSet<QByteArray> loadedPayloadParts() const;
00171
00178 void setRevision( int revision );
00179
00183 int revision() const;
00184
00188 void setMimeType( const QString &mimeType );
00189
00193 QString mimeType() const;
00194
00201 template <typename T>
00202 void setPayload( T p )
00203 {
00204 setPayloadBase( new Payload<T>( p ) );
00205 }
00206
00214 template <typename T>
00215 T payload() const
00216 {
00217 if ( !payloadBase() ) Q_ASSERT_X(false, "Akonadi::Item::payload()", "No valid payload set.");
00218
00219 Payload<T> *p = dynamic_cast<Payload<T>*>( payloadBase() );
00220
00221 if ( !p && strcmp( payloadBase()->typeName(), typeid(p).name() ) == 0 ) {
00222 p = reinterpret_cast<Payload<T>*>( payloadBase() );
00223 }
00224 if ( !p )
00225 qFatal( "Akonadi::Item::payload(): Wrong payload type (is '%s', requested '%s')",
00226 payloadBase()->typeName(), typeid(p).name() );
00227 return p->payload;
00228 }
00229
00233 bool hasPayload() const;
00234
00238 template <typename T>
00239 bool hasPayload() const
00240 {
00241 if ( !hasPayload() )
00242 return false;
00243 Payload<T> *p = dynamic_cast<Payload<T>*>( payloadBase() );
00244
00245 if ( !p && strcmp( payloadBase()->typeName(), typeid(p).name() ) == 0 ) {
00246 p = reinterpret_cast<Payload<T>*>( payloadBase() );
00247 }
00248 return p;
00249 }
00250
00254 enum UrlType
00255 {
00256 UrlShort = 0,
00257 UrlWithMimeType = 1
00258 };
00259
00263 KUrl url( UrlType type = UrlShort ) const;
00264
00265 private:
00266
00267 friend class ItemModifyJob;
00268 friend class ItemFetchJob;
00269 PayloadBase* payloadBase() const;
00270 void setPayloadBase( PayloadBase* );
00271
00272
00273 AKONADI_DECLARE_PRIVATE( Item )
00274 };
00275
00276 }
00277
00278 Q_DECLARE_METATYPE(Akonadi::Item)
00279 Q_DECLARE_METATYPE(Akonadi::Item::List)
00280
00281 #endif