Version: (using KDE Devel) Installed from: Compiled sources How to reproduce: - Add a new ICQ contact to your list; whether they are offline or online matters not. - Open up a chat with this user. Enable showing of the chat member list or send a message using a style that shows contactDisplayName. - Note that the remote party's contactDisplayName is shown as their UIN. - Right-click the contact, select User Info. Close the window that appears. - A nickname change notification will be shown in the chatwindow. The chat member list will now show this nickname, and it will be used in the chatwindow as the contactDisplayName for all future messages. What should happen: - User information should be loaded automatically from the server upon addition to your list in the case that you add them first before messaging. - User information should be loaded automatically from the server when an unknown contact messages you (and thus becomes a temporary contact).
ok, reproduced this with a temporary contact (which is the only way i could reproduce it)
Created attachment 4223 [details] proposed patch to fix the problem I've attached a patch. Please test it. It should solve the problem.
This bug stil happens with recent CVS and RC1. Matt, was this patch put into CVS ever? If not, why not? I find this very annoying with ICQ :P
*** Bug 72901 has been marked as a duplicate of this bug. ***
We first need queues for userinfo requests, otherwise we can run into problems when we flood the server with requests. also this shouldn't be special-cased for temp-contacts, instead do it for every newly created ICQContact that has an UIN as displayName().
need to re-work the patch, might do that later today.
CVS commit by mattr: Fix bug 71654. Fetch the user info for all contacts upon addition. {BACKPORT] CCMAIL: 71654-done@bugs.kde.org M +4 -0 oscaraccount.cpp 1.103.2.4 --- kdenetwork/kopete/protocols/oscar/oscaraccount.cpp #1.103.2.3:1.103.2.4 @@ -789,4 +789,5 @@ bool OscarAccount::addContactToMetaConta // need to normalize the contact name engine()->sendAddBuddy(tocNormalize(contactId), internalGroup->name(), false); + engine()->sendReqInfo( contactId.toULong() ); // Increase these counters, I'm not sure what this does @@ -807,5 +808,8 @@ bool OscarAccount::addContactToMetaConta // Get user status through BLM if contact is temporary (ICQ only) if ( engine()->isICQ() ) + { engine()->sendAddBuddylist(tocNormalize(contactId)); + engine()->sendReqInfo( contactId.toULong() ); + } // Set it's initial status
That patch is useless because ICQContact won't pick up that userinfo as it doesn't know the sequenceId of the request. look at ICQContact constructor: /* if(name == displayName && account()->isConnected()) { kdDebug(14200) << k_funcinfo << "ICQ Contact with no nickname, grabbing userinfo" << endl; requestUserInfo(); }*/ THAT is the code which once did the fetch but it was disabled due to the missing rate limit.
reenabled that piece of code in HEAD, will back out the other patches shortly