[Tkabber-dev] r282 - in trunk/plugins/bldjid: . msgs

tkabber-svn at jabber.ru tkabber-svn at jabber.ru
Wed Feb 3 10:17:52 MSK 2010


Author: bigote
Date: 2010-02-03 10:17:52 +0300 (Wed, 03 Feb 2010)
New Revision: 282

Modified:
   trunk/plugins/bldjid/ChangeLog
   trunk/plugins/bldjid/README
   trunk/plugins/bldjid/README.ru
   trunk/plugins/bldjid/bldjid.tcl
   trunk/plugins/bldjid/msgs/ru.msg
Log:
Added a possibility to log visitors' role/affiliation.
Added a possibility to log visitors' client version and OS (doesn't work
properly yet so it's disabled at the moment).
A workaround added that fixes unnecessary printing room's name
when executing /visitors without parameters in Russian locale.
Some small bugs fixed.


Modified: trunk/plugins/bldjid/ChangeLog
===================================================================
--- trunk/plugins/bldjid/ChangeLog	2010-02-01 02:41:58 UTC (rev 281)
+++ trunk/plugins/bldjid/ChangeLog	2010-02-03 07:17:52 UTC (rev 282)
@@ -1,3 +1,18 @@
+2010-02-03  Serge Yudin  <xmpp:bigote at jabber.ru> <mailto:bigote at gmail.com>
+
+--- Version 0.6.5 of the plugin.
+
+--- Files modified:
+    bldjid.tcl, ChangeLog, README, README.ru, msgs/ru.msg.
+
+--- Changes:
+	Added a possibility to log visitors' role/affiliation.
+	Added a possibility to log visitors' client version and OS (doesn't work
+	properly yet so it's disabled at the moment).
+	A workaround added that fixes unnecessary printing room's name
+	when executing /visitors without parameters in Russian locale.
+	Some small bugs fixed.
+
 2010-02-01  Serge Yudin  <xmpp:bigote at jabber.ru> <mailto:bigote at gmail.com>
 
 --- Version 0.6.4.1 of the plugin.

Modified: trunk/plugins/bldjid/README
===================================================================
--- trunk/plugins/bldjid/README	2010-02-01 02:41:58 UTC (rev 281)
+++ trunk/plugins/bldjid/README	2010-02-03 07:17:52 UTC (rev 282)
@@ -102,6 +102,8 @@
 	Bldjid log file. If empty, logs won't be saved to file.
 	It is useful if you want to recall who entered a certain room
 	a certain date, even if you restarted Tkabber after it.
+	Items of each entrance are tab-separated, so you can easily apply
+	shell commands like grep, awk or sed for processing.
 	Also, other useful information such as results of /bldjid, /unbldjid,
 	/banjid and /amnesty commands will be logged. However, if you don't like
 	logs to be saved on disk, just set this option to empty string.
@@ -120,6 +122,19 @@
 	However, if you prefer to log bare JIDs, just set it
 	and resources will be stripped.
 
+--- ::plugins::bldjid::options(log_role_aff)
+	This option is turned OFF by default.
+	This is for a better tracking of your visitors' roles and affiliation status.
+	This option, if enabled, will show them to you in a chat or monitor window.
+	Please note that if you enable logging to a file, this information
+	will be logged regardless of this option's state.
+
+--- ::plugins::bldjid::options(log_ver_os)
+	This option is also turned OFF by default.
+	You might want to know client versions of your visitors in some cases.
+	As well as the previous option, this one doesn't affect logging to a file
+	which is always enabled. It only shows the results in Tkabber.
+
 --- ::plugins::bldjid::options(verbosity_level)
 -	Minimum level means that there will be no repeated JIDs in each room list.
 	However, if the same JID enters the same room with a different nick

Modified: trunk/plugins/bldjid/README.ru
===================================================================
--- trunk/plugins/bldjid/README.ru	2010-02-01 02:41:58 UTC (rev 281)
+++ trunk/plugins/bldjid/README.ru	2010-02-03 07:17:52 UTC (rev 282)
@@ -103,7 +103,9 @@
 	пустую строку, логи не будут сохраняться в файл.
 	Эта опция полезна, если вы хотите вспомнить, кто заходил
 	в определённую комнату в определённый день, даже если вы после этого
