/** * This tests the decompression using kfilterdev, basically. * To debug KTarPrivate::fillTempFile(). * * @dataProvider setupData */ void KArchiveTest::testUncompress() { QFETCH(QString, fileName); QFETCH(QString, mimeType); // testCreateTar must have been run first. QVERIFY(QFile::exists(fileName)); KFilterDev filterDev(fileName); QByteArray buffer; buffer.resize(8 * 1024); //qDebug() << "buffer.size()=" << buffer.size(); QVERIFY(filterDev.open(QIODevice::ReadOnly)); qint64 totalSize = 0; qint64 len = -1; while (!filterDev.atEnd() && len != 0) { len = filterDev.read(buffer.data(), buffer.size()); QVERIFY(len >= 0); totalSize += len; // qDebug() << "read len=" << len << " totalSize=" << totalSize; } filterDev.close(); // qDebug() << "totalSize=" << totalSize; QVERIFY(totalSize > 26000); // 27648 here when using gunzip }
void imagesequence::selectFilter() { INDI_P * filterProp(NULL); INDI_E * filterElem(NULL); INDI_D * filterDev(NULL); INDIMenu *devMenu = ksw->getINDIMenu(); // Let's select a new filter in acoord with the settings // We need to take into consideration the following conditions: // A. The device has been disconnected. // B. The device has been lost. // C. The property is still busy. // D. The property has been lost. // We have a filter, let's check if it's valid if (!verifyFilterIntegrity()) return; filterDev = devMenu->findDeviceByLabel(currentFilter); filterProp = filterDev->findProp("FILTER_SLOT"); filterElem = filterProp->findElement("SLOT"); // Do we need to change the filter position?? if (filterPosCombo->currentItem() == filterElem->read_w->text().toInt()) { captureImage(); return; } if (filterProp->perm == PP_RW || filterProp->perm == PP_WO) { filterElem->targetValue = filterPosCombo->currentItem(); if (filterElem->spin_w) { filterElem->spin_w->setValue(filterElem->targetValue); filterElem->spinChanged(filterElem->targetValue); } else filterElem->write_w->setText(QString("%1").arg(filterElem->targetValue)); // We're done! Send it to the driver filterProp->newText(); } }
/* * If we have created a temporary file, we have * to decompress the original file now and write * the contents to the temporary file. */ bool KTar::KTarPrivate::fillTempFile( const QString & fileName) { if ( ! tmpFile ) return true; //qDebug() << "filling tmpFile of mimetype" << mimetype; KCompressionDevice::CompressionType compressionType = KFilterDev::compressionTypeForMimeType(mimetype); KCompressionDevice filterDev(fileName, compressionType); QFile* file = tmpFile; Q_ASSERT(file->isOpen()); Q_ASSERT(file->openMode() & QIODevice::WriteOnly); file->seek(0); QByteArray buffer; buffer.resize(8*1024); if ( ! filterDev.open( QIODevice::ReadOnly ) ) { return false; } qint64 len = -1; while ( !filterDev.atEnd() && len != 0 ) { len = filterDev.read(buffer.data(),buffer.size()); if ( len < 0 ) { // corrupted archive return false; } if ( file->write(buffer.data(), len) != len ) { // disk full return false; } } filterDev.close(); file->flush(); file->seek(0); Q_ASSERT(file->isOpen()); Q_ASSERT(file->openMode() & QIODevice::ReadOnly); //qDebug() << "filling tmpFile finished."; return true; }