summaryrefslogtreecommitdiff
path: root/plugins/lastlog.py
blob: 104399b42b3d6c624bc52fbaa571560bd48b4104 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
# vim:fenc=utf-8
#
# Copyright © 2018 Maxime “pep” Buquet
# Copyright © 2019 Madhur Garg
#
# Distributed under terms of the zlib license. See the COPYING file.

"""
    Search provided string in the buffer and return all results on the screen
"""

import re
from typing import Optional
from datetime import datetime

from poezio.plugin import BasePlugin
from poezio import tabs
from poezio.text_buffer import Message, TextBuffer


def add_line(
        text_buffer: TextBuffer,
        text: str,
        datetime: Optional[datetime] = None,
    ) -> None:
    """Adds a textual entry in the TextBuffer"""
    text_buffer.add_message(
        text,
        datetime,  # Time
        None,  # Nickname
        None,  # Nick Color
        False,  # History
        None,  # User
        False,  # Highlight
        None,  # Identifier
        None,  # str_time
        None,  # Jid
    )


class Plugin(BasePlugin):
    """Lastlog Plugin"""

    def init(self):
        for tab in tabs.DynamicConversationTab, tabs.StaticConversationTab, tabs.PrivateTab, tabs.MucTab:
            self.api.add_tab_command(
                tab,
                'lastlog',
                self.command_lastlog,
                usage='<keyword>',
                help='Search <keyword> in the buffer and returns results'
                  'on the screen')

    def command_lastlog(self, input_):
        """Define lastlog command"""

        text_buffer = self.api.current_tab()._text_buffer
        search_re = re.compile(input_, re.I)

        res = []
        add_line(text_buffer, "Lastlog:")
        for message in text_buffer.messages:
            if message.nickname is not None and \
               search_re.search(message.txt) is not None:
                res.append(message)
                add_line(text_buffer, "%s> %s" % (message.nickname, message.txt), message.time)
        add_line(text_buffer, "End of Lastlog")
        self.api.current_tab().text_win.pos = 0
        self.api.current_tab().core.refresh_window()