summaryrefslogtreecommitdiffstats
path: root/knode/knjobdata.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'knode/knjobdata.cpp')
-rw-r--r--knode/knjobdata.cpp147
1 files changed, 147 insertions, 0 deletions
diff --git a/knode/knjobdata.cpp b/knode/knjobdata.cpp
new file mode 100644
index 00000000..7d8cb6f8
--- /dev/null
+++ b/knode/knjobdata.cpp
@@ -0,0 +1,147 @@
+/*
+ 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
+*/
+
+
+#include <kdebug.h>
+#include <klocale.h>
+#include <kio/job.h>
+
+#include <libkdepim/progressmanager.h>
+
+#include "knarticle.h"
+#include "knglobals.h"
+#include "knnetaccess.h"
+#include "knnntpaccount.h"
+
+#include <qstylesheet.h>
+
+KNJobConsumer::KNJobConsumer()
+{
+}
+
+
+KNJobConsumer::~KNJobConsumer()
+{
+ QValueList<KNJobData*>::Iterator it;
+ for ( it = mJobs.begin(); it != mJobs.end(); ++it )
+ (*it)->c_onsumer = 0;
+}
+
+
+void KNJobConsumer::emitJob( KNJobData *j )
+{
+ if ( j ) {
+ mJobs.append( j );
+ knGlobals.netAccess()->addJob( j );
+ }
+}
+
+
+void KNJobConsumer::jobDone( KNJobData *j )
+{
+ if ( j && mJobs.remove( j ) )
+ processJob( j );
+}
+
+
+void KNJobConsumer::processJob( KNJobData *j )
+{
+ delete j;
+}
+
+
+// the assingment of a_ccount may cause race conditions, check again.... (CG)
+KNJobData::KNJobData(jobType t, KNJobConsumer *c, KNServerInfo *a, KNJobItem *i)
+ : t_ype(t), d_ata(i), a_ccount(a), c_anceled(false), a_uthError(false), c_onsumer(c),
+ mJob( 0 ),
+ mProgressItem( 0 )
+{
+ d_ata->setLocked(true);
+}
+
+
+
+KNJobData::~KNJobData()
+{
+ d_ata->setLocked(false);
+}
+
+
+void KNJobData::notifyConsumer()
+{
+
+ if(c_onsumer)
+ c_onsumer->jobDone(this);
+ else
+ delete this;
+}
+
+void KNJobData::cancel()
+{
+ c_anceled = true;
+ if ( mJob ) {
+ mJob->kill();
+ mJob = 0;
+ }
+ if ( mProgressItem ) {
+ mProgressItem->setStatus( "Canceled" );
+ mProgressItem->setComplete();
+ mProgressItem = 0;
+ }
+}
+
+void KNJobData::setJob( KIO::Job *job )
+{
+ mJob = job;
+ if ( job ) {
+ connect( job, SIGNAL( percent(KIO::Job*, unsigned long) ),
+ SLOT( slotJobPercent(KIO::Job*, unsigned long) ) );
+ connect( job, SIGNAL( infoMessage(KIO::Job*, const QString&) ),
+ SLOT( slotJobInfoMessage(KIO::Job*, const QString&) ) );
+ }
+}
+
+void KNJobData::createProgressItem()
+{
+ if ( mProgressItem )
+ return;
+ KNNntpAccount *acc = static_cast<KNNntpAccount*>( account() );
+ QString msg = i18n( "KNode" );
+ if ( type() == JTmail )
+ msg = i18n( "Sending message" );
+ else {
+ if ( acc )
+ msg = QStyleSheet::escape( acc->name() );
+ }
+ bool encr = false;
+ if ( acc && acc->encryption() != KNServerInfo::None )
+ encr = true;
+ mProgressItem = KPIM::ProgressManager::createProgressItem( 0,
+ KPIM::ProgressManager::getUniqueID(), msg, i18n( "Waiting..." ), true, encr );
+}
+
+void KNJobData::slotJobPercent( KIO::Job*, unsigned long percent )
+{
+ kdDebug(5003) << k_funcinfo << "Progress: " << percent << endl;
+ setProgress( percent );
+}
+
+void KNJobData::slotJobInfoMessage( KIO::Job*, const QString &msg )
+{
+ kdDebug(5003) << k_funcinfo << "Status: " << msg << endl;
+ setStatus( msg );
+}
+
+
+#include "knjobdata.moc"