Philipp Hörist pushed to branch master at gajim / gajim
Commits: 9314a054 by Philipp Hörist at 2018-03-24T01:47:03+01:00 Add non-compliant mam:2 MUCs to blacklist
For MUCs on the blacklist we do a deduplication not depending on stanza-id
This patch is only for current Prosody 0.10 stable and the mod_mam_muc module which does not add stanza-id to the messages.
This can be removed once Prosody 0.11 hits or the module is updated
- - - - - af2c66b5 by Philipp Hörist at 2018-03-24T02:36:22+01:00 Improve disabling autoscroll
Add the SHIFT + PAGE_UP keypress Fix catching mouse scroll UP on some systems
- - - - -
5 changed files:
- gajim/chat_control_base.py - gajim/common/config.py - gajim/common/connection_handlers.py - gajim/common/helpers.py - gajim/common/message_archiving.py
Changes:
===================================== gajim/chat_control_base.py ===================================== --- a/gajim/chat_control_base.py +++ b/gajim/chat_control_base.py @@ -596,9 +596,12 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools): valid, entries = self.keymap.get_entries_for_keyval(event.keyval) keycode = entries[0].keycode if (event.get_state() & Gdk.ModifierType.CONTROL_MASK and keycode in ( - self.keycode_c, self.keycode_ins)) or ( - event.get_state() & Gdk.ModifierType.SHIFT_MASK and \ - event.keyval in (Gdk.KEY_Page_Down, Gdk.KEY_Page_Up)): + self.keycode_c, self.keycode_ins)): + return False + + if event.get_state() & Gdk.ModifierType.SHIFT_MASK and \ + event.keyval in (Gdk.KEY_Page_Down, Gdk.KEY_Page_Up): + self._on_scroll(None, event.keyval) return False self.parent_win.notebook.event(event) return True @@ -1224,6 +1227,7 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools): if pos != Gtk.PositionType.BOTTOM: return # Remove all events and set autoscroll True + app.log('autoscroll').info('Autoscroll enabled') self.conv_textview.autoscroll = True if self.resource: jid = self.contact.get_full_jid() @@ -1253,13 +1257,27 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools): self.redraw_after_event_removed(jid)
def _on_scroll(self, widget, event): - # On scrolliung UP disable autoscroll - has_direction, direction = event.get_scroll_direction() - if has_direction and direction == Gdk.ScrollDirection.UP: - # Check if we have a Scrollbar - adjustment = self.conv_scrolledwindow.get_vadjustment() - if adjustment.get_upper() != adjustment.get_page_size(): - self.conv_textview.autoscroll = False + if not self.conv_textview.autoscroll: + # autoscroll is already disabled + return + + if widget is None: + # call from _conv_textview_key_press_event() + # SHIFT + Gdk.KEY_Page_Up + if event != Gdk.KEY_Page_Up: + return + else: + # On scrolliung UP disable autoscroll + # has_direction is on some systems always False + # so we cant use it + has_direction, direction = event.get_scroll_direction() + if direction != Gdk.ScrollDirection.UP: + return + # Check if we have a Scrollbar + adjustment = self.conv_scrolledwindow.get_vadjustment() + if adjustment.get_upper() != adjustment.get_page_size(): + app.log('autoscroll').info('Autoscroll disabled') + self.conv_textview.autoscroll = False
def on_conversation_vadjustment_changed(self, adjustment): self.scroll_to_end()
===================================== gajim/common/config.py ===================================== --- a/gajim/common/config.py +++ b/gajim/common/config.py @@ -305,6 +305,7 @@ class Config: 'use_keyring': [opt_bool, True, _('If True, Gajim will use the Systems Keyring to store account passwords.')], 'pgp_encoding': [ opt_str, '', _('Sets the encoding used by python-gnupg'), True], 'remote_commands': [opt_bool, False, _('If True, Gajim will execute XEP-0146 Commands.')], + 'mam_blacklist': [opt_str, '', _('All non-compliant MAM Groupchats')], }, {})
__options_per_key = {
===================================== gajim/common/connection_handlers.py ===================================== --- a/gajim/common/connection_handlers.py +++ b/gajim/common/connection_handlers.py @@ -1067,9 +1067,17 @@ class ConnectionHandlersBase: conn=self, msg_obj=obj, stanza_id=obj.unique_id)) return True
+ def _check_for_mam_compliance(self, room_jid, stanza_id): + namespace = muc_caps_cache.get_mam_namespace(room_jid) + if stanza_id is None and namespace == nbxmpp.NS_MAM_2: + helpers.add_to_mam_blacklist(room_jid) + def _nec_gc_message_received(self, obj): if obj.conn.name != self.name: return + + self._check_for_mam_compliance(obj.jid, obj.unique_id) + if (app.config.should_log(obj.conn.name, obj.jid) and obj.msgtxt and obj.nick): # if not obj.nick, it means message comes from room itself
===================================== gajim/common/helpers.py ===================================== --- a/gajim/common/helpers.py +++ b/gajim/common/helpers.py @@ -1626,3 +1626,21 @@ def get_emoticon_theme_path(theme): emoticons_user_path = os.path.join(app.MY_EMOTS_PATH, theme) if os.path.exists(emoticons_user_path): return emoticons_user_path + +def add_to_mam_blacklist(jid): + config_value = app.config.get('mam_blacklist') + if not config_value: + config_value = [jid] + else: + if jid in config_value: + return + config_value = config_value.split(',') + config_value.append(jid) + log.warning('Found not-compliant MUC. %s added to MAM Blacklist', jid) + app.config.set('mam_blacklist', ','.join(config_value)) + +def get_mam_blacklist(): + config_value = app.config.get('mam_blacklist') + if not config_value: + return [] + return config_value.split(',')
===================================== gajim/common/message_archiving.py ===================================== --- a/gajim/common/message_archiving.py +++ b/gajim/common/message_archiving.py @@ -25,6 +25,7 @@ import nbxmpp
from gajim.common import app from gajim.common import ged +from gajim.common import helpers from gajim.common.logger import KindConstant, JIDConstant from gajim.common.const import ArchiveState from gajim.common.caps_cache import muc_caps_cache @@ -205,7 +206,8 @@ class ConnectionArchive313: if obj.groupchat: namespace = muc_caps_cache.get_mam_namespace(obj.room_jid)
- if namespace != nbxmpp.NS_MAM_2: + blacklisted = obj.room_jid in helpers.get_mam_blacklist() + if namespace != nbxmpp.NS_MAM_2 or blacklisted: # Fallback duplicate search without stanza-id duplicate = app.logger.search_for_duplicate( self.name, obj.with_, obj.timestamp, obj.msgtxt)
View it on GitLab: https://dev.gajim.org/gajim/gajim/compare/4e1a9db6ccd71d095520a74ed1f603099d...
--- View it on GitLab: https://dev.gajim.org/gajim/gajim/compare/4e1a9db6ccd71d095520a74ed1f603099d... You're receiving this email because of your account on dev.gajim.org.