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

Reply via email to