2 task.cpp - Kopete Groupwise Protocol
4 Copyright (c) 2004 SUSE Linux AG http://www.suse.com
6 Based on Iris, Copyright (C) 2003 Justin Karneges
8 Kopete (c) 2002-2004 by the Kopete developers <kopete-devel@kde.org>
10 *************************************************************************
12 * This library is free software; you can redistribute it and/or *
13 * modify it under the terms of the GNU Lesser General Public *
14 * License as published by the Free Software Foundation; either *
15 * version 2 of the License, or (at your option) any later version. *
17 *************************************************************************
24 #include "connection.h"
26 #include "safedelete.h"
31 class Task::TaskPrivate
41 bool insignificant
, deleteme
, autoDelete
;
46 Task::Task(Task
*parent
)
50 d
->client
= parent
->client();
51 connect(d
->client
, SIGNAL(disconnected()), SLOT(clientDisconnected()));
54 Task::Task(Connection
* parent
, bool)
59 connect(d
->client
, SIGNAL(disconnected()), SLOT(clientDisconnected()));
72 d
->insignificant
= false;
74 d
->autoDelete
= false;
80 Task
*Task::parent() const
82 return (Task
*)QObject::parent();
85 Connection
*Task::client() const
90 Transfer
* Task::transfer() const
95 void Task::setTransfer( Transfer
* transfer
)
97 d
->transfer
= transfer
;
100 quint32
Task::id() const
105 bool Task::success() const
110 int Task::statusCode() const
112 return d
->statusCode
;
115 const QString
& Task::statusString() const
117 return d
->statusString
;
120 void Task::go(bool autoDelete
)
122 d
->autoDelete
= autoDelete
;
127 bool Task::take( Transfer
* transfer
)
129 const QList
<Task
*> p
= findChildren
<Task
*>();
131 // pass along the transfer to our children
134 if ( t
->take( transfer
) )
141 void Task::safeDelete()
147 if(!d
->insignificant
)
148 SafeDelete::deleteSingle(this);
153 qDebug( "ERROR: calling default NULL onGo() for this task, you should reimplement this!");
156 void Task::onDisconnect()
160 d
->statusCode
= ErrDisc
;
161 d
->statusString
= tr("Disconnected");
163 // delay this so that tasks that react don't block the shutdown
164 QTimer::singleShot(0, this, SLOT(done()));
168 void Task::send( Transfer
* request
)
170 client()->send( request
);
173 void Task::setSuccess(int code
, const QString
&str
)
177 d
->statusCode
= code
;
178 d
->statusString
= str
;
183 void Task::setError(int code
, const QString
&str
)
187 d
->statusCode
= code
;
188 d
->statusString
= str
;
195 kDebug(OSCAR_RAW_DEBUG
) << k_funcinfo
<< endl
;
196 if(d
->done
|| d
->insignificant
)
200 if(d
->deleteme
|| d
->autoDelete
)
203 d
->insignificant
= true;
204 kDebug(OSCAR_RAW_DEBUG
) << k_funcinfo
<< "emitting finished" << endl
;
206 d
->insignificant
= false;
209 SafeDelete::deleteSingle(this);
212 void Task::clientDisconnected()
217 Transfer
* Task::createTransfer( struct FLAP f
, struct SNAC s
, Buffer
* buffer
)
219 return new SnacTransfer( f
, s
, buffer
);
222 Transfer
* Task::createTransfer( struct FLAP f
, Buffer
* buffer
)
224 return new FlapTransfer( f
, buffer
);
227 Transfer
* Task::createTransfer( Buffer
* buffer
)
229 return new Transfer( buffer
);
232 bool Task::forMe( const Transfer
* transfer
) const
234 Q_UNUSED( transfer
);
238 void Task::setId( quint32 id
)
245 //kate: tab-width 4; indent-mode csands;