QTfrontend/util/FileEngine.cpp
changeset 8206 1633a6510834
parent 8178 8bd087478b48
child 8330 aaefa587e277
equal deleted inserted replaced
8205:921e63507bea 8206:1633a6510834
     8 
     8 
     9 const QString FileEngineHandler::scheme = "physfs:/";
     9 const QString FileEngineHandler::scheme = "physfs:/";
    10 
    10 
    11 FileEngine::FileEngine(const QString& filename)
    11 FileEngine::FileEngine(const QString& filename)
    12     : m_handle(NULL)
    12     : m_handle(NULL)
       
    13     , m_size(0)
    13     , m_flags(0)
    14     , m_flags(0)
    14     , m_bufferSet(false)
    15     , m_bufferSet(false)
    15     , m_readWrite(false)
    16     , m_readWrite(false)
    16 {
    17 {
    17     setFileName(filename);
    18     setFileName(filename);
    26 {
    27 {
    27     close();
    28     close();
    28 
    29 
    29     if ((openMode & QIODevice::ReadWrite) == QIODevice::ReadWrite) {
    30     if ((openMode & QIODevice::ReadWrite) == QIODevice::ReadWrite) {
    30         m_handle = PHYSFS_openAppend(m_fileName.toUtf8().constData());
    31         m_handle = PHYSFS_openAppend(m_fileName.toUtf8().constData());
    31         m_readWrite = true;
    32         if(m_handle)
    32         seek(0);
    33         {
       
    34             m_readWrite = true;
       
    35             seek(0);
       
    36         }
    33     }
    37     }
    34 
    38 
    35     else if (openMode & QIODevice::WriteOnly) {
    39     else if (openMode & QIODevice::WriteOnly) {
    36         m_handle = PHYSFS_openWrite(m_fileName.toUtf8().constData());
    40         m_handle = PHYSFS_openWrite(m_fileName.toUtf8().constData());
    37         m_flags = QAbstractFileEngine::WriteOwnerPerm | QAbstractFileEngine::WriteUserPerm | QAbstractFileEngine::FileType;
    41         m_flags = QAbstractFileEngine::WriteOwnerPerm | QAbstractFileEngine::WriteUserPerm | QAbstractFileEngine::FileType;
   112 }
   116 }
   113 
   117 
   114 bool FileEngine::mkdir(const QString &dirName, bool createParentDirectories) const
   118 bool FileEngine::mkdir(const QString &dirName, bool createParentDirectories) const
   115 {
   119 {
   116     Q_UNUSED(createParentDirectories);
   120     Q_UNUSED(createParentDirectories);
       
   121 
   117     return PHYSFS_mkdir(dirName.toUtf8().constData()) != 0;
   122     return PHYSFS_mkdir(dirName.toUtf8().constData()) != 0;
   118 }
   123 }
   119 
   124 
   120 bool FileEngine::rmdir(const QString &dirName, bool recurseParentDirectories) const
   125 bool FileEngine::rmdir(const QString &dirName, bool recurseParentDirectories) const
   121 {
   126 {
   122     Q_UNUSED(recurseParentDirectories);
   127     Q_UNUSED(recurseParentDirectories);
       
   128 
   123     return PHYSFS_delete(dirName.toUtf8().constData()) != 0;
   129     return PHYSFS_delete(dirName.toUtf8().constData()) != 0;
   124 }
   130 }
   125 
   131 
   126 bool FileEngine::caseSensitive() const
   132 bool FileEngine::caseSensitive() const
   127 {
   133 {
   189     }
   195     }
   190 }
   196 }
   191 
   197 
   192 QDateTime FileEngine::fileTime(FileTime time) const
   198 QDateTime FileEngine::fileTime(FileTime time) const
   193 {
   199 {
   194 
       
   195     switch (time)
   200     switch (time)
   196     {
   201     {
   197         case QAbstractFileEngine::ModificationTime:
   202         case QAbstractFileEngine::ModificationTime:
   198         default:
   203         default:
   199             return m_date;
   204             return m_date;
   205 {
   210 {
   206     if(file.startsWith(FileEngineHandler::scheme))
   211     if(file.startsWith(FileEngineHandler::scheme))
   207         m_fileName = file.mid(FileEngineHandler::scheme.size());
   212         m_fileName = file.mid(FileEngineHandler::scheme.size());
   208     else
   213     else
   209         m_fileName = file;
   214         m_fileName = file;
   210 
       
   211     PHYSFS_Stat stat;
   215     PHYSFS_Stat stat;
   212     if (PHYSFS_stat(m_fileName.toUtf8().constData(), &stat) != 0) {        
   216     if (PHYSFS_stat(m_fileName.toUtf8().constData(), &stat) != 0) {        
   213         m_size = stat.filesize;
   217         m_size = stat.filesize;
   214         m_date = QDateTime::fromTime_t(stat.modtime);
   218         m_date = QDateTime::fromTime_t(stat.modtime);
   215 //        _flags |= QAbstractFileEngine::WriteUserPerm;
   219 //        m_flags |= QAbstractFileEngine::WriteOwnerPerm;
       
   220         m_flags |= QAbstractFileEngine::ReadOwnerPerm;
   216         m_flags |= QAbstractFileEngine::ReadUserPerm;
   221         m_flags |= QAbstractFileEngine::ReadUserPerm;
   217         m_flags |= QAbstractFileEngine::ExistsFlag;
   222         m_flags |= QAbstractFileEngine::ExistsFlag;
       
   223         m_flags |= QAbstractFileEngine::LocalDiskFlag;
   218 
   224 
   219         switch (stat.filetype)
   225         switch (stat.filetype)
   220         {
   226         {
   221             case PHYSFS_FILETYPE_REGULAR:
   227             case PHYSFS_FILETYPE_REGULAR:
   222                 m_flags |= QAbstractFileEngine::FileType;
   228                 m_flags |= QAbstractFileEngine::FileType;
   223                 break;
   229                 break;
   224 
       
   225             case PHYSFS_FILETYPE_DIRECTORY:
   230             case PHYSFS_FILETYPE_DIRECTORY:
   226                 m_flags |= QAbstractFileEngine::DirectoryType;
   231                 m_flags |= QAbstractFileEngine::DirectoryType;
   227                 break;
   232                 break;
   228             case PHYSFS_FILETYPE_SYMLINK:
   233             case PHYSFS_FILETYPE_SYMLINK:
   229                 m_flags |= QAbstractFileEngine::LinkType;
   234                 m_flags |= QAbstractFileEngine::LinkType;