#ifndef API_H #define API_H class PIMDataReference { QString persistanceID() const; QUrl externalUrl() const; }; class PIMJob : public QObject { Q_OBJECT public: void exec() { QEventLoop loop( ... ); connect( this, SIGNAL(done()), &loop, SLOT(quit()) ); doStart(); loop.exec(); } void start() { doStart(); } signals: void done(); private: virtual void doStart() = 0; }; class PIMQuery : public PIMJob { Q_OBJECT public: void setQueryString( const QString & query ) { doSetQueryString( query ); } QList result() const; private: void doStart(); protected: virtual void doSetQueryString( const QString & query ); }; class PIMDataRequest : public PIMJob { Q_OBJECT public: explicit PIMDataRequest( const PIMDataReference & ref, const QString & part="ALL", const QStringList & acceptableMimeTypes=QStringList() ); QByteArray data() const; QByteArray mimeType() const; private: void doStart(); }; // // // Start convenience API // // class EMailQuery : public PIMQuery { Q_OBJECT public: EMailQuery(); protected: void doSetQueryString( const QString & query ) { PIMQuery::doSetQueryString( "mimetype=message/rfc822;" + query ); } }; class EMailRequest : public PIMDataRequest { Q_OBJECT public: explicit EMailRequest( const PIMDataReference & ref, const QString & part="ALL" ); KMail::Message message() const { Q_ASSERT( mimeType() == QLatin1String( "message/rfc822" ) ); return KMail::Message::fromRfc822( data() ); } }; class CalendarEventRequest : public PIMDataRequest { Q_OBJECT public: explicit CalendarEventRequest( const PIMDataRequest & ref ); KCal::FooBar event() const; }; class NotesRequest : public PIMDataRequest { Q_OBJECT public: explicit NotesRequest( const PIMDataRequest & ref ); KCal::BarBaz note() const; }; // ... void example() { PIMQuery query; query.setQueryString( "mimetype=message/rfc822; folder=/inbox; date>=2005-12-31;" ); query.exec(); const QList result = query.result(); foreach( const PIMDataReference ref, result ) { EMailRequest req( ref, "BODY,HEADER" ); req.exec(); const KMail::Message msg = req.message(); // ... } } #endif /* API_H */