can someone review this.. cause I can't.. it's just too much stuff in there...
On Sat, Dec 15, 2007 at 03:29:52PM +0000, square87 wrote: > Hello > I found some "strange" behaviors in the proc "cmsn_change_state" of > protocol.tcl. > I write a patch. I (try to) explain what i changed and why. > > The diff file is the result of "svn diff"; > The txt file is "the diff file without old differences". > > -------------- > In the original version there is: > > if {$user_name != [::abook::getNick $user]} { > > So $user_name it's the original name of an user that we receive from the > server, we compare it with the "old" nickname. But... [::abook::getNick > $user] return a parsed nick that it could be different from the first one, > for example: if you are using colored nicks, except when the user delete > style from his nick so original nick is equal to parsednick, but then that > code is not considered. > for this i changed it in: > if { $user_name != [::abook::getContactData $user nick]} { > > ------------ > > Then I commented "set state_no...." because it is not used anymore, it is > useless. > > ----------- > Then i removed switch cases because they are useless we already have all > infos, just add: set status "[trans [::MSN::stateToDescription $substate]]" > ----------- > > Then i do some codes clean > from: set maxw [expr {([::skin::getKey notifwidth]-53)*2} ] > to: when "if" is closed > this part of code is necessary only if $status_changed is equal to 1. So > just put this check at the top (from: set maxw....) > > ------ > Then i did update the "newPic" part. > Now there is a strange behavoiur. > Before to check if oldpic != newdp > there is: ::abook::setContactData $user displaypicfile $newPic > it means that you are upgrading the "name" of the actually pic, even if > newdp == oldpic... but anyway... look in the code after and think the case: > lazypicretrieval is 0 so you can go in the "elseif" condition to update the > userDP but you can do it only if you are not hidden else you cannot do > nothing... (think when you choose to login as "invisibile"....) > Now go online, your user change status so also DP is checked but now $oldpic > is equal to $newpic so the DP is not upgraded... until he doesn't change > it... > > So i improve that behavior in particolar "::abook::setContactData $user > displaypicfile $newPic " is called only if it is possible to load the newdp > and i added a new case: when an user change his DP and you are hidden or he > is blocked or whatever -> search first in the cache if there is already that > DP load it. > -------- > > Ok this was a summary of what i done. If you have problem or question or do > you think that something is useless tell me before to commit... if you want > to commit :P > > Sorry for my English > Thanks, bye. > Square87 > Index: protocol.tcl > =================================================================== > --- protocol.tcl (revisione 9113) > +++ protocol.tcl (copia locale) > @@ -4856,11 +4860,9 @@ > } > > if {$user_name == ""} { > - set user_name [::abook::getNick $user] > - } > - > - > - if {$user_name != [::abook::getNick $user]} { > + set user_name [::abook::getContactData $user nick] > + set nick_changed 0 > + } elseif { $user_name != [::abook::getContactData $user nick]} { > #Nick differs from the one on our list, so change it > #in the server list too > ::abook::setContactData $user nick $user_name > @@ -4889,7 +4891,7 @@ > > set custom_user_name [::abook::getDisplayNick $user] > > - set state_no [::MSN::stateToNumber $substate ] > +# set state_no [::MSN::stateToNumber $substate ] ;#actually this var is > never used. > > > #alarm system (that must replace the one that was before) - KNO > @@ -4903,115 +4905,63 @@ > } elseif { ( [::alarms::isEnabled all] == 1 )&& ( > [::alarms::getAlarmItem all ondisconnect] == 1) } { > run_alarm all $user $custom_user_name [trans > disconnect $custom_user_name] > } > - > } else { > + set status "[trans [::MSN::stateToDescription > $substate]]" > if { ( [::alarms::isEnabled $user] == 1 )&& ( > [::alarms::getAlarmItem $user onstatus] == 1) } { > - switch -exact [lindex $recv 1] { > - "NLN" { > - run_alarm $user $user > $custom_user_name "[trans changestate $custom_user_name [trans online]]" > - } > - "IDL" { > - run_alarm $user $user > $custom_user_name "[trans changestate $custom_user_name [trans away]]" > - } > - "BSY" { > - run_alarm $user $user > $custom_user_name "[trans changestate $custom_user_name [trans busy]]" > - } > - "BRB" { > - run_alarm $user $user > $custom_user_name "[trans changestate $custom_user_name [trans rightback]]" > - } > - "AWY" { > - run_alarm $user $user > $custom_user_name "[trans changestate $custom_user_name [trans away]]" > - } > - "PHN" { > - run_alarm $user $user > $custom_user_name "[trans changestate $custom_user_name [trans onphone]]" > - } > - "LUN" { > - run_alarm $user $user > $custom_user_name "[trans changestate $custom_user_name [trans gonelunch]]" > - } > - } > + run_alarm $user $user $custom_user_name "[trans > changestate $custom_user_name $status]" > } elseif { ( [::alarms::isEnabled all] == 1 )&& ( > [::alarms::getAlarmItem all onstatus] == 1)} { > - switch -exact [lindex $recv 1] { > - "NLN" { > - run_alarm all $user > $custom_user_name "[trans changestate $custom_user_name [trans online]]" > - } > - "IDL" { > - run_alarm all $user > $custom_user_name "[trans changestate $custom_user_name [trans away]]" > - } > - "BSY" { > - run_alarm all $user > $custom_user_name "[trans changestate $custom_user_name [trans busy]]" > - } > - "BRB" { > - run_alarm all $user > $custom_user_name "[trans changestate $custom_user_name [trans rightback]]" > - } > - "AWY" { > - run_alarm all $user > $custom_user_name "[trans changestate $custom_user_name [trans away]]" > - } > - "PHN" { > - run_alarm all $user > $custom_user_name "[trans changestate $custom_user_name [trans onphone]]" > - } > - "LUN" { > - run_alarm all $user > $custom_user_name "[trans changestate $custom_user_name [trans gonelunch]]" > - } > - } > + run_alarm all $user $custom_user_name "[trans > changestate $custom_user_name $status]" > } > } > } > #end of alarm system > > + if { $state_changed } { > + set maxw [expr {([::skin::getKey notifwidth]-53)*2} ] > + set short_name [trunc $custom_user_name . $maxw splainf] > > - set maxw [expr {([::skin::getKey notifwidth]-53)*2} ] > - set short_name [trunc $custom_user_name . $maxw splainf] > - > - #User logsout > - if {$substate == "FLN"} { > - > - if { $state_changed } { > + #User logsout > + if {$substate == "FLN"} { > #Register last logout, last seen and notify it in the > events > ::abook::setAtomicContactData $user [list last_logout > last_seen] \ > - [list [clock format [clock seconds] -format "%D - > %H:%M:%S"] [clock format [clock seconds] -format "%D - %H:%M:%S"]] > + [list [clock format [clock seconds] -format "%D - > %H:%M:%S"] [clock format [clock seconds] -format "%D - %H:%M:%S"]] > ::log::event disconnect $custom_user_name > - } > - > - # Added by Yoda-BZH > - if { ($remote_auth == 1) && $state_changed } { > - set nameToWriteRemote "$user_name ($user)" > - write_remote "** $nameToWriteRemote [trans logsout]" > event > - } > - > - if { ($state_changed || $nick_changed) && > - (([::config::getKey notifyoffline] == 1 && > - [::abook::getContactData $user notifyoffline -1] != 0) || > - [::abook::getContactData $user notifyoffline -1] == 1) } { > - #Show notify window if globally enabled, and not > locally disabled, or if just locally enabled > - ::amsn::notifyAdd "$short_name\n[trans logsout]." "" > offline offline $user > - } > - > - # User was online before, so it's just a status change, and it's not > - # an initial state notification > - } elseif {[::abook::getVolatileData $user state FLN] != "FLN" && > [lindex $recv 0] != "ILN" } { > - > - if { $state_changed } { > + > + # Added by Yoda-BZH > + if { $remote_auth == 1 } { > + set nameToWriteRemote "$user_name ($user)" > + write_remote "** $nameToWriteRemote [trans > logsout]" event > + } > + > + if { ([::config::getKey notifyoffline] == 1 && > + [::abook::getContactData $user notifyoffline -1] != 0) > || > + [::abook::getContactData $user notifyoffline -1] == 1 } > { > + #Show notify window if globally enabled, and > not locally disabled, or if just locally enabled > + ::amsn::notifyAdd "$short_name\n[trans > logsout]." "" offline offline $user > + } > + > + # User was online before, so it's just a status change, and > it's not > + # an initial state notification > + } elseif {[::abook::getVolatileData $user state FLN] != "FLN" > && [lindex $recv 0] != "ILN" } { > + > #Notify in the events > ::log::event state $custom_user_name > [::MSN::stateToDescription $substate] > - } > + > + # Added by Yoda-BZH > + if { $remote_auth == 1 } { > + set nameToWriteRemote "$user_name ($user)" > + write_remote "** [trans changestate > $nameToWriteRemote [trans [::MSN::stateToDescription $substate]]]" event > + } > > - # Added by Yoda-BZH > - if { ($remote_auth == 1) && ($state_changed || $nick_changed) > } { > - set nameToWriteRemote "$user_name ($user)" > - write_remote "** [trans changestate $nameToWriteRemote > [trans [::MSN::stateToDescription $substate]]]" event > - } > - > - if { ($state_changed || $nick_changed) && > - (([::config::getKey notifystate] == 1 && > - [::abook::getContactData $user notifystatus -1] != 0) || > - [::abook::getContactData $user notifystatus -1] == 1) } { > - ::amsn::notifyAdd "$short_name\n[trans > statechange]\n[trans [::MSN::stateToDescription $substate]]." \ > - "::amsn::chatUser $user" state state $user > - } > - > - } elseif {[lindex $recv 0] == "NLN"} { ;# User was offline, now online > - > - if { $state_changed } { > + if {([::config::getKey notifystate] == 1 && > + [::abook::getContactData $user notifystatus -1] != 0) || > + [::abook::getContactData $user notifystatus -1] == 1 } { > + ::amsn::notifyAdd "$short_name\n[trans > statechange]\n[trans [::MSN::stateToDescription $substate]]." \ > + "::amsn::chatUser $user" state state $user > + } > + > + } elseif {[lindex $recv 0] == "NLN"} { ;# User was offline, > now online > + > #Register last login and notify it in the events > ::abook::setContactData $user last_login [clock format > [clock seconds] -format "%D - %H:%M:%S"] > ::log::event connect $custom_user_name > @@ -5023,23 +4973,20 @@ > #later on with x-clientcaps > ::abook::setContactData $user clientname "" > ::plugins::PostEvent UserConnect evPar > - } > - > - # Added by Yoda-BZH > - if { ($remote_auth == 1) && $state_changed } { > - set nameToWriteRemote "$user_name ($user)" > - write_remote "** $nameToWriteRemote [trans logsin]" > event > - } > - > - if { ($state_changed || $nick_changed) && > - (([::config::getKey notifyonline] == 1 && > - [::abook::getContactData $user notifyonline -1] != 0) || > - [::abook::getContactData $user notifyonline -1] == 1) } { > - ::amsn::notifyAdd "$short_name\n[trans logsin]." > "::amsn::chatUser $user" online online $user > - } > - > - if { $state_changed } { > - if { ( [::alarms::isEnabled $user] == 1 )&& ( > [::alarms::getAlarmItem $user onconnect] == 1)} { > + > + # Added by Yoda-BZH > + if { $remote_auth == 1 } { > + set nameToWriteRemote "$user_name ($user)" > + write_remote "** $nameToWriteRemote [trans > logsin]" event > + } > + > + if { ([::config::getKey notifyonline] == 1 && > + [::abook::getContactData $user notifyonline -1] != 0) || > + [::abook::getContactData $user notifyonline -1] == 1 } { > + ::amsn::notifyAdd "$short_name\n[trans > logsin]." "::amsn::chatUser $user" online online $user > + } > + > + if { ( [::alarms::isEnabled $user] == 1 )&& ( > [::alarms::getAlarmItem $user onconnect] == 1)} { > run_alarm $user $user $custom_user_name > "$custom_user_name [trans logsin]" > } elseif { ( [::alarms::isEnabled all] == 1 )&& ( > [::alarms::getAlarmItem all onstatus] == 1)} { > run_alarm all $user $custom_user_name > "$custom_user_name [trans logsin]" > @@ -5051,40 +4998,55 @@ > # set oldmsnobj [::abook::getVolatileData $user msobj] > #set list_users [lreplace $list_users $idx $idx [list $user $user_name > $state_no $msnobj]] > > - ::abook::setVolatileData $user state $substate > + if {$state_changed} { > + ::abook::setVolatileData $user state $substate > + } > ::abook::setVolatileData $user msnobj $msnobj > set oldPic [::abook::getContactData $user displaypicfile] > set newPic [::MSNP2P::GetFilenameFromMSNOBJ $msnobj] > - ::abook::setContactData $user displaypicfile $newPic > - > - if { ($oldPic != $newPic) && ($newPic == "") } { > - ::skin::getDisplayPicture $user 1 > - } elseif { $oldPic != $newPic} { > - status_log "picture changed for user $user\n" white > - if { [::config::getKey lazypicretrieval] || > [::MSN::userIsBlocked $user]} { > - global sb_list > - foreach sb $sb_list { > - set users_in_chat [$sb cget -users] > - if { [lsearch $users_in_chat $user] != -1 } { > - status_log "User changed image while > image in use!! Updating!!\n" white > - ::MSNP2P::loadUserPic [::MSN::ChatFor > $sb] $user > - } > - } > > + if { $oldPic != $newPic } { > + set pic_changed 1 > + > + if { $newPic == "" } { > + ::skin::getDisplayPicture $user 1 > } else { > - if { [::MSN::myStatusIs] != "FLN" && > [::MSN::myStatusIs] != "HDN"} { > - if { ![file readable "[file join $HOME > displaypic cache ${newPic}].png"] } { > - set chat_id [::MSN::chatTo $user] > - ::MSN::ChatQueue $chat_id [list > ::MSNP2P::loadUserPic $chat_id $user] > - } else { > - #We already have the image so don't > open a convo to get it just load it > - ::MSNP2P::loadUserPic "" $user > + status_log "picture changed for user $user\n" white > + > + if { [file readable "[file join $HOME displaypic cache > ${newPic}].png"] } { > + ;#it's possible that the user set again a DP that we > already have in our cache so just load it again, even if we are HDN, or the > user is blocked. > + ::MSNP2P::loadUserPic "" $user > + ::abook::setContactData $user displaypicfile > $newPic > + } elseif { [::config::getKey lazypicretrieval] || > [::MSN::userIsBlocked $user]} { > + global sb_list > + > + foreach sb $sb_list { > + set users_in_chat [$sb cget -users] > + if { [lsearch $users_in_chat $user] != > -1 } { > + status_log "User changed image > while image in use!! Updating!!\n" white > + ::MSNP2P::loadUserPic > [::MSN::ChatFor $sb] $user > + ::abook::setContactData $user > displaypicfile $newPic > + } > } > + } elseif { [::MSN::myStatusIs] != "FLN" && > [::MSN::myStatusIs] != "HDN"} { > + set chat_id [::MSN::chatTo $user] > + ::MSN::ChatQueue $chat_id [list > ::MSNP2P::loadUserPic $chat_id $user] > + ::abook::setContactData $user displaypicfile > $newPic > + } else { > + set pic_changed 0 > } > } > + } else { > + set pic_changed 0 > } > > + if { $state_changed || $nick_changed || $pic_changed} { > + ::MSN::contactListChanged > + } > > - ::MSN::contactListChanged > if { $state_changed || $nick_changed } { > > foreach chat_id [::ChatWindow::getAllChatIds] { > proc cmsn_change_state {recv} { > global remote_auth HOME > > if {[lindex $recv 0] == "FLN"} { > #User is going offline > set user [lindex $recv 1] > set evpar(user) user > set user_name "" > set substate "FLN" > set evpar(substate) substate > set msnobj [::abook::getVolatileData $user msnobj ""] > # status_log "contactStateChange in protocol cmsn_change_state > FLN" > } elseif {[lindex $recv 0] == "ILN"} { > #Initial status when we log in > set user [lindex $recv 3] > set encoded_user_name [lindex $recv 4] > set user_name [urldecode [lindex $recv 4]] > set substate [lindex $recv 2] > set msnobj [urldecode [lindex $recv 6]] > #Add clientID to abook > add_Clientid $user [lindex $recv 5] > #Previous clientname info is now inaccurate > ::abook::setContactData $user clientname "" > } else { > #Coming online or changing state > set user [lindex $recv 2] > set evpar(user) user > set encoded_user_name [lindex $recv 3] > set user_name [urldecode [lindex $recv 3]] > set substate [lindex $recv 1] > set evpar(substate) substate > set msnobj [urldecode [lindex $recv 5]] > #Add clientID to abook > add_Clientid $user [lindex $recv 4] > > # status_log "contactStateChange in protocol cmsn_change_state > $user" > } > > set oldstate [::abook::getVolatileData $user state] > if { $oldstate != $substate } { > set state_changed 1 > } else { > set state_changed 0 > } > > # we shouldn't add ChangeState PostEvent if ILN > if { $state_changed } { > #an event used by guicontactlist to know when a contact changed > state > after 500 [list ::Event::fireEvent contactStateChange protocol > $user] > > ::plugins::PostEvent ChangeState evpar > } > > > if { $msnobj == "" } { > set msnobj -1 > } > > if {$user_name == ""} { > set user_name [::abook::getContactData $user nick] > set nick_changed 0 > } elseif { $user_name != [::abook::getContactData $user nick]} { > #Nick differs from the one on our list, so change it > #in the server list too > ::abook::setContactData $user nick $user_name > # ::MSN::changeName $user [encoding convertto utf-8 > $encoded_user_name] 1 > > #an event used by guicontactlist to know when we changed our > nick > ::Event::fireEvent contactNickChange protocol $user > > set nick_changed 1 > > if {[::config::getKey protocol] == 11} { > if {$::msnp13 != 1} { > # This check below is because today I received > a NLN for a user > # who doesn't appear in ANY of my 5 MSN lists > (RL,AL,BL,FL,PL) > # so amsn just sent the SBP with an empty > string for the contactguid, > # which resulted in a wrongly formed SBP, which > resulted in the msn server disconnecting me... :@ > if { [::abook::getContactData $user > contactguid] != "" } { > ::MSN::WriteSB ns "SBP" > "[::abook::getContactData $user contactguid] MFN [urlencode $user_name]" > } > } > } > ::log::eventnick $user $user_name > } else { > set nick_changed 0 > } > > set custom_user_name [::abook::getDisplayNick $user] > > # set state_no [::MSN::stateToNumber $substate ] ;#actually this var is > never used. > > > #alarm system (that must replace the one that was before) - KNO > if {[lindex $recv 0] !="ILN" && $state_changed} { > > if {[lindex $recv 0] == "FLN"} { > #User disconnected > > if { ( [::alarms::isEnabled $user] == 1 )&& ( > [::alarms::getAlarmItem $user ondisconnect] == 1) } { > run_alarm $user $user $custom_user_name [trans > disconnect $custom_user_name] > } elseif { ( [::alarms::isEnabled all] == 1 )&& ( > [::alarms::getAlarmItem all ondisconnect] == 1) } { > run_alarm all $user $custom_user_name [trans > disconnect $custom_user_name] > } > } else { > set status "[trans [::MSN::stateToDescription > $substate]]" > if { ( [::alarms::isEnabled $user] == 1 )&& ( > [::alarms::getAlarmItem $user onstatus] == 1) } { > run_alarm $user $user $custom_user_name "[trans > changestate $custom_user_name $status]" > } elseif { ( [::alarms::isEnabled all] == 1 )&& ( > [::alarms::getAlarmItem all onstatus] == 1)} { > run_alarm all $user $custom_user_name "[trans > changestate $custom_user_name $status]" > } > } > } > #end of alarm system > > if { $state_changed } { > set maxw [expr {([::skin::getKey notifwidth]-53)*2} ] > set short_name [trunc $custom_user_name . $maxw splainf] > > #User logsout > if {$substate == "FLN"} { > #Register last logout, last seen and notify it in the > events > ::abook::setAtomicContactData $user [list last_logout > last_seen] \ > [list [clock format [clock seconds] -format "%D - > %H:%M:%S"] [clock format [clock seconds] -format "%D - %H:%M:%S"]] > ::log::event disconnect $custom_user_name > > # Added by Yoda-BZH > if { $remote_auth == 1 } { > set nameToWriteRemote "$user_name ($user)" > write_remote "** $nameToWriteRemote [trans > logsout]" event > } > > if { ([::config::getKey notifyoffline] == 1 && > [::abook::getContactData $user notifyoffline -1] != 0) > || > [::abook::getContactData $user notifyoffline -1] == 1 } > { > #Show notify window if globally enabled, and > not locally disabled, or if just locally enabled > ::amsn::notifyAdd "$short_name\n[trans > logsout]." "" offline offline $user > } > > # User was online before, so it's just a status change, and > it's not > # an initial state notification > } elseif {[::abook::getVolatileData $user state FLN] != "FLN" > && [lindex $recv 0] != "ILN" } { > > #Notify in the events > ::log::event state $custom_user_name > [::MSN::stateToDescription $substate] > > # Added by Yoda-BZH > if { $remote_auth == 1 } { > set nameToWriteRemote "$user_name ($user)" > write_remote "** [trans changestate > $nameToWriteRemote [trans [::MSN::stateToDescription $substate]]]" event > } > > if {([::config::getKey notifystate] == 1 && > [::abook::getContactData $user notifystatus -1] != 0) || > [::abook::getContactData $user notifystatus -1] == 1 } { > ::amsn::notifyAdd "$short_name\n[trans > statechange]\n[trans [::MSN::stateToDescription $substate]]." \ > "::amsn::chatUser $user" state state $user > } > > } elseif {[lindex $recv 0] == "NLN"} { ;# User was offline, > now online > > #Register last login and notify it in the events > ::abook::setContactData $user last_login [clock format > [clock seconds] -format "%D - %H:%M:%S"] > ::log::event connect $custom_user_name > ::abook::setVolatileData $user PSM "" > #Register PostEvent "UserConnect" for Plugins, email = > email user_name=custom nick > set evPar(user) user > set evPar(user_name) custom_user_name > #Reset clientname, if it's not M$N it will set it again > #later on with x-clientcaps > ::abook::setContactData $user clientname "" > ::plugins::PostEvent UserConnect evPar > > # Added by Yoda-BZH > if { $remote_auth == 1 } { > set nameToWriteRemote "$user_name ($user)" > write_remote "** $nameToWriteRemote [trans > logsin]" event > } > > if { ([::config::getKey notifyonline] == 1 && > [::abook::getContactData $user notifyonline -1] != 0) || > [::abook::getContactData $user notifyonline -1] == 1 } { > ::amsn::notifyAdd "$short_name\n[trans > logsin]." "::amsn::chatUser $user" online online $user > } > > if { ( [::alarms::isEnabled $user] == 1 )&& ( > [::alarms::getAlarmItem $user onconnect] == 1)} { > run_alarm $user $user $custom_user_name > "$custom_user_name [trans logsin]" > } elseif { ( [::alarms::isEnabled all] == 1 )&& ( > [::alarms::getAlarmItem all onstatus] == 1)} { > run_alarm all $user $custom_user_name > "$custom_user_name [trans logsin]" > } > } > } > > # Retreive the new display picture if it changed > # set oldmsnobj [::abook::getVolatileData $user msobj] > #set list_users [lreplace $list_users $idx $idx [list $user $user_name > $state_no $msnobj]] > > if {$state_changed} { > ::abook::setVolatileData $user state $substate > } > ::abook::setVolatileData $user msnobj $msnobj > set oldPic [::abook::getContactData $user displaypicfile] > set newPic [::MSNP2P::GetFilenameFromMSNOBJ $msnobj] > > if { $oldPic != $newPic } { > set pic_changed 1 > > if { $newPic == "" } { > ::skin::getDisplayPicture $user 1 > } else { > status_log "picture changed for user $user\n" white > > if { [file readable "[file join $HOME displaypic cache > ${newPic}].png"] } { > ;#it's possible that the user set again a DP that we > already have in our cache so just load it again, even if we are HDN, or the > user is blocked. > ::MSNP2P::loadUserPic "" $user > ::abook::setContactData $user displaypicfile > $newPic > } elseif { [::config::getKey lazypicretrieval] || > [::MSN::userIsBlocked $user]} { > global sb_list > > foreach sb $sb_list { > set users_in_chat [$sb cget -users] > if { [lsearch $users_in_chat $user] != > -1 } { > status_log "User changed image > while image in use!! Updating!!\n" white > ::MSNP2P::loadUserPic > [::MSN::ChatFor $sb] $user > ::abook::setContactData $user > displaypicfile $newPic > } > } > } elseif { [::MSN::myStatusIs] != "FLN" && > [::MSN::myStatusIs] != "HDN"} { > set chat_id [::MSN::chatTo $user] > ::MSN::ChatQueue $chat_id [list > ::MSNP2P::loadUserPic $chat_id $user] > ::abook::setContactData $user displaypicfile > $newPic > } else { > set pic_changed 0 > } > } > } else { > set pic_changed 0 > } > > if { $state_changed || $nick_changed || $pic_changed} { > ::MSN::contactListChanged > } > > if { $state_changed || $nick_changed } { > > foreach chat_id [::ChatWindow::getAllChatIds] { > if { $chat_id == $user } { > ::ChatWindow::TopUpdate $chat_id > } else { > foreach user_in_chat [::MSN::usersInChat > $chat_id] { > if { $user_in_chat == $user } { > ::ChatWindow::TopUpdate $chat_id > break > } > } > } > } > } > } > ------------------------------------------------------------------------- > SF.Net email is sponsored by: > Check out the new SourceForge.net Marketplace. > It's the best place to buy or sell services > for just about anything Open Source. > http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace > _______________________________________________ > Amsn-devel mailing list > Amsn-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/amsn-devel ------------------------------------------------------------------------- SF.Net email is sponsored by: Check out the new SourceForge.net Marketplace. It's the best place to buy or sell services for just about anything Open Source. http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace _______________________________________________ Amsn-devel mailing list Amsn-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/amsn-devel