X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Fquassel.h;h=a30ece70365effcc2f51d847575b67b97fc9562e;hp=b658677d30cd15f41ae512b9fbd31fe305e25357;hb=HEAD;hpb=ab7ef4d24f62b5848b628482b7762ebfc0b53e1a diff --git a/src/common/quassel.h b/src/common/quassel.h index b658677d..a298e326 100644 --- a/src/common/quassel.h +++ b/src/common/quassel.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2018 by the Quassel Project * + * Copyright (C) 2005-2022 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -20,18 +20,19 @@ #pragma once +#include "common-export.h" + #include -#include #include +#include #include #include -#include #include +#include #include #include -#include "abstractcliparser.h" #include "abstractsignalwatcher.h" #include "singleton.h" @@ -39,28 +40,30 @@ class QFile; class Logger; -class Quassel : public QObject, public Singleton +class COMMON_EXPORT Quassel : public QObject, public Singleton { // TODO Qt5: Use Q_GADGET Q_OBJECT public: - enum RunMode { + enum RunMode + { Monolithic, ClientOnly, CoreOnly }; - struct BuildInfo { - QString fancyVersionString; // clickable rev - QString plainVersionString; // no tag + struct BuildInfo + { + QString fancyVersionString; // clickable rev + QString plainVersionString; // no tag QString baseVersion; QString generatedVersion; QString commitHash; QString commitDate; - uint protocolVersion; // deprecated + uint protocolVersion; // deprecated QString applicationName; QString coreApplicationName; @@ -82,7 +85,8 @@ public: * * @sa Feature */ - enum class LegacyFeature : quint32 { + enum class LegacyFeature : quint32 + { SynchronizedMarkerLine = 0x0001, SaslAuthentication = 0x0002, SaslExternal = 0x0004, @@ -115,28 +119,31 @@ public: * * This list should be cleaned up after every protocol break, as we can assume them to be present then. */ - enum class Feature : uint32_t { + enum class Feature : uint32_t + { SynchronizedMarkerLine, SaslAuthentication, SaslExternal, HideInactiveNetworks, - PasswordChange, ///< Remote password change - CapNegotiation, ///< IRCv3 capability negotiation, account tracking - VerifyServerSSL, ///< IRC server SSL validation - CustomRateLimits, ///< IRC server custom message rate limits - AwayFormatTimestamp, ///< Timestamp formatting in away (e.g. %%hh:mm%%) - Authenticators, ///< Whether or not the core supports auth backends - BufferActivitySync, ///< Sync buffer activity status - CoreSideHighlights, ///< Core-Side highlight configuration and matching - SenderPrefixes, ///< Show prefixes for senders in backlog - RemoteDisconnect, ///< Allow this peer to be remotely disconnected - ExtendedFeatures, ///< Extended features - LongTime, ///< Serialize time as 64-bit values - RichMessages, ///< Real Name and Avatar URL in backlog - BacklogFilterType, ///< BacklogManager supports filtering backlog by MessageType - EcdsaCertfpKeys, ///< ECDSA keys for CertFP in identities - LongMessageId, ///< 64-bit IDs for messages - SyncedCoreInfo, ///< CoreInfo dynamically updated using signals + PasswordChange, ///< Remote password change + CapNegotiation, ///< IRCv3 capability negotiation, account tracking + VerifyServerSSL, ///< IRC server SSL validation + CustomRateLimits, ///< IRC server custom message rate limits + AwayFormatTimestamp, ///< Timestamp formatting in away (e.g. %%hh:mm%%) + Authenticators, ///< Whether or not the core supports auth backends + BufferActivitySync, ///< Sync buffer activity status + CoreSideHighlights, ///< Core-Side highlight configuration and matching + SenderPrefixes, ///< Show prefixes for senders in backlog + RemoteDisconnect, ///< Allow this peer to be remotely disconnected + ExtendedFeatures, ///< Extended features + LongTime, ///< Serialize time as 64-bit values + RichMessages, ///< Real Name and Avatar URL in backlog + BacklogFilterType, ///< BacklogManager supports filtering backlog by MessageType + EcdsaCertfpKeys, ///< ECDSA keys for CertFP in identities + LongMessageId, ///< 64-bit IDs for messages + SyncedCoreInfo, ///< CoreInfo dynamically updated using signals + LoadBacklogForwards, ///< Allow loading backlog in ascending order, old to new + SkipIrcCaps, ///< Control what IRCv3 capabilities are skipped during negotiation }; Q_ENUMS(Feature) @@ -144,48 +151,49 @@ public: Quassel(); + void init(RunMode runMode); + /** * Provides access to the Logger instance. * * @returns The Logger instance */ - Logger *logger() const; + Logger* logger() const; static void setupBuildInfo(); - static const BuildInfo &buildInfo(); + static const BuildInfo& buildInfo(); static RunMode runMode(); static QString configDirPath(); //! Returns a list of data directory paths /** There are several locations for applications to install their data files in. On Unix, - * a common location is /usr/share; others include $PREFIX/share and additional directories - * specified in the env variable XDG_DATA_DIRS. - * \return A list of directory paths to look for data files in - */ + * a common location is /usr/share; others include $PREFIX/share and additional directories + * specified in the env variable XDG_DATA_DIRS. + * \return A list of directory paths to look for data files in + */ static QStringList dataDirPaths(); //! Searches for a data file in the possible data directories /** Data files can reside in $DATA_DIR/apps/quassel, where $DATA_DIR is one of the directories - * returned by \sa dataDirPaths(). - * \Note With KDE integration enabled, files are searched (only) in KDE's appdata dirs. - * \return The full path to the data file if found; a null QString else - */ - static QString findDataFilePath(const QString &filename); + * returned by \sa dataDirPaths(). + * \Note With KDE integration enabled, files are searched (only) in KDE's appdata dirs. + * \return The full path to the data file if found; a null QString else + */ + static QString findDataFilePath(const QString& filename); static QString translationDirPath(); //! Returns a list of directories we look for scripts in /** We look for a subdirectory named "scripts" in the configdir and in all datadir paths. - * \return A list of directory paths containing executable scripts for /exec - */ + * \return A list of directory paths containing executable scripts for /exec + */ static QStringList scriptDirPaths(); - static void loadTranslation(const QLocale &locale); + static void loadTranslation(const QLocale& locale); - static void setCliParser(std::shared_ptr cliParser); - static QString optionValue(const QString &option); - static bool isOptionSet(const QString &option); + static QString optionValue(const QString& option); + static bool isOptionSet(const QString& option); using ReloadHandler = std::function; @@ -203,7 +211,7 @@ public: */ static void registerQuitHandler(QuitHandler quitHandler); - const QString &coreDumpFileName(); + const QString& coreDumpFileName(); public slots: /** @@ -214,24 +222,13 @@ public slots: void quit(); signals: - void messageLogged(const QDateTime &timeStamp, const QString &msg); - -protected: - static bool init(); - - static void setRunMode(Quassel::RunMode runMode); - - static void setDataDirPaths(const QStringList &paths); - static QStringList findDataDirPaths(); - - friend class CoreApplication; - friend class QtUiApplication; - friend class MonolithicApplication; + void messageLogged(const QDateTime& timeStamp, const QString& msg); private: - void setupEnvironment(); void registerMetaTypes(); void setupSignalHandling(); + void setupEnvironment(); + void setupCliParser(); /** * Requests a reload of relevant runtime configuration. @@ -243,7 +240,7 @@ private: */ bool reloadConfig(); - void logBacktrace(const QString &filename); + void logBacktrace(const QString& filename); private slots: void handleSignal(AbstractSignalWatcher::Action action); @@ -251,7 +248,6 @@ private slots: private: BuildInfo _buildInfo; RunMode _runMode; - bool _initialized{false}; bool _quitting{false}; QString _coreDumpFileName; @@ -259,10 +255,10 @@ private: QStringList _dataDirPaths; QString _translationDirPath; - std::shared_ptr _cliParser; + QCommandLineParser _cliParser; - Logger *_logger; - AbstractSignalWatcher *_signalWatcher{nullptr}; + Logger* _logger; + AbstractSignalWatcher* _signalWatcher{nullptr}; std::vector _reloadHandlers; std::vector _quitHandlers; @@ -275,7 +271,7 @@ private: * * @sa Quassel::Feature */ -class Quassel::Features +class COMMON_EXPORT Quassel::Features { public: /** @@ -297,7 +293,7 @@ public: * @param legacyFeatures Holds a bit-wise combination of LegacyFeature flag values, which are each added to the list of * features represented by this Features instance. */ - Features(const QStringList &features, LegacyFeatures legacyFeatures); + Features(const QStringList& features, LegacyFeatures legacyFeatures); /** * Check if a given feature is marked as enabled in this Features instance.