-	перезапускали Ткаббер. Кроме этого в лог записывается другая полезная
+	перезапускали Ткаббер. Элементы каждой записи разделяются табуляцией,
+	что позволяет использовать инструменты вроде grep, awk или sed
+	для обработки лога. Кроме этого в лог записывается другая полезная
 	информация вроде результатов выполнения команд /bldjid, /unbldjid,
 	/banjid и /amnesty. Если вы не хотите сохранять логи в файл,
 	сохраните вместо пути пустую строку.
@@ -117,10 +119,23 @@
 	временно выключите эту опцию и сделайте поиск в нужной комнате.
 
 --- ::plugins::bldjid::options(strip_resource)
-	Эта опция по умолчанию выключена, поскольку так она выдаёт
+	Эта опция по умолчанию ВЫКЛЮЧЕНА, поскольку так она выдаёт
 	более информативные результаты -- в логи пишутся полные джиды, с ресурсом.
 	Если вы предпочитаете не сохранять ресурсы, включите эту опцию.
 
+--- ::plugins::bldjid::options(log_role_aff)
+	Эта настройка по умолчанию ВЫКЛЮЧЕНА.
+	Она предназначена для лучшего отслеживания ролей и членства посетителей.
+	Будучи включённой, эта опция выводит данную информацию в окно чата или монитора.
+	Учтите, что если включён вывод в файл, эта информация будет писаться туда
+	вне зависимости от состояния этой настройки.
+
+--- ::plugins::bldjid::options(log_ver_os)
+	Эта настройка по умолчанию тоже ВЫКЛЮЧЕНА.
+	Иногда может понадобиться знать, с каких клиентов и ОС заходят посетители.
+	Как и предыдущая настройка, эта не влияет на запись этой информации в файл.
+	Она влияет лишь на показ версии и ОС в самом Ткаббере.
+
 --- ::plugins::bldjid::options(verbosity_level)
 -	Минимальный уровень "надоедливости" означает, что в лог будет попадать
 	лишь первое вхождение для каждого джида. Если точнее, то для каждой пары

Modified: trunk/plugins/bldjid/bldjid.tcl
===================================================================
--- trunk/plugins/bldjid/bldjid.tcl	2010-02-01 02:41:58 UTC (rev 281)
+++ trunk/plugins/bldjid/bldjid.tcl	2010-02-03 07:17:52 UTC (rev 282)
@@ -1,6 +1,6 @@
-# "Bldjid" plugin for Tkabber. 2010-02-01 v. 0.6.4.1
+# "Bldjid" plugin for Tkabber. 2010-02-03 v. 0.6.5
 # Written by Serge Yudin xmpp:bigote at jabber.ru
