X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Fquassel.h;h=fd1dfd7991ddf041a49d03fce6fb3726e569dafa;hp=88b225467f49594607c7c5c04b0083a138602279;hb=92fc8c5b119111a35ab8423c3cbde5b2a022badf;hpb=0dbec2cfc937857d66a9645249f876f1e6b3f05e diff --git a/src/common/quassel.h b/src/common/quassel.h index 88b22546..fd1dfd79 100644 --- a/src/common/quassel.h +++ b/src/common/quassel.h @@ -20,22 +20,27 @@ #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" class QFile; -class Quassel : public QObject +class Logger; + +class COMMON_EXPORT Quassel : public QObject, public Singleton { // TODO Qt5: Use Q_GADGET Q_OBJECT @@ -111,11 +116,7 @@ public: * * This list should be cleaned up after every protocol break, as we can assume them to be present then. */ - #if QT_VERSION >= 0x050000 enum class Feature : uint32_t { - #else - enum Feature { - #endif SynchronizedMarkerLine, SaslAuthentication, SaslExternal, @@ -131,15 +132,27 @@ public: SenderPrefixes, ///< Show prefixes for senders in backlog RemoteDisconnect, ///< Allow this peer to be remotely disconnected ExtendedFeatures, ///< Extended features -#if QT_VERSION >= 0x050500 + 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 -#endif + LongMessageId, ///< 64-bit IDs for messages + SyncedCoreInfo, ///< CoreInfo dynamically updated using signals }; Q_ENUMS(Feature) class Features; - static Quassel *instance(); + Quassel(); + + void init(RunMode runMode); + + /** + * Provides access to the Logger instance. + * + * @returns The Logger instance + */ + Logger *logger() const; static void setupBuildInfo(); static const BuildInfo &buildInfo(); @@ -173,52 +186,43 @@ public: 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); - enum LogLevel { - DebugLevel, - InfoLevel, - WarningLevel, - ErrorLevel - }; - - static LogLevel logLevel(); - static void setLogLevel(LogLevel logLevel); - static QFile *logFile(); - static bool logToSyslog(); - - static void logFatalMessage(const char *msg); - using ReloadHandler = std::function; static void registerReloadHandler(ReloadHandler handler); using QuitHandler = std::function; + /** + * Registers a handler that is called when the application is supposed to quit. + * + * @note If multiple handlers are registered, they are processed in order of registration. + * @note If any handler is registered, quit() will not call QCoreApplication::quit(). It relies + * on one of the handlers doing so, instead. + * @param quitHandler Handler to register + */ static void registerQuitHandler(QuitHandler quitHandler); -protected: - static bool init(); - static void destroy(); - - static void setRunMode(Quassel::RunMode runMode); + const QString &coreDumpFileName(); - static void setDataDirPaths(const QStringList &paths); - static QStringList findDataDirPaths(); - static void disableCrashHandler(); +public slots: + /** + * Requests to quit the application. + * + * Calls any registered quit handlers. If no handlers are registered, calls QCoreApplication::quit(). + */ + void quit(); - friend class CoreApplication; - friend class QtUiApplication; - friend class MonolithicApplication; +signals: + void messageLogged(const QDateTime &timeStamp, const QString &msg); private: - Quassel(); - void setupEnvironment(); void registerMetaTypes(); - - const QString &coreDumpFileName(); + void setupSignalHandling(); + void setupEnvironment(); + void setupCliParser(); /** * Requests a reload of relevant runtime configuration. @@ -230,33 +234,25 @@ private: */ bool reloadConfig(); - /** - * Requests to quit the application. - * - * Calls any registered quit handlers. If no handlers are registered, calls QCoreApplication::quit(). - */ - void quit(); - void logBacktrace(const QString &filename); - static void handleSignal(int signal); +private slots: + void handleSignal(AbstractSignalWatcher::Action action); private: BuildInfo _buildInfo; RunMode _runMode; - bool _initialized{false}; - bool _handleCrashes{true}; + bool _quitting{false}; QString _coreDumpFileName; QString _configDirPath; QStringList _dataDirPaths; QString _translationDirPath; - LogLevel _logLevel{InfoLevel}; - bool _logToSyslog{false}; - std::unique_ptr _logFile; + QCommandLineParser _cliParser; - std::shared_ptr _cliParser; + Logger *_logger; + AbstractSignalWatcher *_signalWatcher{nullptr}; std::vector _reloadHandlers; std::vector _quitHandlers; @@ -269,7 +265,7 @@ private: * * @sa Quassel::Feature */ -class Quassel::Features +class COMMON_EXPORT Quassel::Features { public: /**