Guest User

Untitled

a guest
Sep 16th, 2014
216
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include "ResourcesDevice.h"
  2.  
  3. #include <Platform/Logger.h>
  4.  
  5. #include <QDateTime>
  6. #include <QDebug>
  7.  
  8. namespace qml
  9. {
  10. // -----------------------------------------------------------------------------
  11.  
  12.     ResourcesEngineHandler::ResourcesEngineHandler()
  13.     {
  14.         mCurrentDir = QDir::current().path() + "/";
  15.     }
  16.  
  17.     QAbstractFileEngine*    ResourcesEngineHandler::create(const QString& fileName) const
  18.     {
  19.         int toto = 0;
  20.         if (fileName.contains("MainLoader.qml"))
  21.         {
  22.             toto = 1;
  23.         }
  24.  
  25.         QString simplifiedPath = fileName;
  26.  
  27.         if (simplifiedPath.startsWith("/")) // Path may start with a / if it's marked as absolute
  28.             simplifiedPath.remove(0, 1);
  29.         simplifiedPath.remove(mCurrentDir);
  30.         if (simplifiedPath.length() == 0)
  31.             return nullptr;
  32.  
  33.         if (platform::Logger::singleton())
  34.             LOG_DEBUG(simplifiedPath.toStdString().c_str());
  35.  
  36.         QString packageName = simplifiedPath.split("/")[0];
  37.         if (packageReader::Manager::singleton()->isPackageMounted(packageName.toStdString()))
  38.             return new ResourcesEngine(simplifiedPath);
  39.         return nullptr;
  40.     }
  41.  
  42. // -----------------------------------------------------------------------------
  43.  
  44.     ResourcesEngine::ResourcesEngine(const QString& fileName)
  45.     {
  46.         setFileName(fileName);
  47.     }
  48.  
  49.     bool    ResourcesEngine::open(QIODevice::OpenMode openMode)
  50.     {
  51.         Q_ASSERT(mPath.isEmpty() == false);
  52.  
  53.         LOG_DEBUG(mPath.toStdString().c_str());
  54.  
  55.  
  56.         int toto = 0;
  57.  
  58.         if (mPath.contains("main.1.fr.anuman.HomeDesign3D.obb/qml"))
  59.         {
  60.             toto = 1;
  61.         }
  62.         Q_ASSERT((openMode & QIODevice::ReadOnly) > 0);
  63.  
  64.         QIODevice::OpenMode elevatedFlags = openMode;
  65.         elevatedFlags |= QIODevice::ReadOnly;
  66.         elevatedFlags |= QIODevice::Text;
  67.         elevatedFlags |= QIODevice::Unbuffered;
  68.         Q_ASSERT((elevatedFlags ^
  69.                   (QIODevice::ReadOnly
  70.                    | QIODevice::Text
  71.                    | QIODevice::Unbuffered)) == 0); // Assert if some filters aren't supported
  72.  
  73.         return mFile.open(mPath.toStdString());
  74.     }
  75.  
  76.     bool    ResourcesEngine::close()
  77.     {
  78.         mFile.close();
  79.         return true;
  80.     }
  81.  
  82.     bool    ResourcesEngine::flush()
  83.     {
  84.         LOG_DEBUG(mPath.toStdString().c_str());
  85.         return true;
  86.     }
  87.  
  88.     bool    ResourcesEngine::syncToDisk()
  89.     {
  90.         Q_ASSERT(false);
  91.  
  92.         return false;
  93.     }
  94.  
  95.     qint64  ResourcesEngine::size() const
  96.     {
  97.         LOG_DEBUG(mPath.toStdString().c_str());
  98.         return mFile.size();
  99.     }
  100.  
  101.     qint64  ResourcesEngine::pos() const
  102.     {
  103.         LOG_DEBUG(mPath.toStdString().c_str());
  104.         return mFile.position();
  105.     }
  106.  
  107.     bool    ResourcesEngine::seek(qint64 pos)
  108.     {
  109.         LOG_DEBUG(mPath.toStdString().c_str());
  110.         return mFile.seek(pos);
  111.     }
  112.  
  113.     bool    ResourcesEngine::isSequential() const
  114.     {
  115.         LOG_DEBUG(mPath.toStdString().c_str());
  116.         return false;
  117.     }
  118.  
  119.     bool    ResourcesEngine::remove()
  120.     {
  121.         Q_ASSERT(false);
  122.  
  123.         return false;
  124.     }
  125.  
  126.     bool    ResourcesEngine::copy(const QString& newName)
  127.     {
  128.         Q_ASSERT(false);
  129.  
  130.         return false;
  131.     }
  132.  
  133.     bool    ResourcesEngine::rename(const QString& newName)
  134.     {
  135.         Q_ASSERT(false);
  136.  
  137.         return false;
  138.     }
  139.  
  140.     bool    ResourcesEngine::renameOverwrite(const QString& newName)
  141.     {
  142.         Q_ASSERT(false);
  143.  
  144.         return false;
  145.     }
  146.  
  147.     bool    ResourcesEngine::link(const QString& newName)
  148.     {
  149.         Q_ASSERT(false);
  150.  
  151.         return false;
  152.     }
  153.  
  154.     bool    ResourcesEngine::mkdir(const QString& dirName, bool createParentDirectories) const
  155.     {
  156.         Q_ASSERT(false);
  157.  
  158.         return false;
  159.     }
  160.  
  161.     bool    ResourcesEngine::rmdir(const QString& dirName, bool recurseParentDirectories) const
  162.     {
  163.         Q_ASSERT(false);
  164.  
  165.         return false;
  166.     }
  167.  
  168.     bool    ResourcesEngine::setSize(qint64 size)
  169.     {
  170.         Q_ASSERT(false);
  171.  
  172.         return false;
  173.     }
  174.  
  175.     bool    ResourcesEngine::caseSensitive() const
  176.     {
  177.         LOG_DEBUG(mPath.toStdString().c_str());
  178.         return true;
  179.     }
  180.  
  181.     bool    ResourcesEngine::isRelativePath() const
  182.     {
  183.         LOG_DEBUG(mPath.toStdString().c_str());
  184.         return false;
  185.     }
  186.  
  187.     QStringList ResourcesEngine::entryList(QDir::Filters filters, const QStringList& filterNames) const
  188.     {
  189.         Q_ASSERT((filters & QDir::NoDotAndDotDot) > 0);
  190.         Q_ASSERT((filters & (QDir::Files | QDir::Dirs)) > 0);
  191.  
  192.         LOG_DEBUG(mPath.toStdString().c_str());
  193.  
  194.         QDir::Filters elevatedFlags = filters;
  195.         elevatedFlags |= QDir::NoDotAndDotDot;
  196.         elevatedFlags |= QDir::Dirs;
  197.         elevatedFlags |= QDir::Files;
  198.         elevatedFlags |= QDir::Readable;
  199.         Q_ASSERT((elevatedFlags ^
  200.                   (QDir::NoDotAndDotDot
  201.                    | QDir::Dirs
  202.                    | QDir::Files
  203.                    | QDir::Readable)) == 0); // Assert if some filters aren't supported
  204.  
  205.         QStringList result;
  206.         std::vector<packageReader::FileInfo>    infos;
  207.  
  208.         infos = packageReader::Manager::singleton()->getFiles(mPath.toStdString());
  209.         for (size_t i = 0; i < infos.size(); i++)
  210.         {
  211.             if (infos[i].isFile() && (filters & QDir::Files) > 0)
  212.                 result.push_back(infos[i].filePath().c_str());
  213.             if (infos[i].isDir() && (filters & QDir::Dirs) > 0)
  214.                 result.push_back(infos[i].filePath().c_str());
  215.         }
  216.  
  217.         Q_ASSERT(result.size() > 0);
  218.  
  219.         return result;
  220.     }
  221.  
  222.     QAbstractFileEngine::FileFlags  ResourcesEngine::fileFlags(FileFlags type) const
  223.     {
  224.         FileFlags   flags = 0;
  225.  
  226.         LOG_DEBUG(mPath.toStdString().c_str());
  227.  
  228.         int toto = 0;
  229.  
  230.         if (mPath == "main.1.fr.anuman.HomeDesign3D.obb/qml")
  231.         {
  232.             toto = 1;
  233.         }
  234.  
  235.  
  236.         flags |= QAbstractFileEngine::ReadOwnerPerm;
  237.         flags |= QAbstractFileEngine::ReadUserPerm;
  238.         flags |= QAbstractFileEngine::ReadGroupPerm;
  239.         flags |= QAbstractFileEngine::ReadOtherPerm;
  240.  
  241.         if ((type & (QAbstractFileEngine::FileType
  242.                      | QAbstractFileEngine::DirectoryType
  243.                      | QAbstractFileEngine::ExistsFlag)) > 0)
  244.         {
  245.             packageReader::FileInfo info = packageReader::Manager::singleton()->getFileInfo(mPath.toStdString());
  246.             if (info.exists())
  247.                 flags |= QAbstractFileEngine::ExistsFlag;
  248.             if (info.isFile())
  249.                 flags |= QAbstractFileEngine::FileType;
  250.             if (info.isDir())
  251.                 flags |= QAbstractFileEngine::DirectoryType;
  252.         }
  253.  
  254.         return flags & type;
  255.     }
  256.  
  257.     bool    ResourcesEngine::setPermissions(uint perms)
  258.     {
  259.         Q_ASSERT(false);
  260.  
  261.         return false;
  262.     }
  263.  
  264.     QString ResourcesEngine::fileName(FileName file) const
  265.     {
  266.         qDebug() << mPath;
  267.  
  268.         return mPath;
  269.     }
  270.  
  271.     uint    ResourcesEngine::ownerId(FileOwner) const
  272.     {
  273.         return 0;
  274.     }
  275.  
  276.     QString ResourcesEngine::owner(FileOwner) const
  277.     {
  278.         Q_ASSERT(false);
  279.  
  280.         return QString();
  281.     }
  282.  
  283.     QDateTime   ResourcesEngine::fileTime(FileTime time) const
  284.     {
  285.         return QDateTime();
  286.     }
  287.  
  288.     void    ResourcesEngine::setFileName(const QString& file)
  289.     {
  290.         mPath = file;
  291.  
  292.         int toto = 0;
  293.         if (mPath == "main.1.fr.anuman.HomeDesign3D.obb/qml")
  294.         {
  295.              toto = 1;
  296.         }
  297.  
  298.         LOG_DEBUG(mPath.toStdString().c_str());
  299.     }
  300.  
  301.     int ResourcesEngine::handle() const
  302.     {
  303.         LOG_DEBUG(mPath.toStdString().c_str());
  304.         return 0;
  305.     }
  306.  
  307.     QAbstractFileEngine::Iterator*  ResourcesEngine::beginEntryList(QDir::Filters filters, const QStringList& filterNames)
  308.     {
  309.         Q_ASSERT((filters & QDir::NoDotAndDotDot) > 0);
  310.         Q_ASSERT((filters & (QDir::Files | QDir::Dirs)) > 0);
  311.  
  312.         LOG_DEBUG(mPath.toStdString().c_str());
  313.  
  314.         QDir::Filters elevatedFlags = filters;
  315.         elevatedFlags |= QDir::NoDotAndDotDot;
  316.         elevatedFlags |= QDir::Dirs;
  317.         elevatedFlags |= QDir::Files;
  318.         elevatedFlags |= QDir::Readable;
  319.         Q_ASSERT((elevatedFlags ^
  320.                   (QDir::NoDotAndDotDot
  321.                    | QDir::Dirs
  322.                    | QDir::Files
  323.                    | QDir::Readable)) == 0); // Assert if some filters aren't supported
  324.  
  325.  
  326.         std::vector<packageReader::FileInfo>    result;
  327.         std::vector<packageReader::FileInfo>    infos;
  328.  
  329.         infos = packageReader::Manager::singleton()->getFiles(mPath.toStdString());
  330.         for (size_t i = 0; i < infos.size(); i++)
  331.         {
  332.             LOG_DEBUG(infos[i].filePath().c_str());
  333.             if (infos[i].isFile() && (filters & QDir::Files) > 0)
  334.                 result.push_back(infos[i]);
  335.             if (infos[i].isDir() && (filters & QDir::Dirs) > 0)
  336.                 result.push_back(infos[i]);
  337.         }
  338.  
  339.         Q_ASSERT(result.size() > 0);
  340.  
  341.         return (new ResourcesEngineIterator(filters, filterNames, result, filters | QDir::Dirs, false));
  342.     }
  343.  
  344.     QAbstractFileEngine::Iterator*  ResourcesEngine::endEntryList()
  345.     {
  346.         Q_ASSERT(false);
  347.  
  348.         return nullptr;
  349. //        return (new ResourcesEngineIterator(0, QStringList(), false, false));
  350.     }
  351.  
  352.     qint64  ResourcesEngine::read(char *data, qint64 maxlen)
  353.     {
  354.         LOG_DEBUG(mPath.toStdString().c_str());
  355.         return mFile.read(data, maxlen);
  356.     }
  357.  
  358.     qint64  ResourcesEngine::readLine(char *data, qint64 maxlen)
  359.     {
  360.         Q_ASSERT(false);
  361.  
  362.         return -1;
  363.     }
  364.  
  365.     qint64  ResourcesEngine::write(const char *data, qint64 len)
  366.     {
  367.         Q_ASSERT(false);
  368.  
  369.         return -1;
  370.     }
  371.  
  372.     bool    ResourcesEngine::extension(Extension extension, const ExtensionOption* option, ExtensionReturn* output)
  373.     {
  374.         LOG_DEBUG(mPath.toStdString().c_str());
  375.         return false;
  376.     }
  377.  
  378.     bool    ResourcesEngine::supportsExtension(Extension extension) const
  379.     {
  380.         LOG_DEBUG(mPath.toStdString().c_str());
  381.         return false;
  382.     }
  383.  
  384.     // -----------------------------------------------------------------------------
  385.  
  386. /*    ResourcesEngineIterator::ResourcesEngineIterator(): mHaveFolders(false)
  387.       , mIsEndIterator(false)
  388.       , mIndex(0)
  389.     {
  390.     }*/
  391.  
  392.     ResourcesEngineIterator::ResourcesEngineIterator(QDir::Filters filters, const QStringList& nameFilters, const std::vector<packageReader::FileInfo>& infos, bool haveFolders, bool isEndIterator)
  393.         : QAbstractFileEngineIterator(filters, nameFilters)
  394.         , mHaveFolders(haveFolders)
  395.         , mFiles(infos)
  396.         , mIsEndIterator(isEndIterator)
  397.         , mIndex(-1)
  398.     {
  399.     }
  400.  
  401.     QString ResourcesEngineIterator::next()
  402.     {
  403.         qDebug() << QString::fromStdString(mFiles[mIndex + 1].filePath());
  404.         return QString::fromStdString(mFiles[++mIndex].filePath());
  405.     }
  406.  
  407.     bool    ResourcesEngineIterator::hasNext() const
  408.     {
  409.         return (mIndex < (int)(mFiles.size()) - 1);
  410.     }
  411.  
  412.     QString ResourcesEngineIterator::currentFileName() const
  413.     {
  414.         qDebug() << QString::fromStdString(mFiles[mIndex].filePath());
  415.         return QString::fromStdString(mFiles[mIndex].filePath());
  416.     }
  417. }
RAW Paste Data