-# See README file for usage.
+# See README or README.ru file for usage.
 
 namespace eval bldjid {
 	::msgcat::mcload [file join [file dirname [info script]] msgs]
@@ -53,6 +53,18 @@
 			They are not stripped by default as it's more informative."] \
 			-type boolean -group Bldjid
 
+		custom::defvar options(log_role_aff) 0 \
+			[::msgcat::mc "Enable this option to log visitors' affiliation and role.\
+			Please note that if logging to a file is enabled\
+			this information will be saved to file anyway."] \
+			-type boolean -group Bldjid
+
+		custom::defvar options(log_ver_os) 0 \
+			[::msgcat::mc "Enable this option to log visitors' client version and OS.\
+			Please note that if logging to a file is enabled\
+			this information will be saved to file anyway."] \
+			-type boolean -group Bldjid
+
 		custom::defvar options(verbosity_level) min \
 			[::msgcat::mc "Verbosity level."] \
 			-type radio -group Bldjid -layout vertical -values $verbosity
@@ -87,6 +99,7 @@
 	variable user_list
 # An array where all user entrances are stored.
 	global jids_by_chats
+	variable ver_os
 	variable ent_cntr 1
 	event add <<ToggleMonitor>> <Control-m>
 
@@ -104,6 +117,7 @@
 proc bldjid::unload {} {
 	variable user_list
 	global jids_by_chats
+	variable ver_os
 	variable ent_cntr
 	event delete <<ToggleMonitor>> <Control-m>
 
@@ -120,6 +134,7 @@
 	catch {unset ent_cntr}
 	catch {unset user_list}
 	catch {unset jids_by_chats}
+	catch {unset ver_os}
 
 	foreach chatid [chat::opened] {
 		clear_monitor $chatid
@@ -145,6 +160,7 @@
 ## Adapted to bldjid's necessities by Serge Yudin
 proc bldjid::smart_enter_exit_message {chatid nick} {
 	global jids_by_chats
+	variable ver_os ""
 	variable options
 	variable ent_cntr
 	if {!$options(enable_jids_gathering)} {
@@ -167,7 +183,7 @@
 			set ts [clock format [clock seconds] \
 			-format $::plugins::options(timestamp_format)]
 			set xlib [::chat::get_xlib $chatid]
-			set real_jid [::muc::get_real_jid $xlib $group/$nick]]
+			set real_jid [::muc::get_real_jid $xlib $group/$nick]
 			if {$options(strip_resource)} {
 				set real_jid [::xmpp::jid::stripResource $real_jid]
 			}
@@ -190,17 +206,33 @@
 				[expr {[llength $jids_by_chats($group)] \
 				- $options(log_length)}]]
 			}
-			lappend jids_by_chats($group) [list $ts $nick $real_jid]
+			set role_aff [::muc::get_role $xlib $group/$nick]
+			append role_aff "/" [::muc::get_affiliation $xlib $group/$nick]
+
+#			[namespace current]::request_iq $xlib $chatid $group/$nick
+### TODO: Some smart mechanism of getting correct versions
+### after a great delay should be implemented.
+### Something like checking the array "ver_os" in a loop
+### until a certain jid appears.
 			if {$options(send_chat_messages) && $options(verbosity_level) == "min"} {
 				set occupant "$nick ($real_jid)"
 				set msg [::msgcat::mc "%s has entered" $occupant]
 				::chat::add_message $chatid $group groupchat $msg {}
 			}
-			if {$options(log_file) != {}} {
-                set msg4log "$ent_cntr\t$ts\t$group\t$nick\t$real_jid"
+set ver_os "Version will be here"
+			if {$options(log_file) != ""} {
+                set msg4log "$ent_cntr\t$ts\t$group\t$nick\t$real_jid\t$role_aff\t$ver_os"
 			    [namespace current]::log_msg $msg4log
 				incr ent_cntr
 			}
+			if {!$options(log_role_aff)} {
+				set role_aff ""
+			}
+			if {!$options(log_ver_os)} {
+				set ver_os ""
+			}
+			lappend jids_by_chats($group) \
+			[list $ts $nick $real_jid $role_aff $ver_os]
 		}
 	}
 }
