aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGravatar Fabio Bas2008-07-08 14:48:40 +0000
committerGravatar Fabio Bas2008-07-08 14:48:40 +0000
commit3c8ad9ff801070680abdcac7f8d114874104b345 (patch)
tree8125ea7de2460ac118178ea8d66be7f900545db5 /src
parentpatched for cmake 2.6 complaining about wrong policies (diff)
downloadKVIrc-3c8ad9ff801070680abdcac7f8d114874104b345.tar.gz
KVIrc-3c8ad9ff801070680abdcac7f8d114874104b345.tar.bz2
KVIrc-3c8ad9ff801070680abdcac7f8d114874104b345.zip
added the ability to expose the fact that kvirc has an avatar set, so others can request it without the need to CTCP avatar the whole channel creating noise;
added an option value to enable/disable exposure; partially implements feature request #166 git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@2036 17fca916-40b9-46aa-a4ea-0a15b648b75c
Diffstat (limited to 'src')
-rw-r--r--src/kvilib/irc/kvi_ircuserdb.cpp24
-rw-r--r--src/kvirc/kernel/kvi_ircconnection.cpp20
-rw-r--r--src/kvirc/kernel/kvi_options.cpp3
-rw-r--r--src/kvirc/kernel/kvi_options.h4
-rw-r--r--src/kvirc/sparser/kvi_sp_numeric.cpp16
-rw-r--r--src/modules/options/optw_irc.cpp3
6 files changed, 49 insertions, 21 deletions
diff --git a/src/kvilib/irc/kvi_ircuserdb.cpp b/src/kvilib/irc/kvi_ircuserdb.cpp
index ba15b8116..6b7f2b53f 100644
--- a/src/kvilib/irc/kvi_ircuserdb.cpp
+++ b/src/kvilib/irc/kvi_ircuserdb.cpp
@@ -56,17 +56,21 @@ void KviIrcUserEntry::setRealName(const QString &rn)
{
if( (m_szRealName[0].unicode()==KVI_TEXT_COLOR) && (m_szRealName[2].unicode()==KVI_TEXT_RESET) )
{
- switch(m_szRealName[1].unicode())
+ // hum.. encoded as hidden color code eh ? publish is somewhere, so others might implement this...
+ // for backwards compatibily, 3=bot
+ if(m_szRealName[1].unicode() & 1 & 2)
{
- case '1': // hum.. encoded as hidden color code eh ? publish is somewhere, so others might implement this...
- setGender(Male);
- break;
- case '2':
- setGender(Female);
- break;
- case '3':
- setBot(true);
- break;
+ setBot(true); //3
+ } else {
+ if(m_szRealName[1].unicode() & 1)
+ {
+ setGender(Male); //1
+ } else {
+ if(m_szRealName[1].unicode() & 2)
+ {
+ setGender(Female); //2
+ }
+ }
}
m_szRealName.remove(0,3);
}
diff --git a/src/kvirc/kernel/kvi_ircconnection.cpp b/src/kvirc/kernel/kvi_ircconnection.cpp
index 7c71b78ad..92ec18411 100644
--- a/src/kvirc/kernel/kvi_ircconnection.cpp
+++ b/src/kvirc/kernel/kvi_ircconnection.cpp
@@ -979,19 +979,27 @@ void KviIrcConnection::loginToIrcServer()
return;
}
- QString szGenderTag;
+ QString szGenderAvatarTag;
+ int iGenderAvatarTag=0;
if(KVI_OPTION_BOOL(KviOption_boolPrependGenderInfoToRealname) && !KVI_OPTION_STRING(KviOption_stringCtcpUserInfoGender).isEmpty())
{
- szGenderTag.append(KVI_TEXT_COLOR);
if(KVI_OPTION_STRING(KviOption_stringCtcpUserInfoGender).startsWith("m",Qt::CaseInsensitive))
{
- szGenderTag.append("1");
+ iGenderAvatarTag|=1;
} else if(KVI_OPTION_STRING(KviOption_stringCtcpUserInfoGender).startsWith("f",Qt::CaseInsensitive))
{
- szGenderTag.append("2");
+ iGenderAvatarTag|=2;
}
- szGenderTag.append(KVI_TEXT_RESET);
- szReal.prepend(KviQString::toUtf8(szGenderTag));
+ }
+ if(KVI_OPTION_BOOL(KviOption_boolPrependAvatarInfoToRealname) && !KVI_OPTION_STRING(KviOption_stringMyAvatar).isEmpty())
+ {
+ iGenderAvatarTag|=4;
+ }
+
+ if(iGenderAvatarTag!=0)
+ {
+ szGenderAvatarTag.sprintf("%c%d%c",KVI_TEXT_COLOR,iGenderAvatarTag,KVI_TEXT_RESET);
+ szReal.prepend(KviQString::toUtf8(szGenderAvatarTag));
}
if(!sendFmtData("USER %s 0 %s :%s",szUser.data(),
diff --git a/src/kvirc/kernel/kvi_options.cpp b/src/kvirc/kernel/kvi_options.cpp
index a82d7493a..427c5e60e 100644
--- a/src/kvirc/kernel/kvi_options.cpp
+++ b/src/kvirc/kernel/kvi_options.cpp
@@ -306,7 +306,8 @@ KviBoolOption g_boolOptionsTable[KVI_NUM_BOOL_OPTIONS]=
BOOL_OPTION("ScaleAvatarsOnLoad",true,KviOption_sectFlagAvatar),
BOOL_OPTION("DisableNotifierFadein",false,KviOption_sectFlagFrame),
BOOL_OPTION("UseAntiAliasing",true,KviOption_sectFlagGui | KviOption_resetUpdateGui),
- BOOL_OPTION("PickRandomIpAddressForRoundRobinServers",true,KviOption_sectFlagConnection)
+ BOOL_OPTION("PickRandomIpAddressForRoundRobinServers",true,KviOption_sectFlagConnection),
+ BOOL_OPTION("PrependAvatarInfoToRealname",true,KviOption_sectFlagConnection)
};
#define STRING_OPTION(_txt,_val,_flags) KviStringOption(KVI_STRING_OPTIONS_PREFIX _txt,_val,_flags)
diff --git a/src/kvirc/kernel/kvi_options.h b/src/kvirc/kernel/kvi_options.h
index 467e5ce5f..59a8a7351 100644
--- a/src/kvirc/kernel/kvi_options.h
+++ b/src/kvirc/kernel/kvi_options.h
@@ -314,9 +314,9 @@ DECLARE_OPTION_STRUCT(KviStringListOption,QStringList)
#define KviOption_boolDisableNotifierFadein 220 /* interface::notifier */
#define KviOption_boolUseAntiAliasing 221 /* qt4 only! */
#define KviOption_boolPickRandomIpAddressForRoundRobinServers 222
+#define KviOption_boolPrependAvatarInfoToRealname 223
-
-#define KVI_NUM_BOOL_OPTIONS 223
+#define KVI_NUM_BOOL_OPTIONS 224
diff --git a/src/kvirc/sparser/kvi_sp_numeric.cpp b/src/kvirc/sparser/kvi_sp_numeric.cpp
index 3c8eef40e..ff1a0d098 100644
--- a/src/kvirc/sparser/kvi_sp_numeric.cpp
+++ b/src/kvirc/sparser/kvi_sp_numeric.cpp
@@ -699,16 +699,30 @@ void KviServerParser::parseNumericWhoReply(KviIrcMessage *msg)
e->setUser(szUser);
e->setHost(szHost);
e->setServer(szServ);
- e->setRealName(szReal);
e->setAway(bAway);
KviQuery * q = msg->connection()->findQuery(szNick);
if(q) q->updateLabelText();
+ //no avatar? check for a cached one
if(!e->avatar())
{
// FIXME: #warning "THE AVATAR SHOULD BE RESIZED TO MATCH THE MAX WIDTH/HEIGHT"
// maybe now we can match this user ?
msg->console()->checkDefaultAvatar(e,szNick,szUser,szHost);
}
+ //still no avatar? check if the user is exposing the fact that he's got one
+ if(!e->avatar())
+ {
+ if( (szReal[0].unicode()==KVI_TEXT_COLOR) && (szReal[1].unicode() & 4) && (szReal[2].unicode()==KVI_TEXT_RESET) )
+ {
+ if(KVI_OPTION_BOOL(KviOption_boolRequestMissingAvatars))
+ {
+ KviQCString d = msg->connection()->encodeText(szNick);
+ msg->connection()->sendFmtData("%s %s :%c%s%c","PRIVMSG",d.data(),0x01,"AVATAR",0x01);
+ }
+ }
+ }
+ //this has to be done after the avatar part
+ e->setRealName(szReal);
}
KviChannel * chan = msg->connection()->findChannel(szChan);
diff --git a/src/modules/options/optw_irc.cpp b/src/modules/options/optw_irc.cpp
index f4cc01ad8..1029c9e84 100644
--- a/src/modules/options/optw_irc.cpp
+++ b/src/modules/options/optw_irc.cpp
@@ -74,7 +74,8 @@ KviIrcAdvancedOptionsWidget::KviIrcAdvancedOptionsWidget(QWidget * parent)
"to close the connection.<br>" \
"Note that if you use this, your QUIT message may be not displayed.</center>","options"));
addBoolSelector(0,1,0,1,__tr2qs_ctx("Prepend gender info to realname","options"),KviOption_boolPrependGenderInfoToRealname);
- addRowSpacer(0,2,0,2);
+ addBoolSelector(0,2,0,2,__tr2qs_ctx("Prepend avatar info to realname","options"),KviOption_boolPrependAvatarInfoToRealname);
+ addRowSpacer(0,3,0,3);
}
KviIrcAdvancedOptionsWidget::~KviIrcAdvancedOptionsWidget()