X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Futil.cpp;h=a8a38875da75717a41329d8f6cb3bb71c626f456;hp=1b75f29b435623f3b142668791a071e42d641df5;hb=6f99a6e2f39aaacabe8bb51a7bb1ff53c1b2082f;hpb=5c6804f291a63f978e328aeddcc8448e3443b45e diff --git a/src/common/util.cpp b/src/common/util.cpp index 1b75f29b..a8a38875 100644 --- a/src/common/util.cpp +++ b/src/common/util.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-08 by the Quassel Project * + * Copyright (C) 2005-09 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -22,6 +22,8 @@ #include #include +#include +#include #include #include @@ -49,6 +51,17 @@ bool isChannelName(QString str) { return QString("#&!+").contains(str[0]); } +QString stripFormatCodes(QString str) { + str.remove(QRegExp("\x03(\\d\\d?(,\\d\\d?)?)?")); + str.remove('\x02'); + str.remove('\x0f'); + str.remove('\x12'); + str.remove('\x16'); + str.remove('\x1d'); + str.remove('\x1f'); + return str; +} + QString decodeString(const QByteArray &input, QTextCodec *codec) { // First, we check if it's utf8. It is very improbable to encounter a string that looks like // valid utf8, but in fact is not. This means that if the input string passes as valid utf8, it @@ -138,11 +151,6 @@ uint editingDistance(const QString &s1, const QString &s2) { return matrix[n-1][m-1]; } -QByteArray methodName(const QMetaMethod &method) { - QByteArray sig(method.signature()); - return sig.left(sig.indexOf("(")); -} - QDir quasselDir() { QString quasselDir; if(Quassel::isOptionSet("datadir")) { @@ -168,25 +176,58 @@ QDir quasselDir() { return qDir; } +QStringList dataDirPaths() { + QStringList dataDirNames = QString(qgetenv("XDG_DATA_DIRS")).split(':', QString::SkipEmptyParts); + + // Provide a fallback +# ifdef Q_OS_UNIX + if(dataDirNames.isEmpty()) dataDirNames.append("/usr/share"); + // on UNIX, we always check our install prefix + QString appDir = QCoreApplication::applicationDirPath(); + int binpos = appDir.lastIndexOf("/bin"); + if(binpos >= 0) { + appDir.replace(binpos, 4, "/share"); + if(!dataDirNames.contains(appDir)) dataDirNames.append(appDir); + } +# endif + + return dataDirNames; +} + +QString findDataFilePath(const QString &fileName) { + QStringList dataDirs = dataDirPaths(); + foreach(QString dataDir, dataDirs) { + QString path = dataDir + "/apps/quassel/" + fileName; + if(QFile::exists(path)) + return path; + } + return QString(); +} + void loadTranslation(const QLocale &locale) { QTranslator *qtTranslator = QCoreApplication::instance()->findChild("QtTr"); QTranslator *quasselTranslator = QCoreApplication::instance()->findChild("QuasselTr"); - Q_ASSERT(qtTranslator); - Q_ASSERT(quasselTranslator); - QLocale::setDefault(locale); + if(!qtTranslator) { + qtTranslator = new QTranslator(qApp); + qtTranslator->setObjectName("QtTr"); + qApp->installTranslator(qtTranslator); + } + if(!quasselTranslator) { + quasselTranslator = new QTranslator(qApp); + quasselTranslator->setObjectName("QuasselTr"); + qApp->installTranslator(quasselTranslator); + } - QCoreApplication::removeTranslator(qtTranslator); - QCoreApplication::removeTranslator(quasselTranslator); + QLocale::setDefault(locale); if(locale.language() == QLocale::C) return; - qtTranslator->load(QString(":i18n/qt_%1").arg(locale.name())); + bool success = qtTranslator->load(QString(":i18n/qt_%1").arg(locale.name())); + if(!success) + qtTranslator->load(QString("%2/qt_%1").arg(locale.name(), QLibraryInfo::location(QLibraryInfo::TranslationsPath))); quasselTranslator->load(QString(":i18n/quassel_%1").arg(locale.name())); - - QCoreApplication::installTranslator(qtTranslator); - QCoreApplication::installTranslator(quasselTranslator); } QString secondsToString(int timeInSeconds) {