@@ -605,7 +637,12 @@
 			foreach grp $groupjids {
 				if {[info exists jids_by_chats($grp)]} {
 					foreach item $jids_by_chats($grp) {
-						if {![string match "*current room:" $header]} {
+### TODO: It's a bug. If locale is other than English one,
+### $header never matches "*current room:"
+### so the room's name will always be printed.
+### So workaround added until I figure out how to fix it.
+						if {![string match "*current room:" $header] \
+						 && ![string match "*текущую комнату:" $header]} {
 							lappend item $grp
 						}
 						lappend user_list $item
@@ -735,12 +772,14 @@
 }
 
 ### Thanks to Alexey Smirnov <alexey.smirnov at gmx.com>
-proc bldjid::extract_user {msg tsVar nickVar jidVar} {
-	upvar 1 $tsVar timestamp $nickVar nick $jidVar jid
+proc bldjid::extract_user {msg tsVar nickVar jidVar r_affVar v_osVar} {
+	upvar 1 $tsVar timestamp $nickVar nick $jidVar jid $r_affVar r_aff $v_osVar v_os
 
 	set timestamp [lindex $msg 0]
 	set nick      [lindex $msg 1]
 	set jid       [lindex $msg 2]
+	set r_aff     [lindex $msg 3]
+	set v_os      [lindex $msg 4]
 
 	return
 }
@@ -748,18 +787,17 @@
 ### Thanks to Alexey Smirnov
 proc bldjid::format_msg {msg n} {
 	variable options
-	set sep $options(custom_separator)
-
-	[namespace current]::extract_user $msg timestamp nick jid
+	set s $options(custom_separator)
+	[namespace current]::extract_user $msg timestamp nick jid r_aff v_os
 	if {$jid == ""} {
 		set jid "*NO JID*"
 	}
-	if {[llength $msg] == 3} {
+	if {[llength $msg] == 5} {
 		set myroom ""
 	} else {
-		set myroom " $sep [lindex $msg 3]"
+		set myroom " $s [lindex $msg 5]"
 	}
-		return "\n$n:\t$timestamp $sep $nick $sep $jid$myroom"
+		return "\n$n:\t$timestamp $s $nick $s $jid $s $r_aff $s $v_os$myroom"
 }
 
 proc bldjid::prepare_user_list {grpjds nick} {
@@ -870,3 +908,40 @@
     puts $fd "$msg"
     close $fd
 }
+
+proc bldjid::request_iq {xlib chatid jid} {
+    ::xmpp::sendIQ $xlib get \
+	-query [::xmpp::xml::create query \
+		-xmlns jabber:iq:version] \
+	-to $jid \
+	-command [list [namespace current]::parse_info_iqversion $chatid $jid]
+}
+
+proc bldjid::parse_info_iqversion {chatid jid res child} {
+### TODO: This variable should be an array to save pairs FULL_JID/VER_OS.
+### Otherwise we won't know whom a particular version belongs to.
+	variable ver_os
+#    if {![winfo exists [chat::chat_win $chatid]]} {
+#		return
+#    }
+
+#    set rjid [::muc::whois $chatid $jid]
+    if {![cequal $res ok]} {
+		set ver_os "no info"
+    }
+
+    ::xmpp::xml::split $child tag xmlns attrs cdata subels
+
+    if {[string equal $xmlns jabber:iq:version]} {
+		userinfo::parse_iqversion_item $jid $subels
+    }
+
+    foreach {i j} [list clientname    [::msgcat::mc "Client:"] \
+		    clientversion [::msgcat::mc "Version:"] \
+		    os            [::msgcat::mc "OS:"]] {
+		if {[info exists userinfo::userinfo($i,$jid)] && \
+		 ![cequal $userinfo::userinfo($i,$jid) ""]} {
+	    	append ver_os " $j $userinfo::userinfo($i,$jid)"
+		}
+    }
+}

Modified: trunk/plugins/bldjid/msgs/ru.msg
===================================================================
--- trunk/plugins/bldjid/msgs/ru.msg	2010-02-01 02:41:58 UTC (rev 281)
+++ trunk/plugins/bldjid/msgs/ru.msg	2010-02-03 07:17:52 UTC (rev 282)
@@ -67,3 +67,7 @@
 ::msgcat::mcset ru "Whether the Bldjid plugin is loaded." "Загружено ли расширение Bldjid."
 ::msgcat::mcset ru "You can choose here if JIDs should be logged stripped (without resources) or not (with resources). They are not stripped by default as it's more informative." \
 "Вы можете выбрать, вырезать ли ресурс джида при ведении лога. По умолчанию ресурс не вырезается, поскольку так у вас имеется больше информации."
+::msgcat::mcset ru "Enable this option to log visitors' affiliation and role. Please note that if logging to a file is enabled this information will be saved to file anyway." \
+"Включите эту опцию, чтобы отслеживать членство и роли посетителей. Если включено ведение логов в файл, эта информация будет туда писаться независимо от состояния данной опции."
+::msgcat::mcset ru "Enable this option to log visitors' client version and OS. Please note that if logging to a file is enabled this information will be saved to file anyway." \
+"Включите эту опцию, чтобы отслеживать версию клиента и ОС посетителей. Если включено ведение логов в файл, эта информация будет туда писаться независимо от состояния данной опции."



More information about the Tkabber-dev mailing list