diff options
Diffstat (limited to 'src/modules/http')
| -rw-r--r-- | src/modules/http/HttpFileTransfer.cpp | 261 | ||||
| -rw-r--r-- | src/modules/http/HttpFileTransfer.h | 63 | ||||
| -rw-r--r-- | src/modules/http/libkvihttp.cpp | 128 |
3 files changed, 247 insertions, 205 deletions
diff --git a/src/modules/http/HttpFileTransfer.cpp b/src/modules/http/HttpFileTransfer.cpp index b94838c62..2719bc611 100644 --- a/src/modules/http/HttpFileTransfer.cpp +++ b/src/modules/http/HttpFileTransfer.cpp @@ -40,9 +40,8 @@ static KviPointerList<HttpFileTransfer> * g_pHttpFileTransfers = 0; static QPixmap * g_pHttpIcon = 0; - HttpFileTransfer::HttpFileTransfer() -: KviFileTransfer() + : KviFileTransfer() { init(); // ensure we're initialized g_pHttpFileTransfers->append(this); @@ -58,17 +57,17 @@ HttpFileTransfer::HttpFileTransfer() m_pHttpRequest = new KviHttpRequest(); - connect(m_pHttpRequest,SIGNAL(status(const QString &)),this,SLOT(statusMessage(const QString &))); - connect(m_pHttpRequest,SIGNAL(terminated(bool)),this,SLOT(transferTerminated(bool))); - connect(m_pHttpRequest,SIGNAL(header(KviPointerHashTable<const char *,KviCString> *)),this,SLOT(headersReceived(KviPointerHashTable<const char *,KviCString> *))); - connect(m_pHttpRequest,SIGNAL(resolvingHost(const QString &)),this,SLOT(resolvingHost(const QString &))); - connect(m_pHttpRequest,SIGNAL(requestSent(const QStringList &)),this,SLOT(requestSent(const QStringList &))); - connect(m_pHttpRequest,SIGNAL(contactingHost(const QString &)),this,SLOT(contactingHost(const QString &))); - connect(m_pHttpRequest,SIGNAL(receivedResponse(const QString &)),this,SLOT(receivedResponse(const QString &))); - connect(m_pHttpRequest,SIGNAL(connectionEstablished()),this,SLOT(connectionEstablished())); + connect(m_pHttpRequest, SIGNAL(status(const QString &)), this, SLOT(statusMessage(const QString &))); + connect(m_pHttpRequest, SIGNAL(terminated(bool)), this, SLOT(transferTerminated(bool))); + connect(m_pHttpRequest, SIGNAL(header(KviPointerHashTable<const char *, KviCString> *)), this, SLOT(headersReceived(KviPointerHashTable<const char *, KviCString> *))); + connect(m_pHttpRequest, SIGNAL(resolvingHost(const QString &)), this, SLOT(resolvingHost(const QString &))); + connect(m_pHttpRequest, SIGNAL(requestSent(const QStringList &)), this, SLOT(requestSent(const QStringList &))); + connect(m_pHttpRequest, SIGNAL(contactingHost(const QString &)), this, SLOT(contactingHost(const QString &))); + connect(m_pHttpRequest, SIGNAL(receivedResponse(const QString &)), this, SLOT(receivedResponse(const QString &))); + connect(m_pHttpRequest, SIGNAL(connectionEstablished()), this, SLOT(connectionEstablished())); m_eGeneralStatus = Initializing; - m_szStatusString = __tr2qs_ctx("Initializing","http"); + m_szStatusString = __tr2qs_ctx("Initializing", "http"); } HttpFileTransfer::~HttpFileTransfer() @@ -100,9 +99,9 @@ void HttpFileTransfer::abort() void HttpFileTransfer::fillContextPopup(QMenu * m) { - QAction *pAction = m->addAction(__tr2qs_ctx("Abort","http"),this,SLOT(abort())); - if(!active()) - pAction->setEnabled(false); + QAction * pAction = m->addAction(__tr2qs_ctx("Abort", "http"), this, SLOT(abort())); + if(!active()) + pAction->setEnabled(false); } bool HttpFileTransfer::active() @@ -110,7 +109,7 @@ bool HttpFileTransfer::active() return ((m_eGeneralStatus == Connecting) || (m_eGeneralStatus == Downloading)); } -void HttpFileTransfer::displayPaint(QPainter * p,int column, QRect rect) +void HttpFileTransfer::displayPaint(QPainter * p, int column, QRect rect) { int width = rect.width(), height = rect.height(); QString txt; @@ -124,53 +123,61 @@ void HttpFileTransfer::displayPaint(QPainter * p,int column, QRect rect) switch(m_eGeneralStatus) { case Initializing: - case Connecting: offset = 0; break; - case Downloading: offset = 48; break; - case Success: offset = 96; break; - case Failure: offset = 144; break; + case Connecting: + offset = 0; + break; + case Downloading: + offset = 48; + break; + case Success: + offset = 96; + break; + case Failure: + offset = 144; + break; } if(g_pHttpIcon) - p->drawPixmap(width / 2 - 48 / 2,rect.top() + height / 2 - 64 / 2,*g_pHttpIcon,offset,0,48,64); + p->drawPixmap(width / 2 - 48 / 2, rect.top() + height / 2 - 64 / 2, *g_pHttpIcon, offset, 0, 48, 64); } break; case COLUMN_FILEINFO: { QFontMetrics fm(p->font()); - QString szFrom = __tr2qs_ctx("From: ","http"); - QString szTo = __tr2qs_ctx("To: ","http"); + QString szFrom = __tr2qs_ctx("From: ", "http"); + QString szTo = __tr2qs_ctx("To: ", "http"); int daW1 = fm.width(szFrom); int daW2 = fm.width(szTo); - if(daW1 < daW2)daW1 = daW2; + if(daW1 < daW2) + daW1 = daW2; int iLineSpacing = fm.lineSpacing(); p->setPen(Qt::black); int iY = rect.top() + 4; - p->drawText(rect.left() + 4 + daW1,iY,width - (8 + daW1),height - 8,Qt::AlignTop | Qt::AlignLeft,m_pHttpRequest->url().url()); + p->drawText(rect.left() + 4 + daW1, iY, width - (8 + daW1), height - 8, Qt::AlignTop | Qt::AlignLeft, m_pHttpRequest->url().url()); iY += iLineSpacing; if(!(m_pHttpRequest->fileName().isEmpty())) { - p->drawText(rect.left() + 4 + daW1,iY,width - (8 + daW1),height - 8,Qt::AlignTop | Qt::AlignLeft,m_pHttpRequest->fileName()); + p->drawText(rect.left() + 4 + daW1, iY, width - (8 + daW1), height - 8, Qt::AlignTop | Qt::AlignLeft, m_pHttpRequest->fileName()); } iY += iLineSpacing; - p->setPen(Qt::darkGray); - p->drawText(rect.left() + 4, rect.top() + 4,width - 8,height - 8,Qt::AlignTop | Qt::AlignLeft,szFrom); - p->drawText(rect.left() + 4, rect.top() + 4 + iLineSpacing,width - 8,height - 8,Qt::AlignTop | Qt::AlignLeft,szTo); + p->drawText(rect.left() + 4, rect.top() + 4, width - 8, height - 8, Qt::AlignTop | Qt::AlignLeft, szFrom); + p->drawText(rect.left() + 4, rect.top() + 4 + iLineSpacing, width - 8, height - 8, Qt::AlignTop | Qt::AlignLeft, szTo); - p->setPen(QColor(180,180,200)); + p->setPen(QColor(180, 180, 200)); iLineSpacing += 2; - p->drawRect(rect.left() + 4, rect.top() + height - (iLineSpacing + 4),width - 8,iLineSpacing); - p->fillRect(rect.left() + 5, rect.top() + height - (iLineSpacing + 3),width - 10,iLineSpacing - 2,bIsTerminated ? QColor(210,210,210) : QColor(190,190,240)); + p->drawRect(rect.left() + 4, rect.top() + height - (iLineSpacing + 4), width - 8, iLineSpacing); + p->fillRect(rect.left() + 5, rect.top() + height - (iLineSpacing + 3), width - 10, iLineSpacing - 2, bIsTerminated ? QColor(210, 210, 210) : QColor(190, 190, 240)); p->setPen(Qt::black); - p->drawText(rect.left() + 7, rect.top() + height - (iLineSpacing + 4),width - 14,iLineSpacing,Qt::AlignVCenter | Qt::AlignLeft,m_szStatusString); + p->drawText(rect.left() + 7, rect.top() + height - (iLineSpacing + 4), width - 14, iLineSpacing, Qt::AlignVCenter | Qt::AlignLeft, m_szStatusString); } break; case COLUMN_PROGRESS: @@ -181,15 +188,15 @@ void HttpFileTransfer::displayPaint(QPainter * p,int column, QRect rect) unsigned int uRecvd = m_pHttpRequest->receivedSize(); int iW = width - 8; - p->setPen(bIsTerminated ? Qt::lightGray : QColor(210,210,240)); - p->drawRect(rect.left() + 4, rect.top() + 4,iW,12); + p->setPen(bIsTerminated ? Qt::lightGray : QColor(210, 210, 240)); + p->drawRect(rect.left() + 4, rect.top() + 4, iW, 12); int iAvgSpeed = -1; int iEta = -1; if(m_tTransferStartTime > 0) { - int tSpan = kvi_timeSpan(m_tTransferEndTime > 0 ? m_tTransferEndTime : kvi_unixTime(),m_tTransferStartTime); + int tSpan = kvi_timeSpan(m_tTransferEndTime > 0 ? m_tTransferEndTime : kvi_unixTime(), m_tTransferStartTime); if(tSpan > 0) { //qDebug("SPAN: %d (%d - %d)",tSpan,m_tTransferEndTime > 0 ? m_tTransferEndTime : kvi_unixTime(),m_tTransferStartTime); @@ -206,19 +213,20 @@ void HttpFileTransfer::displayPaint(QPainter * p,int column, QRect rect) { double dPerc = (double)(((double)uRecvd) * 100.0) / (double)uTotal; iW -= 2; - int iL = (int) ((((double)iW) * dPerc) / 100.0); + int iL = (int)((((double)iW) * dPerc) / 100.0); //iR = iW - iL; - p->fillRect(rect.left() + 5, rect.top() + 5,iL,10,bIsTerminated ? QColor(140,110,110) : QColor(200,100,100)); + p->fillRect(rect.left() + 5, rect.top() + 5, iL, 10, bIsTerminated ? QColor(140, 110, 110) : QColor(200, 100, 100)); - txt = QString(__tr2qs_ctx("%1 of %2 (%3 %)","http")).arg(KviQString::makeSizeReadable(uRecvd), - KviQString::makeSizeReadable(uTotal)).arg(dPerc,0,'f',2); - } else { + txt = QString(__tr2qs_ctx("%1 of %2 (%3 %)", "http")).arg(KviQString::makeSizeReadable(uRecvd), KviQString::makeSizeReadable(uTotal)).arg(dPerc, 0, 'f', 2); + } + else + { txt = KviQString::makeSizeReadable(m_pHttpRequest->receivedSize()); } p->setPen(Qt::black); - p->drawText(rect.left() + 4, rect.top() + 19,width - 8,height - 8,Qt::AlignTop | Qt::AlignLeft,txt); + p->drawText(rect.left() + 4, rect.top() + 19, width - 8, height - 8, Qt::AlignTop | Qt::AlignLeft, txt); int iLeftHalf = (iW - 2) / 2; int iRightHalf = iW - (iLeftHalf + 1); @@ -235,55 +243,64 @@ void HttpFileTransfer::displayPaint(QPainter * p,int column, QRect rect) txt += "? B/s"; } */ - txt = __tr2qs_ctx("Avg:","dcc"); + txt = __tr2qs_ctx("Avg:", "dcc"); txt += " "; if(iAvgSpeed >= 0) { QString tmpspd; - KviNetUtils::formatNetworkBandwidthString(tmpspd,iAvgSpeed); + KviNetUtils::formatNetworkBandwidthString(tmpspd, iAvgSpeed); txt += tmpspd; - } else { + } + else + { txt += "? B/s"; } - - int iDaH = height - (iLineSpacing + 4); - p->setPen(QColor(180,180,200)); - p->drawRect(rect.left() + 4, rect.top() + iDaH,iLeftHalf,iLineSpacing); - p->fillRect(rect.left() + 5, rect.top() + iDaH + 1,iLeftHalf - 2,iLineSpacing - 2,bIsTerminated ? QColor(210,210,210) : QColor(190,190,240)); + p->setPen(QColor(180, 180, 200)); + p->drawRect(rect.left() + 4, rect.top() + iDaH, iLeftHalf, iLineSpacing); + p->fillRect(rect.left() + 5, rect.top() + iDaH + 1, iLeftHalf - 2, iLineSpacing - 2, bIsTerminated ? QColor(210, 210, 210) : QColor(190, 190, 240)); p->setPen(bIsTerminated ? Qt::darkGray : Qt::black); - p->drawText(rect.left() + 6, rect.top() + iDaH,iLeftHalf - 4,iLineSpacing,Qt::AlignLeft | Qt::AlignVCenter,txt); + p->drawText(rect.left() + 6, rect.top() + iDaH, iLeftHalf - 4, iLineSpacing, Qt::AlignLeft | Qt::AlignVCenter, txt); - unsigned int uD,uH,uM,uS; + unsigned int uD, uH, uM, uS; if(bIsTerminated) { - KviTimeUtils::secondsToDaysHoursMinsSecs(kvi_timeSpan(m_tTransferEndTime,m_tTransferStartTime),&uD,&uH,&uM,&uS); + KviTimeUtils::secondsToDaysHoursMinsSecs(kvi_timeSpan(m_tTransferEndTime, m_tTransferStartTime), &uD, &uH, &uM, &uS); txt = "TOT: "; - if(uD > 0)txt += __tr2qs_ctx("%1d %2h %3m %4s","http").arg(uD).arg(uH).arg(uM).arg(uS); - else if(uH > 0)txt += __tr2qs_ctx("%1h %2m %3s","http").arg(uH).arg(uM).arg(uS); - else txt += __tr2qs_ctx("%1m %2s","http").arg(uM).arg(uS); - } else { + if(uD > 0) + txt += __tr2qs_ctx("%1d %2h %3m %4s", "http").arg(uD).arg(uH).arg(uM).arg(uS); + else if(uH > 0) + txt += __tr2qs_ctx("%1h %2m %3s", "http").arg(uH).arg(uM).arg(uS); + else + txt += __tr2qs_ctx("%1m %2s", "http").arg(uM).arg(uS); + } + else + { if(iEta >= 0) { - KviTimeUtils::secondsToDaysHoursMinsSecs(iEta,&uD,&uH,&uM,&uS); + KviTimeUtils::secondsToDaysHoursMinsSecs(iEta, &uD, &uH, &uM, &uS); txt = "ETA: "; - if(uD > 0)txt += __tr2qs_ctx("%1d %2h %3m %4s","http").arg(uD).arg(uH).arg(uM).arg(uS); - else if(uH > 0)txt += __tr2qs_ctx("%1h %2m %3s","http").arg(uH).arg(uM).arg(uS); - else txt += __tr2qs_ctx("%1m %2s","http").arg(uM).arg(uS); - } else { + if(uD > 0) + txt += __tr2qs_ctx("%1d %2h %3m %4s", "http").arg(uD).arg(uH).arg(uM).arg(uS); + else if(uH > 0) + txt += __tr2qs_ctx("%1h %2m %3s", "http").arg(uH).arg(uM).arg(uS); + else + txt += __tr2qs_ctx("%1m %2s", "http").arg(uM).arg(uS); + } + else + { txt = "ETA: Unknown"; } } - p->setPen(QColor(180,180,200)); - p->drawRect(rect.left() + width - (4 + iRightHalf), rect.top() + iDaH,iRightHalf,iLineSpacing); - p->fillRect(rect.left() + width - (3 + iRightHalf), rect.top() + iDaH + 1,iRightHalf - 2,iLineSpacing - 2,bIsTerminated ? QColor(210,210,210) : QColor(190,190,240)); + p->setPen(QColor(180, 180, 200)); + p->drawRect(rect.left() + width - (4 + iRightHalf), rect.top() + iDaH, iRightHalf, iLineSpacing); + p->fillRect(rect.left() + width - (3 + iRightHalf), rect.top() + iDaH + 1, iRightHalf - 2, iLineSpacing - 2, bIsTerminated ? QColor(210, 210, 210) : QColor(190, 190, 240)); p->setPen(bIsTerminated ? Qt::darkGray : Qt::black); - p->drawText(rect.left() + width - (2 + iRightHalf), rect.top() + iDaH,iRightHalf - 4,iLineSpacing,Qt::AlignLeft | Qt::AlignVCenter,txt); - + p->drawText(rect.left() + width - (2 + iRightHalf), rect.top() + iDaH, iRightHalf - 4, iLineSpacing, Qt::AlignLeft | Qt::AlignVCenter, txt); } break; } @@ -304,7 +321,7 @@ QString HttpFileTransfer::tipText() { s += "<tr><td bgcolor=\"#404040\"><font color=\"#FFFFFF\">Request Headers</font></td></tr>"; s += "<tr><td bgcolor=\"#C0C0C0\">"; - for(QStringList::ConstIterator it = m_lRequest.begin();it != m_lRequest.end();++it) + for(QStringList::ConstIterator it = m_lRequest.begin(); it != m_lRequest.end(); ++it) { s += " "; s += *it; @@ -317,7 +334,7 @@ QString HttpFileTransfer::tipText() { s += "<tr><td bgcolor=\"#404040\"><font color=\"#FFFFFF\">Response Headers</font></td></tr>"; s += "<tr><td bgcolor=\"#C0C0C0\">"; - for(QStringList::ConstIterator it = m_lHeaders.begin();it != m_lHeaders.end();++it) + for(QStringList::ConstIterator it = m_lHeaders.begin(); it != m_lHeaders.end(); ++it) { s += " "; s += *it; @@ -333,7 +350,8 @@ QString HttpFileTransfer::tipText() void HttpFileTransfer::init() { - if(g_pHttpFileTransfers)return; + if(g_pHttpFileTransfers) + return; g_pHttpFileTransfers = new KviPointerList<HttpFileTransfer>; g_pHttpFileTransfers->setAutoDelete(false); @@ -346,7 +364,8 @@ void HttpFileTransfer::init() void HttpFileTransfer::done() { - if(!g_pHttpFileTransfers)return; + if(!g_pHttpFileTransfers) + return; while(HttpFileTransfer * t = g_pHttpFileTransfers->first()) delete t; delete g_pHttpFileTransfers; @@ -360,25 +379,27 @@ void HttpFileTransfer::done() unsigned int HttpFileTransfer::runningTransfers() { - if(!g_pHttpFileTransfers)return 0; + if(!g_pHttpFileTransfers) + return 0; return g_pHttpFileTransfers->count(); } -void HttpFileTransfer::requestSent(const QStringList &requestHeaders) +void HttpFileTransfer::requestSent(const QStringList & requestHeaders) { - m_szStatusString = __tr2qs_ctx("Request sent: waiting for reply...","http"); + m_szStatusString = __tr2qs_ctx("Request sent: waiting for reply...", "http"); displayUpdate(); KviWindow * out = transferWindow(); - if(!out)return; + if(!out) + return; if(!m_bNoOutput) - out->output(KVI_OUT_GENERICSTATUS,__tr2qs_ctx("[HTTP %d]: Request data sent:","http"),id()); + out->output(KVI_OUT_GENERICSTATUS, __tr2qs_ctx("[HTTP %d]: Request data sent:", "http"), id()); - for(QStringList::ConstIterator it = requestHeaders.begin();it != requestHeaders.end();++it) + for(QStringList::ConstIterator it = requestHeaders.begin(); it != requestHeaders.end(); ++it) { if(!m_bNoOutput) - out->output(KVI_OUT_GENERICSTATUS,"[HTTP %d]: %s",id(),(*it).toUtf8().data()); + out->output(KVI_OUT_GENERICSTATUS, "[HTTP %d]: %s", id(), (*it).toUtf8().data()); } m_lRequest = requestHeaders; @@ -386,37 +407,37 @@ void HttpFileTransfer::requestSent(const QStringList &requestHeaders) void HttpFileTransfer::connectionEstablished() { - m_szStatusString = __tr2qs_ctx("Connection established: sending request","http"); + m_szStatusString = __tr2qs_ctx("Connection established: sending request", "http"); displayUpdate(); } -void HttpFileTransfer::resolvingHost(const QString &hostname) +void HttpFileTransfer::resolvingHost(const QString & hostname) { - m_szStatusString = __tr2qs_ctx("Resolving host %1","http").arg(hostname); + m_szStatusString = __tr2qs_ctx("Resolving host %1", "http").arg(hostname); displayUpdate(); } -void HttpFileTransfer::contactingHost(const QString &ipandport) +void HttpFileTransfer::contactingHost(const QString & ipandport) { - m_szStatusString = __tr2qs_ctx("Contacting host %1","http").arg(ipandport); + m_szStatusString = __tr2qs_ctx("Contacting host %1", "http").arg(ipandport); displayUpdate(); } -void HttpFileTransfer::receivedResponse(const QString &response) +void HttpFileTransfer::receivedResponse(const QString & response) { m_lHeaders.clear(); m_lHeaders.append(response); - m_szStatusString = __tr2qs_ctx("Transferring data (%1)","http").arg(response); + m_szStatusString = __tr2qs_ctx("Transferring data (%1)", "http").arg(response); m_tTransferStartTime = kvi_unixTime(); m_eGeneralStatus = Downloading; displayUpdate(); } -void HttpFileTransfer::statusMessage(const QString &txt) +void HttpFileTransfer::statusMessage(const QString & txt) { KviWindow * out = transferWindow(); if(out && (!m_bNoOutput)) - out->output(KVI_OUT_GENERICSTATUS,"[HTTP %d]: %Q",id(),&txt); + out->output(KVI_OUT_GENERICSTATUS, "[HTTP %d]: %Q", id(), &txt); } void HttpFileTransfer::transferTerminated(bool bSuccess) @@ -433,66 +454,74 @@ void HttpFileTransfer::transferTerminated(bool bSuccess) if(m_szCompletionCallback.isNull()) { - KVS_TRIGGER_EVENT(KviEvent_OnHTTPGetTerminated,out ? out : (KviWindow *)(g_pApp->activeConsole()),&vParams) - } else { - KviKvsScript::run(m_szCompletionCallback,out ? out : (KviWindow *)(g_pApp->activeConsole()),&vParams); + KVS_TRIGGER_EVENT(KviEvent_OnHTTPGetTerminated, out ? out : (KviWindow *)(g_pApp->activeConsole()), &vParams) + } + else + { + KviKvsScript::run(m_szCompletionCallback, out ? out : (KviWindow *)(g_pApp->activeConsole()), &vParams); } if(bSuccess) { - m_szStatusString = __tr2qs_ctx("Transfer completed","http"); + m_szStatusString = __tr2qs_ctx("Transfer completed", "http"); m_eGeneralStatus = Success; displayUpdate(); - if(out && (!m_bNoOutput))out->output(KVI_OUT_GENERICSUCCESS,__tr2qs_ctx("[HTTP %d]: Transfer completed","http"),id()); + if(out && (!m_bNoOutput)) + out->output(KVI_OUT_GENERICSUCCESS, __tr2qs_ctx("[HTTP %d]: Transfer completed", "http"), id()); g_pApp->fileDownloadTerminated( - true, - m_pHttpRequest->url().url(), - m_pHttpRequest->fileName(), - QString(), - QString(), - !m_bNotifyCompletion - ); - } else { - m_szStatusString = __tr2qs_ctx("Transfer failed","http"); + true, + m_pHttpRequest->url().url(), + m_pHttpRequest->fileName(), + QString(), + QString(), + !m_bNotifyCompletion); + } + else + { + m_szStatusString = __tr2qs_ctx("Transfer failed", "http"); m_szStatusString += ": "; m_szStatusString += m_pHttpRequest->lastError(); m_eGeneralStatus = Failure; displayUpdate(); - if(out && (!m_bNoOutput))out->output(KVI_OUT_GENERICERROR,__tr2qs_ctx("[HTTP %d]: Transfer failed: %Q","http"),id(),&(m_pHttpRequest->lastError())); + if(out && (!m_bNoOutput)) + out->output(KVI_OUT_GENERICERROR, __tr2qs_ctx("[HTTP %d]: Transfer failed: %Q", "http"), id(), &(m_pHttpRequest->lastError())); g_pApp->fileDownloadTerminated( - false, - m_pHttpRequest->url().url(), - m_pHttpRequest->fileName(), - QString(), - m_pHttpRequest->lastError(), - !m_bNotifyCompletion - ); + false, + m_pHttpRequest->url().url(), + m_pHttpRequest->fileName(), + QString(), + m_pHttpRequest->lastError(), + !m_bNotifyCompletion); } if(m_bAutoClean) { - if(m_pAutoCleanTimer)delete m_pAutoCleanTimer; + if(m_pAutoCleanTimer) + delete m_pAutoCleanTimer; m_pAutoCleanTimer = new QTimer(); - connect(m_pAutoCleanTimer,SIGNAL(timeout()),this,SLOT(autoClean())); + connect(m_pAutoCleanTimer, SIGNAL(timeout()), this, SLOT(autoClean())); m_pAutoCleanTimer->start(100); - m_TimerId=m_pAutoCleanTimer->timerId(); + m_TimerId = m_pAutoCleanTimer->timerId(); } } -void HttpFileTransfer::headersReceived(KviPointerHashTable<const char *,KviCString> *h) +void HttpFileTransfer::headersReceived(KviPointerHashTable<const char *, KviCString> * h) { - if(!h)return; + if(!h) + return; KviWindow * out = transferWindow(); - if(out && (!m_bNoOutput))out->output(KVI_OUT_GENERICSTATUS,__tr2qs_ctx("[HTTP %d]: response headers:","http"),id()); - KviPointerHashTableIterator<const char *,KviCString> it(*h); + if(out && (!m_bNoOutput)) + out->output(KVI_OUT_GENERICSTATUS, __tr2qs_ctx("[HTTP %d]: response headers:", "http"), id()); + KviPointerHashTableIterator<const char *, KviCString> it(*h); while(KviCString * s = it.current()) { QString szHeader = it.currentKey(); szHeader += ": "; szHeader += s->ptr(); m_lHeaders.append(szHeader); - if(out && (!m_bNoOutput))out->output(KVI_OUT_GENERICSTATUS,"[HTTP %d]: %s: %s",id(),it.currentKey(),s->ptr()); + if(out && (!m_bNoOutput)) + out->output(KVI_OUT_GENERICSTATUS, "[HTTP %d]: %s: %s", id(), it.currentKey(), s->ptr()); ++it; } } diff --git a/src/modules/http/HttpFileTransfer.h b/src/modules/http/HttpFileTransfer.h index 2df25d587..95c94215c 100644 --- a/src/modules/http/HttpFileTransfer.h +++ b/src/modules/http/HttpFileTransfer.h @@ -37,60 +37,69 @@ class QMenu; class HttpFileTransfer : public KviFileTransfer { - enum GeneralStatus { Initializing, Connecting, Downloading, Success, Failure }; + enum GeneralStatus + { + Initializing, + Connecting, + Downloading, + Success, + Failure + }; Q_OBJECT public: HttpFileTransfer(); ~HttpFileTransfer(); + private: int m_TimerId; KviHttpRequest * m_pHttpRequest; - GeneralStatus m_eGeneralStatus; - QString m_szStatusString; + GeneralStatus m_eGeneralStatus; + QString m_szStatusString; + + QStringList m_lHeaders; + QStringList m_lRequest; - QStringList m_lHeaders; - QStringList m_lRequest; + kvi_time_t m_tStartTime; + kvi_time_t m_tTransferStartTime; + kvi_time_t m_tTransferEndTime; - kvi_time_t m_tStartTime; - kvi_time_t m_tTransferStartTime; - kvi_time_t m_tTransferEndTime; + KviKvsVariant m_vMagicIdentifier; + bool m_bNotifyCompletion; + bool m_bAutoClean; + bool m_bNoOutput; - KviKvsVariant m_vMagicIdentifier; - bool m_bNotifyCompletion; - bool m_bAutoClean; - bool m_bNoOutput; + QTimer * m_pAutoCleanTimer; + QString m_szCompletionCallback; - QTimer * m_pAutoCleanTimer; - QString m_szCompletionCallback; public: - KviHttpRequest * request(){ return m_pHttpRequest; }; + KviHttpRequest * request() { return m_pHttpRequest; }; static unsigned int runningTransfers(); static void init(); static void done(); virtual bool startDownload(); - void setCompletionCallback(const QString &szCallback){ m_szCompletionCallback = szCallback; }; - void setMagicIdentifier(const KviKvsVariant &vIdentifier){ m_vMagicIdentifier = vIdentifier; }; - void setNotifyCompletion(bool bNotify){ m_bNotifyCompletion = bNotify; }; - void setAutoClean(bool bAutoClean){ m_bAutoClean = bAutoClean; }; - void setNoOutput(bool bNoOutput){ m_bNoOutput = bNoOutput; }; + void setCompletionCallback(const QString & szCallback) { m_szCompletionCallback = szCallback; }; + void setMagicIdentifier(const KviKvsVariant & vIdentifier) { m_vMagicIdentifier = vIdentifier; }; + void setNotifyCompletion(bool bNotify) { m_bNotifyCompletion = bNotify; }; + void setAutoClean(bool bAutoClean) { m_bAutoClean = bAutoClean; }; + void setNoOutput(bool bNoOutput) { m_bNoOutput = bNoOutput; }; - virtual void displayPaint(QPainter * p,int column, QRect rect); + virtual void displayPaint(QPainter * p, int column, QRect rect); virtual int displayHeight(int iLineSpacing); virtual void fillContextPopup(QMenu * m); virtual bool active(); virtual QString tipText(); virtual QString localFileName(); protected slots: - void statusMessage(const QString &txt); + void statusMessage(const QString & txt); void transferTerminated(bool bSuccess); - void headersReceived(KviPointerHashTable<const char *,KviCString> *h); - void requestSent(const QStringList &sl); + void headersReceived(KviPointerHashTable<const char *, KviCString> * h); + void requestSent(const QStringList & sl); - void resolvingHost(const QString &hostname); - void contactingHost(const QString &ipandport); - void receivedResponse(const QString &response); + void resolvingHost(const QString & hostname); + void contactingHost(const QString & ipandport); + void receivedResponse(const QString & response); void connectionEstablished(); void abort(); void autoClean(); diff --git a/src/modules/http/libkvihttp.cpp b/src/modules/http/libkvihttp.cpp index 84dc98f50..0db294d0a 100644 --- a/src/modules/http/libkvihttp.cpp +++ b/src/modules/http/libkvihttp.cpp @@ -34,11 +34,11 @@ #include "KviCommandFormatter.h" #include "KviMainWindow.h" -static bool http_kvs_complete_get(KviKvsModuleCommandCall * c,QString &szUrl,QString &szFileName,const QString &szCallback) +static bool http_kvs_complete_get(KviKvsModuleCommandCall * c, QString & szUrl, QString & szFileName, const QString & szCallback) { if(szUrl.isEmpty()) { - c->warning(__tr2qs_ctx("No URL specified","http")); + c->warning(__tr2qs_ctx("No URL specified", "http")); return true; } @@ -48,40 +48,42 @@ static bool http_kvs_complete_get(KviKvsModuleCommandCall * c,QString &szUrl,QSt if(szFileName.isEmpty()) { - if(c->switches()->find('a',"auto-file-name")) + if(c->switches()->find('a', "auto-file-name")) { tmp = szUrl; - tmp.replace('/',"_"); - tmp.replace(':',"_"); - tmp.replace('@',"_"); - tmp.replace('?',"_"); + tmp.replace('/', "_"); + tmp.replace(':', "_"); + tmp.replace('@', "_"); + tmp.replace('?', "_"); // http____path_path2_path3_filename.ext - g_pApp->getLocalKvircDirectory(szFileName,KviApplication::Incoming,tmp); - } else { + g_pApp->getLocalKvircDirectory(szFileName, KviApplication::Incoming, tmp); + } + else + { if(!KviFileDialog::askForSaveFileName( - szFileName, - __tr2qs_ctx("Choose a filename to save","http"), - QString(), - QString(), - false, - false, - true, - g_pMainWindow - )) + szFileName, + __tr2qs_ctx("Choose a filename to save", "http"), + QString(), + QString(), + false, + false, + true, + g_pMainWindow)) + return true; + if(szFileName.isEmpty()) return true; - if(szFileName.isEmpty())return true; } } HttpFileTransfer * hft = new HttpFileTransfer(); - bool bHead = c->switches()->find('h',"head"); + bool bHead = c->switches()->find('h', "head"); - if(c->switches()->getAsStringIfExisting('p',"post-data",tmp)) + if(c->switches()->getAsStringIfExisting('p', "post-data", tmp)) { if(bHead) { - c->warning(__tr2qs_ctx("The switch -p is incompatible with -h: -p takes precedence","http")); + c->warning(__tr2qs_ctx("The switch -p is incompatible with -h: -p takes precedence", "http")); bHead = false; } hft->request()->setPostData(tmp); @@ -91,36 +93,38 @@ static bool http_kvs_complete_get(KviKvsModuleCommandCall * c,QString &szUrl,QSt hft->request()->setProcessingType(bHead ? KviHttpRequest::HeadersOnly : KviHttpRequest::StoreToFile); hft->request()->setFileName(szFileName); - if(c->switches()->getAsStringIfExisting('e',"existing-file-action",tmp)) + if(c->switches()->getAsStringIfExisting('e', "existing-file-action", tmp)) { - if(KviQString::equalCI(tmp,"e")) + if(KviQString::equalCI(tmp, "e")) hft->request()->setExistingFileAction(KviHttpRequest::RenameExisting); - else if(KviQString::equalCI(tmp,"i")) + else if(KviQString::equalCI(tmp, "i")) hft->request()->setExistingFileAction(KviHttpRequest::RenameIncoming); - else if(KviQString::equalCI(tmp,"o")) + else if(KviQString::equalCI(tmp, "o")) hft->request()->setExistingFileAction(KviHttpRequest::Overwrite); - else if(KviQString::equalCI(tmp,"r")) + else if(KviQString::equalCI(tmp, "r")) hft->request()->setExistingFileAction(KviHttpRequest::Resume); } // FIXME: this should be numeric - if(c->switches()->getAsStringIfExisting('m',"max-len",tmp)) + if(c->switches()->getAsStringIfExisting('m', "max-len", tmp)) { bool bOk; unsigned int uContentLength = tmp.toUInt(&bOk); - if(bOk)hft->request()->setMaxContentLength(uContentLength); + if(bOk) + hft->request()->setMaxContentLength(uContentLength); } // FIXME: this should be numeric - if(c->switches()->getAsStringIfExisting('o',"offset",tmp)) + if(c->switches()->getAsStringIfExisting('o', "offset", tmp)) { bool bOk; unsigned int uContentOffset = tmp.toUInt(&bOk); - if(bOk)hft->request()->setContentOffset(uContentOffset); + if(bOk) + hft->request()->setContentOffset(uContentOffset); } // FIXME: this should be numeric - if(c->switches()->getAsStringIfExisting('t',"timeout",tmp)) + if(c->switches()->getAsStringIfExisting('t', "timeout", tmp)) { bool bOk; unsigned int uConnectionTimeout = tmp.toUInt(&bOk); @@ -128,41 +132,42 @@ static bool http_kvs_complete_get(KviKvsModuleCommandCall * c,QString &szUrl,QSt hft->request()->setConnectionTimeout(uConnectionTimeout); } - if(c->switches()->getAsStringIfExisting('w',"winctrl",tmp)) + if(c->switches()->getAsStringIfExisting('w', "winctrl", tmp)) { if(!tmp.contains('h')) - hft->invokeTransferWindow(tmp.contains('m'),tmp.contains('n')); - } else { - hft->invokeTransferWindow(false,false); + hft->invokeTransferWindow(tmp.contains('m'), tmp.contains('n')); + } + else + { + hft->invokeTransferWindow(false, false); } - KviKvsVariant * v = c->switches()->find('i',"identifier"); + KviKvsVariant * v = c->switches()->find('i', "identifier"); if(v) hft->setMagicIdentifier(*v); - if(c->switches()->find('q',"quiet")) + if(c->switches()->find('q', "quiet")) hft->setNotifyCompletion(false); - if(c->switches()->find('y',"no-output")) + if(c->switches()->find('y', "no-output")) hft->setNoOutput(true); if(!szCallback.isEmpty()) hft->setCompletionCallback(szCallback); - if(c->switches()->find('c',"clear")) + if(c->switches()->find('c', "clear")) hft->setAutoClean(true); if(!hft->startDownload()) { tmp = hft->request()->lastError(); - c->warning(__tr2qs_ctx("Failed to start the get request: %Q","http"),&tmp); + c->warning(__tr2qs_ctx("Failed to start the get request: %Q", "http"), &tmp); delete hft; } return true; } - /* @doc: http.get @type: @@ -264,13 +269,13 @@ static bool http_kvs_complete_get(KviKvsModuleCommandCall * c,QString &szUrl,QSt static bool http_kvs_cmd_get(KviKvsModuleCommandCall * c) { - QString szUrl,szFileName; + QString szUrl, szFileName; KVSM_PARAMETERS_BEGIN(c) - KVSM_PARAMETER("url",KVS_PT_NONEMPTYSTRING,0,szUrl) - KVSM_PARAMETER("filename",KVS_PT_STRING,KVS_PF_OPTIONAL,szFileName) + KVSM_PARAMETER("url", KVS_PT_NONEMPTYSTRING, 0, szUrl) + KVSM_PARAMETER("filename", KVS_PT_STRING, KVS_PF_OPTIONAL, szFileName) KVSM_PARAMETERS_END(c) - return http_kvs_complete_get(c,szUrl,szFileName,QString()); + return http_kvs_complete_get(c, szUrl, szFileName, QString()); } /* @doc: http.asyncGet @@ -303,21 +308,21 @@ static bool http_kvs_cmd_get(KviKvsModuleCommandCall * c) static bool http_kvs_cmd_asyncGet(KviKvsModuleCallbackCommandCall * c) { - QString szUrl,szFileName; + QString szUrl, szFileName; KVSM_PARAMETERS_BEGIN(c) - KVSM_PARAMETER("url",KVS_PT_NONEMPTYSTRING,0,szUrl) - KVSM_PARAMETER("filename",KVS_PT_STRING,KVS_PF_OPTIONAL,szFileName) + KVSM_PARAMETER("url", KVS_PT_NONEMPTYSTRING, 0, szUrl) + KVSM_PARAMETER("filename", KVS_PT_STRING, KVS_PF_OPTIONAL, szFileName) KVSM_PARAMETERS_END(c) - return http_kvs_complete_get(c,szUrl,szFileName,c->callback()->code()); + return http_kvs_complete_get(c, szUrl, szFileName, c->callback()->code()); } static bool http_module_init(KviModule * m) { HttpFileTransfer::init(); - KVSM_REGISTER_SIMPLE_COMMAND(m,"get",http_kvs_cmd_get); - KVSM_REGISTER_CALLBACK_COMMAND(m,"asyncGet",http_kvs_cmd_asyncGet); + KVSM_REGISTER_SIMPLE_COMMAND(m, "get", http_kvs_cmd_get); + KVSM_REGISTER_CALLBACK_COMMAND(m, "asyncGet", http_kvs_cmd_asyncGet); return true; } @@ -334,13 +339,12 @@ static bool http_module_can_unload(KviModule *) } KVIRC_MODULE( - "Http", // module name - "4.0.0", // module version - "Copyright (C) 2003 Szymon Stefanek (pragma at kvirc dot net)", // author & (C) - "HTTP interface for KVIrc", - http_module_init, - http_module_can_unload, - 0, - http_module_cleanup, - "http" -) + "Http", // module name + "4.0.0", // module version + "Copyright (C) 2003 Szymon Stefanek (pragma at kvirc dot net)", // author & (C) + "HTTP interface for KVIrc", + http_module_init, + http_module_can_unload, + 0, + http_module_cleanup, + "http") |
