_configDirPath = Quassel::optionValue("configdir");
} else {
- // We abuse QSettings to find us a sensible path on all platforms
-#ifdef Q_WS_WIN
+#ifdef Q_WS_MAC
+ // On Mac, the path is always the same
+ _configDirPath = QDir::homePath() + "/Library/Application Support/Quassel/";
+#else
+ // We abuse QSettings to find us a sensible path on the other platforms
+# ifdef Q_WS_WIN
// don't use the registry
QSettings::Format format = QSettings::IniFormat;
-#else
+# else
QSettings::Format format = QSettings::NativeFormat;
-#endif
+# endif
QSettings s(format, QSettings::UserScope, QCoreApplication::organizationDomain(), buildInfo().applicationName);
QFileInfo fileInfo(s.fileName());
_configDirPath = fileInfo.dir().absolutePath();
}
+#endif /* Q_WS_MAC */
- if(!_configDirPath.endsWith(QDir::separator()))
+ if(!_configDirPath.endsWith(QDir::separator()) && !_configDirPath.endsWith('/'))
_configDirPath += QDir::separator();
QDir qDir(_configDirPath);
// Provide a fallback
// FIXME fix this for win and mac!
#ifdef Q_OS_WIN32
- dataDirNames << qgetenv("APPDATA") + "/quassel/"
+ dataDirNames << qgetenv("APPDATA") + QCoreApplication::organizationDomain();
<< QCoreApplication::applicationDirPath();
#elif defined Q_WS_MAC
dataDirNames << QDir::homePath() + "/Library/Application Support/Quassel/"
#endif
}
- // add resource path just in case
- dataDirNames << ":/data/";
+ // add resource path and workdir just in case
+ dataDirNames << ":/data/"
+ << QCoreApplication::applicationDirPath() + "/data/"
+ << QCoreApplication::applicationDirPath();
+
+ // append trailing '/' and check for existence
+ QStringList::Iterator iter = dataDirNames.begin();
+ while(iter != dataDirNames.end()) {
+ if(!iter->endsWith(QDir::separator()) && !iter->endsWith('/'))
+ iter->append(QDir::separator());
+ if(!QFile::exists(*iter))
+ iter = dataDirNames.erase(iter);
+ else
+ ++iter;
+ }
+
return dataDirNames;
}