#include <QCoreApplication>
#include <QDateTime>
-#include <QObject>
+#include <QFileInfo>
#include <QMetaType>
+#include <QObject>
+#include <QSettings>
#include "message.h"
#include "identity.h"
void Quassel::setupBuildInfo(const QString &generated) {
_buildInfo.applicationName = "Quassel IRC";
- _buildInfo.coreApplicationName = "Quassel Core";
- _buildInfo.clientApplicationName = "Quassel Client";
+ _buildInfo.coreApplicationName = "quasselcore";
+ _buildInfo.clientApplicationName = "quasselclient";
_buildInfo.organizationName = "Quassel Project";
_buildInfo.organizationDomain = "quassel-irc.org";
_configDirPath = Quassel::optionValue("configdir");
} else {
- // FIXME use QDesktopServices?
-#ifdef Q_OS_WIN32
- _configDirPath = qgetenv("APPDATA") + "/quassel/";
-#elif defined Q_WS_MAC
- _configDirPath = QDir::homePath() + "/Library/Application Support/Quassel/";
+#ifdef Q_WS_MAC
+ // On Mac, the path is always the same
+ _configDirPath = QDir::homePath() + "/Library/Application Support/Quassel/";
#else
- _configDirPath = QDir::homePath() + "/.quassel/";
-#endif
+ // 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
+ QSettings::Format format = QSettings::NativeFormat;
+# 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('/'))
- _configDirPath += '/';
+ if(!_configDirPath.endsWith(QDir::separator()) && !_configDirPath.endsWith('/'))
+ _configDirPath += QDir::separator();
QDir qDir(_configDirPath);
if(!qDir.exists(_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;
}