argh.. I thought the whole patch was for one thing... I already told him to 
make small diffs and separate diff files for different 
changes...
square! You're not listening! I'm coming to kick you! :p

KKRT

On Sun, Dec 16, 2007 at 10:00:44AM +0000, Tom Hennigan wrote:
> 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

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