X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcommon%2Futil.h;h=d72dd8ed5c355d028a82b373b66174c46c38837a;hb=fa56ee7fc1b94ea27da6b27c919d6df1c0e0490d;hp=1a6d889f032e8c8d196ae42ba0f5a29bb4709cf7;hpb=077d44f36d2f5c730283ef6be839aea7dd073d56;p=quassel.git diff --git a/src/common/util.h b/src/common/util.h index 1a6d889f..d72dd8ed 100644 --- a/src/common/util.h +++ b/src/common/util.h @@ -1,11 +1,11 @@ /*************************************************************************** - * Copyright (C) 2005/06 by The Quassel Team * + * Copyright (C) 2005-2018 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * + * (at your option) version 3. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * @@ -15,37 +15,100 @@ * 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 _UTIL_H_ -#define _UTIL_H_ +#pragma once -#include -#include +#include #include +#include -QString nickFromMask(QString mask); -QString userFromMask(QString mask); -QString hostFromMask(QString mask); +QString nickFromMask(const QString &mask); +QString userFromMask(const QString &mask); +QString hostFromMask(const QString &mask); +bool isChannelName(const QString &str); -bool isChannelName(QString str); +//! Strip mIRC format codes +QString stripFormatCodes(QString); -/** - * Writes a QVariant to a device. The data item is prefixed with the resulting blocksize, - * so the corresponding function readDataFromDevice() can check if enough data is available - * at the device to reread the item. - */ -void writeDataToDevice(QIODevice *, const QVariant &); +//! Remove accelerator markers (&) from the string +QString stripAcceleratorMarkers(const QString &); -/** Reads a data item from a device that has previously been written by writeDataToDevice(). - * If not enough data bytes are available, the function returns false and the QVariant reference - * remains untouched. +QString secondsToString(int timeInSeconds); + +//! Take a string and decode it using the specified text codec, recognizing utf8. +/** This function takes a string and first checks if it is encoded in utf8, in which case it is + * decoded appropriately. Otherwise, the specified text codec is used to transform the string. + * \param input The input string containing encoded data + * \param codec The text codec we use if the input is not utf8 + * \return The decoded string. */ -bool readDataFromDevice(QIODevice *, quint32 &, QVariant &); +QString decodeString(const QByteArray &input, QTextCodec *codec = 0); + +uint editingDistance(const QString &s1, const QString &s2); + +template +QVariantList toVariantList(const QList &list) +{ + QVariantList variants; + for (int i = 0; i < list.count(); i++) { + variants << QVariant::fromValue(list[i]); + } + return variants; +} +template +QList fromVariantList(const QVariantList &variants) +{ + QList list; + for (int i = 0; i < variants.count(); i++) { + list << variants[i].value(); + } + return list; +} +QByteArray prettyDigest(const QByteArray &digest); -#endif +/** + * Format a string with %%%% to current date/timestamp via QDateTime. + * + * @param[in] formatStr String with format codes + * @return String with current date/time substituted in via formatting codes + */ +QString formatCurrentDateTimeInString(const QString &formatStr); + +/** Check if a scope rule matches a string + * + * When isRegEx is false: + * Checks that the string does NOT match ANY inverted rules (prefixed by '!'), then checks that + * it matches AT LEAST one normal (non-inverted) rule. + * + * If only inverted rules are specified, it'll match so long as the string does not match any + * inverted rules (implicit wildcard). + * + * When isRegEx is true: + * Checks that the string matches the entire scopeRule as a regular expression. If scopeRule starts + * with a '!', check that the string does NOT match the regular expression. + * + * @param string String to test, e.g. network/channel name + * @param scopeRule ';'-separated list of wildcard expressions, prefix of '!' inverts subrule + * @param isRegEx If true, treat entire scope rule as regular expression, not wildcards + * @param isCaseSensitive If true, treat as case-sensitive, else case-insensitive + * @return True if matches, otherwise false + */ +bool scopeMatch(const QString &string, const QString &scopeRule, + const bool &isRegEx = false, const bool &isCaseSensitive = false); + +/** + * Try to localize a given date/time in seconds from Unix epoch, pass through string if invalid + * + * Allows compatibility with date/time fields that may or may not be in Unix epoch format, + * localizing if possible, leaving alone if not. + * + * @param possibleEpochDate Date/time that might be in seconds since Unix epoch format + * @return Localized date/time if parse succeeded, otherwise the source string + */ +QString tryFormatUnixEpoch(const QString &possibleEpochDate);