summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorent Le Coz <louiz@louiz.org>2014-11-02 18:05:06 +0100
committerFlorent Le Coz <louiz@louiz.org>2014-11-02 18:05:06 +0100
commit691200fafaf3496d140fc91e990909bccb65b576 (patch)
tree6051b3555fa70d52eba55c078461d0ae4b1f5efe
parentbb582d244657679e52329a13716cca70e54c2a52 (diff)
parent1ff6b40e200cbfa9417707d83b036c49a4805cca (diff)
downloadpoezio-691200fafaf3496d140fc91e990909bccb65b576.tar.gz
poezio-691200fafaf3496d140fc91e990909bccb65b576.tar.bz2
poezio-691200fafaf3496d140fc91e990909bccb65b576.tar.xz
poezio-691200fafaf3496d140fc91e990909bccb65b576.zip
Merge branch 'master' into slix
-rw-r--r--plugins/quote.py72
1 files changed, 25 insertions, 47 deletions
diff --git a/plugins/quote.py b/plugins/quote.py
index 8a4fd95c..ab503dc1 100644
--- a/plugins/quote.py
+++ b/plugins/quote.py
@@ -7,18 +7,19 @@ Usage
.. glossary::
/quote
- **Usage:** ``/quote <timestamp>``
+ **Usage:** ``/quote <message>``
- Timestamp is in ``HH:MM:SS`` format, and can be completed with [tab].
+ The message must exist. You can use autocompletion to get the message
+ you want to quote easily.
Example:
.. code-block:: none
- /quote 21:12:23
+ /quote "Pouet"
- If there is a message at 21:12:23, it will be put in the input. If there
- isn’t, you will get a warning.
+ If the message "Pouet" exists, it will be put in the input. If not you
+ will get a warning.
Options
-------
@@ -42,14 +43,11 @@ Options
be used to insert the nick of the user who sent the message or the
time of the message.
"""
+
from plugin import BasePlugin
from xhtml import clean_text
import common
import tabs
-import re
-
-timestamp_re = re.compile(r'^(\d\d\d\d-\d\d-\d\d )?\d\d:\d\d:\d\d$')
-seconds_re = re.compile(r'^:\d\d$')
import logging
log = logging.getLogger(__name__)
@@ -58,20 +56,18 @@ class Plugin(BasePlugin):
def init(self):
for _class in (tabs.MucTab, tabs.ConversationTab, tabs.PrivateTab):
self.api.add_tab_command(_class, 'quote', self.command_quote,
- usage='<timestamp>',
- help='Takes the message received at <timestamp> and insert it in the input, to quote it.',
- short='Quote a message from a timestamp',
+ usage='<message>',
+ help='Quote the message you typed if it exists.',
+ short='Quote a message.',
completion=self.completion_quote)
def command_quote(self, args):
args = common.shell_split(args)
- if len(args) in (1, 2):
- timestamp = args[-1]
+ if len(args) == 1:
+ message = args[-1]
else:
return self.api.run_command('/help quote')
- if re.match(timestamp_re, timestamp) is None:
- return self.api.information('Timestamp has a wrong format.', 'Warning')
- message = self.find_message_with_timestamp(timestamp)
+ message = self.find_message(message)
if message:
before = self.config.get('before_quote', '') % {'nick': message.nickname or '',
'time': message.str_time}
@@ -81,47 +77,29 @@ class Plugin(BasePlugin):
'quote': clean_text(message.txt),
'after': after.replace('\\n', '\n').replace('[SP]', ' ')})
else:
- self.api.information('No message found for timestamp %s.' % timestamp, 'Warning')
+ self.api.information('No message found', 'Warning')
- def find_message_with_timestamp(self, timestamp):
- # TODO: handle messages with the same
- # timestamp but not the same day
+ def find_message(self, txt):
messages = self.api.get_conversation_messages()
if not messages:
return None
for message in messages[::-1]:
- if message.str_time == timestamp:
+ if clean_text(message.txt) == txt:
return message
return None
def completion_quote(self, the_input):
- def nick_match(msg):
- if not msg.nickname:
- return nick == ''
- return msg.nickname.lower().startswith(nick.lower())
- def time_match(msg):
- return msg.str_time.endswith(time)
+ def message_match(msg):
+ return input_message.lower() in clean_text(msg.txt).lower()
messages = self.api.get_conversation_messages()
if not messages:
return
text = the_input.get_text()
args = common.shell_split(text)
- n = len(args)
- if text.endswith(' '):
- n += 1
- time = args[-1]
- if re.match(seconds_re, time) is not None:
- messages = list(filter(time_match, messages))
- for i in range(3):
- the_input.key_backspace(False)
- elif n == 2:
- try:
- if args[1][0] not in ('1', '2', '3', '4', '5', '6', '7', '8', '9', '0'):
- return False
- except:
- pass
- nick = ''
- if n == 3:
- nick = args[1]
- messages = list(filter(nick_match, messages))
- return the_input.auto_completion([msg.str_time for msg in messages[::-1]], '')
+ if not text.endswith(' '):
+ input_message = args[-1]
+ messages = list(filter(message_match, messages))
+ elif len(args) > 1:
+ return False
+ return the_input.auto_completion([clean_text(msg.txt) for msg in messages[::-1]], '')
+