Welcome to mirror list, hosted at ThFree Co, Russian Federation.

dev.gajim.org/gajim/gajim-plugins.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYann Leboulanger <asterix@lagaule.org>2011-09-23 19:24:29 +0400
committerYann Leboulanger <asterix@lagaule.org>2011-09-23 19:24:29 +0400
commitd81c4721f53e5f364f3f120debbc3b26d4b403c4 (patch)
treebde2ab8b25e8b58ed67afe9a1ada0954dabfaa64 /regex_filter/regex_filter.py
parentea470f898aad2a4ea4667af934531b2854858ae2 (diff)
new regex filter plugin
Diffstat (limited to 'regex_filter/regex_filter.py')
-rw-r--r--regex_filter/regex_filter.py136
1 files changed, 136 insertions, 0 deletions
diff --git a/regex_filter/regex_filter.py b/regex_filter/regex_filter.py
new file mode 100644
index 0000000..6a4f818
--- /dev/null
+++ b/regex_filter/regex_filter.py
@@ -0,0 +1,136 @@
+# -*- coding: utf-8 -*-
+
+## This file is part of Gajim.
+##
+## Gajim is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published
+## by the Free Software Foundation; version 3 only.
+##
+## Gajim is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+## GNU General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
+##
+
+'''
+Regex Filter plugin.
+
+:author: Yann Leboulanger <asterix@lagaule.org>
+:since: 23th September 2011
+:copyright: Copyright (2011) Yann Leboulanger <asterix@lagaule.org>
+:license: GPLv3
+'''
+
+import re
+
+from plugins import GajimPlugin
+from plugins.helpers import log, log_calls
+
+from common import gajim
+from common import ged
+from command_system.framework import CommandContainer, command, doc
+from command_system.implementation.hosts import *
+
+class RegexFilterPlugin(GajimPlugin):
+
+ @log_calls('RegexFilterPlugin')
+ def init(self):
+ self.description = _('Regex Filter Plugin.')
+ self.config_dialog = None
+
+ self.events_handlers = {
+ 'decrypted-message-received': (ged.PREGUI1,
+ self._nec_decrypted_message_received),
+ 'gc-message-received': (ged.PREGUI1, self._nec_gc_message_received),
+ }
+
+ self.rules = {}
+ self.create_rules()
+
+ @log_calls('RegexFilterPlugin')
+ def activate(self):
+ FilterCommands.enable()
+
+ @log_calls('RegexFilterPlugin')
+ def deactivate(self):
+ FilterCommands.disable()
+
+ @log_calls('RegexFilterPlugin')
+ def create_rules(self):
+ for num, c in self.config.items():
+ self.rules[int(num)] = [re.compile(c[0], re.MULTILINE), c[1]]
+
+ @log_calls('RegexFilterPlugin')
+ def add_rule(self, search, replace):
+ if self.rules:
+ num = max(self.rules.keys()) + 1
+ else:
+ num = 0
+ self.config[str(num)] = [search, replace]
+ self.create_rules()
+
+ @log_calls('RegexFilterPlugin')
+ def remove_rule(self, num):
+ if num in self.config:
+ del self.config[num]
+ self.create_rules()
+ return True
+ return False
+
+ @log_calls('RegexFilterPlugin')
+ def get_rules(self):
+ return self.config
+
+ @log_calls('RegexFilterPlugin')
+ def _nec_all(self, obj):
+ if not obj.msgtxt:
+ return
+ rules_num = self.rules.keys()
+ rules_num.sort()
+ for num in rules_num:
+ rule = self.rules[num]
+ obj.msgtxt = rule[0].sub(rule[1], obj.msgtxt)
+
+ @log_calls('RegexFilterPlugin')
+ def _nec_decrypted_message_received(self, obj):
+ self._nec_all(obj)
+
+ @log_calls('RegexFilterPlugin')
+ def _nec_gc_message_received(self, obj):
+ self._nec_all(obj)
+
+class FilterCommands(CommandContainer):
+ AUTOMATIC = False
+ HOSTS = ChatCommands, PrivateChatCommands, GroupChatCommands
+
+ @command("add_filter", raw=True)
+ @doc(_("Add an incoming filter. First argument is the search regex, second argument is the replace regex."))
+ def add_filter(self, search, replace):
+ plugin = gajim.plugin_manager.get_active_plugin('regex_filter')
+ plugin.add_rule(search, replace)
+ return _('Added rule to replace %s by %s' % (search, replace))
+
+ @command("remove_filter", raw=True)
+ @doc(_("Remove an incoming filter. Argument is the rule number. See /list_rules command."))
+ def remove_filter(self, num):
+ plugin = gajim.plugin_manager.get_active_plugin('regex_filter')
+ if plugin.remove_rule(num):
+ return _('Rule number %s removed' % num)
+ return _('Rule number %s does not exist' % num)
+
+ @command("list_filters")
+ @doc(_("List incoming filters."))
+ def list_filters(self):
+ plugin = gajim.plugin_manager.get_active_plugin('regex_filter')
+ rules = plugin.get_rules()
+ st = ''
+ for num, rule in rules.items():
+ st += _('%(num)s: %(search)s -> %(replace)s') % {'num': num,
+ 'search': rule[0], 'replace': rule[1]} + '\n'
+ if st:
+ return st[:-1]
+ else:
+ return _('No rule defined')