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

tkabber-svn at jabber.ru tkabber-svn at jabber.ru
Thu Mar 4 21:55:40 MSK 2010


Author: bigote
Date: 2010-03-04 21:55:39 +0300 (Thu, 04 Mar 2010)
New Revision: 312

Modified:
   trunk/plugins/bldjid/ChangeLog
   trunk/plugins/bldjid/README
   trunk/plugins/bldjid/README.ru
   trunk/plugins/bldjid/TODO
   trunk/plugins/bldjid/bldjid.tcl
   trunk/plugins/bldjid/msgs/ru.msg
Log:
Added a possibility to specify several queries in one line, like this:
/visited nick bigote aff none
/visited log role admin ver Tkabber
Heavy testing needed (especially when "Exact" matching option is selected).

Small bug fixed that prevented exact search in all rooms.


Modified: trunk/plugins/bldjid/ChangeLog
===================================================================
--- trunk/plugins/bldjid/ChangeLog	2010-02-28 22:51:18 UTC (rev 311)
+++ trunk/plugins/bldjid/ChangeLog	2010-03-04 18:55:39 UTC (rev 312)
@@ -1,3 +1,22 @@
+2010-03-04  Serge Yudin  <xmpp:bigote at jabber.ru> <mailto:bigote at gmail.com>
+
+--- Version 0.9.6 of the plugin.
+
+--- Files modified:
+    bldjid.tcl, README, README.ru, ChangeLog, TODO, msgs/ru.msg.
+
+--- Changes:
+	Added a possibility to specify several queries in one line, like this:
+	/visited nick bigote aff none
+	/visited log role admin ver Tkabber
+
+	Small bug fixed that prevented exact search in all rooms.
+
+--- Known problems:
+	role or aff keywords don't distinguish in which part of
+	"role/affiliation" item to search, so it tries to match the whole item.
+	I.e., you can put "role none" or "aff visitor", and yet it will give results.
+
 2010-02-23  Serge Yudin  <xmpp:bigote at jabber.ru> <mailto:bigote at gmail.com>
 
 --- Version 0.9.5 of the plugin.

Modified: trunk/plugins/bldjid/README
===================================================================
--- trunk/plugins/bldjid/README	2010-02-28 22:51:18 UTC (rev 311)
+++ trunk/plugins/bldjid/README	2010-03-04 18:55:39 UTC (rev 312)
@@ -88,6 +88,13 @@
 someroom
 	This will find all someroom's owners' entrances ever since you started
 	logging in a file, not only during this session.
+/visited log nick braveheart role admin ver Psi
+someroom
+	Even more flexible search! You can specify several queries in one line!
+	Just remember that if you want to include search for a nick, specify this keyword
+	so that the engine knew the nick is the word next to it, not the whole sentence.
+	Also, "ver" query should be the last in the chain, as the engine takes all text
+	that follows it as a search query.
 
 --- An enumerated list styled as 'info' will be shown in the current chat window.
 	In order to choose a line from it use a command explained above:

Modified: trunk/plugins/bldjid/README.ru
===================================================================
--- trunk/plugins/bldjid/README.ru	2010-02-28 22:51:18 UTC (rev 311)
+++ trunk/plugins/bldjid/README.ru	2010-03-04 18:55:39 UTC (rev 312)
@@ -92,6 +92,13 @@
 someroom
 	Она выведет все посещения комнаты someroom её владельцами за всю историю
 	ведения лога в файле, а не только за текущую сессию.
+/visited log nick braveheart role admin ver Psi
+someroom
+	Искать можно ещё гибче! Можно указать несколько запросов в одной линии!
+	Только помните, что если нужно искать ник, укажите это с помощью ключевого слова nick,
+	чтобы поисковый движок знал, что ник -- следующее за ним слово, а не вся поисковая строка.
+	К тому же, поисковый запрос "ver" должен быть последним в строке, потому что движок
+	берёт весь текст, следующий за ним, как параметр запроса.
 
 --- В результате выполнения этих команд в окне текущего чата выведется
 	нумерованный список. Из него можно выбрать кандидата на бан для команды,

Modified: trunk/plugins/bldjid/TODO
===================================================================
--- trunk/plugins/bldjid/TODO	2010-02-28 22:51:18 UTC (rev 311)
+++ trunk/plugins/bldjid/TODO	2010-03-04 18:55:39 UTC (rev 312)
@@ -18,20 +18,6 @@
 ---	It would be nice to be able to show messages about nick changing
 	and also about kicking and banning people.
 
-===	Since a possibility added to log client version, it would be cool
-	to use /visited command to filter out visitors by different parameters:
-	nick (already implemented), jid, role or affiliation, Client version, OS.
----	Filtering by jid, role, affiliation and version/OS works now,
-	but there is a problem: it would be good if header messages indicate us
-	what kind of information is found (well, it's quite obvious but nevertheless).
-	For example, if we look for version matching Debian, the header should say:
-	"Show visits of users whose _version_ is matching *Debian*"
----	Due to extreme length of Version/OS text it could be uncomfortable
-	to have it always displayed. I'd prefer to add an option that would allow
-	to turn displaying such information ON or OFF (it would be independent from
-	log_ver_os option, so a user could log Ver/OS info without displaying it,
-	still being able to enable displaying it at any time he or she needs).
-
 ===	Fix wrong behaviour introduced when implementing Version/OS logging:
 ---	When options(log_file) is set to empty line (logging to file disabled),
 	the plugin should stop logging Version/OS. However, it still logs it.

Modified: trunk/plugins/bldjid/bldjid.tcl
===================================================================
--- trunk/plugins/bldjid/bldjid.tcl	2010-02-28 22:51:18 UTC (rev 311)
+++ trunk/plugins/bldjid/bldjid.tcl	2010-03-04 18:55:39 UTC (rev 312)
@@ -1,4 +1,4 @@
-# "Bldjid" plugin for Tkabber. 2010-02-23 v. 0.9.5
+# "Bldjid" plugin for Tkabber. 2010-02-23 v. 0.9.6
 # Written by Serge Yudin xmpp:bigote at jabber.ru
 # See README or README.ru file for usage.
 
@@ -789,6 +789,7 @@
 			set groupjids ""
 			if {$options(matching_rules) == "exact"} {
 				append header [::msgcat::mc "%s to all rooms:" $nick]
+				set groupjids [[namespace current]::valid_groups $xlib $which {}]
 			} else {
 				append header [::msgcat::mc "users matching *%s* to all rooms:" $nick]
 				if {[lindex $nick 0] == "log"} {
@@ -800,8 +801,6 @@
 					set groupjids [[namespace current]::valid_groups $xlib $which {}]
 				}
 			}
-#			if {![info exists groupjids]} {
-#			}
 			[namespace current]::prepare_user_list $groupjids $nick
 		} else {
 			if {$options(matching_rules) == "exact"} {
@@ -901,6 +900,9 @@
 	\n/visited log jid mylogin at jabberserver.org\
 	\nroom\
 	\n/visited log ver Gajim Version: 0.12.1 OS: Windows XP\
+	\nAnd even combining different search parameters! (ver should be the last one):\
+	\n/visited log nick bigote aff owner ver Tkabber Version: 0.11.1-svn-20100223\
+	\nfoo at conf\
 	\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?\
@@ -954,61 +956,67 @@
 		set if_log 1
 	}
 # Parameter parsing
-	set par_list [split $par \ ]
-	set pll [llength $par_list]
-	set key [lindex $par_list 0]
-	if {$key == "jid" && $pll == 2} {
-		set i 2
-		set par [lindex $par_list 1]
-	} elseif {$key == "role" && $pll == 2} {
-		set i 3
-		set j 0
-		set par [lindex $par_list 1]
-	} elseif {$key == "aff" && $pll == 2} {
-		set i 3
-		set j 1
-		set par [lindex $par_list 1]
-	} elseif {$key == "ver" && $pll == 2} {
-		set i 4
-		set par [lindex $par_list 1]
-	} elseif {$key == "ver" && $pll > 2} {
-		set i 4
-		set par [lreplace $par_list 0 0]
-	} else {
-		set i 1
-# Keyword absense means we search for nick.
-# If a nick contains a keyword separated with a space at the beginning,
-# the user should take another significant part of it to avoid confusion.
-# An example. nick: "jid revealer" -> /visited id revealer
-	}
-	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
-					}
-				}
+	set pll [llength $par]
+	for {set x 0} {$x < $pll} {incr x 2} {
+		set key [lindex $par $x]
+		switch -- $key {
+			nick {
+				set p_list(1) [lindex $par $x+1]
 			}
+			jid {
+				set p_list(2) [lindex $par $x+1]
+			}
+			role - aff {
+# TODO: Add in search routine below a possibility to search for role and aff separately.
+# It's being searched matching to complete word like "participant/none" now,
+# without distinguishing role and affiliation.
+				set p_list(3) [lindex $par $x+1]
+			}
+			ver {
+				set p_list(4) [lrange $par $x+1 end]
+				break
+			}
+			default {
+				set p_list(1) $par
+				break
+			}
 		}
+	}
+	if {$if_log && [info exists jbc_log]} {
+		array set a [array get jbc_log]
+	} elseif {[info exists jids_by_chats]} {
+		array set a [array get jids_by_chats]
 	} 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
