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

tkabber-svn at jabber.ru tkabber-svn at jabber.ru
Sun Feb 14 07:41:53 MSK 2010


Author: bigote
Date: 2010-02-14 07:41:53 +0300 (Sun, 14 Feb 2010)
New Revision: 292

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 subcommand "log" for /visited command. It allows you to search the same stuff, but in the log file if you have one and the option ::plugins::bldjid::options(log_file) points to it. See README or README.ru for details.


Modified: trunk/plugins/bldjid/ChangeLog
===================================================================
--- trunk/plugins/bldjid/ChangeLog	2010-02-11 19:10:01 UTC (rev 291)
+++ trunk/plugins/bldjid/ChangeLog	2010-02-14 04:41:53 UTC (rev 292)
@@ -1,3 +1,16 @@
+2010-02-14  Serge Yudin  <xmpp:bigote at jabber.ru> <mailto:bigote at gmail.com>
+
+--- Version 0.9 of the plugin.
+
+--- Files modified:
+    bldjid.tcl, README, README.ru, ChangeLog, msgs/ru.msg.
+
+--- Changes:
+	Added a subcommand "log" for /visited command. It allows you
+	to search the same stuff, but in the log file if you have one
+	and the option ::plugins::bldjid::options(log_file) points to it.
+	See README or README.ru for details.
+
 2010-02-11  Serge Yudin  <xmpp:bigote at jabber.ru> <mailto:bigote at gmail.com>
 
 --- Version 0.8.3 of the plugin.

Modified: trunk/plugins/bldjid/README
===================================================================
--- trunk/plugins/bldjid/README	2010-02-11 19:10:01 UTC (rev 291)
+++ trunk/plugins/bldjid/README	2010-02-14 04:41:53 UTC (rev 292)
@@ -69,6 +69,12 @@
 	Only nicks can be searched with strict rules.
 	Unfortunately it's not possible (at least now) to make a separate search
 	for client, client version and OS version.
+	There is another subcommand for /visited which is named "log" and allows
+	searching in a log file:
+/visited log aff owner
+someroom
+	This will find all someroom's owners' entrances ever since you started
+	logging in a file, not only during this session.
 
 --- An enumerated list styled as 'info' will be shown in the current chat window.
 	In order to choose a line from it use commands explained above:

Modified: trunk/plugins/bldjid/README.ru
===================================================================
--- trunk/plugins/bldjid/README.ru	2010-02-11 19:10:01 UTC (rev 291)
+++ trunk/plugins/bldjid/README.ru	2010-02-14 04:41:53 UTC (rev 292)
@@ -69,6 +69,12 @@
 	По строгим правилам можно искать только ники.
 	К сожалению, нет возможности (по крайней мере, сейчас) искать по отдельности
 	имя клиента, версию клиента и версию ОС.
+	Имеется ещё одна подкоманда для /visited под названием "log", позволяющая
+	искать в файле лога:
+/visited log aff owner
+someroom
+	Она выведет все посещения комнаты someroom её владельцами за всю историю
+	ведения лога в файле, а не только за текущую сессию.
 
 --- В результате выполнения этих команд в окне текущего чата выведется
 	нумерованный список. Из него можно выбрать кандидата на бан для команд,

Modified: trunk/plugins/bldjid/bldjid.tcl
===================================================================
--- trunk/plugins/bldjid/bldjid.tcl	2010-02-11 19:10:01 UTC (rev 291)
+++ trunk/plugins/bldjid/bldjid.tcl	2010-02-14 04:41:53 UTC (rev 292)
@@ -1,4 +1,4 @@
-# "Bldjid" plugin for Tkabber. 2010-02-11 v. 0.8.3
+# "Bldjid" plugin for Tkabber. 2010-02-14 v. 0.9
 # Written by Serge Yudin xmpp:bigote at jabber.ru
 # See README or README.ru file for usage.
 
@@ -548,6 +548,23 @@
 	return $grpjids
 }
 
