Philipp Hörist pushed to branch master at gajim / gajim
Commits: b23f6158 by lovetox at 2021-12-20T15:28:24+01:00 Merge CommonConnection with ConnectionZeroconf
CommonConnection is only used by zeroconf
- - - - - 20909933 by lovetox at 2021-12-20T15:36:08+01:00 Move zeroconf events into zeroconf module
- - - - -
4 changed files:
- gajim/common/client.py - − gajim/common/connection.py - gajim/common/connection_handlers_events.py - gajim/common/zeroconf/connection_zeroconf.py
Changes:
===================================== gajim/common/client.py ===================================== @@ -44,8 +44,6 @@ from gajim.common.idle import Monitor from gajim.common.i18n import _
-from gajim.common.connection_handlers_events import MessageSentEvent - from gajim.gui.util import open_window
@@ -507,7 +505,7 @@ def _send_message(self, message): message.message_id = self.send_stanza(message.stanza)
app.nec.push_incoming_event( - MessageSentEvent(None, jid=message.jid, **vars(message))) + NetworkEvent('message-sent', jid=message.jid, **vars(message)))
if message.is_groupchat: return
===================================== gajim/common/connection.py deleted ===================================== @@ -1,195 +0,0 @@ -# Copyright (C) 2003-2005 Vincent Hanquez <tab AT snarc.org> -# Copyright (C) 2003-2014 Yann Leboulanger <asterix AT lagaule.org> -# Copyright (C) 2005 Alex Mauer <hawke AT hawkesnest.net> -# Stéphan Kochen <stephan AT kochen.nl> -# Copyright (C) 2005-2006 Dimitur Kirov <dkirov AT gmail.com> -# Travis Shirk <travis AT pobox.com> -# Nikos Kouremenos <kourem AT gmail.com> -# Copyright (C) 2006 Junglecow J <junglecow AT gmail.com> -# Stefan Bethge <stefan AT lanpartei.de> -# Copyright (C) 2006-2008 Jean-Marie Traissard <jim AT lapin.org> -# Copyright (C) 2007 Tomasz Melcer <liori AT exroot.org> -# Julien Pivotto <roidelapluie AT gmail.com> -# Copyright (C) 2007-2008 Stephan Erb <steve-e AT h3c.de> -# Copyright (C) 2008 Brendan Taylor <whateley AT gmail.com> -# Jonathan Schleifer <js-gajim AT webkeks.org> -# -# This file is part of Gajim. -# -# Gajim 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 only. -# -# Gajim 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 Gajim. If not, see http://www.gnu.org/licenses/. - -import time -import logging - -from gajim.common import helpers -from gajim.common import app -from gajim.common import idle -from gajim.common import modules -from gajim.common.nec import NetworkEvent -from gajim.common.const import ClientState - - -log = logging.getLogger('gajim.c.connection') - -SERVICE_START_TLS = 'xmpp-client' -SERVICE_DIRECT_TLS = 'xmpps-client' - -class CommonConnection: - """ - Common connection class, can be derived for normal connection or zeroconf - connection - """ - - def __init__(self, name): - self.name = name - self._modules = {} - self.connection = None # xmpppy ClientCommon instance - self.is_zeroconf = False - self.password = None - self.server_resource = helpers.get_resource(self.name) - self.priority = app.get_priority(name, 'offline') - self.time_to_reconnect = None - self._reconnect_timer_source = None - - self._state = ClientState.DISCONNECTED - self._status = 'offline' - self._status_message = '' - - # If handlers have been registered - self.handlers_registered = False - - self.pep = {} - - self.roster_supported = True - - self._stun_servers = [] # STUN servers of our jabber server - - # Tracks the calls of the connect_machine() method - self._connect_machine_calls = 0 - - self.get_config_values_or_default() - - def _set_state(self, state): - log.info('State: %s', state) - self._state = state - - @property - def state(self): - return self._state - - @property - def status(self): - return self._status - - @property - def status_message(self): - return self._status_message - - def _register_new_handlers(self, con): - for handler in modules.get_handlers(self): - if len(handler) == 5: - name, func, typ, ns, priority = handler - con.RegisterHandler(name, func, typ, ns, priority=priority) - else: - con.RegisterHandler(*handler) - self.handlers_registered = True - - def _unregister_new_handlers(self, con): - if not con: - return - for handler in modules.get_handlers(self): - if len(handler) > 4: - handler = handler[:4] - con.UnregisterHandler(*handler) - self.handlers_registered = False - - def get_module(self, name): - return modules.get(self.name, name) - - def reconnect(self): - """ - To be implemented by derived classes - """ - raise NotImplementedError - - def quit(self, kill_core): - if kill_core and app.account_is_connected(self.name): - self.disconnect(reconnect=False) - - def new_account(self, name, config, sync=False): - """ - To be implemented by derived classes - """ - raise NotImplementedError - - def _on_new_account(self, con=None, con_type=None): - """ - To be implemented by derived classes - """ - raise NotImplementedError - - def _event_dispatcher(self, realm, event, data): - if realm == '': - if event == 'STANZA RECEIVED': - app.nec.push_incoming_event( - NetworkEvent('stanza-received', - conn=self, - stanza_str=str(data))) - elif event == 'DATA SENT': - app.nec.push_incoming_event( - NetworkEvent('stanza-sent', - conn=self, - stanza_str=str(data))) - - def change_status(self, show, msg, auto=False): - if not msg: - msg = '' - - self._status = show - self._status_message = msg - - if self._state.is_disconnected: - if show == 'offline': - return - - self.server_resource = helpers.get_resource(self.name) - self.connect_and_init(show, msg) - return - - if self._state.is_connecting or self._state.is_reconnect_scheduled: - if show == 'offline': - self.disconnect(reconnect=False) - elif self._state.is_reconnect_scheduled: - self.reconnect() - return - - # We are connected - if show == 'offline': - presence = self.get_module('Presence').get_presence( - typ='unavailable', - status=msg, - caps=False) - - self.connection.send(presence, now=True) - self.disconnect(reconnect=False) - return - - idle_time = None - if auto: - if app.is_installed('IDLE') and app.settings.get('autoaway'): - idle_sec = idle.Monitor.get_idle_sec() - idle_time = time.strftime( - '%Y-%m-%dT%H:%M:%SZ', - time.gmtime(time.time() - idle_sec)) - - self._update_status(show, msg, idle_time=idle_time)
===================================== gajim/common/connection_handlers_events.py ===================================== @@ -29,36 +29,6 @@ log = logging.getLogger('gajim.c.connection_handlers_events')
-class PresenceReceivedEvent(nec.NetworkIncomingEvent): - - name = 'presence-received' - - -class OurShowEvent(nec.NetworkIncomingEvent): - - name = 'our-show' - - def init(self): - self.reconnect = False - - -class MessageSentEvent(nec.NetworkIncomingEvent): - - name = 'message-sent' - - -class ConnectionLostEvent(nec.NetworkIncomingEvent): - - name = 'connection-lost' - - def generate(self): - app.nec.push_incoming_event(OurShowEvent( - None, - conn=self.conn, - show='offline')) - return True - - class FileRequestReceivedEvent(nec.NetworkIncomingEvent):
name = 'file-request-received'
===================================== gajim/common/zeroconf/connection_zeroconf.py ===================================== @@ -37,22 +37,41 @@
from gajim.common import app from gajim.common import modules +from gajim.common import helpers +from gajim.common import idle +from gajim.common import nec from gajim.common.nec import NetworkEvent from gajim.common.i18n import _ from gajim.common.const import ClientState -from gajim.common.connection import CommonConnection from gajim.common.zeroconf import client_zeroconf from gajim.common.zeroconf import zeroconf from gajim.common.zeroconf.connection_handlers_zeroconf import ConnectionHandlersZeroconf -from gajim.common.connection_handlers_events import OurShowEvent from gajim.common.connection_handlers_events import InformationEvent -from gajim.common.connection_handlers_events import ConnectionLostEvent -from gajim.common.connection_handlers_events import MessageSentEvent
log = logging.getLogger('gajim.c.connection_zeroconf')
-class ConnectionZeroconf(CommonConnection, ConnectionHandlersZeroconf): +class OurShowEvent(nec.NetworkIncomingEvent): + + name = 'our-show' + + def init(self): + self.reconnect = False + + +class ConnectionLostEvent(nec.NetworkIncomingEvent): + + name = 'connection-lost' + + def generate(self): + app.nec.push_incoming_event(OurShowEvent( + None, + conn=self.conn, + show='offline')) + return True + + +class ConnectionZeroconf(ConnectionHandlersZeroconf): def __init__(self, name): ConnectionHandlersZeroconf.__init__(self) # system username @@ -64,12 +83,135 @@ def __init__(self, name): self.autoconnect = False self.httpupload = False
- CommonConnection.__init__(self, name) + self.name = name + self._modules = {} + self.connection = None # xmpppy ClientCommon instance + self.is_zeroconf = False + self.password = None + self.server_resource = helpers.get_resource(self.name) + self.priority = app.get_priority(name, 'offline') + self.time_to_reconnect = None + self._reconnect_timer_source = None + + self._state = ClientState.DISCONNECTED + self._status = 'offline' + self._status_message = '' + + # If handlers have been registered + self.handlers_registered = False + + self.pep = {} + + self.roster_supported = True + + self._stun_servers = [] # STUN servers of our jabber server + + # Tracks the calls of the connect_machine() method + self._connect_machine_calls = 0 + + self.get_config_values_or_default() + self.is_zeroconf = True
# Register all modules modules.register_modules(self)
+ def _set_state(self, state): + log.info('State: %s', state) + self._state = state + + @property + def state(self): + return self._state + + @property + def status(self): + return self._status + + @property + def status_message(self): + return self._status_message + + def _register_new_handlers(self, con): + for handler in modules.get_handlers(self): + if len(handler) == 5: + name, func, typ, ns, priority = handler + con.RegisterHandler(name, func, typ, ns, priority=priority) + else: + con.RegisterHandler(*handler) + self.handlers_registered = True + + def _unregister_new_handlers(self, con): + if not con: + return + for handler in modules.get_handlers(self): + if len(handler) > 4: + handler = handler[:4] + con.UnregisterHandler(*handler) + self.handlers_registered = False + + def get_module(self, name): + return modules.get(self.name, name) + + def quit(self, kill_core): + if kill_core and app.account_is_connected(self.name): + self.disconnect(reconnect=False) + + def new_account(self, name, config, sync=False): + """ + To be implemented by derived classes + """ + raise NotImplementedError + + def _on_new_account(self, con=None, con_type=None): + """ + To be implemented by derived classes + """ + raise NotImplementedError + + def change_status(self, show, msg, auto=False): + if not msg: + msg = '' + + self._status = show + self._status_message = msg + + if self._state.is_disconnected: + if show == 'offline': + return + + self.server_resource = helpers.get_resource(self.name) + self.connect_and_init(show, msg) + return + + if self._state.is_connecting or self._state.is_reconnect_scheduled: + if show == 'offline': + self.disconnect(reconnect=False) + elif self._state.is_reconnect_scheduled: + self.reconnect() + return + + # We are connected + if show == 'offline': + presence = self.get_module('Presence').get_presence( + typ='unavailable', + status=msg, + caps=False) + + self.connection.send(presence, now=True) + self.disconnect(reconnect=False) + return + + idle_time = None + if auto: + if app.is_installed('IDLE') and app.settings.get('autoaway'): + idle_sec = idle.Monitor.get_idle_sec() + idle_time = time.strftime( + '%Y-%m-%dT%H:%M:%SZ', + time.gmtime(time.time() - idle_sec)) + + self._update_status(show, msg, idle_time=idle_time) + def get_config_values_or_default(self): """ Get name, host, port from config, or create zeroconf account with default @@ -397,7 +539,9 @@ def send_message(self, message): def _send_message(self, message): def on_send_ok(stanza_id): app.nec.push_incoming_event( - MessageSentEvent(None, jid=message.jid, **vars(message))) + NetworkEvent('messasge-sent', + jid=message.jid, + **vars(message))) self.get_module('Message').log_message(message)
def on_send_not_ok(reason): @@ -433,8 +577,18 @@ def send_stanza(self, stanza): self.connection.send(stanza)
def _event_dispatcher(self, realm, event, data): - CommonConnection._event_dispatcher(self, realm, event, data) if realm == '': + if event == 'STANZA RECEIVED': + app.nec.push_incoming_event( + NetworkEvent('stanza-received', + conn=self, + stanza_str=str(data))) + elif event == 'DATA SENT': + app.nec.push_incoming_event( + NetworkEvent('stanza-sent', + conn=self, + stanza_str=str(data))) + if event == nbxmpp.transports.DATA_ERROR: frm = data[0] error_message = _(
View it on GitLab: https://dev.gajim.org/gajim/gajim/-/compare/f8beb7ff6f5554a2b2beb5d58af99b53...