X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Fidentity.cpp;h=26520989e49f1fa0a45fc4b3c45a21d9991b51ea;hp=4eadff9e0e39bb4c27259c7cb0d8b3e0d8b7f84a;hb=35592161284b2196444936f6ecd3dcb8d47b1b54;hpb=f824db0e31b54969e0b7fa0b5405b1e9173d482c diff --git a/src/common/identity.cpp b/src/common/identity.cpp index 4eadff9e..26520989 100644 --- a/src/common/identity.cpp +++ b/src/common/identity.cpp @@ -18,10 +18,28 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ +#include "identity.h" + #include #include -#include "identity.h" +#ifdef Q_OS_MAC +# include +# include "mac_utils.h" +#endif + +#ifdef Q_OS_UNIX +# include +# include +# include +#endif + +#ifdef Q_OS_WIN32 +# include +# include +# define SECURITY_WIN32 +# include +#endif Identity::Identity(IdentityId id, QObject *parent) : SyncableObject(parent), @@ -61,11 +79,72 @@ void Identity::init() { setAllowClientUpdates(true); } +QString Identity::defaultNick() { + QString nick = QString("quassel%1").arg(qrand() & 0xff); // FIXME provide more sensible default nicks + +#ifdef Q_OS_MAC + QString shortUserName = CFStringToQString(CSCopyUserName(true)); + if(!shortUserName.isEmpty()) + nick = shortUserName; + +#elif defined(Q_OS_UNIX) + QString userName = getlogin(); + 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)) { + QString nickName(infoBuf); + int lastBs = nickName.lastIndexOf('\\'); + if(lastBs != -1) { + nickName = nickName.mid(lastBs + 1); + } + if(!nickName.isEmpty()) + nick = nickName; + } +#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 = pwd->pw_gecos; + if(!realName.isEmpty()) + return realName; + else + return generalDefault; + +#elif defined(Q_OS_WIN32) + TCHAR infoBuf[128]; + DWORD bufCharCount = 128; + if(GetUserName(infoBuf, &bufCharCount)) + return QString(infoBuf); + else + return generalDefault; +#else + return generalDefault; +#endif +} + void Identity::setToDefaults() { setIdentityName(tr("")); - setRealName(tr("Quassel IRC User")); - QStringList n; - n << QString("quassel%1").arg(qrand() & 0xff); // FIXME provide more sensible default nicks + setRealName(defaultRealName()); + QStringList n = QStringList() << defaultNick(); setNicks(n); setAwayNick(""); setAwayNickEnabled(false);