+proc bldjid::valid_groups_log {grplist pattern} {
+# Filter out wrong conferences when searching in log file.
+# We always search with loose rules and "all" parameter
+# (not only in rooms where we have admin's rights).
+	if {$pattern == ""} {
+		return $grplist
+	} else {
+		set grpjids ""
+		foreach tmpgrp $grplist {
+			if {[string match *$pattern* $tmpgrp]} {
+				lappend grpjids $tmpgrp
+			}
+		}
+	}
+	return $grpjids
+}
+
 proc bldjid::pickup {index chatid} {
 	variable user_list
 	set group [::chat::get_jid $chatid]
@@ -659,8 +676,15 @@
 				append header [::msgcat::mc "%s to all rooms:" $nick]
 			} else {
 				append header [::msgcat::mc "users matching *%s* to all rooms:" $nick]
+				if {[lindex $nick 0] == "log"} {
+					[namespace current]::read_log
+					variable jbc_log
+					set groupjids [[namespace current]::valid_groups_log \
+					[array names jbc_log] $room]
+				} else {
+					set groupjids [[namespace current]::valid_groups $xlib $which {}]
+				}
 			}
-			set groupjids [[namespace current]::valid_groups $xlib $which {}]
 			[namespace current]::prepare_user_list $groupjids $nick
 		} else {
 			if {$options(matching_rules) == "exact"} {
@@ -678,7 +702,14 @@
 					return stop
 				}
 			}
-			set groupjids [[namespace current]::valid_groups $xlib $which $room]
+			if {[lindex $nick 0] == "log"} {
+				[namespace current]::read_log
+				variable jbc_log
+				set groupjids [[namespace current]::valid_groups_log \
+				[array names jbc_log] $room]
+			} else {
+				set groupjids [[namespace current]::valid_groups $xlib $which $room]
+			}
 			[namespace current]::prepare_user_list $groupjids $nick
 		}
 		set msg [[namespace current]::prepare_print_res]
@@ -686,6 +717,11 @@
 	} else {
 		chat::add_message $chatid $group error [::msgcat::mc "JIDs gathering is disabled."] {}
 	}
+	if {[info exists jbc_log]} {
+# If we've searched in log file, we'd better discard the array now to free memory.
+# Although cacheing for some time could be added (for 5 minutes or so).
+		catch {unset jbc_log}
+	}
 }
 
 proc bldjid::prepare_print_res {} {
@@ -740,6 +776,11 @@
 	\n/visited aff none\
 	\n/visited ver Tkabber\
 	\n/visited ver Debian\
+	\n\nAn enhancement of the previous command that allows searching in log file:\
+	\n/visited log nick\
+	\n/visited log jid mylogin at jabberserver.org\
+	\nroom\
+	\n/visited log ver Gajim Version: 0.12.1 OS: Windows XP\
 	\n\nBan in all rooms where you have admin privileges:\
 	\n?n? means an item number from a list given by a /visit* command.\
 	\n/bldjid ?n?\
@@ -789,6 +830,12 @@
 	variable options
 	variable user_list
 	global jids_by_chats
+	variable jbc_log
+	set if_log 0
+	if {[lindex $par 0] == "log"} {
+		set par [lreplace $par 0 0]
+		set if_log 1
+	}
 # Parameter parsing
 	set par_list [split $par \ ]
 	set pll [llength $par_list]
@@ -817,15 +864,10 @@
 # the user should take another significant part of it to avoid confusion.
 # An example. nick: "jid revealer" -> /visited id revealer
 	}
