X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Futil.cpp;h=14435bde118fe4d0367aaf73b84e40c12d9f7188;hp=5aa21efe19083d5bd166053946b314acc9dad2c7;hb=93c7fd515792062d325a0d7fd03a965997e62f10;hpb=be7d5dde2d1285e03a68f3f611f3b0ace1a619b4 diff --git a/src/common/util.cpp b/src/common/util.cpp index 5aa21efe..14435bde 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-2010 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -19,9 +19,14 @@ ***************************************************************************/ #include "util.h" + +#include #include +#include #include +#include "quassel.h" + class QMetaMethod; QString nickFromMask(QString mask) { @@ -44,6 +49,33 @@ 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 stripAcceleratorMarkers(const QString &label_) { + QString label = label_; + int p = 0; + forever { + p = label.indexOf('&', p); + if(p < 0 || p + 1 >= label.length()) + break; + + if(label.at(p + 1).isLetterOrNumber() || label.at(p + 1) == '&') + label.remove(p, 1); + + ++p; + } + return label; +} + 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 @@ -74,35 +106,9 @@ QString decodeString(const QByteArray &input, QTextCodec *codec) { return codec->toUnicode(input); } -/* not needed anymore -void writeDataToDevice(QIODevice *dev, const QVariant &item) { - QByteArray block; - QDataStream out(&block, QIODevice::WriteOnly); - out.setVersion(QDataStream::Qt_4_2); - out << (quint32)0 << item; - out.device()->seek(0); - out << (quint32)(block.size() - sizeof(quint32)); - dev->write(block); -} - -bool readDataFromDevice(QIODevice *dev, quint32 &blockSize, QVariant &item) { - QDataStream in(dev); - in.setVersion(QDataStream::Qt_4_2); - - if(blockSize == 0) { - if(dev->bytesAvailable() < (int)sizeof(quint32)) return false; - in >> blockSize; - } - if(dev->bytesAvailable() < blockSize) return false; - in >> item; - return true; -} -*/ - uint editingDistance(const QString &s1, const QString &s2) { uint n = s1.size()+1; uint m = s2.size()+1; - //uint matrix[n][m]; QVector< QVector< uint > >matrix(n,QVector(m,0)); for(uint i = 0; i < n; i++) @@ -118,14 +124,14 @@ uint editingDistance(const QString &s1, const QString &s2) { uint insertChar = matrix[i][j-1] + 1; if(deleteChar < insertChar) - min = deleteChar; + min = deleteChar; else - min = insertChar; - + min = insertChar; + if(s1[i-1] == s2[j-1]) { - uint inheritChar = matrix[i-1][j-1]; - if(inheritChar < min) - min = inheritChar; + uint inheritChar = matrix[i-1][j-1]; + if(inheritChar < min) + min = inheritChar; } matrix[i][j] = min; @@ -134,25 +140,32 @@ 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("(")); +QString secondsToString(int timeInSeconds) { + QList< QPair > timeUnit; + timeUnit.append(qMakePair(365*24*60*60, QCoreApplication::translate("Quassel::secondsToString()", "year"))); + timeUnit.append(qMakePair(24*60*60, QCoreApplication::translate("Quassel::secondsToString()", "day"))); + timeUnit.append(qMakePair(60*60, QCoreApplication::translate("Quassel::secondsToString()", "h"))); + timeUnit.append(qMakePair(60, QCoreApplication::translate("Quassel::secondsToString()", "min"))); + timeUnit.append(qMakePair(1, QCoreApplication::translate("Quassel::secondsToString()", "sec"))); + + QStringList returnString; + for(int i=0; i < timeUnit.size(); i++) { + int n = timeInSeconds / timeUnit[i].first; + if(n > 0) { + returnString += QString("%1 %2").arg(QString::number(n), timeUnit[i].second); + } + timeInSeconds = timeInSeconds % timeUnit[i].first; + } + return returnString.join(", "); } -QDir quasselDir() { - // kinda ugly, but I currently see no other way to do that -#ifdef Q_OS_WIN32 - QString quasselDir = QDir::homePath() + qgetenv("APPDATA") + "/quassel/"; -#else - QString quasselDir = QDir::homePath() + "/.quassel/"; -#endif - - QDir qDir(quasselDir); - if(!qDir.exists(quasselDir)) { - if(!qDir.mkpath(quasselDir)) { - qCritical() << "Unable to create Quassel data directory:" << qPrintable(qDir.absolutePath()); - } - } +QByteArray prettyDigest(const QByteArray &digest) { + QByteArray hexDigest = digest.toHex().toUpper(); + QByteArray prettyDigest; + prettyDigest.fill(':', hexDigest.count() + (hexDigest.count() / 2) - 1); - return qDir; + for(int i = 0; i * 2 < hexDigest.count(); i++) { + prettyDigest.replace(i * 3, 2, hexDigest.mid(i * 2, 2)); + } + return prettyDigest; }