message.py 3.35 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
# -*- coding:utf-8 -*-
#
# Copyright 2010 Le Coz Florent <louizatakk@fedoraproject.org>
#
# This file is part of Poezio.
#
# Poezio 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 of the License.
#
# Poezio 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 Poezio.  If not, see <http://www.gnu.org/licenses/>.

from datetime import datetime

class Message(object):
    """
    A message with all the associated data (nickname, time, color, etc)
24 25
    The color can be a single number OR a list of numbers, for
    specials cases like join or quit messages.
26
    """
27
    def __init__(self, txt, time=None, nickname=None, user=None, color=None, colorized=False):
28 29 30 31
        """
        time is a datetime object, None means 'now'.
        If no nickname is specified, it's an information.
        user is an User object (used for the color, etc)
32

33 34 35 36 37 38
        """
        self.txt = txt
        self.nickname = nickname
        self.time = time
        self.user = user
        self.color = color
39
        self.colorized = colorized
40 41

    def __repr__(self):
42
        return "<Message txt=%s, nickname=%s, time=%s, user=%s, colorized=%s>" % (self.txt, self.nickname, str(self.time), str(self.user), self.colorized)
43 44 45
    def __str__(self):
        return self.__repr__()

46 47 48
class Line(object):
    """
    A line, corresponding to ONE row of the text area.
49
    A message is composed of ONE line or MORE.
50 51
    The same particularity for colors in Message class applies
    here too.
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
    Example:

  Text area limit                                     text area limit
    v                                                     v
    |[12:12:01] nickone has just joined the room named    |
    |           test@kikoo.louiz.org                      |
    |[12:12:23] nickone> hello good morning everyone, I am|
    |                    seeking for informations about   |
    |                    poezio                           |
    |[12:12:35] secondnick> Hello nickone, you can get    |
    |                       informations here :\n         |
    |                       http://blablablabla           |

    To get this result, the three messages should be converted to:

    Line(None, None, Datetime(12, 12, 01), "nickone has just joined the room named", 0, 10)
    Line(None, None, None, "test@kikoo.louiz.org", 0, 10)
    Line("nickone", 1, Datetime(12, 12, 23), "hello good morning everyone, I am", 0, 20)
    Line(None, None, None, "seeking for informations about", 0, 20)
    Line(None, None, None, "poezio", 0, 20)
    Line("secondnick", 2, Datetime(12, 12, 35), "Hello nickone, you can get", 0, 23)
    Line(None, None, None, "informations here:", 0, 23)
    Line(None, None, None, "http://blablablabla", 0, 23)
    """
76
    def __init__(self, nickname, nickname_color, time, text, text_color, text_offset, colorized=False):
77 78 79 80 81 82
        self.nickname = nickname
        self.nickname_color = nickname_color
        self.time = time
        self.text = text
        self.text_color = text_color
        self.text_offset = text_offset
83
        self.colorized = colorized