also Thread gehen bei mir auch nicht verstaendlich durch.... auch nicht mit dem neuen buch von qt4 molkentin ......Goddchen hat geschrieben:also mit so einer schleife funktioniert es leider schonmal nichtes scheint so als ob der Thread, wenn er in einer solchen schleife ist, alle signale ignoriert oder nicht mehr bearbeiten kann... denn ich komme dann gar nicht mehr in die funktion die mit finishedRequest connected ist
Ich downloade ein liste von xml file mit qhttp in eine qlist ....
ich beginne mit eine funktion(0) (erste url) und das signal done kommt ein emit mit nummer + 1 und alles geht zu funktion(1)
da ich denke dass es server freundlicher ist eine nach der andere zu holen und nicht 10 aufs mal....
Code: Alles auswählen
/* ...............*/
typedef QMap<int, QStringList> cookiepam;
typedef QMap<QString, QString> ParamVar;
class QCurl : public QObject, public Base_Function
{
Q_OBJECT
public:
QCurl()
/* ...............*/
/* get file on loop method go next position */
int Get_Remote_File_Loop( QString fileremote , QString localfile , int position , QWidget * parent = 0 )
{
actual_loop = position;
return StartGetFile(fileremote,localfile,parent);
}
int StartGetFile( QString fileremote , QString localfile , QWidget * parent = 0 )
{
actualurl = fileremote;
QUrl urlg(fileremote);
qt_unlink(localfile);
dlg = new QProgressDialog(parent,Qt::Popup);
dlg->setLabelText (tr("Get File "%1"").arg( urlg.path() ));
dlg->setCancelButton(0);
wwwget = new QHttp();
wwwget->setUser("","");
connect(wwwget, SIGNAL(requestFinished(int, bool)), this, SLOT(Method_Get_Finish(int, bool)));
connect(wwwget, SIGNAL(done(bool)), this, SLOT(LastWakeUpGet(bool)));
connect(wwwget, SIGNAL(dataReadProgress(int, int)), this, SLOT(SendStatus(int, int)));
connect(wwwget, SIGNAL(responseHeaderReceived(const QHttpResponseHeader &)), this, SLOT(RegisterCookie(const QHttpResponseHeader &)));
wwwget->setHost(urlg.host(), 80);
logFile = new QFile(localfile);
logFile->open(QIODevice::ReadWrite);
QHttpRequestHeader header("GET", urlg.path(),1,1); /* header */
header.setValue("Host", urlg.host());
/* resend cookie !!! */
QStringList resendcoo;
resendcoo.clear();
cookiepam ::Iterator it;
for ( it = ActualCook.begin(); it != ActualCook.end(); ++it ) {
QStringList resi = it.value();
QString name = resi.at(0);
QString oneci = QString("%1=%2").arg(name).arg(resi.at(1));
resendcoo.append(oneci);
}
header.setValue("Cookie",resendcoo.join(";"));
header.setValue("Referer", actualurl);
header.setValue("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7");
header.setValue("Accept-Language", "it,de-de;q=0.8,it-it;q=0.6,en-us;q=0.4,en;q=0.2");
header.setValue("Connection", "keep-alive");
header.setValue("User-Agent", WEBAGENTNAME );
putid = wwwget->request(header,0,logFile);
return putid;
}
void RegisterCookie(const QHttpResponseHeader &responseHeader )
{
ActualCook.clear();
QStringList cookielist = responseHeader.allValues("set-cookie");
for (int i = 0; i < cookielist.size(); ++i) {
QString cokeline = cookielist.at(i);
QStringList onlines = cokeline.split("=");
QString cookiename = onlines.at(0);
QString cookievalue = onlines.at(1);
ActualCook.insert(i,QStringList() << cookiename << Url_Decode(cookievalue) << actualurl);
/////////////////qDebug() << "### entry set-cookie pos=" << i << " name= " << cookiename << " value=" << Url_Decode(cookievalue);
}
///////emit WatReturn(QString("One code=%1 - Other say = %2 \n%3").arg( responseHeader.statusCode() ).arg( responseHeader.reasonPhrase() ).arg(CookieVars()) );
}
/* fast das gleiche bei get e put methode in der liste.....
liste download & liste upload......
*/
void Method_Put_Finish(int requestId, bool error)
{
if (requestId != putid) {
return;
}
logFile->close();
putFile->close();
if (error) {
emit ErrorCurl(tr("Errore nella url: %1\nErrore %2").arg(actualurl).arg(wwwput->errorString()));
return;
}
if (actual_loop == 0 or actual_loop > 0 ) {
emit NextGrabListPut(actual_loop + 1);
return;
}
emit WatReturn("End cycle file close");
actual_loop = -1;
}