QString Quassel::_coreDumpFileName;
Quassel *Quassel::_instance = 0;
bool Quassel::_handleCrashes = true;
+Quassel::LogLevel Quassel::_logLevel = InfoLevel;
+QFile *Quassel::_logFile = 0;
+bool Quassel::_logToSyslog = false;
Quassel::Quassel() {
Q_ASSERT(!_instance);
}
Quassel::~Quassel() {
+ if(logFile()) {
+ logFile()->close();
+ logFile()->deleteLater();
+ }
delete _cliParser;
}
// we only handle crashes ourselves if coredumps are disabled
struct rlimit *limit = (rlimit *) malloc(sizeof(struct rlimit));
int rc = getrlimit(RLIMIT_CORE, limit);
-
+
if(rc == -1 || !((long)limit->rlim_cur > 0 || limit->rlim_cur == RLIM_INFINITY)) {
# endif /* Q_OS_WIN32 */
signal(SIGABRT, handleSignal);
}
DEBUG = isOptionSet("debug");
+
+ // set up logging
+ if(Quassel::runMode() != Quassel::ClientOnly) {
+ if(isOptionSet("loglevel")) {
+ QString level = optionValue("loglevel");
+
+ if(level == "Debug") _logLevel = DebugLevel;
+ else if(level == "Info") _logLevel = InfoLevel;
+ else if(level == "Warning") _logLevel= WarningLevel;
+ else if(level == "Error") _logLevel = ErrorLevel;
+ }
+
+ QString logfilename = optionValue("logfile");
+ if(!logfilename.isEmpty()) {
+ _logFile = new QFile(logfilename);
+ if(!_logFile->open(QIODevice::Append | QIODevice::Text)) {
+ qWarning() << "Could not open log file" << logfilename << ":" << _logFile->errorString();
+ _logFile->deleteLater();
+ _logFile = 0;
+ }
+ }
+
+ _logToSyslog = isOptionSet("syslog");
+ }
+
return true;
}
*/
void Quassel::registerMetaTypes() {
// Complex types
- qRegisterMetaType<QVariant>("QVariant");
qRegisterMetaType<Message>("Message");
qRegisterMetaType<BufferInfo>("BufferInfo");
qRegisterMetaType<NetworkInfo>("NetworkInfo");
qRegisterMetaType<Identity>("Identity");
qRegisterMetaType<Network::ConnectionState>("Network::ConnectionState");
- qRegisterMetaTypeStreamOperators<QVariant>("QVariant");
qRegisterMetaTypeStreamOperators<Message>("Message");
qRegisterMetaTypeStreamOperators<BufferInfo>("BufferInfo");
qRegisterMetaTypeStreamOperators<NetworkInfo>("NetworkInfo");
qRegisterMetaTypeStreamOperators<UserId>("UserId");
qRegisterMetaTypeStreamOperators<AccountId>("AccountId");
qRegisterMetaTypeStreamOperators<MsgId>("MsgId");
+
+ // Versions of Qt prior to 4.7 didn't define QVariant as a meta type
+ if(!QMetaType::type("QVariant")) {
+ qRegisterMetaType<QVariant>("QVariant");
+ qRegisterMetaTypeStreamOperators<QVariant>("QVariant");
+ }
}
void Quassel::setupBuildInfo(const QString &generated) {
#endif
}
+Quassel::Features Quassel::features() {
+ Features feats = 0;
+ for(int i = 1; i <= NumFeatures; i<<=1)
+ feats |= (Feature) i;
+
+ return feats;
+}
+
const QString &Quassel::coreDumpFileName() {
if(_coreDumpFileName.isEmpty()) {
QDir configDir(configDirPath());
QTranslator *qtTranslator = QCoreApplication::instance()->findChild<QTranslator *>("QtTr");
QTranslator *quasselTranslator = QCoreApplication::instance()->findChild<QTranslator *>("QuasselTr");
- if(!qtTranslator) {
- qtTranslator = new QTranslator(qApp);
- qtTranslator->setObjectName("QtTr");
- qApp->installTranslator(qtTranslator);
- }
- if(!quasselTranslator) {
- quasselTranslator = new QTranslator(qApp);
- quasselTranslator->setObjectName("QuasselTr");
- qApp->installTranslator(quasselTranslator);
- }
-
- QLocale::setDefault(locale);
+ if(qtTranslator)
+ qApp->removeTranslator(qtTranslator);
+ if(quasselTranslator)
+ qApp->removeTranslator(quasselTranslator);
+ // We use QLocale::C to indicate that we don't want a translation
if(locale.language() == QLocale::C)
return;
+ qtTranslator = new QTranslator(qApp);
+ qtTranslator->setObjectName("QtTr");
+ qApp->installTranslator(qtTranslator);
+
+ quasselTranslator = new QTranslator(qApp);
+ quasselTranslator->setObjectName("QuasselTr");
+ qApp->installTranslator(quasselTranslator);
+
+ QLocale::setDefault(locale);
+
bool success = qtTranslator->load(QString("qt_%1").arg(locale.name()), translationDirPath());
if(!success)
qtTranslator->load(QString("qt_%1").arg(locale.name()), QLibraryInfo::location(QLibraryInfo::TranslationsPath));
- quasselTranslator->load(QString("quassel_%1").arg(locale.name()), translationDirPath());
+ quasselTranslator->load(QString("%1").arg(locale.name()), translationDirPath());
}