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

Reply via email to