void MainWindow::importSessions(){ QFileDialog dialog; QString fileName = dialog.getOpenFileName(this,tr("select file to open"),"","Archiev Files(*.saz *.zip)"); QuaZip zip(fileName); if(!zip.open(QuaZip::mdUnzip)){ qDebug()<<"cannot open "<<fileName; return; } QuaZipFileInfo info; QuaZipFile file(&zip); RyPipeData_ptr pipeData; QString name; for (bool more = zip.goToFirstFile(); more; more = zip.goToNextFile()) { if (!zip.getCurrentFileInfo(&info)) { qWarning("testRead(): getCurrentFileInfo(): %d\n", zip.getZipError()); return; } if (!file.open(QIODevice::ReadOnly)) { qWarning("testRead(): file.open(): %d", file.getZipError()); return; } name = file.getActualFileName(); QByteArray ba = file.readAll(); if(name.endsWith("_c.txt")){ //pipeData.clear(); pipeData = RyPipeData_ptr(new RyPipeData(0,0)); pipeData->isImported = true; pipeData->parseRequest(&ba); onNewPipe(pipeData); }else if(name.endsWith("_s.txt")){ pipeData->parseResponse(&ba); onPipeUpdate(pipeData); pipeData.clear(); } if (file.getZipError() != UNZ_OK) { qWarning("testRead(): file.getFileName(): %d", file.getZipError()); return ; } file.close(); if (file.getZipError() != UNZ_OK) { qWarning("testRead(): file.close(): %d", file.getZipError()); return ; } } zip.close(); }
QString rypipeDataGetDataByColumn(RyPipeData_ptr p, int column){ switch(column){ case 0: return QString::number(p->number); case 1: return QString::number(p->socketConnectionId); case 2: return ((p->responseStatus.isEmpty())?QString("-"):p->responseStatus); case 3: return p->httpVersion; case 4: return p->host; case 5: return p->serverIp; case 6: return p->path; case 7: return QString::number(p->responseBodyRawData().size()); case 8: return p->getResponseHeader("Cache-Control"); case 9: //qDebug()<<QString::number(p->performances.responseDone)<<QString::number(p->performances.requestBegin); return QString::number(p->performances.responseDone - p->performances.requestBegin); /* return QString::number(p->socketHandle); case 3: return ((p->responseStatus.isEmpty())?QString("-"):p->responseStatus); case 4: return p->httpVersion; case 5: return p->host; case 6: return p->serverIp; case 7: return p->path; case 8: return QString::number(p->responseBodyRawData().size()); case 9: return p->getResponseHeader("Cache-Control"); case 10: qDebug()<<QString::number(p->performances.responseDone)<<QString::number(p->performances.requestBegin); return QString::number(p->performances.responseDone - p->performances.requestBegin); */ case 10: return QString::number(p->performances.requestBegin); default: return QString("-"); } }
void Composer::dropEvent(QDropEvent *event){ //qDebug()<<"drop"; const RyMimeData* mime = dynamic_cast<const RyMimeData*>(event->mimeData()); if (mime) { RyPipeData_ptr d = mime->pipeData(); this->ui->server->setText(d->host); this->ui->port->setText(QString::number(d->port)); this->ui->request->setPlainText(QString(d->requestHeaderRawData()).append("\r\n\r\n").append(d->requestBodyRawData())); //qDebug()<<"drop text="<<mime->text(); event->acceptProposedAction(); } else { event->ignore(); } }
bool RyTableModel::itemLessThan(RyPipeData_ptr left,int leftColumn,RyPipeData_ptr right,int rightColumn){ if(left.isNull() || right.isNull()){ return false; } QString leftData = rypipeDataGetDataByColumn(left,leftColumn) ; QString rightData = rypipeDataGetDataByColumn(right,rightColumn); bool isNumber=false; long long leftNumber = leftData.toLongLong(&isNumber); long long rightNumber; if(isNumber){ rightNumber = rightData.toLongLong(&isNumber); if(isNumber){ return leftNumber<rightNumber; } } return leftData < rightData; }
bool RyTableSortFilterProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &) const{ //qDebug()<<"filterAcceptsRow comparing"; RyPipeData_ptr p = _sourceModel->getItem(sourceRow); if(p.isNull()){ qDebug()<<"filterAcceptsRow got null"; return true; } //先处理文本过滤 if(!_filterText.isEmpty()){ QStringList hostFilterList = _filterText.split("|"); bool matchHost = false; foreach(QString hostFilter,hostFilterList){ if(p->fullUrl.indexOf(hostFilter) != -1){ matchHost = true; } } if(!matchHost){ return matchHost; } }
void MainWindow::onItemDoubleClicked(QModelIndex topLeft){ RyPipeData_ptr data = sortFilterProxyModel->getItem(topLeft); if(data.isNull()){ qDebug()<<QString("isNull %1").arg(topLeft.row()); return; } ui->toolTabs->setCurrentWidget(ui->inspectorTab); ui->requestInspectorTabs->setCurrentWidget(ui->requestInspectorTextview); // TODO: test ui->requestTextEdit->setPlainText(data->requestHeaderRawData() +"\r\n\r\n"+data->requestBodyRawData() ); QByteArray encoding("UTF-8"); QString contentType = data->getResponseHeader("Content-Type"); int encodingIndex = contentType.indexOf("charset="); if(encodingIndex!=-1){ encoding.clear(); encoding.append(contentType.mid(encodingIndex + 8)); } bool isEncrypted = !data->getResponseHeader("Content-Encoding").isEmpty(); QByteArray decrypedData = (data->isResponseChunked()? data->responseBodyRawDataUnChunked() :data->responseBodyRawData()); if(isEncrypted){ decrypedData = gzipDecompress(decrypedData); } //TODO: gif //QMovie *movie = ui->label->movie(); //if(movie){ // delete movie; //} if(data->getResponseHeader("Content-Type").toLower().indexOf("image")!=-1){ if(!decrypedData.isEmpty()){ if(data->getResponseHeader("Content-Type").toLower().indexOf("gif")!=-1){ //QBuffer *data = new QBuffer(&decrypedData); //QMovie *movie = new QMovie(data); //ui->label->setMovie(movie); //TODO: start and delete movie.. }else{ QPixmap pixmap; pixmap.loadFromData(decrypedData); ui->label->setPixmap(pixmap); } ui->responseInspectorTabs->setCurrentWidget(ui->responseInspectorImageView); }else{ ui->responseInspectorTabs->setCurrentWidget(ui->responseInspectorTextView); ui->label->clear(); } }else{ ui->label->clear(); ui->responseInspectorTabs->setCurrentWidget(ui->responseInspectorTextView); } // show in textview QTextCodec* oldCodec = QTextCodec::codecForCStrings(); QTextCodec::setCodecForCStrings(QTextCodec::codecForName(encoding)); ui->responseTextEdit->setPlainText(QString(( data->responseHeaderRawData() +"\r\n\r\n" + decrypedData ).data()) ); QTextCodec::setCodecForCStrings(oldCodec); data.clear(); }