Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2017
44
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.39 KB | None | 0 0
  1. //////////////////////////////////
  2.  
  3. // Qt docs: It is up to the application that requests the data to delete the QIODevice when done with it.
  4. QIODevice* AssetCache::data(const QUrl &url)
  5. {
  6.     QFile *dataFile = 0;
  7.     QString absoluteDataFile = GenerateFilename(false, url);
  8.     if (QFile::exists(absoluteDataFile))
  9.         dataFile = new QFile(absoluteDataFile, this); // still set parent for app close
  10.     return dataFile;
  11. }
  12.  
  13. void AssetCache::insert(QIODevice* device)
  14. {
  15.     // We own this from prepare(), lets delete it also
  16.     device->close();
  17.     device->deleteLater();
  18. }
  19.  
  20. QIODevice* AssetCache::prepare(const QNetworkCacheMetaData &metaData)
  21. {
  22.     if (!WriteMetadata(GenerateFilename(true, metaData.url()), metaData))
  23.         return 0;
  24.     QFile *dataFile = new QFile(GenerateFilename(false, metaData.url()), this);
  25.     return dataFile;
  26. }
  27.  
  28. bool AssetCache::remove(const QUrl &url)
  29. {
  30.     bool success = true;
  31.     QString absoluteMetaDataFile = GenerateFilename(true,url);
  32.     if (QFile::exists(absoluteMetaDataFile))
  33.         success = QFile::remove(absoluteMetaDataFile);
  34.     if (!success)
  35.         return false;
  36.     QString absoluteDataFile = GenerateFilename(false, url);
  37.     if (QFile::exists(absoluteDataFile))
  38.         success = QFile::remove(absoluteDataFile);
  39.     return success;
  40. }
  41.  
  42. QNetworkCacheMetaData AssetCache::metaData(const QUrl &url)
  43. {
  44.     QNetworkCacheMetaData resultMetaData;
  45.     QString absoluteMetaDataFile = GenerateFilename(true, url);
  46.     if (QFile::exists(absoluteMetaDataFile))
  47.     {
  48.         QFile metaDataFile(absoluteMetaDataFile);
  49.         if (metaDataFile.open(QIODevice::ReadOnly))
  50.         {
  51.             QDataStream metaDataStream(&metaDataFile);
  52.             metaDataStream >> resultMetaData;
  53.             metaDataFile.close();
  54.         }
  55.     }
  56.     return resultMetaData;
  57. }
  58.  
  59. void AssetCache::updateMetaData(const QNetworkCacheMetaData &metaData)
  60. {
  61.     const QNetworkCacheMetaData oldMetaData = this->metaData(metaData.url());
  62.     if (oldMetaData != metaData)
  63.     {
  64.         WriteMetadata(GenerateFilename(true, metaData.url()), metaData);
  65.     }
  66. }
  67.  
  68. bool AssetCache::WriteMetadata(const QString &filePath, const QNetworkCacheMetaData &metaData)
  69. {
  70.     // Open metadata file
  71.     QFile metaDataFile(filePath);
  72.     if (!metaDataFile.open(QIODevice::WriteOnly))
  73.     {
  74.         LogError("AssetCache: Could not open metadata file: " + filePath.toStdString());
  75.         return false;
  76.     }
  77.     if (!metaDataFile.resize(0))
  78.     {
  79.         LogError("AssetCache: Could not reset metadata file: " + filePath.toStdString());
  80.         return false;
  81.     }
  82.  
  83.     // Write metadata
  84.     QDataStream metaDataStream(&metaDataFile);
  85.     metaDataStream << metaData;
  86.     metaDataFile.close();
  87.     return true;
  88. }
  89.  
  90. QString AssetCache::GenerateFilename(bool isMetaData, const QUrl &url)
  91. {
  92.     QString subDir = isMetaData ? "metadata/" : "data/";
  93.     QDir assetDir(cacheDirectory + subDir);
  94.     QString absolutePath = assetDir.absolutePath() + SanitateAssetRefForCache(url.toString())
  95.     if (isMetaData)
  96.         absolutePath.append(".metadata");
  97.     return absolutePath;
  98. }
  99.  
  100. void AssetCache::clear()
  101. {
  102.     LogInfo("AssetCache: clear() called, removing all cache items.");
  103.     // Skip for now
  104. }
  105.  
  106. qint64 AssetCache::expire()
  107. {
  108.     // Skip keeping cache at some static size, unlimited for now
  109.     return maximumCacheSize() / 2;
  110. }
  111.  
  112. //////////////////////////////////
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement