Skip to content
Snippets Groups Projects
Commit a907edee authored by Philipp Hörist's avatar Philipp Hörist
Browse files

More ChatControl changes

parent 892630bb
No related branches found
No related tags found
No related merge requests found
......@@ -42,7 +42,6 @@
from gajim.common import app
from gajim.common import helpers
from gajim.common import i18n
from gajim.common.i18n import _
from gajim.common.helpers import AdditionalDataDict
from gajim.common.helpers import open_uri
......@@ -67,7 +66,6 @@
from gajim.gui.util import format_tune
from gajim.gui.util import format_location
from gajim.gui.util import get_activity_icon_name
from gajim.gui.util import make_href_markup
from gajim.gui.const import ControlType
from gajim.command_system.implementation.hosts import ChatCommands
......@@ -187,20 +185,6 @@ def __init__(self, account, jid):
# List of waiting infobar messages
self.info_bar_queue = []
self.subscribe_events()
# if not session:
# # Don't use previous session if we want to a specific resource
# # and it's not the same
# if not resource:
# resource = contact.resource
# session = self._client.find_controlless_session(
# self.contact.jid, resource)
# if session:
# session.control = self
# self.session = session
self.setup_seclabel()
self.add_actions()
self.update_ui()
......@@ -264,24 +248,15 @@ def add_actions(self):
app.window.add_action(act)
def update_actions(self):
win = app.window
online = app.account_is_connected(self.account)
# Add to roster
# TODO
# if not isinstance(self.contact, GC_Contact) \
# and _('Not in contact list') in self.contact.groups and \
# self._client.roster_supported and online:
# win.lookup_action(
# 'add-to-roster-' + self.control_id).set_enabled(True)
# else:
# win.lookup_action(
# 'add-to-roster-' + self.control_id).set_enabled(False)
if self.type.is_chat:
self._get_action('add-to-roster-').set_enabled(
not self.contact.is_in_roster)
# Block contact
win.lookup_action(
'block-contact-' + self.control_id).set_enabled(
online and self._client.get_module('Blocking').supported)
self._get_action('block-contact-').set_enabled(
online and self._client.get_module('Blocking').supported)
# Jingle AV detection
if (self.contact.supports(Namespace.JINGLE_ICE_UDP) and
......@@ -297,31 +272,28 @@ def update_actions(self):
self.jingle['audio'].available = False
self.jingle['video'].available = False
win.lookup_action(f'start-call-{self.control_id}').set_enabled(
self._get_action(f'start-call-').set_enabled(
online and (self.jingle['audio'].available or
self.jingle['video'].available))
# Send message
has_text = self.msg_textview.has_text()
win.lookup_action(
f'send-message-{self.control_id}').set_enabled(online and has_text)
self._get_action('send-message-').set_enabled(online and has_text)
# Send file (HTTP File Upload)
httpupload = win.lookup_action(
'send-file-httpupload-' + self.control_id)
httpupload.set_enabled(
online and self._client.get_module('HTTPUpload').available)
httpupload = self._get_action('send-file-httpupload-')
httpupload.set_enabled(online and
self._client.get_module('HTTPUpload').available)
# Send file (Jingle)
jingle_support = self.contact.supports(Namespace.JINGLE_FILE_TRANSFER_5)
jingle_conditions = jingle_support and self.contact.is_available
jingle = win.lookup_action('send-file-jingle-' + self.control_id)
jingle = self._get_action('send-file-jingle-')
jingle.set_enabled(online and jingle_conditions)
# Send file
win.lookup_action(
'send-file-' + self.control_id).set_enabled(
jingle.get_enabled() or httpupload.get_enabled())
self._get_action('send-file-').set_enabled(jingle.get_enabled() or
httpupload.get_enabled())
# Set File Transfer Button tooltip
if online and (httpupload.get_enabled() or jingle.get_enabled()):
......@@ -333,24 +305,17 @@ def update_actions(self):
# Chat markers
state = GLib.Variant.new_boolean(
self.contact.settings.get('send_marker'))
win.lookup_action(
f'send-marker-{self.control_id}').change_state(state)
self._get_action('send-marker-').change_state(state)
# Convert to GC
if app.settings.get_account_setting(self.account, 'is_zeroconf'):
win.lookup_action(
'invite-contacts-' + self.control_id).set_enabled(False)
self._get_action('invite-contacts-').set_enabled(False)
else:
if self.contact.supports(Namespace.MUC) and online:
win.lookup_action(
'invite-contacts-' + self.control_id).set_enabled(True)
else:
win.lookup_action(
'invite-contacts-' + self.control_id).set_enabled(False)
enabled = self.contact.supports(Namespace.MUC) and online
self._get_action('invite-contacts-').set_enabled(enabled)
# Information
win.lookup_action(
'information-' + self.control_id).set_enabled(online)
self._get_action('information-').set_enabled(online)
def remove_actions(self):
super().remove_actions()
......@@ -375,8 +340,7 @@ def delegate_action(self, action):
return res
if action == 'show-contact-info':
app.window.lookup_action(
'information-%s' % self.control_id).activate()
self._get_action('information-').activate()
return Gdk.EVENT_STOP
if action == 'send-file':
......@@ -385,8 +349,7 @@ def delegate_action(self, action):
app.interface.roster.tree.grab_focus()
return Gdk.EVENT_PROPAGATE
app.window.lookup_action(
'send-file-%s' % self.control_id).activate()
self._get_action('send-file-').activate()
return Gdk.EVENT_STOP
return Gdk.EVENT_PROPAGATE
......@@ -414,20 +377,6 @@ def _on_send_marker(self, action, param):
action.set_state(param)
self.contact.settings.set('send_marker', param.get_boolean())
def subscribe_events(self):
"""
Register listeners to the events class
"""
app.events.event_added_subscribe(self.on_event_added)
app.events.event_removed_subscribe(self.on_event_removed)
def unsubscribe_events(self):
"""
Unregister listeners to the events class
"""
app.events.event_added_unsubscribe(self.on_event_added)
app.events.event_removed_unsubscribe(self.on_event_removed)
def _update_toolbar(self):
# Formatting
# TODO: find out what encryption allows for xhtml and which not
......@@ -1062,8 +1011,6 @@ def shutdown(self):
# instance object
app.plugin_manager.remove_gui_extension_point('chat_control', self)
self.unsubscribe_events()
self.remove_actions()
# Send 'gone' chatstate
......@@ -1077,12 +1024,6 @@ def shutdown(self):
super(ChatControl, self).shutdown()
app.check_finalize(self)
def minimizable(self):
return False
def safe_shutdown(self):
return False
def allow_shutdown(self, method, on_yes, on_no, _on_minimize):
time_ = app.last_message_time[self.account][self.contact.jid]
# 2 seconds
......@@ -1395,46 +1336,3 @@ def on_event_added(self, event):
_('Connection with peer cannot be established.'))
elif event.type_ == 'gc-invitation':
self._get_gc_invitation(event)
def on_event_removed(self, event_list):
"""
Called when one or more events are removed from the event list
"""
for ev in event_list:
if ev.account != self.account:
continue
if ev.jid != self.contact.jid:
continue
if ev.type_ not in ('file-request',
'file-completed',
'file-error',
'file-stopped',
'file-request-error',
'file-send-error',
'gc-invitation',
'jingle-incoming'):
continue
i = 0
removed = False
for ib_msg in self.info_bar_queue:
if ev.type_ == 'gc-invitation':
if ev.muc == ib_msg[2][0]:
self.info_bar_queue.remove(ib_msg)
removed = True
elif ev.type_ == 'jingle-incoming':
# TODO: Need to be more specific here?
self.info_bar_queue.remove(ib_msg)
removed = True
else: # file-*
if ib_msg[2] == ev.file_props:
self.info_bar_queue.remove(ib_msg)
removed = True
if removed:
if i == 0:
# We are removing the one currently displayed
self.info_bar.set_no_show_all(True)
self.info_bar.hide()
# show next one?
GLib.idle_add(self._info_bar_show_message)
break
i += 1
......@@ -267,6 +267,9 @@ def __init__(self, widget_name, account, jid):
def _connect_contact_signals(self):
raise NotImplementedError
def _get_action(self, name):
return app.window.lookup_action(name + self.control_id)
def process_event(self, event):
method_name = event.name.replace('-', '_')
method_name = f'_on_{method_name}'
......
......@@ -416,10 +416,6 @@ def _is_subject_change_allowed(self):
return False
return self.disco_info.muc_subjectmod or False
def _get_action(self, name):
win = app.window
return win.lookup_action(name + self.control_id)
def _show_page(self, name):
transition = Gtk.StackTransitionType.SLIDE_DOWN
if name == 'groupchat':
......
......@@ -161,18 +161,7 @@ def send_message(self, message, xhtml=None, process_commands=True,
attention=attention)
def update_ui(self):
if not self.contact.is_available:
self.got_disconnected()
else:
self.got_connected()
ChatControl.update_ui(self)
def _on_user_avatar_update(self, *args):
self._update_avatar()
def got_disconnected(self):
ChatControl.got_disconnected(self)
ChatControl.update_ui(self)
def got_connected(self):
ChatControl.got_connected(self)
ChatControl.update_ui(self)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment