00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
#ifndef __KIO_DATASLAVE_H__
00023
#define __KIO_DATASLAVE_H__
00024
00025
#include <kio/global.h>
00026
#include <kio/slave.h>
00027
00028
class QTimer;
00029
00030
namespace KIO {
00031
00041 class DataSlave :
public KIO::Slave {
00042 Q_OBJECT
00043
public:
00044
DataSlave();
00045
00046
virtual ~
DataSlave();
00047
00048
virtual void setHost(
const QString &host,
int port,
00049
const QString &user,
const QString &passwd);
00050
virtual void setConfig(
const MetaData &config);
00051
00052
virtual void suspend();
00053
virtual void resume();
00054
virtual bool suspended();
00055
virtual void send(
int cmd,
const QByteArray &arr =
QByteArray());
00056
00057
virtual void hold(
const KURL &url);
00058
00059
00060
virtual void get(
const KURL &url) = 0;
00061
virtual void mimetype(
const KURL &url) = 0;
00062
00063
protected:
00068
void setAllMetaData(
const MetaData &);
00073
void sendMetaData();
00074
00075
00077 enum QueueType { QueueMimeType = 1, QueueTotalSize, QueueSendMetaData,
00078 QueueData, QueueFinished };
00082 struct QueueStruct {
00083 QueueType type;
00084
QString s;
00085 KIO::filesize_t size;
00086
QByteArray ba;
00087
00088
QueueStruct() {}
00089
QueueStruct(QueueType type) : type(type) {}
00090 };
00091
typedef QValueList<QueueStruct> DispatchQueue;
00092
DispatchQueue dispatchQueue;
00093
00094
void dispatch_mimeType(
const QString &s) {
00095
if (_suspended) {
00096
QueueStruct q(QueueMimeType);
00097 q.
s = s;
00098 dispatchQueue.push_back(q);
00099 }
else
00100 mimeType(s);
00101 }
00102
void dispatch_totalSize(KIO::filesize_t size) {
00103
if (_suspended) {
00104 QueueStruct q(QueueTotalSize);
00105 q.size = size;
00106 dispatchQueue.push_back(q);
00107 }
else
00108 totalSize(size);
00109 }
00110
void dispatch_sendMetaData() {
00111
if (_suspended) {
00112 QueueStruct q(QueueSendMetaData);
00113 dispatchQueue.push_back(q);
00114 }
else
00115
sendMetaData();
00116 }
00117
void dispatch_data(
const QByteArray &ba) {
00118
if (_suspended) {
00119 QueueStruct q(QueueData);
00120 q.ba = ba;
00121 dispatchQueue.push_back(q);
00122 }
else
00123 data(ba);
00124 }
00125
void dispatch_finished() {
00126
00127 QueueStruct q(QueueFinished);
00128 dispatchQueue.push_back(q);
00129 }
00130
00131
protected slots:
00135
void dispatchNext();
00136
protected:
00137
virtual void virtual_hook(
int id,
void* data );
00138
private:
00139
MetaData meta_data;
00140
bool _suspended;
00141
QTimer *timer;
00142 };
00143
00144 }
00145
00146
#endif