Philipp Hörist pushed to branch mainwindow at gajim / gajim

Commits:

9 changed files:

Changes:

  • gajim/chat_control.py
    ... ... @@ -41,13 +41,11 @@
    41 41
     
    
    42 42
     from gajim.common import app
    
    43 43
     from gajim.common import helpers
    
    44
    -from gajim.common import ged
    
    45 44
     from gajim.common import i18n
    
    46 45
     from gajim.common.i18n import _
    
    47 46
     from gajim.common.helpers import AdditionalDataDict
    
    48 47
     from gajim.common.helpers import open_uri
    
    49 48
     from gajim.common.helpers import geo_provider_from_location
    
    50
    -from gajim.common.helpers import event_filter
    
    51 49
     from gajim.common.helpers import open_file
    
    52 50
     from gajim.common.contacts import GC_Contact
    
    53 51
     from gajim.common.const import AvatarSize
    
    ... ... @@ -215,30 +213,6 @@ def __init__(self, parent_win, contact, acct, session, resource=None):
    215 213
             self.restore_conversation()
    
    216 214
             self.msg_textview.grab_focus()
    
    217 215
     
    
    218
    -        # pylint: disable=line-too-long
    
    219
    -        self.register_events([
    
    220
    -            ('nickname-received', ged.GUI1, self._on_nickname_received),
    
    221
    -            ('mood-received', ged.GUI1, self._on_mood_received),
    
    222
    -            ('activity-received', ged.GUI1, self._on_activity_received),
    
    223
    -            ('tune-received', ged.GUI1, self._on_tune_received),
    
    224
    -            ('location-received', ged.GUI1, self._on_location_received),
    
    225
    -            ('update-client-info', ged.GUI1, self._on_update_client_info),
    
    226
    -            ('chatstate-received', ged.GUI1, self._on_chatstate_received),
    
    227
    -            ('caps-update', ged.GUI1, self._on_caps_update),
    
    228
    -            ('message-sent', ged.OUT_POSTCORE, self._on_message_sent),
    
    229
    -            ('mam-decrypted-message-received', ged.GUI1, self._on_mam_decrypted_message_received),
    
    230
    -            # ('decrypted-message-received', ged.GUI1, self._on_decrypted_message_received),
    
    231
    -            ('receipt-received', ged.GUI1, self._receipt_received),
    
    232
    -            ('displayed-received', ged.GUI1, self._displayed_received),
    
    233
    -            ('message-error', ged.GUI1, self._on_message_error),
    
    234
    -            ('zeroconf-error', ged.GUI1, self._on_zeroconf_error),
    
    235
    -        ])
    
    236
    -
    
    237
    -        if self._type.is_chat:
    
    238
    -            # Don’t connect this when PrivateChatControl is used
    
    239
    -            self.register_event('update-roster-avatar', ged.GUI1, self._on_update_roster_avatar)
    
    240
    -        # pylint: enable=line-too-long
    
    241
    -
    
    242 216
             # PluginSystem: adding GUI extension point for this ChatControl
    
    243 217
             # instance object
    
    244 218
             app.plugin_manager.gui_extension_point('chat_control', self)
    
    ... ... @@ -524,29 +498,23 @@ def _get_pep_widget(self, type_):
    524 498
                 return self.xml.location_image
    
    525 499
             return None
    
    526 500
     
    
    527
    -    @event_filter(['account', 'jid'])
    
    528 501
         def _on_mood_received(self, _event):
    
    529 502
             self._update_pep(PEPEventType.MOOD)
    
    530 503
     
    
    531
    -    @event_filter(['account', 'jid'])
    
    532 504
         def _on_activity_received(self, _event):
    
    533 505
             self._update_pep(PEPEventType.ACTIVITY)
    
    534 506
     
    
    535
    -    @event_filter(['account', 'jid'])
    
    536 507
         def _on_tune_received(self, _event):
    
    537 508
             self._update_pep(PEPEventType.TUNE)
    
    538 509
     
    
    539
    -    @event_filter(['account', 'jid'])
    
    540 510
         def _on_location_received(self, _event):
    
    541 511
             self._update_pep(PEPEventType.LOCATION)
    
    542 512
     
    
    543
    -    @event_filter(['account', 'jid'])
    
    544 513
         def _on_nickname_received(self, _event):
    
    545 514
             self.update_ui()
    
    546 515
             self.parent_win.redraw_tab(self)
    
    547 516
             self.parent_win.show_title()
    
    548 517
     
    
    549
    -    @event_filter(['account', 'jid'])
    
    550 518
         def _on_update_client_info(self, event):
    
    551 519
             contact = app.contacts.get_contact(
    
    552 520
                 self.account, event.jid, event.resource)
    
    ... ... @@ -554,7 +522,6 @@ def _on_update_client_info(self, event):
    554 522
                 return
    
    555 523
             self.xml.phone_image.set_visible(contact.uses_phone)
    
    556 524
     
    
    557
    -    @event_filter(['account'])
    
    558 525
         def _on_chatstate_received(self, event):
    
    559 526
             if self._type.is_privatechat:
    
    560 527
                 if event.contact != self.gc_contact:
    
    ... ... @@ -573,7 +540,6 @@ def _on_chatstate_received(self, event):
    573 540
                     self.account, self.contact.jid)
    
    574 541
             self.parent_win.redraw_tab(self, chatstate)
    
    575 542
     
    
    576
    -    @event_filter(['account'])
    
    577 543
         def _on_caps_update(self, event):
    
    578 544
             if self._type.is_chat and event.jid != self.contact.jid:
    
    579 545
                 return
    
    ... ... @@ -581,11 +547,7 @@ def _on_caps_update(self, event):
    581 547
                 return
    
    582 548
             self.update_ui()
    
    583 549
     
    
    584
    -    @event_filter(['account'])
    
    585
    -    def _on_mam_decrypted_message_received(self, event):
    
    586
    -        if event.properties.type.is_groupchat:
    
    587
    -            return
    
    588
    -
    
    550
    +    def _on_mam_message_received(self, event):
    
    589 551
             if event.properties.is_muc_pm:
    
    590 552
                 if not event.properties.jid == self.contact.get_full_jid():
    
    591 553
                     return
    
    ... ... @@ -604,11 +566,24 @@ def _on_mam_decrypted_message_received(self, event):
    604 566
                              message_id=event.properties.id,
    
    605 567
                              additional_data=event.additional_data)
    
    606 568
     
    
    607
    -    @event_filter(['account', 'jid'])
    
    569
    +    def _on_message_received(self, event):
    
    570
    +        typ = ''
    
    571
    +        if event.properties.is_sent_carbon:
    
    572
    +            typ = 'out'
    
    573
    +
    
    574
    +        self.add_message(event.msgtxt,
    
    575
    +                         typ,
    
    576
    +                         tim=event.properties.timestamp,
    
    577
    +                         subject=event.properties.subject,
    
    578
    +                         displaymarking=event.displaymarking,
    
    579
    +                         msg_log_id=event.msg_log_id,
    
    580
    +                         message_id=event.properties.id,
    
    581
    +                         correct_id=event.correct_id,
    
    582
    +                         additional_data=event.additional_data)
    
    583
    +
    
    608 584
         def _on_message_error(self, event):
    
    609 585
             self.conv_textview.show_error(event.message_id, event.error)
    
    610 586
     
    
    611
    -    @event_filter(['account', 'jid'])
    
    612 587
         def _on_message_sent(self, event):
    
    613 588
             if not event.message:
    
    614 589
                 return
    
    ... ... @@ -633,23 +608,18 @@ def _on_message_sent(self, event):
    633 608
                              correct_id=event.correct_id,
    
    634 609
                              additional_data=event.additional_data)
    
    635 610
     
    
    636
    -    @event_filter(['account', 'jid'])
    
    637 611
         def _receipt_received(self, event):
    
    638 612
             self.conv_textview.show_receipt(event.receipt_id)
    
    639 613
     
    
    640
    -    @event_filter(['account', 'jid'])
    
    641 614
         def _displayed_received(self, event):
    
    642 615
             self.conv_textview.show_displayed(event.marker_id)
    
    643 616
     
    
    644
    -    @event_filter(['account', 'jid'])
    
    645 617
         def _on_zeroconf_error(self, event):
    
    646 618
             self.add_status_message(event.message)
    
    647 619
     
    
    648
    -    @event_filter(['account', 'jid'])
    
    649 620
         def _on_update_roster_avatar(self, obj):
    
    650 621
             self._update_avatar()
    
    651 622
     
    
    652
    -    @event_filter(['account'])
    
    653 623
         def _nec_ping(self, event):
    
    654 624
             if self.contact != event.contact:
    
    655 625
                 return
    

  • gajim/chat_control_base.py
    ... ... @@ -255,7 +255,7 @@ def __init__(self, parent_win, widget_name, contact, acct,
    255 255
     
    
    256 256
             # pylint: disable=line-too-long
    
    257 257
             self.register_events([
    
    258
    -            ('our-show', ged.GUI1, self._nec_our_status),
    
    258
    +            ('our-show', ged.GUI1, self._on_our_show),
    
    259 259
                 ('ping-sent', ged.GUI1, self._nec_ping),
    
    260 260
                 ('ping-reply', ged.GUI1, self._nec_ping),
    
    261 261
                 ('ping-error', ged.GUI1, self._nec_ping),
    
    ... ... @@ -268,6 +268,11 @@ def __init__(self, parent_win, widget_name, contact, acct,
    268 268
             # to properly use the super, because of the old code.
    
    269 269
             CommandTools.__init__(self)
    
    270 270
     
    
    271
    +    def process_event(self, event):
    
    272
    +        method_name = event.name.replace('-', '_')
    
    273
    +        method_name = f'_on_{method_name}'
    
    274
    +        getattr(self, method_name)(event)
    
    275
    +
    
    271 276
         def _on_conv_textview_key_press_event(self, textview, event):
    
    272 277
             if event.get_state() & Gdk.ModifierType.SHIFT_MASK:
    
    273 278
                 if event.keyval in (Gdk.KEY_Page_Down, Gdk.KEY_Page_Up):
    
    ... ... @@ -443,8 +448,7 @@ def remove_session(self, session):
    443 448
             self.session.control = None
    
    444 449
             self.session = None
    
    445 450
     
    
    446
    -    @event_filter(['account'])
    
    447
    -    def _nec_our_status(self, event):
    
    451
    +    def _on_our_show(self, event):
    
    448 452
             if event.show == 'connecting':
    
    449 453
                 return
    
    450 454
     
    
    ... ... @@ -452,8 +456,6 @@ def _nec_our_status(self, event):
    452 456
                 self.got_disconnected()
    
    453 457
             else:
    
    454 458
                 self.got_connected()
    
    455
    -        if self.parent_win:
    
    456
    -            self.parent_win.redraw_tab(self)
    
    457 459
     
    
    458 460
         def _nec_ping(self, obj):
    
    459 461
             raise NotImplementedError
    

  • gajim/common/modules/message.py
    ... ... @@ -212,6 +212,24 @@ def _message_received(self, _con, stanza, properties):
    212 212
             app.nec.push_incoming_event(
    
    213 213
                 NetworkEvent('message-received', **event_attr))
    
    214 214
     
    
    215
    +        log_type = KindConstant.CHAT_MSG_RECV
    
    216
    +        if properties.is_sent_carbon:
    
    217
    +            log_type = KindConstant.CHAT_MSG_SENT
    
    218
    +
    
    219
    +        if not should_log(self._account, jid) or not msgtxt:
    
    220
    +            return
    
    221
    +
    
    222
    +        app.storage.archive.insert_into_logs(
    
    223
    +            self._account,
    
    224
    +            fjid if properties.is_muc_pm else jid,
    
    225
    +            properties.timestamp,
    
    226
    +            log_type,
    
    227
    +            message=msgtxt,
    
    228
    +            subject=properties.subject,
    
    229
    +            additional_data=additional_data,
    
    230
    +            stanza_id=stanza_id or message_id,
    
    231
    +            message_id=properties.id)
    
    232
    +
    
    215 233
         def _message_error_received(self, _con, _stanza, properties):
    
    216 234
             jid = properties.jid
    
    217 235
             if not properties.is_muc_pm:
    

  • gajim/groupchat_control.py
    ... ... @@ -55,7 +55,6 @@
    55 55
     from gajim.common.const import AvatarSize
    
    56 56
     
    
    57 57
     from gajim.common.i18n import _
    
    58
    -from gajim.common.const import Chatstate
    
    59 58
     from gajim.common.const import MUCJoinedState
    
    60 59
     from gajim.common.structs import OutgoingMessage
    
    61 60
     
    
    ... ... @@ -193,43 +192,12 @@ def __init__(self, parent_win, contact, muc_data, acct):
    193 192
     
    
    194 193
             self.xml.settings_menu.set_menu_model(self.control_menu)
    
    195 194
     
    
    196
    -        # pylint: disable=line-too-long
    
    197
    -        self.register_events([
    
    198
    -            ('muc-creation-failed', ged.GUI1, self._on_muc_creation_failed),
    
    199
    -            ('muc-joined', ged.GUI1, self._on_muc_joined),
    
    200
    -            ('muc-join-failed', ged.GUI1, self._on_muc_join_failed),
    
    201
    -            ('muc-user-joined', ged.GUI1, self._on_user_joined),
    
    202
    -            ('muc-user-left', ged.GUI1, self._on_user_left),
    
    203
    -            ('muc-nickname-changed', ged.GUI1, self._on_nickname_changed),
    
    204
    -            ('muc-self-presence', ged.GUI1, self._on_self_presence),
    
    205
    -            ('muc-self-kicked', ged.GUI1, self._on_self_kicked),
    
    206
    -            ('muc-user-affiliation-changed', ged.GUI1, self._on_affiliation_changed),
    
    207
    -            ('muc-user-status-show-changed', ged.GUI1, self._on_status_show_changed),
    
    208
    -            ('muc-user-role-changed', ged.GUI1, self._on_role_changed),
    
    209
    -            ('muc-destroyed', ged.GUI1, self._on_destroyed),
    
    210
    -            ('muc-presence-error', ged.GUI1, self._on_presence_error),
    
    211
    -            ('muc-password-required', ged.GUI1, self._on_password_required),
    
    212
    -            ('muc-config-changed', ged.GUI1, self._on_config_changed),
    
    213
    -            ('muc-subject', ged.GUI1, self._on_subject),
    
    214
    -            ('muc-captcha-challenge', ged.GUI1, self._on_captcha_challenge),
    
    215
    -            ('muc-captcha-error', ged.GUI1, self._on_captcha_error),
    
    216
    -            ('muc-voice-request', ged.GUI1, self._on_voice_request),
    
    217
    -            ('muc-disco-update', ged.GUI1, self._on_disco_update),
    
    218
    -            ('muc-configuration-finished', ged.GUI1, self._on_configuration_finished),
    
    219
    -            ('muc-configuration-failed', ged.GUI1, self._on_configuration_failed),
    
    220
    -            ('gc-message-received', ged.GUI1, self._on_gc_message_received),
    
    221
    -            ('mam-decrypted-message-received', ged.GUI1, self._on_mam_decrypted_message_received),
    
    222
    -            ('update-room-avatar', ged.GUI1, self._on_update_room_avatar),
    
    223
    -            ('decrypted-message-received', ged.GUI2, self._on_decrypted_message_received),
    
    224
    -            ('message-sent', ged.OUT_POSTCORE, self._on_message_sent),
    
    225
    -            ('message-error', ged.GUI1, self._on_message_error),
    
    226
    -            ('bookmarks-received', ged.GUI2, self._on_bookmarks_received),
    
    227
    -        ])
    
    228
    -
    
    229 195
             app.settings.connect_signal('gc_print_join_left_default', self.update_actions)
    
    230 196
             app.settings.connect_signal('gc_print_status_default', self.update_actions)
    
    231 197
     
    
    232
    -        # pylint: enable=line-too-long
    
    198
    +        self.register_events([
    
    199
    +            ('bookmarks-received', ged.GUI1, self._on_bookmarks_received),
    
    200
    +        ])
    
    233 201
     
    
    234 202
             self.is_connected = False
    
    235 203
             # disable win, we are not connected yet
    
    ... ... @@ -491,8 +459,7 @@ def _show_page(self, name):
    491 459
         def _get_current_page(self):
    
    492 460
             return self.xml.stack.get_visible_child_name()
    
    493 461
     
    
    494
    -    @event_filter(['account', 'room_jid'])
    
    495
    -    def _on_disco_update(self, _event):
    
    462
    +    def _on_muc_disco_update(self, _event):
    
    496 463
             if self.parent_win is None:
    
    497 464
                 return
    
    498 465
             self.update_actions()
    
    ... ... @@ -802,15 +769,10 @@ def draw_banner_text(self):
    802 769
         def _on_update_room_avatar(self, event):
    
    803 770
             self._update_avatar()
    
    804 771
     
    
    805
    -    @event_filter(['account'])
    
    806 772
         def _on_bookmarks_received(self, _event):
    
    807
    -        if self.parent_win is None:
    
    808
    -            return
    
    809
    -        self.parent_win.redraw_tab(self)
    
    810 773
             self.draw_banner_text()
    
    811 774
     
    
    812
    -    @event_filter(['account', 'room_jid'])
    
    813
    -    def _on_voice_request(self, event):
    
    775
    +    def _on_muc_voice_request(self, event):
    
    814 776
             def on_approve():
    
    815 777
                 con = app.connections[self.account]
    
    816 778
                 con.get_module('MUC').approve_voice_request(self.room_jid,
    
    ... ... @@ -826,8 +788,7 @@ def on_approve():
    826 788
                                    callback=on_approve)],
    
    827 789
                 modal=False).show()
    
    828 790
     
    
    829
    -    @event_filter(['account'])
    
    830
    -    def _on_mam_decrypted_message_received(self, event):
    
    791
    +    def _on_mam_message_received(self, event):
    
    831 792
             if not event.properties.type.is_groupchat:
    
    832 793
                 return
    
    833 794
             if event.archive_jid != self.room_jid:
    
    ... ... @@ -839,7 +800,6 @@ def _on_mam_decrypted_message_received(self, event):
    839 800
                              message_id=event.properties.id,
    
    840 801
                              additional_data=event.additional_data)
    
    841 802
     
    
    842
    -    @event_filter(['account', 'room_jid'])
    
    843 803
         def _on_gc_message_received(self, event):
    
    844 804
             if event.properties.muc_nickname is None:
    
    845 805
                 # message from server
    
    ... ... @@ -1036,8 +996,7 @@ def needs_visual_notification(self, text):
    1036 996
                     found_here = text.find(special_word, start)
    
    1037 997
             return False
    
    1038 998
     
    
    1039
    -    @event_filter(['account', 'room_jid'])
    
    1040
    -    def _on_subject(self, event):
    
    999
    +    def _on_muc_subject(self, event):
    
    1041 1000
             if self.subject == event.subject or event.is_fake:
    
    1042 1001
                 # Probably a rejoin, we already showed that subject
    
    1043 1002
                 return
    
    ... ... @@ -1055,8 +1014,7 @@ def _on_subject(self, event):
    1055 1014
                     self._muc_data.state != MUCJoinedState.JOINING):
    
    1056 1015
                 self.add_info_message(text)
    
    1057 1016
     
    
    1058
    -    @event_filter(['account', 'room_jid'])
    
    1059
    -    def _on_config_changed(self, event):
    
    1017
    +    def _on_muc_config_changed(self, event):
    
    1060 1018
             # http://www.xmpp.org/extensions/xep-0045.html#roomconfig-notify
    
    1061 1019
             changes = []
    
    1062 1020
             if StatusCode.SHOWING_UNAVAILABLE in event.status_codes:
    
    ... ... @@ -1094,8 +1052,7 @@ def _on_config_changed(self, event):
    1094 1052
             for change in changes:
    
    1095 1053
                 self.add_info_message(change)
    
    1096 1054
     
    
    1097
    -    @event_filter(['account'])
    
    1098
    -    def _on_decrypted_message_received(self, event):
    
    1055
    +    def _on_message_received(self, event):
    
    1099 1056
             if not event.properties.jid.bare_match(self.room_jid):
    
    1100 1057
                 return
    
    1101 1058
     
    
    ... ... @@ -1113,16 +1070,12 @@ def _on_decrypted_message_received(self, event):
    1113 1070
                                         msg_log_id=event.msg_log_id,
    
    1114 1071
                                         displaymarking=event.displaymarking)
    
    1115 1072
     
    
    1116
    -    @event_filter(['account'])
    
    1117
    -    def _nec_our_status(self, event):
    
    1073
    +    def _on_our_show(self, event):
    
    1118 1074
             client = app.get_client(event.account)
    
    1119 1075
             if (event.show == 'offline' and
    
    1120 1076
                     not client.state.is_reconnect_scheduled):
    
    1121 1077
                 self.got_disconnected()
    
    1122 1078
     
    
    1123
    -        if self.parent_win:
    
    1124
    -            self.parent_win.redraw_tab(self)
    
    1125
    -
    
    1126 1079
         @event_filter(['account'])
    
    1127 1080
         def _nec_ping(self, event):
    
    1128 1081
             if not event.contact.is_groupchat:
    
    ... ... @@ -1163,8 +1116,7 @@ def send_pm(self, nick, message=None):
    1163 1116
             if message is not None:
    
    1164 1117
                 ctrl.send_message(message)
    
    1165 1118
     
    
    1166
    -    @event_filter(['account', 'room_jid'])
    
    1167
    -    def _on_self_presence(self, event):
    
    1119
    +    def _on_muc_self_presence(self, event):
    
    1168 1120
             nick = event.properties.muc_nickname
    
    1169 1121
             status_codes = event.properties.muc_status_codes or []
    
    1170 1122
     
    
    ... ... @@ -1189,20 +1141,17 @@ def _on_self_presence(self, event):
    1189 1141
             # Update Actions
    
    1190 1142
             self.update_actions()
    
    1191 1143
     
    
    1192
    -    @event_filter(['account', 'room_jid'])
    
    1193
    -    def _on_configuration_finished(self, _event):
    
    1144
    +    def _on_muc_configuration_finished(self, _event):
    
    1194 1145
             self.got_connected()
    
    1195 1146
             self._show_page('groupchat')
    
    1196 1147
             self.add_info_message(_('A new group chat has been created'))
    
    1197 1148
     
    
    1198
    -    @event_filter(['account', 'room_jid'])
    
    1199
    -    def _on_configuration_failed(self, event):
    
    1149
    +    def _on_muc_configuration_failed(self, event):
    
    1200 1150
             self.xml.error_heading.set_text(_('Failed to Configure Group Chat'))
    
    1201 1151
             self.xml.error_label.set_text(to_user_string(event.error))
    
    1202 1152
             self._show_page('error')
    
    1203 1153
     
    
    1204
    -    @event_filter(['account', 'room_jid'])
    
    1205
    -    def _on_nickname_changed(self, event):
    
    1154
    +    def _on_muc_nickname_changed(self, event):
    
    1206 1155
             nick = event.properties.muc_nickname
    
    1207 1156
             new_nick = event.properties.muc_user.nick
    
    1208 1157
             if event.properties.is_muc_self_presence:
    
    ... ... @@ -1225,7 +1174,7 @@ def _on_nickname_changed(self, event):
    1225 1174
             self.roster.add_contact(new_nick)
    
    1226 1175
     
    
    1227 1176
         @event_filter(['account', 'room_jid'])
    
    1228
    -    def _on_status_show_changed(self, event):
    
    1177
    +    def _on_muc_user_status_show_changed(self, event):
    
    1229 1178
             nick = event.properties.muc_nickname
    
    1230 1179
             status = event.properties.status
    
    1231 1180
             status = '' if status is None else ' - %s' % status
    
    ... ... @@ -1246,8 +1195,7 @@ def _on_status_show_changed(self, event):
    1246 1195
             self.add_status_message(message)
    
    1247 1196
             self.roster.draw_contact(nick)
    
    1248 1197
     
    
    1249
    -    @event_filter(['account', 'room_jid'])
    
    1250
    -    def _on_affiliation_changed(self, event):
    
    1198
    +    def _on_muc_affiliation_changed(self, event):
    
    1251 1199
             affiliation = helpers.get_uf_affiliation(
    
    1252 1200
                 event.properties.affiliation)
    
    1253 1201
             nick = event.properties.muc_nickname
    
    ... ... @@ -1277,8 +1225,7 @@ def _on_affiliation_changed(self, event):
    1277 1225
             self.roster.add_contact(nick)
    
    1278 1226
             self.update_actions()
    
    1279 1227
     
    
    1280
    -    @event_filter(['account', 'room_jid'])
    
    1281
    -    def _on_role_changed(self, event):
    
    1228
    +    def _on_muc_user_role_changed(self, event):
    
    1282 1229
             role = helpers.get_uf_role(event.properties.role)
    
    1283 1230
             nick = event.properties.muc_nickname
    
    1284 1231
             reason = event.properties.muc_user.reason
    
    ... ... @@ -1305,8 +1252,7 @@ def _on_role_changed(self, event):
    1305 1252
             self.roster.add_contact(nick)
    
    1306 1253
             self.update_actions()
    
    1307 1254
     
    
    1308
    -    @event_filter(['account', 'room_jid'])
    
    1309
    -    def _on_self_kicked(self, event):
    
    1255
    +    def _on_muc_self_kicked(self, event):
    
    1310 1256
             status_codes = event.properties.muc_status_codes or []
    
    1311 1257
     
    
    1312 1258
             reason = event.properties.muc_user.reason
    
    ... ... @@ -1363,8 +1309,7 @@ def _on_self_kicked(self, event):
    1363 1309
             # Update Actions
    
    1364 1310
             self.update_actions()
    
    1365 1311
     
    
    1366
    -    @event_filter(['account', 'room_jid'])
    
    1367
    -    def _on_user_left(self, event):
    
    1312
    +    def _on_muc_user_left(self, event):
    
    1368 1313
             status_codes = event.properties.muc_status_codes or []
    
    1369 1314
             nick = event.properties.muc_nickname
    
    1370 1315
     
    
    ... ... @@ -1422,24 +1367,20 @@ def _on_user_left(self, event):
    1422 1367
             self.roster.remove_contact(nick)
    
    1423 1368
             self.roster.draw_groups()
    
    1424 1369
     
    
    1425
    -    @event_filter(['account', 'room_jid'])
    
    1426 1370
         def _on_muc_joined(self, _event):
    
    1427 1371
             self.got_connected()
    
    1428 1372
             self._show_page('groupchat')
    
    1429 1373
     
    
    1430
    -    @event_filter(['account', 'room_jid'])
    
    1431
    -    def _on_user_joined(self, event):
    
    1374
    +    def _on_muc_user_joined(self, event):
    
    1432 1375
             nick = event.properties.muc_nickname
    
    1433 1376
             self.roster.add_contact(nick)
    
    1434 1377
     
    
    1435 1378
             if self.is_connected and self.contact.settings.get('print_join_left'):
    
    1436 1379
                 self.add_info_message(_('%s has joined the group chat') % nick)
    
    1437 1380
     
    
    1438
    -    @event_filter(['account', 'room_jid'])
    
    1439
    -    def _on_password_required(self, _event):
    
    1381
    +    def _on_muc_password_required(self, _event):
    
    1440 1382
             self._show_page('password')
    
    1441 1383
     
    
    1442
    -    @event_filter(['account', 'room_jid'])
    
    1443 1384
         def _on_muc_join_failed(self, event):
    
    1444 1385
             con = app.connections[self.account]
    
    1445 1386
             if con.get_module('Bookmarks').is_bookmark(self.room_jid):
    
    ... ... @@ -1449,19 +1390,16 @@ def _on_muc_join_failed(self, event):
    1449 1390
             self.xml.error_label.set_text(to_user_string(event.error))
    
    1450 1391
             self._show_page('error')
    
    1451 1392
     
    
    1452
    -    @event_filter(['account', 'room_jid'])
    
    1453 1393
         def _on_muc_creation_failed(self, event):
    
    1454 1394
             self.xml.error_heading.set_text(_('Failed to Create Group Chat'))
    
    1455 1395
             self.xml.error_label.set_text(to_user_string(event.error))
    
    1456 1396
             self._show_page('error')
    
    1457 1397
     
    
    1458
    -    @event_filter(['account', 'room_jid'])
    
    1459
    -    def _on_presence_error(self, event):
    
    1398
    +    def _on_muc_presence_error(self, event):
    
    1460 1399
             error_message = to_user_string(event.properties.error)
    
    1461 1400
             self.add_info_message('Error: %s' % error_message)
    
    1462 1401
     
    
    1463
    -    @event_filter(['account', 'room_jid'])
    
    1464
    -    def _on_destroyed(self, event):
    
    1402
    +    def _on_muc_destroyed(self, event):
    
    1465 1403
             destroyed = event.properties.muc_destroyed
    
    1466 1404
     
    
    1467 1405
             reason = destroyed.reason
    
    ... ... @@ -1958,8 +1896,7 @@ def _on_password_changed(self, entry, _param):
    1958 1896
         def _on_password_cancel_clicked(self, _button=None):
    
    1959 1897
             self._close_control()
    
    1960 1898
     
    
    1961
    -    @event_filter(['account', 'room_jid'])
    
    1962
    -    def _on_captcha_challenge(self, event):
    
    1899
    +    def _on_muc_captcha_challenge(self, event):
    
    1963 1900
             self._remove_captcha_request()
    
    1964 1901
     
    
    1965 1902
             options = {'no-scrolling': True,
    
    ... ... @@ -1978,8 +1915,7 @@ def _on_captcha_challenge(self, event):
    1978 1915
             self._show_page('captcha')
    
    1979 1916
             self._captcha_request.focus_first_entry()
    
    1980 1917
     
    
    1981
    -    @event_filter(['account', 'room_jid'])
    
    1982
    -    def _on_captcha_error(self, event):
    
    1918
    +    def _on_muc_captcha_error(self, event):
    
    1983 1919
             self.xml.captcha_error_label.set_text(event.error_text)
    
    1984 1920
             self._show_page('captcha-error')
    
    1985 1921
     
    

  • gajim/gtk/chat_list.py
    ... ... @@ -14,7 +14,7 @@
    14 14
     from .tooltips import RosterTooltip
    
    15 15
     from .util import get_builder
    
    16 16
     
    
    17
    -log = logging.getLogger('gajim.gtk.chatlist')
    
    17
    +log = logging.getLogger('gajim.gui.chatlist')
    
    18 18
     
    
    19 19
     
    
    20 20
     class ChatList(Gtk.ListBox):
    
    ... ... @@ -121,9 +121,17 @@ def update_time(self):
    121 121
             for _, row in self._chats.items():
    
    122 122
                 row.update_time()
    
    123 123
     
    
    124
    -    def update(self, event):
    
    124
    +    def process_event(self, event):
    
    125
    +        if event.name == 'message-received':
    
    126
    +            self._on_message_received(event)
    
    127
    +        else:
    
    128
    +            log.warning('Unhandled Event: %s', event.name)
    
    129
    +
    
    130
    +    def _on_message_received(self, event):
    
    125 131
             row = self._chats.get((event.account, event.jid))
    
    126
    -        row.add_unread()
    
    132
    +        if not (row.is_selected() and
    
    133
    +                self.get_toplevel().get_property('has-toplevel-focus')):
    
    134
    +            row.add_unread()
    
    127 135
             row.set_last_message_text('Me', event.msgtxt)
    
    128 136
     
    
    129 137
     
    

  • gajim/gtk/chat_list_stack.py
    ... ... @@ -121,6 +121,10 @@ def contains_chat(self, account, jid, workspace_id=None):
    121 121
             chat_list = self._chat_lists[workspace_id]
    
    122 122
             return chat_list.contains_chat(account, jid)
    
    123 123
     
    
    124
    -    def update(self, event):
    
    125
    -        chat_list = self._find_chat(event.account, event.jid)
    
    126
    -        chat_list.update(event)
    124
    +    def process_event(self, event):
    
    125
    +        if hasattr(event, 'jid'):
    
    126
    +            jid = event.jid
    
    127
    +        else:
    
    128
    +            jid = event.room_jid
    
    129
    +        chat_list = self._find_chat(event.account, jid)
    
    130
    +        chat_list.process_event(event)

  • gajim/gtk/chat_stack.py
    1 1
     
    
    2
    +import logging
    
    2 3
     
    
    3 4
     from gi.repository import Gtk
    
    4 5
     
    
    ... ... @@ -9,6 +10,9 @@
    9 10
     from gajim.common.i18n import _
    
    10 11
     
    
    11 12
     
    
    13
    +log = logging.getLogger('gajim.gui.chatstack')
    
    14
    +
    
    15
    +
    
    12 16
     class ChatStack(Gtk.Stack):
    
    13 17
         def __init__(self):
    
    14 18
             Gtk.Stack.__init__(self)
    
    ... ... @@ -84,19 +88,10 @@ def show_chat(self, account, jid):
    84 88
         def clear(self):
    
    85 89
             self.set_visible_child_name('empty')
    
    86 90
     
    
    87
    -    def update(self, event):
    
    88
    -        control = self.get_control(event.account, event.jid)
    
    89
    -
    
    90
    -        typ = ''
    
    91
    -        if event.properties.is_sent_carbon:
    
    92
    -            typ = 'out'
    
    93
    -
    
    94
    -        control.add_message(event.msgtxt,
    
    95
    -                            typ,
    
    96
    -                            tim=event.properties.timestamp,
    
    97
    -                            subject=event.properties.subject,
    
    98
    -                            displaymarking=event.displaymarking,
    
    99
    -                            msg_log_id=event.msg_log_id,
    
    100
    -                            message_id=event.properties.id,
    
    101
    -                            correct_id=event.correct_id,
    
    102
    -                            additional_data=event.additional_data)
    91
    +    def process_event(self, event):
    
    92
    +        if hasattr(event, 'jid'):
    
    93
    +            jid = event.jid
    
    94
    +        else:
    
    95
    +            jid = event.room_jid
    
    96
    +        control = self.get_control(event.account, jid)
    
    97
    +        control.process_event(event)

  • gajim/gtk/main.py
    ... ... @@ -18,12 +18,15 @@
    18 18
     from gajim.gui.dialogs import DialogButton
    
    19 19
     from gajim.gui.dialogs import ConfirmationDialog
    
    20 20
     
    
    21
    +from gajim.common.nec import EventHelper
    
    22
    +
    
    21 23
     from .util import open_window
    
    22 24
     
    
    23 25
     
    
    24
    -class MainWindow(Gtk.ApplicationWindow):
    
    26
    +class MainWindow(Gtk.ApplicationWindow, EventHelper):
    
    25 27
         def __init__(self):
    
    26 28
             Gtk.ApplicationWindow.__init__(self)
    
    29
    +        EventHelper.__init__(self)
    
    27 30
             self.set_application(app.app)
    
    28 31
             self.set_position(Gtk.WindowPosition.CENTER)
    
    29 32
             self.set_title('Gajim')
    
    ... ... @@ -62,9 +65,49 @@ def __init__(self):
    62 65
                 'clicked', self._on_start_chat_clicked)
    
    63 66
             self._ui.connect_signals(self)
    
    64 67
     
    
    65
    -        app.ged.register_event_handler('message-received',
    
    66
    -                                       ged.CORE,
    
    67
    -                                       self._on_message_received)
    
    68
    +        # pylint: disable=line-too-long
    
    69
    +        self.register_events([
    
    70
    +            ('nickname-received', ged.GUI1, self._on_event),
    
    71
    +            ('mood-received', ged.GUI1, self._on_event),
    
    72
    +            ('activity-received', ged.GUI1, self._on_event),
    
    73
    +            ('tune-received', ged.GUI1, self._on_event),
    
    74
    +            ('location-received', ged.GUI1, self._on_event),
    
    75
    +            ('update-client-info', ged.GUI1, self._on_event),
    
    76
    +            ('chatstate-received', ged.GUI1, self._on_event),
    
    77
    +            ('caps-update', ged.GUI1, self._on_event),
    
    78
    +            ('message-sent', ged.OUT_POSTCORE, self._on_event),
    
    79
    +            ('message-received', ged.CORE, self._on_event),
    
    80
    +            ('receipt-received', ged.GUI1, self._on_event),
    
    81
    +            ('displayed-received', ged.GUI1, self._on_event),
    
    82
    +            ('message-error', ged.GUI1, self._on_event),
    
    83
    +            ('zeroconf-error', ged.GUI1, self._on_event),
    
    84
    +            ('update-roster-avatar', ged.GUI1, self._on_event),
    
    85
    +            ('muc-creation-failed', ged.GUI1, self._on_event),
    
    86
    +            ('muc-joined', ged.GUI1, self._on_event),
    
    87
    +            ('muc-join-failed', ged.GUI1, self._on_event),
    
    88
    +            ('muc-user-joined', ged.GUI1, self._on_event),
    
    89
    +            ('muc-user-left', ged.GUI1, self._on_event),
    
    90
    +            ('muc-nickname-changed', ged.GUI1, self._on_event),
    
    91
    +            ('muc-self-presence', ged.GUI1, self._on_event),
    
    92
    +            ('muc-self-kicked', ged.GUI1, self._on_event),
    
    93
    +            ('muc-user-affiliation-changed', ged.GUI1, self._on_event),
    
    94
    +            ('muc-user-status-show-changed', ged.GUI1, self._on_event),
    
    95
    +            ('muc-user-role-changed', ged.GUI1, self._on_event),
    
    96
    +            ('muc-destroyed', ged.GUI1, self._on_event),
    
    97
    +            ('muc-presence-error', ged.GUI1, self._on_event),
    
    98
    +            ('muc-password-required', ged.GUI1, self._on_event),
    
    99
    +            ('muc-config-changed', ged.GUI1, self._on_event),
    
    100
    +            ('muc-subject', ged.GUI1, self._on_event),
    
    101
    +            ('muc-captcha-challenge', ged.GUI1, self._on_event),
    
    102
    +            ('muc-captcha-error', ged.GUI1, self._on_event),
    
    103
    +            ('muc-voice-request', ged.GUI1, self._on_event),
    
    104
    +            ('muc-disco-update', ged.GUI1, self._on_event),
    
    105
    +            ('muc-configuration-finished', ged.GUI1, self._on_event),
    
    106
    +            ('muc-configuration-failed', ged.GUI1, self._on_event),
    
    107
    +            ('update-room-avatar', ged.GUI1, self._on_event),
    
    108
    +            ('message-sent', ged.OUT_POSTCORE, self._on_event),
    
    109
    +            ('message-error', ged.GUI1, self._on_event),
    
    110
    +        ])
    
    68 111
     
    
    69 112
             self.show_all()
    
    70 113
     
    
    ... ... @@ -241,15 +284,29 @@ def _on_edit_workspace_clicked(self, _button):
    241 284
             open_window('WorkspaceDialog',
    
    242 285
                         workspace_id=self.get_active_workspace())
    
    243 286
     
    
    244
    -    def _on_message_received(self, event):
    
    245
    -        if not self.chat_exists(event.account, event.jid):
    
    246
    -            self.add_chat(event.account, event.jid, 'contact')
    
    287
    +    def _on_event(self, event):
    
    288
    +        if hasattr(event, 'jid'):
    
    289
    +            jid = event.jid
    
    290
    +        else:
    
    291
    +            jid = event.room_jid
    
    292
    +
    
    293
    +        if event.name == 'caps-update':
    
    294
    +            #TODO
    
    295
    +            return
    
    247 296
     
    
    248
    -        if not event.msgtxt:
    
    297
    +        if event.name == 'update-client-info':
    
    298
    +            #TODO
    
    249 299
                 return
    
    250 300
     
    
    251
    -        self._chat_stack.update(event)
    
    252
    -        self._chat_list_stack.update(event)
    
    301
    +        if not self.chat_exists(event.account, jid):
    
    302
    +            if event.name == 'message-received':
    
    303
    +                self.add_chat(event.account, jid, 'contact')
    
    304
    +            else:
    
    305
    +                # No chat is open, dont handle any gui events
    
    306
    +                return
    
    307
    +
    
    308
    +        self._chat_stack.process_event(event)
    
    309
    +        self._chat_list_stack.process_event(event)
    
    253 310
     
    
    254 311
         def quit(self):
    
    255 312
             accounts = list(app.connections.keys())
    

  • gajim/privatechat_control.py
    ... ... @@ -88,13 +88,11 @@ def room_name(self):
    88 88
         def get_our_nick(self):
    
    89 89
             return self.room_ctrl.nick
    
    90 90
     
    
    91
    -    @event_filter(['account'])
    
    92 91
         def _on_caps_update(self, event):
    
    93 92
             if event.fjid != self.gc_contact.get_full_jid():
    
    94 93
                 return
    
    95 94
             self.update_contact()
    
    96 95
     
    
    97
    -    @event_filter(['account'])
    
    98 96
         def _on_nickname_changed(self, event):
    
    99 97
             if event.properties.new_jid != self.gc_contact.get_full_jid():
    
    100 98
                 return