X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Fidentity.cpp;h=0569178ade8b86b0fbc150c2cbe322d3d64ecb1b;hp=aafb1fa0043be7a5bc001f4be4c34d89c60b6d58;hb=9f461bad6c890d3fe92d89ebf1b6a3f313d7e8ef;hpb=389c57208c0f87c678fa682fb4299ea2803d5135 diff --git a/src/common/identity.cpp b/src/common/identity.cpp index aafb1fa0..0569178a 100644 --- a/src/common/identity.cpp +++ b/src/common/identity.cpp @@ -22,12 +22,19 @@ #include #include +#include #ifdef Q_OS_MAC # include # include "mac_utils.h" #endif +#ifdef Q_OS_UNIX +# include +# include +# include +#endif + #ifdef Q_OS_WIN32 # include # include @@ -74,34 +81,58 @@ void Identity::init() { } QString Identity::defaultNick() { - QString generalDefault = QString("quassel%1").arg(qrand() & 0xff); // FIXME provide more sensible default nicks + QString nick = QString("quassel%1").arg(qrand() & 0xff); // FIXME provide more sensible default nicks + #ifdef Q_OS_MAC - return CFStringToQString(CSCopyUserName(true)); + QString shortUserName = CFStringToQString(CSCopyUserName(true)); + if(!shortUserName.isEmpty()) + nick = shortUserName; + +#elif defined(Q_OS_UNIX) + QString userName; + struct passwd *pwd = getpwuid(getuid()); + if(pwd) + userName = pwd->pw_name; + if(!userName.isEmpty()) + nick = userName; + #elif defined(Q_OS_WIN32) TCHAR infoBuf[128]; DWORD bufCharCount = 128; //if(GetUserNameEx(/* NameSamCompatible */ 1, infoBuf, &bufCharCount)) - if(!GetUserNameEx(NameSamCompatible, infoBuf, &bufCharCount)) - return generalDefault; - - QString nickName(infoBuf); - int lastBs = nickName.lastIndexOf('\\'); - if(lastBs != -1) { - nickName = nickName.mid(lastBs + 1); + if(GetUserNameEx(NameSamCompatible, infoBuf, &bufCharCount)) { + QString nickName(infoBuf); + int lastBs = nickName.lastIndexOf('\\'); + if(lastBs != -1) { + nickName = nickName.mid(lastBs + 1); + } + if(!nickName.isEmpty()) + nick = nickName; } - if(nickName.isEmpty()) - return generalDefault; - else - return nickName; -#else - return generalDefault; #endif + + // cleaning forbidden characters from nick + QRegExp rx(QString("(^[\\d-]+|[^A-Za-z0-9\x5b-\x60\x7b-\x7d])")); + nick.remove(rx); + return nick; } QString Identity::defaultRealName() { QString generalDefault = tr("Quassel IRC User"); + #ifdef Q_OS_MAC return CFStringToQString(CSCopyUserName(false)); + +#elif defined(Q_OS_UNIX) + QString realName; + struct passwd *pwd = getpwuid(getuid()); + if(pwd) + realName = QString::fromUtf8(pwd->pw_gecos); + if(!realName.isEmpty()) + return realName; + else + return generalDefault; + #elif defined(Q_OS_WIN32) TCHAR infoBuf[128]; DWORD bufCharCount = 128; @@ -117,8 +148,7 @@ QString Identity::defaultRealName() { void Identity::setToDefaults() { setIdentityName(tr("")); setRealName(defaultRealName()); - QStringList n; - n << defaultNick(); + QStringList n = QStringList() << defaultNick(); setNicks(n); setAwayNick(""); setAwayNickEnabled(false);