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

conversation_view.py « dialogs « test - dev.gajim.org/gajim/gajim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 40b8595f7f4cae03a15e66e8021f790ab799a26d (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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
import tempfile
from unittest.mock import MagicMock

from gi.repository import Gdk
from gi.repository import Gtk
from nbxmpp.protocol import JID

from gajim.common import app
from gajim.common import configpaths
from gajim.common.const import AvatarSize
from gajim.common.const import KindConstant
from gajim.common.modules.contacts import BareContact
from gajim.common.modules.contacts import ContactSettings
from gajim.common.preview import PreviewManager
from gajim.common.settings import Settings
from gajim.common.storage.archive import MessageArchiveStorage
from gajim.common.storage.events import EventStorage

from gajim.gtk.avatar import generate_default_avatar
from gajim.gtk.control import ChatControl

ACCOUNT = 'me@test.tld'
FROM_JID = 'contact@test.tld'
BASE_TIMESTAMP = 1672531200


class ConversationViewTest(Gtk.ApplicationWindow):
    def __init__(self) -> None:
        Gtk.ApplicationWindow.__init__(self)
        self.set_position(Gtk.WindowPosition.CENTER)
        self.set_size_request(800, 800)
        self.set_title('Test ConversationView')

        self._chat_control = ChatControl()
        app.settings.set('hide_groupchat_occupants_list', True)

        contact = self._get_contact()
        self._chat_control.switch_contact(contact)

        jump_to_button = Gtk.Button(label='Jump to 500')
        jump_to_button.connect('clicked', self._on_jump_to_clicked)
        button_box = Gtk.Box(
            spacing=6,
            halign=Gtk.Align.CENTER,
            margin_bottom=6)
        button_box.add(jump_to_button)

        box = Gtk.Box(spacing=6, orientation=Gtk.Orientation.VERTICAL)
        box.add(self._chat_control.widget)
        box.add(button_box)
        self.add(box)

        self.show_all()
        self.connect('key-press-event', self._on_key_press_event)

    def _get_contact(self) -> BareContact:
        contact = MagicMock(spec='BareContact')
        contact.connect = MagicMock()
        contact.account = ACCOUNT
        contact.jid = FROM_JID
        contact.name = 'Test Contact'
        contact.is_groupchat = False
        avatar = generate_default_avatar(
            'T',
            (0.2, 0.1, 0.7),
            AvatarSize.ROSTER,
            1)
        contact.get_avatar = MagicMock(return_value=avatar)
        contact.settings = ContactSettings(ACCOUNT, JID.from_string(ACCOUNT))
        return contact

    def _on_key_press_event(self,
                            _widget: Gtk.Widget,
                            event: Gdk.EventKey
                            ) -> None:

        if event.keyval == Gdk.KEY_Escape:
            self.destroy()

    def _on_jump_to_clicked(self, _button: Gtk.Button) -> None:
        self._chat_control.scroll_to_message(500, BASE_TIMESTAMP + 500)


def add_archive_messages() -> None:
    timestamp = BASE_TIMESTAMP
    for num in range(1000):
        app.storage.archive.insert_into_logs(
            ACCOUNT,
            FROM_JID,
            timestamp,
            KindConstant.CHAT_MSG_RECV,
            message=num,
            stanza_id=num,
            message_id=num)
        timestamp += 1


app.get_client = MagicMock()
app.window = MagicMock()

app.settings = Settings(in_memory=True)
app.settings.init()
app.settings.add_account(ACCOUNT)

app.storage.events = EventStorage()
app.storage.events.init()

app.storage.archive = MessageArchiveStorage(in_memory=True)
app.storage.archive.init()
add_archive_messages()

configpaths.set_separation(True)
configpaths.set_config_root(tempfile.gettempdir())
configpaths.init()

app.preview_manager = PreviewManager()

win = ConversationViewTest()
win.connect('destroy', Gtk.main_quit)
win.show_all()

Gtk.main()