-						}
+		return stop
+	}
+	foreach grp $grpjds {
+		foreach item $a($grp) {
+			foreach key [array names p_list] {
+				if {![info exists s_res]} {
+					if {$options(matching_rules) == "exact" && $key != 3} {
+						set s_res [string equal $p_list($key) \
+						[lindex $item $key]]
 					} else {
-						if {[string match -nocase *$par* [lindex $item $i]]} {
-							lappend item $grp
-							lappend user_list $item
-						}
+						set s_res [string match -nocase *$p_list($key)* \
+						[lindex $item $key]]
 					}
+				} else {
+					if {$options(matching_rules) == "exact" && $key != 3} {
+						set s_res [expr $s_res & \
+						[string equal $p_list($key) \
+						[lindex $item $key]]]
+					} else {
+						set s_res [expr $s_res & \
+						[string match -nocase *$p_list($key)* \
+						[lindex $item $key]]]
+					}
 				}
 			}
+			if {$s_res} {
+					lappend item $grp
+					lappend user_list $item
+			}
+			unset s_res
 		}
 	}
 }

Modified: trunk/plugins/bldjid/msgs/ru.msg
===================================================================
--- trunk/plugins/bldjid/msgs/ru.msg	2010-02-28 22:51:18 UTC (rev 311)
+++ trunk/plugins/bldjid/msgs/ru.msg	2010-03-04 18:55:39 UTC (rev 312)
@@ -58,8 +58,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\nUnban all people banned in the current room: \n/amnesty \n\nUnban people in the current room whose ban reason matches *some reason*: \n/amnesty some reason \n\nSearch for a pattern in the outcast list of the current room: \n/inbanlist pattern \n\nSearch for a pattern in the member list of the current room: \n/inmemberlist pattern \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\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/amnesty \n\nРазбанить в текущей комнате тех, чья причина бана подходит к *какая-то причина*: \n/amnesty какая-то причина \n\nИскать слово в чёрном списке текущей комнаты: \n/inbanlist pattern \n\nИскать слово в списке членов текущей комнаты: \n/inmemberlist pattern \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Очистить текущее окно монитора: \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\nUnban all people banned in the current room: \n/amnesty \n\nUnban people in the current room whose ban reason matches *some reason*: \n/amnesty some reason \n\nSearch for a pattern in the outcast list of the current room: \n/inbanlist pattern \n\nSearch for a pattern in the member list of the current room: \n/inmemberlist pattern \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\ \nAnd even combining different search parameters! (ver should be the last one):\ \n/visited log nick bigote aff owner ver Tkabber Version: 0.11.1-svn-20100223\ \nfoo at conf\ \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\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/amnesty \n\nРазбанить в текущей комнате тех, чья причина бана подходит к *какая-то причина*: \n/amnesty какая-то причина \n\nИскать слово в чёрном списке текущей комнаты: \n/inbanlist pattern \n\nИскать слово в списке членов текущей комнаты: \n/inmemberlist pattern \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Можно даже комбинировать несколько поисковых запросов! (ver должен быть последним параметром):\ \n/visited log nick bigote aff owner ver Tkabber Версия: 0.11.1-svn-20100223\ \nfoo at conf\ \n\nЗабанить во всех комнатах, где у вас есть админские права: \n?n? означает номер в списке, выведенном по команде /visit*. \n/bldjid ?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