summaryrefslogtreecommitdiffstats
path: root/knode/knjobdata.h
diff options
context:
space:
mode:
Diffstat (limited to 'knode/knjobdata.h')
-rw-r--r--knode/knjobdata.h141
1 files changed, 141 insertions, 0 deletions
diff --git a/knode/knjobdata.h b/knode/knjobdata.h
new file mode 100644
index 000000000..5733a9883
--- /dev/null
+++ b/knode/knjobdata.h
@@ -0,0 +1,141 @@
+/*
+ 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 <qobject.h>
+#include <qvaluelist.h>
+
+#include <libkdepim/progressmanager.h>
+
+namespace KIO {
+ 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);
+ QValueList<KNJobData*> mJobs;
+
+};
+
+
+class KNJobItem {
+
+ public:
+ KNJobItem() {}
+ virtual ~KNJobItem() {}
+
+ virtual bool isLocked() { return false; }
+ virtual void setLocked(bool) { }
+
+ virtual QString prepareForExecution() { return QString::null; }
+
+};
+
+
+class KNJobData : public QObject
+{
+ 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 QString& 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 QString& s) { e_rrorString=s; }
+ void cancel();
+ void setAuthError(bool b) { a_uthError=b; }
+
+ void prepareForExecution() { e_rrorString = d_ata->prepareForExecution(); }
+ void notifyConsumer();
+
+ KIO::Job* job() const { return mJob; }
+ void setJob( KIO::Job *job );
+
+ KPIM::ProgressItem* progressItem() const { return mProgressItem; }
+ void createProgressItem();
+
+ // safe forwards to the progress item
+ void setStatus( const QString &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;
+ QString e_rrorString;
+ bool c_anceled;
+ bool a_uthError;
+ KNJobConsumer *c_onsumer;
+
+ private slots:
+ void slotJobPercent( KIO::Job *job, unsigned long percent );
+ void slotJobInfoMessage( KIO::Job *job, const QString &msg );
+
+ private:
+ KIO::Job *mJob;
+ KPIM::ProgressItem *mProgressItem;
+
+};
+
+
+#endif