/* KNode, the KDE newsreader Copyright (c) 1999-2005 the KNode authors. See file AUTHORS for details This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, US */ #ifndef KNJOBDATA_H #define KNJOBDATA_H #include <tqobject.h> #include <tqvaluelist.h> #include <libtdepim/progressmanager.h> namespace TDEIO { class Job; } class KNJobData; class KNServerInfo; class KNJobConsumer { public: KNJobConsumer(); virtual ~KNJobConsumer(); /** Send the job to KNNetAccess and append it to the joblist */ void emitJob(KNJobData *j); /** Remove the job from the joblist and process it by calling @ref processJob */ void jobDone(KNJobData *j); /** Returns true if we are waiting for at least one job to be completed */ bool jobsPending() const { return !mJobs.isEmpty(); } protected: /** The actual work is done here */ virtual void processJob(KNJobData *j); TQValueList<KNJobData*> mJobs; }; class KNJobItem { public: KNJobItem() {} virtual ~KNJobItem() {} virtual bool isLocked() { return false; } virtual void setLocked(bool) { } virtual TQString prepareForExecution() { return TQString(); } }; class KNJobData : public TQObject { Q_OBJECT public: friend class KNJobConsumer; enum jobType { JTLoadGroups=1, JTFetchGroups, JTCheckNewGroups, JTfetchNewHeaders, JTsilentFetchNewHeaders, JTfetchArticle, JTpostArticle, JTmail, JTfetchSource }; KNJobData(jobType t, KNJobConsumer *c, KNServerInfo *a, KNJobItem *i); ~KNJobData(); jobType type() const { return t_ype; } bool net() const { return (t_ype!=JTLoadGroups); } KNServerInfo* account() const { return a_ccount; } KNJobItem* data() const { return d_ata; } const TQString& errorString() const { return e_rrorString; } bool success() const { return e_rrorString.isEmpty(); } bool canceled() const { return c_anceled; } bool authError() const { return a_uthError; } void setErrorString(const TQString& s) { e_rrorString=s; } void cancel(); void setAuthError(bool b) { a_uthError=b; } void prepareForExecution() { e_rrorString = d_ata->prepareForExecution(); } void notifyConsumer(); TDEIO::Job* job() const { return mJob; } void setJob( TDEIO::Job *job ); KPIM::ProgressItem* progressItem() const { return mProgressItem; } void createProgressItem(); // safe forwards to the progress item void setStatus( const TQString &msg ) { if ( mProgressItem ) mProgressItem->setStatus( msg ); } void setProgress( unsigned int progress ) { if ( mProgressItem ) mProgressItem->setProgress( progress ); } void setComplete() { if ( mProgressItem ) { mProgressItem->setComplete(); mProgressItem = 0; } } protected: jobType t_ype; KNJobItem *d_ata; KNServerInfo *a_ccount; TQString e_rrorString; bool c_anceled; bool a_uthError; KNJobConsumer *c_onsumer; private slots: void slotJobPercent( TDEIO::Job *job, unsigned long percent ); void slotJobInfoMessage( TDEIO::Job *job, const TQString &msg ); private: TDEIO::Job *mJob; KPIM::ProgressItem *mProgressItem; }; #endif