_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);
dataDirNames[i].append("/apps/quassel/");
} else {
// Provide a fallback
- // FIXME fix this for win and mac!
#ifdef Q_OS_WIN32
- dataDirNames << qgetenv("APPDATA") + "/quassel/"
+ dataDirNames << qgetenv("APPDATA") + QCoreApplication::organizationDomain() + "/share/apps/quassel/"
+ << qgetenv("APPDATA") + QCoreApplication::organizationDomain()
<< QCoreApplication::applicationDirPath();
+ }
#elif defined Q_WS_MAC
dataDirNames << QDir::homePath() + "/Library/Application Support/Quassel/"
<< QCoreApplication::applicationDirPath();
+ }
#else
- if(dataDirNames.isEmpty())
- dataDirNames.append("/usr/share/apps/quassel/");
- // on UNIX, we always check our install prefix
- QString appDir = QCoreApplication::applicationDirPath();
- int binpos = appDir.lastIndexOf("/bin");
- if(binpos >= 0) {
- appDir.replace(binpos, 4, "/share");
- appDir.append("/apps/quassel/");
- if(!dataDirNames.contains(appDir))
- dataDirNames.append(appDir);
- }
+ dataDirNames.append("/usr/share/apps/quassel/");
+ }
+ // on UNIX, we always check our install prefix
+ QString appDir = QCoreApplication::applicationDirPath();
+ int binpos = appDir.lastIndexOf("/bin");
+ if(binpos >= 0) {
+ appDir.replace(binpos, 4, "/share");
+ appDir.append("/apps/quassel/");
+ if(!dataDirNames.contains(appDir))
+ dataDirNames.append(appDir);
+ }
#endif
+
+ // add resource path and workdir just in case
+ dataDirNames << QCoreApplication::applicationDirPath() + "/data/"
+ << ":/data/";
+
+ // 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;
}
- // add resource path just in case
- dataDirNames << ":/data/";
return dataDirNames;
}