X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fqtui%2Fqtuiapplication.cpp;h=568cbc11e4c1645dc41f2d02ededc6a452e5e40d;hb=71f48abcf1e4f9f852a2087bb30a2f187172c910;hp=8120aed258716ff50116b08b51202eaabc2561c1;hpb=c9c0a48239303d241b76b96ea36c505f0b5bb945;p=quassel.git diff --git a/src/qtui/qtuiapplication.cpp b/src/qtui/qtuiapplication.cpp index 8120aed2..568cbc11 100644 --- a/src/qtui/qtuiapplication.cpp +++ b/src/qtui/qtuiapplication.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2016 by the Quassel Project * + * Copyright (C) 2005-2018 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -21,6 +21,7 @@ #include "qtuiapplication.h" #include +#include #include #ifdef HAVE_KDE4 @@ -35,12 +36,10 @@ QtUiApplication::QtUiApplication(int &argc, char **argv) #ifdef HAVE_KDE4 - : KApplication(), // KApplication is deprecated in KF5 + : KApplication() // KApplication is deprecated in KF5 #else - : QApplication(argc, argv), + : QApplication(argc, argv) #endif - Quassel(), - _aboutToQuit(false) { #ifdef HAVE_KDE4 Q_UNUSED(argc); Q_UNUSED(argv); @@ -73,18 +72,19 @@ QtUiApplication::QtUiApplication(int &argc, char **argv) } dataDirs.removeDuplicates(); - setDataDirPaths(dataDirs); + Quassel::setDataDirPaths(dataDirs); #else /* HAVE_KDE4 */ - setDataDirPaths(findDataDirPaths()); + Quassel::setDataDirPaths(Quassel::findDataDirPaths()); #endif /* HAVE_KDE4 */ #if defined(HAVE_KDE4) || defined(Q_OS_MAC) - disableCrashhandler(); + Quassel::disableCrashHandler(); #endif /* HAVE_KDE4 || Q_OS_MAC */ - setRunMode(Quassel::ClientOnly); + + Quassel::setRunMode(Quassel::ClientOnly); #if QT_VERSION < 0x050000 qInstallMsgHandler(Client::logMessage); @@ -169,13 +169,17 @@ bool QtUiApplication::init() // Some platforms don't set a default icon theme; chances are we can find our bundled theme though QIcon::setThemeName("breeze"); - // session resume - QtUi *gui = new QtUi(); - Client::init(gui); - // init gui only after the event loop has started - // QTimer::singleShot(0, gui, SLOT(init())); - gui->init(); - resumeSessionIfPossible(); + Client::init(new QtUi()); + + // Init UI only after the event loop has started + // TODO Qt5: Make this a lambda + QTimer::singleShot(0, this, SLOT(initUi())); + + Quassel::registerQuitHandler([]() { + QtUi::mainWindow()->quit(); + }); + + return true; } return false; @@ -185,12 +189,14 @@ bool QtUiApplication::init() QtUiApplication::~QtUiApplication() { Client::destroy(); + Quassel::destroy(); } -void QtUiApplication::quit() +void QtUiApplication::initUi() { - QtUi::mainWindow()->quit(); + QtUi::instance()->init(); + resumeSessionIfPossible(); } @@ -213,7 +219,7 @@ bool QtUiApplication::migrateSettings() // // NOTE: If you increase the minor version, you MUST ALSO add new version upgrade logic in // applySettingsMigration()! Otherwise, settings upgrades will fail. - const uint VERSION_MINOR_CURRENT = 6; + const uint VERSION_MINOR_CURRENT = 8; // Stored minor version uint versionMinor = s.versionMinor(); @@ -278,6 +284,70 @@ bool QtUiApplication::applySettingsMigration(QtUiSettings settings, const uint n // saved. Exceptions will be noted below. // NOTE: If you add new upgrade logic here, you MUST ALSO increase VERSION_MINOR_CURRENT in // migrateSettings()! Otherwise, your upgrade logic won't ever be called. + case 8: + { + // New default changes: RegEx checkbox now toggles Channel regular expressions, too + // + // This only affects local highlights. Core-side highlights weren't released in stable when + // this change was made, so no need to migrate those. + + // -------- + // NotificationSettings + NotificationSettings notificationSettings; + + // Check each highlight rule for a "Channel" field. If one exists, convert to RegEx mode. + // This might be more efficient with std::transform() or such. It /is/ only run once... + auto highlightList = notificationSettings.highlightList(); + bool changesMade = false; + for (int index = 0; index < highlightList.count(); ++index) + { + // Load the highlight rule... + auto highlightRule = highlightList[index].toMap(); + + // Check if "Channel" has anything set and RegEx is disabled + if (!highlightRule["Channel"].toString().isEmpty() + && highlightRule["RegEx"].toBool() == false) { + // We have a rule to convert + + // Mark as a regular expression, allowing the Channel filtering to work the same as + // before the upgrade + highlightRule["RegEx"] = true; + + // Convert the main rule to regular expression, mirroring the conversion to wildcard + // format from QtUiMessageProcessor::checkForHighlight() + highlightRule["Name"] = + "(^|\\W)" + QRegExp::escape(highlightRule["Name"].toString()) + "(\\W|$)"; + + // Save the rule back + highlightList[index] = highlightRule; + changesMade = true; + } + } + + // Save the modified rules if any changes were made + if (changesMade) { + notificationSettings.setHighlightList(highlightList); + } + // -------- + + // Migration complete! + } + case 7: + { + // New default changes: UseProxy is no longer used in CoreAccountSettings + CoreAccountSettings s; + for (auto &&accountId : s.knownAccounts()) { + auto map = s.retrieveAccountData(accountId); + if (!map.value("UseProxy", false).toBool()) { + map["ProxyType"] = static_cast(QNetworkProxy::ProxyType::NoProxy); + } + map.remove("UseProxy"); + s.storeAccountData(accountId, map); + } + + // Migration complete! + return true; + } case 6: { // New default changes: sender colors switched around to Tango-ish theme