X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Fquassel.h;h=034c5600ec4777476d6ebd4f3f8a986fa4d56bfd;hp=40e2e12f738d1eb459b6be3258e34783d77391cc;hb=e1b19bda89f82f41ed99baa92ac962e48548eae1;hpb=7f586ab22eee4c914901c608304d1da144bc3789 diff --git a/src/common/quassel.h b/src/common/quassel.h index 40e2e12f..034c5600 100644 --- a/src/common/quassel.h +++ b/src/common/quassel.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-08 by the Quassel IRC Team * + * Copyright (C) 2005-2014 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -15,102 +15,178 @@ * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ #ifndef QUASSEL_H_ #define QUASSEL_H_ #include +#include #include -#include "cliparser.h" +#include "abstractcliparser.h" -class Quassel { - Q_DECLARE_TR_FUNCTIONS(Quassel) +class QFile; - public: +class Quassel +{ + Q_DECLARE_TR_FUNCTIONS(Quassel) + +public: enum RunMode { - Monolithic, - ClientOnly, - CoreOnly + Monolithic, + ClientOnly, + CoreOnly }; struct BuildInfo { - QString version; - QString baseVersion; - QString generatedVersion; - QString buildDate; - QString buildTime; - QString commitHash; - uint archiveDate; - uint protocolVersion; - uint clientNeedsProtocol; - uint coreNeedsProtocol; - - QString applicationName; - QString coreApplicationName; - QString clientApplicationName; - QString organizationName; - QString organizationDomain; + QString fancyVersionString; // clickable rev + QString plainVersionString; // no tag + + QString baseVersion; + QString generatedVersion; + QString commitHash; + uint commitDate; + QString buildDate; + + uint protocolVersion; // deprecated + + QString applicationName; + QString coreApplicationName; + QString clientApplicationName; + QString organizationName; + QString organizationDomain; + }; + + //! A list of features that are optional in core and/or client, but need runtime checking + /** Some features require an uptodate counterpart, but don't justify a protocol break. + * This is what we use this enum for. Add such features to it and check at runtime on the other + * side for their existence. + * + * This list should be cleaned up after every protocol break, as we can assume them to be present then. + */ + enum Feature { + SynchronizedMarkerLine = 0x0001, + SaslAuthentication = 0x0002, + SaslExternal = 0x0004, + HideInactiveNetworks = 0x0008, + + NumFeatures = 0x0008 }; + Q_DECLARE_FLAGS(Features, Feature); + + //! The features the current version of Quassel supports (\sa Feature) + /** \return An ORed list of all enum values in Feature + */ + static Features features(); virtual ~Quassel(); - static inline const BuildInfo & buildInfo(); + static void setupBuildInfo(); + static inline const BuildInfo &buildInfo(); static inline RunMode runMode(); - static inline CliParser *cliParser(); + 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 + */ + 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); + + 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 + */ + static QStringList scriptDirPaths(); + + static void loadTranslation(const QLocale &locale); + + static inline void setCliParser(AbstractCliParser *cliParser); + static inline AbstractCliParser *cliParser(); static inline QString optionValue(const QString &option); static inline bool isOptionSet(const QString &option); + static const QString &coreDumpFileName(); + static bool DEBUG; - protected: + enum LogLevel { + DebugLevel, + InfoLevel, + WarningLevel, + ErrorLevel + }; + + static inline LogLevel logLevel(); + static inline QFile *logFile(); + static inline bool logToSyslog(); + + static void logFatalMessage(const char *msg); + +protected: Quassel(); virtual bool init(); + virtual void quit(); inline void setRunMode(RunMode mode); + inline void setDataDirPaths(const QStringList &paths); + QStringList findDataDirPaths() const; + inline void disableCrashhandler(); - - private: - void setupBuildInfo(); - void setupTranslations(); +private: + void setupEnvironment(); void registerMetaTypes(); static void handleSignal(int signal); - static void handleCrash(); + static void logBacktrace(const QString &filename); + static Quassel *_instance; static BuildInfo _buildInfo; - static CliParser *_cliParser; + static AbstractCliParser *_cliParser; static RunMode _runMode; static bool _initialized; -}; + static bool _handleCrashes; -// FIXME temporary -namespace Global { - extern QString quasselVersion; - extern QString quasselBaseVersion; - extern QString quasselBuildDate; - extern QString quasselBuildTime; - extern QString quasselCommit; - extern uint quasselArchiveDate; - extern uint protocolVersion; + static QString _coreDumpFileName; + static QString _configDirPath; + static QStringList _dataDirPaths; + static QString _translationDirPath; - extern uint clientNeedsProtocol; //< Minimum protocol version the client needs - extern uint coreNeedsProtocol; //< Minimum protocol version the core needs + static LogLevel _logLevel; + static QFile *_logFile; + static bool _logToSyslog; +}; - extern QString quasselGeneratedVersion; //< This is possibly set in version.gen - void setupVersion(); -}; +Q_DECLARE_OPERATORS_FOR_FLAGS(Quassel::Features); -const Quassel::BuildInfo & Quassel::buildInfo() { return _buildInfo; } +const Quassel::BuildInfo &Quassel::buildInfo() { return _buildInfo; } Quassel::RunMode Quassel::runMode() { return _runMode; } void Quassel::setRunMode(Quassel::RunMode mode) { _runMode = mode; } +void Quassel::setDataDirPaths(const QStringList &paths) { _dataDirPaths = paths; } +void Quassel::disableCrashhandler() { _handleCrashes = false; } -CliParser *Quassel::cliParser() { return _cliParser; } +void Quassel::setCliParser(AbstractCliParser *parser) { _cliParser = parser; } +AbstractCliParser *Quassel::cliParser() { return _cliParser; } QString Quassel::optionValue(const QString &key) { return cliParser()->value(key); } bool Quassel::isOptionSet(const QString &key) { return cliParser()->isSet(key); } +Quassel::LogLevel Quassel::logLevel() { return _logLevel; } +QFile *Quassel::logFile() { return _logFile; } +bool Quassel::logToSyslog() { return _logToSyslog; } + #endif