mirror of
https://bitbucket.org/smil3y/kde-playground.git
synced 2025-02-23 18:32:51 +00:00
207 lines
4.3 KiB
C++
207 lines
4.3 KiB
C++
![]() |
/*
|
||
|
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/progresswidget/progressmanager.h>
|
||
|
|
||
|
#include "knarticle.h"
|
||
|
#include "knglobals.h"
|
||
|
#include "knnntpaccount.h"
|
||
|
#include "scheduler.h"
|
||
|
|
||
|
|
||
|
#include <QTimer>
|
||
|
|
||
|
KNJobConsumer::KNJobConsumer()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
|
||
|
KNJobConsumer::~KNJobConsumer()
|
||
|
{
|
||
|
for ( QList<KNJobData*>::Iterator it = mJobs.begin(); it != mJobs.end(); ++it )
|
||
|
(*it)->c_onsumer = 0;
|
||
|
}
|
||
|
|
||
|
|
||
|
void KNJobConsumer::emitJob( KNJobData *j )
|
||
|
{
|
||
|
if ( j ) {
|
||
|
mJobs.append( j );
|
||
|
knGlobals.scheduler()->addJob( j );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
void KNJobConsumer::jobDone( KNJobData *j )
|
||
|
{
|
||
|
if ( j && mJobs.removeAll( j ) )
|
||
|
processJob( j );
|
||
|
}
|
||
|
|
||
|
void KNJobConsumer::cancelJobs( KNJobItem::Ptr item )
|
||
|
{
|
||
|
Q_FOREACH( KNJobData *job, mJobs ) {
|
||
|
if ( job->data() == item ) {
|
||
|
job->d_ata.reset();
|
||
|
job->cancel();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
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::Ptr a, KNJobItem::Ptr i ) :
|
||
|
t_ype(t), d_ata(i), a_ccount(a),
|
||
|
mError( 0 ),
|
||
|
mCanceled( false ),
|
||
|
c_onsumer( c ),
|
||
|
mJob( 0 ),
|
||
|
mProgressItem( 0 )
|
||
|
{
|
||
|
d_ata->setLocked(true);
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
KNJobData::~KNJobData()
|
||
|
{
|
||
|
if ( d_ata ) {
|
||
|
d_ata->setLocked( false );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
void KNJobData::notifyConsumer()
|
||
|
{
|
||
|
|
||
|
if(c_onsumer)
|
||
|
c_onsumer->jobDone(this);
|
||
|
else
|
||
|
delete this;
|
||
|
}
|
||
|
|
||
|
void KNJobData::cancel()
|
||
|
{
|
||
|
mCanceled = true;
|
||
|
if ( mJob ) {
|
||
|
mJob->kill();
|
||
|
}
|
||
|
if ( mProgressItem ) {
|
||
|
mProgressItem->setStatus( "Canceled" );
|
||
|
mProgressItem->setComplete();
|
||
|
mProgressItem = 0;
|
||
|
}
|
||
|
emitFinished();
|
||
|
}
|
||
|
|
||
|
void KNJobData::emitFinished()
|
||
|
{
|
||
|
QTimer::singleShot( 0, this, SLOT(slotEmitFinished()) );
|
||
|
}
|
||
|
|
||
|
void KNJobData::setupKJob(KJob * job)
|
||
|
{
|
||
|
mJob = job;
|
||
|
if ( job ) {
|
||
|
connect( job, SIGNAL(percent(KJob*,ulong)),
|
||
|
SLOT(slotJobPercent(KJob*,ulong)) );
|
||
|
connect( job, SIGNAL(infoMessage(KJob*,QString)),
|
||
|
SLOT(slotJobInfoMessage(KJob*,QString)) );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void KNJobData::setupKIOJob( KIO::Job *job )
|
||
|
{
|
||
|
if ( job ) {
|
||
|
if ( account() ) {
|
||
|
if ( account()->encryption() == KNServerInfo::TLS )
|
||
|
job->addMetaData( "tls", "on" );
|
||
|
else
|
||
|
job->addMetaData( "tls", "off" );
|
||
|
}
|
||
|
job->setUiDelegate(0);
|
||
|
setupKJob( job );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void KNJobData::createProgressItem()
|
||
|
{
|
||
|
if ( mProgressItem )
|
||
|
return;
|
||
|
KNNntpAccount::Ptr acc = boost::static_pointer_cast<KNNntpAccount>( account() );
|
||
|
QString msg = i18n( "KNode" );
|
||
|
if ( type() == JTmail )
|
||
|
msg = i18n( "Sending message" );
|
||
|
else {
|
||
|
if ( acc )
|
||
|
msg = acc->name();
|
||
|
}
|
||
|
KPIM::ProgressItem::CryptoStatus encr = KPIM::ProgressItem::Unencrypted;
|
||
|
if ( acc && acc->encryption() != KNServerInfo::None )
|
||
|
encr = KPIM::ProgressItem::Encrypted;
|
||
|
mProgressItem = KPIM::ProgressManager::createProgressItem( 0,
|
||
|
KPIM::ProgressManager::getUniqueID(), msg, i18n( "Waiting..." ), true, encr );
|
||
|
}
|
||
|
|
||
|
void KNJobData::slotJobPercent( KJob*, unsigned long percent )
|
||
|
{
|
||
|
kDebug(5003) <<"Progress:" << percent;
|
||
|
setProgress( percent );
|
||
|
}
|
||
|
|
||
|
void KNJobData::slotJobInfoMessage( KJob*, const QString &msg )
|
||
|
{
|
||
|
kDebug(5003) <<"Status:" << msg;
|
||
|
setStatus( msg );
|
||
|
}
|
||
|
|
||
|
void KNJobData::slotEmitFinished( )
|
||
|
{
|
||
|
emit finished( this );
|
||
|
}
|
||
|
|
||
|
KUrl KNJobData::baseUrl() const
|
||
|
{
|
||
|
KUrl url;
|
||
|
if ( account()->encryption() == KNServerInfo::SSL )
|
||
|
url.setProtocol( "nntps" );
|
||
|
else
|
||
|
url.setProtocol( "nntp" );
|
||
|
url.setHost( account()->server() );
|
||
|
url.setPort( account()->port() );
|
||
|
if ( account()->needsLogon() ) {
|
||
|
url.setUserName( account()->user() );
|
||
|
url.setPass( account()->pass() );
|
||
|
}
|
||
|
return url;
|
||
|
}
|
||
|
|
||
|
void KNJobData::setError( int err, const QString & errMsg )
|
||
|
{
|
||
|
mError = err;
|
||
|
mErrorString = errMsg;
|
||
|
}
|
||
|
|