+#include "qtuisettings.h"
+
+
+QtUiApplication::QtUiApplication(int &argc, char **argv)
+#ifdef HAVE_KDE4
+ : KApplication(), // KApplication is deprecated in KF5
+#else
+ : QApplication(argc, argv),
+#endif
+ Quassel(),
+ _aboutToQuit(false)
+{
+#ifdef HAVE_KDE4
+ Q_UNUSED(argc); Q_UNUSED(argv);
+
+ // Setup KDE's data dirs
+ // Because we can't use KDE stuff in (the class) Quassel directly, we need to do this here...
+ QStringList dataDirs = KGlobal::dirs()->findDirs("data", "");
+
+ // Just in case, also check our install prefix
+ dataDirs << QCoreApplication::applicationDirPath() + "/../share/apps/";
+
+ // Normalize and append our application name
+ for (int i = 0; i < dataDirs.count(); i++)
+ dataDirs[i] = QDir::cleanPath(dataDirs.at(i)) + "/quassel/";
+
+ // Add resource path and just in case.
+ // Workdir should have precedence
+ dataDirs.prepend(QCoreApplication::applicationDirPath() + "/data/");
+ dataDirs.append(":/data/");
+
+ // Append trailing '/' and check for existence
+ auto iter = dataDirs.begin();
+ while (iter != dataDirs.end()) {
+ if (!iter->endsWith(QDir::separator()) && !iter->endsWith('/'))
+ iter->append(QDir::separator());
+ if (!QFile::exists(*iter))
+ iter = dataDirs.erase(iter);
+ else
+ ++iter;
+ }
+
+ dataDirs.removeDuplicates();
+ setDataDirPaths(dataDirs);
+
+#else /* HAVE_KDE4 */
+
+ setDataDirPaths(findDataDirPaths());
+
+#endif /* HAVE_KDE4 */
+
+#if defined(HAVE_KDE4) || defined(Q_OS_MAC)
+ disableCrashhandler();
+#endif /* HAVE_KDE4 || Q_OS_MAC */
+ setRunMode(Quassel::ClientOnly);
+
+#if QT_VERSION < 0x050000
+ qInstallMsgHandler(Client::logMessage);
+#else
+ qInstallMessageHandler(Client::logMessage);
+#endif
+}
+
+
+bool QtUiApplication::init()
+{
+ if (Quassel::init()) {
+ // FIXME: MIGRATION 0.3 -> 0.4: Move database and core config to new location
+ // Move settings, note this does not delete the old files
+#ifdef Q_OS_MAC
+ QSettings newSettings("quassel-irc.org", "quasselclient");
+#else
+
+# ifdef Q_OS_WIN
+ QSettings::Format format = QSettings::IniFormat;
+# else
+ QSettings::Format format = QSettings::NativeFormat;
+# endif
+
+ QString newFilePath = Quassel::configDirPath() + "quasselclient"
+ + ((format == QSettings::NativeFormat) ? QLatin1String(".conf") : QLatin1String(".ini"));
+ QSettings newSettings(newFilePath, format);
+#endif /* Q_OS_MAC */
+
+ if (newSettings.value("Config/Version").toUInt() == 0) {
+# ifdef Q_OS_MAC
+ QString org = "quassel-irc.org";
+# else
+ QString org = "Quassel Project";
+# endif
+ QSettings oldSettings(org, "Quassel Client");
+ if (oldSettings.allKeys().count()) {
+ qWarning() << "\n\n*** IMPORTANT: Config and data file locations have changed. Attempting to auto-migrate your client settings...";
+ foreach(QString key, oldSettings.allKeys())
+ newSettings.setValue(key, oldSettings.value(key));
+ newSettings.setValue("Config/Version", 1);
+ qWarning() << "* Your client settings have been migrated to" << newSettings.fileName();
+ qWarning() << "*** Migration completed.\n\n";
+ }
+ }
+
+ // MIGRATION end