/*! \reimp */ void QNetworkDiskCache::updateMetaData(const QNetworkCacheMetaData &metaData) { #if defined(QNETWORKDISKCACHE_DEBUG) qDebug() << "QNetworkDiskCache::updateMetaData()" << metaData.url(); #endif QUrl url = metaData.url(); QIODevice *oldDevice = data(url); if (!oldDevice) { #if defined(QNETWORKDISKCACHE_DEBUG) qDebug() << "QNetworkDiskCache::updateMetaData(), no device!"; #endif return; } QIODevice *newDevice = prepare(metaData); if (!newDevice) { #if defined(QNETWORKDISKCACHE_DEBUG) qDebug() << "QNetworkDiskCache::updateMetaData(), no new device!" << url; #endif return; } char data[1024]; while (!oldDevice->atEnd()) { qint64 s = oldDevice->read(data, 1024); newDevice->write(data, s); } delete oldDevice; insert(newDevice); }
void GeoEngine::saveCachedTiles(QProgressBar* progressbar) { QNetworkDiskCache* cache = (QNetworkDiskCache*)(manager->cache()); QDirIterator it1(cache->cacheDirectory()+QString("http/")); int nbFiles = 0; while(it1.hasNext()) { nbFiles++; it1.next(); } QDirIterator it(cache->cacheDirectory()+QString("http/")); progressbar->setMaximum(nbFiles); progressbar->setMinimum(0); progressbar->show(); progressbar->raise(); int numFile=0; while(it.hasNext()) { progressbar->setValue(numFile++); it.next(); if(it.fileInfo().isFile()) { QNetworkCacheMetaData metaData = cache->fileMetaData(it.filePath()); QIODevice* data = cache->data(metaData.url()); if(data) { saveTileToDisk(metaData.url(),data->readAll()); delete data; } } } progressbar->hide(); }
QList<QUrl> NetworkCache::getEntries() const { QList<QUrl> entries; const QDir cacheMainDirectory(cacheDirectory()); const QStringList directories(cacheMainDirectory.entryList(QDir::AllDirs | QDir::NoDotAndDotDot)); for (int i = 0; i < directories.count(); ++i) { const QDir cacheSubDirectory(cacheMainDirectory.absoluteFilePath(directories.at(i))); const QStringList subDirectories(cacheSubDirectory.entryList(QDir::AllDirs | QDir::NoDotAndDotDot)); for (int j = 0; j < subDirectories.count(); ++j) { const QDir cacheFilesDirectory(cacheSubDirectory.absoluteFilePath(subDirectories.at(j))); const QStringList files(cacheFilesDirectory.entryList(QDir::Files)); for (int k = 0; k < files.count(); ++k) { const QNetworkCacheMetaData metaData(fileMetaData(cacheFilesDirectory.absoluteFilePath(files.at(k)))); if (metaData.url().isValid()) { entries.append(metaData.url()); } } } } return entries; }
void QNetworkCacheMetaDataPrivate::save(QDataStream &out, const QNetworkCacheMetaData &metaData) { // note: if you change the contents of the meta data here // remember to bump the cache version in qnetworkdiskcache.cpp CurrentCacheVersion out << metaData.url(); out << metaData.expirationDate(); out << metaData.lastModified(); out << metaData.saveToDisk(); out << metaData.attributes(); out << metaData.rawHeaders(); }
void tst_QNetworkCacheMetaData::qnetworkcachemetadata() { QNetworkCacheMetaData data; QCOMPARE(data.expirationDate(), QDateTime()); QCOMPARE(data.isValid(), false); QCOMPARE(data.lastModified(), QDateTime()); QCOMPARE(data.operator!=(QNetworkCacheMetaData()), false); QNetworkCacheMetaData metaData; QCOMPARE(data.operator=(metaData), QNetworkCacheMetaData()); QCOMPARE(data.operator==(QNetworkCacheMetaData()), true); QCOMPARE(data.rawHeaders(), QNetworkCacheMetaData::RawHeaderList()); QCOMPARE(data.saveToDisk(), true); QCOMPARE(data.url(), QUrl()); data.setExpirationDate(QDateTime()); data.setLastModified(QDateTime()); data.setRawHeaders(QNetworkCacheMetaData::RawHeaderList()); data.setSaveToDisk(false); data.setUrl(QUrl()); }
void NetworkCache::clearCache(int period) { if (period <= 0) { clear(); emit cleared(); return; } const QDir cacheMainDirectory(cacheDirectory()); const QStringList directories(cacheMainDirectory.entryList(QDir::AllDirs | QDir::NoDotAndDotDot)); for (int i = 0; i < directories.count(); ++i) { const QDir cacheSubDirectory(cacheMainDirectory.absoluteFilePath(directories.at(i))); const QStringList subDirectories(cacheSubDirectory.entryList(QDir::AllDirs | QDir::NoDotAndDotDot)); for (int j = 0; j < subDirectories.count(); ++j) { const QDir cacheFilesDirectory(cacheSubDirectory.absoluteFilePath(subDirectories.at(j))); const QStringList files(cacheFilesDirectory.entryList(QDir::Files)); for (int k = 0; k < files.count(); ++k) { const QNetworkCacheMetaData metaData(fileMetaData(cacheFilesDirectory.absoluteFilePath(files.at(k)))); if (metaData.isValid() && metaData.lastModified().isValid() && metaData.lastModified().secsTo(QDateTime::currentDateTime()) > (period * 3600)) { remove(metaData.url()); } } } } }
int main(int argc, char **argv) { QCoreApplication application(argc, argv); QCoreApplication::setOrganizationDomain(QLatin1String("sites.google.com/site/zeromusparadoxe01")); QCoreApplication::setApplicationName(QLatin1String("zBrowser")); QStringList args = application.arguments(); args.takeFirst(); if (args.isEmpty()) { QTextStream stream(stdout); stream << "zbrowser-cacheinfo is a tool for viewing and extracting information out of zBrowser cache files." << endl; stream << "zbrowser-cacheinfo [-o cachefile] [file | url]" << endl; return 0; } NetworkDiskCache diskCache; QString location = QDesktopServices::storageLocation(QDesktopServices::CacheLocation) + QLatin1String("/browser/"); diskCache.setCacheDirectory(location); QNetworkCacheMetaData metaData; QString last = args.takeLast(); if (QFile::exists(last)) { qDebug() << "Reading in from a file and not a URL."; metaData = diskCache._fileMetaData(last); } else { qDebug() << "Reading in from a URL and not a file."; metaData = diskCache.metaData(last); } if (!args.isEmpty() && args.count() >= 1 && args.first() == QLatin1String("-o")) { QUrl url = metaData.url(); QIODevice *device = diskCache.data(url); if (!device) { qDebug() << "Error: data for URL is 0!"; return 1; } QString fileName; if (args.count() == 2) { fileName = args.last(); } else { QFileInfo info(url.path()); fileName = info.fileName(); if (fileName.isEmpty()) { qDebug() << "URL file name is empty, please specify an output file, I wont guess."; return 1; } if (QFile::exists(fileName)) { qDebug() << "File already exists, not overwriting, please specify an output file."; return 1; } } qDebug() << "Saved cache file to:" << fileName; QFile file(fileName); if (!file.open(QFile::ReadWrite)) qDebug() << "Unable to open the output file for writing."; else file.write(device->readAll()); delete device; } QTextStream stream(stdout); stream << "URL: " << metaData.url().toString() << endl; stream << "Expiration Date: " << metaData.expirationDate().toString() << endl; stream << "Last Modified Date: " << metaData.lastModified().toString() << endl; stream << "Save to disk: " << metaData.saveToDisk() << endl; stream << "Headers:" << endl; foreach (const QNetworkCacheMetaData::RawHeader &header, metaData.rawHeaders()) stream << "\t" << header.first << ": " << header.second << endl; QIODevice *device = diskCache.data(metaData.url()); if (device) { stream << "Data Size: " << device->size() << endl; stream << "First line: " << device->readLine(100); } else { stream << "No data? Either the file is corrupt or there is an error." << endl; } delete device; return 0; }