# HG changeset patch # User unc0rr # Date 1354564452 -14400 # Node ID 1633a651083475269dcaee65648467ae38ef3452 # Parent 921e63507bea2d38a72b06545d3a5346fbb2092b Create hedgewars.ini if not exists manually, as QSettings uses QTemporaryFile for that, and QTemporaryFile doesn't respect custom file engines. diff -r 921e63507bea -r 1633a6510834 QTfrontend/gameuiconfig.cpp --- a/QTfrontend/gameuiconfig.cpp Mon Dec 03 18:08:19 2012 +0100 +++ b/QTfrontend/gameuiconfig.cpp Mon Dec 03 23:54:12 2012 +0400 @@ -310,7 +310,6 @@ void GameUIConfig::setValue(const QString &key, const QVariant &value) { - qDebug() << "[settings]" << key << value; QSettings::setValue(key, value); } diff -r 921e63507bea -r 1633a6510834 QTfrontend/main.cpp --- a/QTfrontend/main.cpp Mon Dec 03 18:08:19 2012 +0100 +++ b/QTfrontend/main.cpp Mon Dec 03 23:54:12 2012 +0400 @@ -90,9 +90,9 @@ bool checkForDir(const QString & dir) { - QDir tmpdir; - if (!tmpdir.exists(dir)) - if (!tmpdir.mkdir(dir)) + QDir tmpdir(dir); + if (!tmpdir.exists()) + if (!tmpdir.mkpath(dir)) { QMessageBox directoryMsg(QApplication::activeWindow()); directoryMsg.setIcon(QMessageBox::Warning); @@ -105,6 +105,15 @@ return true; } +bool checkForFile(const QString & file) +{ + QFile tmpfile(file); + if (!tmpfile.exists()) + return tmpfile.open(QFile::WriteOnly); + else + return true; +} + #ifdef __APPLE__ static CocoaInitializer *cocoaInit = NULL; // Function to be called at end of program's termination on OS X to release @@ -252,6 +261,8 @@ engine.setWriteDir(cfgdir->absolutePath()); engine.mountPacks(); + checkForFile("physfs://hedgewars.ini"); + QTranslator Translator; { QSettings settings("physfs://hedgewars.ini", QSettings::IniFormat); diff -r 921e63507bea -r 1633a6510834 QTfrontend/util/FileEngine.cpp --- a/QTfrontend/util/FileEngine.cpp Mon Dec 03 18:08:19 2012 +0100 +++ b/QTfrontend/util/FileEngine.cpp Mon Dec 03 23:54:12 2012 +0400 @@ -10,6 +10,7 @@ FileEngine::FileEngine(const QString& filename) : m_handle(NULL) + , m_size(0) , m_flags(0) , m_bufferSet(false) , m_readWrite(false) @@ -28,8 +29,11 @@ if ((openMode & QIODevice::ReadWrite) == QIODevice::ReadWrite) { m_handle = PHYSFS_openAppend(m_fileName.toUtf8().constData()); - m_readWrite = true; - seek(0); + if(m_handle) + { + m_readWrite = true; + seek(0); + } } else if (openMode & QIODevice::WriteOnly) { @@ -114,12 +118,14 @@ bool FileEngine::mkdir(const QString &dirName, bool createParentDirectories) const { Q_UNUSED(createParentDirectories); + return PHYSFS_mkdir(dirName.toUtf8().constData()) != 0; } bool FileEngine::rmdir(const QString &dirName, bool recurseParentDirectories) const { Q_UNUSED(recurseParentDirectories); + return PHYSFS_delete(dirName.toUtf8().constData()) != 0; } @@ -191,7 +197,6 @@ QDateTime FileEngine::fileTime(FileTime time) const { - switch (time) { case QAbstractFileEngine::ModificationTime: @@ -207,21 +212,21 @@ m_fileName = file.mid(FileEngineHandler::scheme.size()); else m_fileName = file; - PHYSFS_Stat stat; if (PHYSFS_stat(m_fileName.toUtf8().constData(), &stat) != 0) { m_size = stat.filesize; m_date = QDateTime::fromTime_t(stat.modtime); -// _flags |= QAbstractFileEngine::WriteUserPerm; +// m_flags |= QAbstractFileEngine::WriteOwnerPerm; + m_flags |= QAbstractFileEngine::ReadOwnerPerm; m_flags |= QAbstractFileEngine::ReadUserPerm; m_flags |= QAbstractFileEngine::ExistsFlag; + m_flags |= QAbstractFileEngine::LocalDiskFlag; switch (stat.filetype) { case PHYSFS_FILETYPE_REGULAR: m_flags |= QAbstractFileEngine::FileType; break; - case PHYSFS_FILETYPE_DIRECTORY: m_flags |= QAbstractFileEngine::DirectoryType; break;