-	foreach grp $grpjds {
-		if {[info exists jids_by_chats($grp)]} {
-			foreach item $jids_by_chats($grp) {
-				if {$options(matching_rules) == "exact"} {
-					if {$i == 1 && [string equal [lindex $item $i] $par]} {
-						lappend item $grp
-						lappend user_list $item
-					}
-				} else {
+	if {$if_log} {
+		foreach grp $grpjds {
+			if {[info exists jbc_log($grp)]} {
+				foreach item $jbc_log($grp) {
 					if {[string match -nocase *$par* [lindex $item $i]]} {
 						lappend item $grp
 						lappend user_list $item
@@ -833,6 +875,24 @@
 				}
 			}
 		}
+	} else {
+		foreach grp $grpjds {
+			if {[info exists jids_by_chats($grp)]} {
+				foreach item $jids_by_chats($grp) {
+					if {$options(matching_rules) == "exact"} {
+						if {$i == 1 && [string equal [lindex $item $i] $par]} {
+							lappend item $grp
+							lappend user_list $item
+						}
+					} else {
+						if {[string match -nocase *$par* [lindex $item $i]]} {
+							lappend item $grp
+							lappend user_list $item
+						}
+					}
+				}
+			}
+		}
 	}
 }
 
@@ -921,6 +981,46 @@
     close $fd
 }
 
+proc bldjid::read_log {} {
+    variable options
+    variable jbc_log
+    set log $options(log_file)
+    if { $log eq "" } {
+        return
+    }
+    if { [catch {open $log} fd] } {
+        debugmsg bldjid \
+        "ERROR: cannot open log file."
+        return
+    }
+	set data [read $fd]
+    close $fd
+	set lines [split $data \n]
+# Log format
+#	set msg4log "$ent_cntr\t$ts\t$group\t$nick\t$rjid\t$role_aff\t$ver_os"
+# jids_by_chats format
+#	lappend jids_by_chats($group) \
+#	[list $ts $nick $rjid $role_aff $ver_os]
+	foreach line $lines {
+		set e [split $line \t]
+		set ts [lindex $e 1]
+		set grp [lindex $e 2]
+		set nick [lindex $e 3]
+		set rjid [lindex $e 4]
+		if {[llength $e] >= 6} {
+			set r_aff [lindex $e 5]
+		} else {
+			set r_aff ""
+		}
+		if {[llength $e] == 7} {
+			set v_os [lindex $e 6]
+		} else {
+			set v_os ""
+		}
+		lappend jbc_log($grp) [list $ts $nick $rjid $r_aff $v_os]
+	}
+}
+
 proc bldjid::request_iq {xlib chatid group nick ts real_jid role_aff} {
     ::xmpp::sendIQ $xlib get \
 	-query [::xmpp::xml::create query \

Modified: trunk/plugins/bldjid/msgs/ru.msg
===================================================================
--- trunk/plugins/bldjid/msgs/ru.msg	2010-02-11 19:10:01 UTC (rev 291)
+++ trunk/plugins/bldjid/msgs/ru.msg	2010-02-14 04:41:53 UTC (rev 292)
@@ -54,8 +54,8 @@
 ::msgcat::mcset ru "The list is empty." "Список пуст."
 ::msgcat::mcset ru "You turned off showing results in the rooms where you don't have admin privileges." \
 "Вы отключили показ результатов в комнатах, где у вас нет админских прав."
-::msgcat::mcset ru "\nBan in all rooms where you have admin privileges: \n/bldjid JID \nSome reason for banning (optional). \n\nUnban a banned person in these rooms: \n/unbldjid JID \n\nBan a user in the current room by his/her JID: \n/banjid JID \nSome reason for banning (optional). \n\nUnban all people banned in the current room: \n/amnesty \n\nShow all visitors of the current room: \n/visitors \n\nShow all visitors of rooms that match *room*: \n/visitors room \n\nShow visits made by someone whose nick matches *nick*: \n/visited nick \n\nShows visits made by *nick*, to the rooms that match *room*: \n/visited nick \nroom \n\nThe same fashion as previous, but looking for\ \njids, roles, affiliations and versions:\ \n/visited jid john\ \n/visited role moder\ \n/visited aff none\ \n/visited ver Tkabber\ \n/visited ver Debian\ \n\nBan in all rooms where you have admin privileges: \n?n? means an item number from a list given by a /visit* command. \n/bldjid ?n? \nSome reason for banning (optional). \n\nBan in the current room by a number from a list given by a /visit* command. \n/banjid ?n? \nSome reason for banning (optional). \n\nClear the current monitor window: \n/clearmon \n\nTo toggle between Show and Close monitor states use <Control-m> shortcut. \n\nSee README file for more information. \nVisit Tkabber -> Customize -> Plugins -> Bldjid \nto tune the plugin for your needs." \
-"\nЗабанить во всех комнатах, где у вас есть админские права: \n/bldjid JID \nПричина бана (необязательна). \n\nРазбанить забаненного пользователя в таких комнатах: \n/unbldjid JID \n\nЗабанить в текущей комнате пользователя по его/её джиду: \n/banjid JID \nПричина бана (необязательна). \n\nРазбанить всех забаненных в текущей комнате: \n/amnesty \n\nПоказать всех посетителей в текущей комнате: \n/visitors \n\nПоказать всех посетителей комнаты, название которой подходит к *room*: \n/visitors room \n\nПоказать визиты пользователя, чей ник подходит к *nick*: \n/visited nick \n\nПоказать визиты, сделанные *nick*, в комнаты, подходящие к *room*: \n/visited nick \nroom \n\nКак и в предыдущих двух случаях, но ищем джиды, роли, ранги и версии:\ \n/visited jid pupkin\ \n/visited role moder\ \n/visited aff none\ \n/visited ver Tkabber\ \n/visited ver Debian\ \n\nЗабанить во всех комнатах, где у вас есть админские права: \n?n? означает номер в списке, выведенном по команде /visit*. \n/bldjid ?n? \nПричина бана (необязательна). \n\nЗабанить в текущей комнате по номеру в списке, выведенном командой /visit*. \n/banjid ?n? \nПричина бана (необязательна). \n\nОчистить текущее окно монитора: \n/clearmon \n\nЧтобы показать/скрыть монитор, воспользуйтесь сочетанием клавиш <Control-m>. \n\nПодробное описание команд читайте в файле README.ru. \nЗайдите в Tkabber -> Настройки -> Plugins -> Bldjid, \nчтобы настроить плагин под ваши нужды."
+::msgcat::mcset ru "\nBan in all rooms where you have admin privileges: \n/bldjid JID \nSome reason for banning (optional). \n\nUnban a banned person in these rooms: \n/unbldjid JID \n\nBan a user in the current room by his/her JID: \n/banjid JID \nSome reason for banning (optional). \n\nUnban all people banned in the current room: \n/amnesty \n\nShow all visitors of the current room: \n/visitors \n\nShow all visitors of rooms that match *room*: \n/visitors room \n\nShow visits made by someone whose nick matches *nick*: \n/visited nick \n\nShows visits made by *nick*, to the rooms that match *room*: \n/visited nick \nroom \n\nThe same fashion as previous, but looking for\ \njids, roles, affiliations and versions:\ \n/visited jid john\ \n/visited role moder\ \n/visited aff none\ \n/visited ver Tkabber\ \n/visited ver Debian\ \n\nAn enhancement of the previous command that allows searching in log file:\ \n/visited log nick\ \n/visited log jid mylogin at jabberserver.org\ \nroom\ \n/visited log ver Gajim Version: 0.12.1 OS: Windows XP\ \n\nBan in all rooms where you have admin privileges: \n?n? means an item number from a list given by a /visit* command. \n/bldjid ?n? \nSome reason for banning (optional). \n\nBan in the current room by a number from a list given by a /visit* command. \n/banjid ?n? \nSome reason for banning (optional). \n\nClear the current monitor window: \n/clearmon \n\nTo toggle between Show and Close monitor states use <Control-m> shortcut. \n\nSee README file for more information. \nVisit Tkabber -> Customize -> Plugins -> Bldjid \nto tune the plugin for your needs." \
+"\nЗабанить во всех комнатах, где у вас есть админские права: \n/bldjid JID \nПричина бана (необязательна). \n\nРазбанить забаненного пользователя в таких комнатах: \n/unbldjid JID \n\nЗабанить в текущей комнате пользователя по его/её джиду: \n/banjid JID \nПричина бана (необязательна). \n\nРазбанить всех забаненных в текущей комнате: \n/amnesty \n\nПоказать всех посетителей в текущей комнате: \n/visitors \n\nПоказать всех посетителей комнаты, название которой подходит к *room*: \n/visitors room \n\nПоказать визиты пользователя, чей ник подходит к *nick*: \n/visited nick \n\nПоказать визиты, сделанные *nick*, в комнаты, подходящие к *room*: \n/visited nick \nroom \n\nКак и в предыдущих двух случаях, но ищем джиды, роли, ранги и версии:\ \n/visited jid pupkin\ \n/visited role moder\ \n/visited aff none\ \n/visited ver Tkabber\ \n/visited ver Debian\ \n\nРасширение предыдущей команды, позволяющее искать в файле лога:\ \n/visited log nick \n/visited log jid mylogin at jabberserver.org\ \nroom\ \n/visited log ver Gajim Версия: 0.12.1 ОС: Windows XP\ \n\nЗабанить во всех комнатах, где у вас есть админские права: \n?n? означает номер в списке, выведенном по команде /visit*. \n/bldjid ?n? \nПричина бана (необязательна). \n\nЗабанить в текущей комнате по номеру в списке, выведенном командой /visit*. \n/banjid ?n? \nПричина бана (необязательна). \n\nОчистить текущее окно монитора: \n/clearmon \n\nЧтобы показать/скрыть монитор, воспользуйтесь сочетанием клавиш <Control-m>. \n\nПодробное описание команд читайте в файле README.ru. \nЗайдите в Tkabber -> Настройки -> Plugins -> Bldjid, \nчтобы настроить плагин под ваши нужды."
 ::msgcat::mcset ru "current room:" "текущую комнату:"
 ::msgcat::mcset ru "room %s:" "комнату %s:"
 ::msgcat::mcset ru "rooms that match *%s*:" "комнаты, названия которых подходят к *%s*:"



More information about the Tkabber-dev mailing list