Square87 thanks for looking at the code. This is a fairly large patch  
so near to a release.. I have work today, so I can't do this for you,  
but it may be better to split each patch into a separate diff.. Then  
it will be easy to review your changes.. I will take time to look at  
this, but as  I said I can't do it today..

- Tom

On 16 Dec 2007, at 08:02, Youness Alaoui wrote:

> 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


-------------------------------------------------------------------------
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