Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void KviIrcServerParser::parseNumericWhoReply(KviIrcMessage *msg)
- {
- // 352: RPL_WHOREPLY [I,E,U,D]
- // :prefix 352 target <chan> <usr> <hst> <srv> <nck> <stat> :<hops> <real>
- QString szChan = msg->connection()->decodeText(msg->safeParam(1));
- QString szUser = msg->connection()->decodeText(msg->safeParam(2));
- QString szHost = msg->connection()->decodeText(msg->safeParam(3));
- QString szServ = msg->connection()->decodeText(msg->safeParam(4));
- QString szNick = msg->connection()->decodeText(msg->safeParam(5));
- QString szFlag = msg->connection()->decodeText(msg->safeParam(6));
- bool bAway = szFlag.indexOf('G') != -1;
- bool bIrcOp = szFlag.indexOf('*') != -1;
- KviCString trailing = msg->safeTrailing();
- KviCString hops = trailing.getToken(' ');
- bool bHopsOk = false;
- int iHops = hops.toInt(&bHopsOk);
- QString szReal = msg->connection()->decodeText(trailing.ptr());
- // Update the user entry
- KviIrcUserDataBase * db = msg->connection()->userDataBase();
- KviIrcUserEntry * e = db->find(szNick);
- if(e)
- {
- if(bHopsOk)
- e->setHops(iHops);
- e->setUser(szUser);
- e->setHost(szHost);
- e->setServer(szServ);
- e->setAway(bAway);
- e->setIrcOp(bIrcOp);
- e->setUserFlags(szFlag);
- KviQueryWindow * q = msg->connection()->findQuery(szNick);
- if(q)
- q->updateLabelText();
- // Check for the avatar unless the entry refers to the local user (in which case
- // the avatar should never be cached nor requested).
- if(!IS_ME(msg,szNick))
- {
- //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() == KviControlCodes::Color) && (szReal[1].unicode() & 4) && (szReal[2].unicode() == KviControlCodes::Reset))
- {
- if(KVI_OPTION_BOOL(KviOption_boolRequestMissingAvatars) && !e->avatarRequested())
- {
- QByteArray d = msg->connection()->encodeText(szNick);
- msg->connection()->sendFmtData("%s %s :%c%s%c","PRIVMSG",d.data(),0x01,"AVATAR",0x01);
- e->setAvatarRequested();
- }
- }
- }
- }
- //this has to be done after the avatar part
- e->setRealName(szReal);
- }
- KviChannelWindow * chan = msg->connection()->findChannel(szChan);
- if(chan)
- {
- if(!chan->hasWhoList())
- {
- // FIXME: #warning "IF VERBOSE && SHOW INTERNAL WHO REPLIES...."
- return;
- }
- if(chan->sentSyncWhoRequest())
- {
- // FIXME: #warning "IF VERBOSE && SHOW INTERNAL WHO REPLIES...."
- return;
- }
- }
- // FIXME: #warning "SYNC OP/VOICE on channel!!!"
- if(!msg->haltOutput())
- {
- KviWindow * pOut = chan ? chan : KVI_OPTION_BOOL(KviOption_boolServerRepliesToActiveWindow) ?
- msg->console()->activeWindow() : (KviWindow *)(msg->console());
- QString szAway = bAway ? __tr2qs("Yes") : __tr2qs("No");
- pOut->output(KVI_OUT_WHO,
- __tr2qs("WHO entry for %c\r!n\r%Q\r%c [%Q@\r!h\r%Q\r]: %cChannel%c: \r!c\r%Q\r, %cServer%c: \r!s\r%Q\r, %cHops%c: %d, %cFlags%c: %Q, %cAway%c: %Q, %cReal name%c: %Q"),
- KviControlCodes::Bold,&szNick, KviControlCodes::Bold,
- &szUser,&szHost,KviControlCodes::Underline,
- KviControlCodes::Underline,&szChan,KviControlCodes::Underline,
- KviControlCodes::Underline,&szServ,KviControlCodes::Underline,
- KviControlCodes::Underline,iHops, KviControlCodes::Underline, KviControlCodes::Underline,
- &szFlag, KviControlCodes::Underline, KviControlCodes::Underline,
- &szAway, KviControlCodes::Underline,
- KviControlCodes::Underline, &szReal);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement