X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Fidentity.cpp;h=275afcc6dfd3634413ba7fcb65e7f758a22763ad;hp=da10fb0db84040f01322fa41df10fd44149fe9f6;hb=5ec74a7b8f20e9e3f48cf286e0944f1855a271c3;hpb=ac21cc48d22f0cf58a98b74754fa94564a8e3f45 diff --git a/src/common/identity.cpp b/src/common/identity.cpp index da10fb0d..275afcc6 100644 --- a/src/common/identity.cpp +++ b/src/common/identity.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 * @@ -18,11 +18,31 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ -#include -#include - #include "identity.h" +#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 +# define SECURITY_WIN32 +# include +#endif + +INIT_SYNCABLE_OBJECT(Identity) Identity::Identity(IdentityId id, QObject *parent) : SyncableObject(parent), _identityId(id) @@ -61,11 +81,75 @@ 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; + 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)) { + 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 = QString::fromUtf8(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); @@ -88,105 +172,107 @@ void Identity::setToDefaults() { void Identity::setId(IdentityId _id) { _identityId = _id; + SYNC(ARG(_id)) emit idSet(_id); renameObject(QString::number(id().toInt())); } void Identity::setIdentityName(const QString &identityName) { _identityName = identityName; - emit identityNameSet(identityName); + SYNC(ARG(identityName)) } void Identity::setRealName(const QString &realName) { _realName = realName; - emit realNameSet(realName); + SYNC(ARG(realName)) } void Identity::setNicks(const QStringList &nicks) { _nicks = nicks; + SYNC(ARG(nicks)) emit nicksSet(nicks); } void Identity::setAwayNick(const QString &nick) { _awayNick = nick; - emit awayNickSet(nick); + SYNC(ARG(nick)) } void Identity::setAwayReason(const QString &reason) { _awayReason = reason; - emit awayReasonSet(reason); + SYNC(ARG(reason)) } void Identity::setAwayNickEnabled(bool enabled) { _awayNickEnabled = enabled; - emit awayNickEnabledSet(enabled); + SYNC(ARG(enabled)) } void Identity::setAwayReasonEnabled(bool enabled) { _awayReasonEnabled = enabled; - emit awayReasonEnabledSet(enabled); + SYNC(ARG(enabled)) } void Identity::setAutoAwayEnabled(bool enabled) { _autoAwayEnabled = enabled; - emit autoAwayEnabledSet(enabled); + SYNC(ARG(enabled)) } void Identity::setAutoAwayTime(int time) { _autoAwayTime = time; - emit autoAwayTimeSet(time); + SYNC(ARG(time)) } void Identity::setAutoAwayReason(const QString &reason) { _autoAwayReason = reason; - emit autoAwayReasonSet(reason); + SYNC(ARG(reason)) } void Identity::setAutoAwayReasonEnabled(bool enabled) { _autoAwayReasonEnabled = enabled; - emit autoAwayReasonEnabledSet(enabled); + SYNC(ARG(enabled)) } void Identity::setDetachAwayEnabled(bool enabled) { _detachAwayEnabled = enabled; - emit detachAwayEnabledSet(enabled); + SYNC(ARG(enabled)) } void Identity::setDetachAwayReason(const QString &reason) { _detachAwayReason = reason; - emit detachAwayReasonSet(reason); + SYNC(ARG(reason)) } void Identity::setDetachAwayReasonEnabled(bool enabled) { _detachAwayReasonEnabled = enabled; - emit detachAwayReasonEnabledSet(enabled); + SYNC(ARG(enabled)) } void Identity::setIdent(const QString &ident) { _ident = ident; - emit identSet(ident); + SYNC(ARG(ident)) } void Identity::setKickReason(const QString &reason) { _kickReason = reason; - emit kickReasonSet(reason); + SYNC(ARG(reason)) } void Identity::setPartReason(const QString &reason) { _partReason = reason; - emit partReasonSet(reason); + SYNC(ARG(reason)) } void Identity::setQuitReason(const QString &reason) { _quitReason = reason; - emit quitReasonSet(reason); + SYNC(ARG(reason)) } /*** ***/ -void Identity::update(const Identity &other) { -for(int idx = metaObject()->propertyOffset(); idx < metaObject()->propertyCount(); idx++) { - QMetaProperty metaProp = metaObject()->property(idx); +void Identity::copyFrom(const Identity &other) { + for(int idx = staticMetaObject.propertyOffset(); idx < staticMetaObject.propertyCount(); idx++) { + QMetaProperty metaProp = staticMetaObject.property(idx); Q_ASSERT(metaProp.isValid()); if(this->property(metaProp.name()) != other.property(metaProp.name())) { setProperty(metaProp.name(), other.property(metaProp.name())); @@ -194,9 +280,9 @@ for(int idx = metaObject()->propertyOffset(); idx < metaObject()->propertyCount( } } -bool Identity::operator==(const Identity &other) { - for(int idx = metaObject()->propertyOffset(); idx < metaObject()->propertyCount(); idx++) { - QMetaProperty metaProp = metaObject()->property(idx); +bool Identity::operator==(const Identity &other) const { + for(int idx = staticMetaObject.propertyOffset(); idx < staticMetaObject.propertyCount(); idx++) { + QMetaProperty metaProp = staticMetaObject.property(idx); Q_ASSERT(metaProp.isValid()); QVariant v1 = this->property(metaProp.name()); QVariant v2 = other.property(metaProp.name()); // qDebug() << v1 << v2; @@ -210,7 +296,7 @@ bool Identity::operator==(const Identity &other) { return true; } -bool Identity::operator!=(const Identity &other) { +bool Identity::operator!=(const Identity &other) const { return !(*this == other); } @@ -229,3 +315,6 @@ QDataStream &operator>>(QDataStream &in, Identity &id) { return in; } +#ifdef HAVE_SSL +INIT_SYNCABLE_OBJECT(CertManager) +#endif // HAVE_SSL