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