Refactor last activity code into own module
This commit is contained in:
parent
b74706afcf
commit
8fa1ee4617
4 changed files with 54 additions and 33 deletions
|
@ -69,6 +69,7 @@ from gajim.common.modules.ping import Ping
|
||||||
from gajim.common.modules.search import Search
|
from gajim.common.modules.search import Search
|
||||||
from gajim.common.modules.annotations import Annotations
|
from gajim.common.modules.annotations import Annotations
|
||||||
from gajim.common.modules.roster_item_exchange import RosterItemExchange
|
from gajim.common.modules.roster_item_exchange import RosterItemExchange
|
||||||
|
from gajim.common.modules.last_activity import LastActivity
|
||||||
from gajim.common.connection_handlers import *
|
from gajim.common.connection_handlers import *
|
||||||
from gajim.common.contacts import GC_Contact
|
from gajim.common.contacts import GC_Contact
|
||||||
from gajim.gtkgui_helpers import get_action
|
from gajim.gtkgui_helpers import get_action
|
||||||
|
@ -662,6 +663,7 @@ class Connection(CommonConnection, ConnectionHandlers):
|
||||||
self.register_module('Search', Search, self)
|
self.register_module('Search', Search, self)
|
||||||
self.register_module('Annotations', Annotations, self)
|
self.register_module('Annotations', Annotations, self)
|
||||||
self.register_module('RosterItemExchange', RosterItemExchange, self)
|
self.register_module('RosterItemExchange', RosterItemExchange, self)
|
||||||
|
self.register_module('LastActivity', LastActivity, self)
|
||||||
|
|
||||||
app.ged.register_event_handler('privacy-list-received', ged.CORE,
|
app.ged.register_event_handler('privacy-list-received', ged.CORE,
|
||||||
self._nec_privacy_list_received)
|
self._nec_privacy_list_received)
|
||||||
|
|
|
@ -48,7 +48,6 @@ from gajim.common import app
|
||||||
from gajim.common import dataforms
|
from gajim.common import dataforms
|
||||||
from gajim.common import jingle_xtls
|
from gajim.common import jingle_xtls
|
||||||
from gajim.common import configpaths
|
from gajim.common import configpaths
|
||||||
from gajim.common import idle
|
|
||||||
from gajim.common.caps_cache import muc_caps_cache
|
from gajim.common.caps_cache import muc_caps_cache
|
||||||
from gajim.common.commands import ConnectionCommands
|
from gajim.common.commands import ConnectionCommands
|
||||||
from gajim.common.pubsub import ConnectionPubSub
|
from gajim.common.pubsub import ConnectionPubSub
|
||||||
|
@ -1345,8 +1344,6 @@ ConnectionHTTPUpload):
|
||||||
|
|
||||||
app.ged.register_event_handler('http-auth-received', ged.CORE,
|
app.ged.register_event_handler('http-auth-received', ged.CORE,
|
||||||
self._nec_http_auth_received)
|
self._nec_http_auth_received)
|
||||||
app.ged.register_event_handler('last-request-received', ged.CORE,
|
|
||||||
self._nec_last_request_received)
|
|
||||||
app.ged.register_event_handler('roster-set-received',
|
app.ged.register_event_handler('roster-set-received',
|
||||||
ged.CORE, self._nec_roster_set_received)
|
ged.CORE, self._nec_roster_set_received)
|
||||||
app.ged.register_event_handler('private-storage-bookmarks-received',
|
app.ged.register_event_handler('private-storage-bookmarks-received',
|
||||||
|
@ -1380,8 +1377,6 @@ ConnectionHTTPUpload):
|
||||||
ConnectionHTTPUpload.cleanup(self)
|
ConnectionHTTPUpload.cleanup(self)
|
||||||
app.ged.remove_event_handler('http-auth-received', ged.CORE,
|
app.ged.remove_event_handler('http-auth-received', ged.CORE,
|
||||||
self._nec_http_auth_received)
|
self._nec_http_auth_received)
|
||||||
app.ged.remove_event_handler('last-request-received', ged.CORE,
|
|
||||||
self._nec_last_request_received)
|
|
||||||
app.ged.remove_event_handler('roster-set-received',
|
app.ged.remove_event_handler('roster-set-received',
|
||||||
ged.CORE, self._nec_roster_set_received)
|
ged.CORE, self._nec_roster_set_received)
|
||||||
app.ged.remove_event_handler('private-storage-bookmarks-received',
|
app.ged.remove_event_handler('private-storage-bookmarks-received',
|
||||||
|
@ -1640,29 +1635,6 @@ ConnectionHTTPUpload):
|
||||||
app.config.set_per('accounts', self.name, 'roster_version',
|
app.config.set_per('accounts', self.name, 'roster_version',
|
||||||
obj.version)
|
obj.version)
|
||||||
|
|
||||||
def _LastCB(self, con, iq_obj):
|
|
||||||
log.debug('LastCB')
|
|
||||||
if not self.connection or self.connected < 2:
|
|
||||||
return
|
|
||||||
app.nec.push_incoming_event(LastRequestEvent(None, conn=self,
|
|
||||||
stanza=iq_obj))
|
|
||||||
raise nbxmpp.NodeProcessed
|
|
||||||
|
|
||||||
def _nec_last_request_received(self, obj):
|
|
||||||
if obj.conn.name != self.name:
|
|
||||||
return
|
|
||||||
if app.is_installed('IDLE') and app.config.get_per('accounts', self.name,
|
|
||||||
'send_idle_time'):
|
|
||||||
iq_obj = obj.stanza.buildReply('result')
|
|
||||||
qp = iq_obj.setQuery()
|
|
||||||
qp.attrs['seconds'] = idle.Monitor.get_idle_sec()
|
|
||||||
else:
|
|
||||||
iq_obj = obj.stanza.buildReply('error')
|
|
||||||
err = nbxmpp.ErrorNode(name=nbxmpp.NS_STANZAS + \
|
|
||||||
' service-unavailable')
|
|
||||||
iq_obj.addChild(node=err)
|
|
||||||
self.connection.send(iq_obj)
|
|
||||||
|
|
||||||
def _messageCB(self, con, msg):
|
def _messageCB(self, con, msg):
|
||||||
"""
|
"""
|
||||||
Called when we receive a message
|
Called when we receive a message
|
||||||
|
@ -2086,7 +2058,6 @@ ConnectionHTTPUpload):
|
||||||
nbxmpp.NS_DISCO_INFO)
|
nbxmpp.NS_DISCO_INFO)
|
||||||
con.RegisterHandler('iq', self._DiscoverInfoErrorCB, 'error',
|
con.RegisterHandler('iq', self._DiscoverInfoErrorCB, 'error',
|
||||||
nbxmpp.NS_DISCO_INFO)
|
nbxmpp.NS_DISCO_INFO)
|
||||||
con.RegisterHandler('iq', self._LastCB, 'get', nbxmpp.NS_LAST)
|
|
||||||
con.RegisterHandler('iq', self._MucOwnerCB, 'result',
|
con.RegisterHandler('iq', self._MucOwnerCB, 'result',
|
||||||
nbxmpp.NS_MUC_OWNER)
|
nbxmpp.NS_MUC_OWNER)
|
||||||
con.RegisterHandler('iq', self._MucAdminCB, 'result',
|
con.RegisterHandler('iq', self._MucAdminCB, 'result',
|
||||||
|
|
|
@ -193,10 +193,6 @@ class HttpAuthReceivedEvent(nec.NetworkIncomingEvent):
|
||||||
self.msg = self.stanza.getTagData('body')
|
self.msg = self.stanza.getTagData('body')
|
||||||
return True
|
return True
|
||||||
|
|
||||||
class LastRequestEvent(nec.NetworkIncomingEvent):
|
|
||||||
name = 'last-request-received'
|
|
||||||
base_network_events = []
|
|
||||||
|
|
||||||
class RosterReceivedEvent(nec.NetworkIncomingEvent):
|
class RosterReceivedEvent(nec.NetworkIncomingEvent):
|
||||||
name = 'roster-received'
|
name = 'roster-received'
|
||||||
base_network_events = []
|
base_network_events = []
|
||||||
|
|
52
gajim/common/modules/last_activity.py
Normal file
52
gajim/common/modules/last_activity.py
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
# 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/>.
|
||||||
|
|
||||||
|
# XEP-0012: Last Activity
|
||||||
|
|
||||||
|
import logging
|
||||||
|
|
||||||
|
import nbxmpp
|
||||||
|
|
||||||
|
from gajim.common import app
|
||||||
|
from gajim.common import idle
|
||||||
|
|
||||||
|
log = logging.getLogger('gajim.c.m.last_activity')
|
||||||
|
|
||||||
|
|
||||||
|
class LastActivity:
|
||||||
|
def __init__(self, con):
|
||||||
|
self._con = con
|
||||||
|
self._account = con.name
|
||||||
|
|
||||||
|
self.handlers = [('iq', self._answer_request, 'get', nbxmpp.NS_LAST)]
|
||||||
|
|
||||||
|
def _answer_request(self, con, stanza):
|
||||||
|
log.info('Request from %s', stanza.getFrom())
|
||||||
|
if not app.account_is_connected(self._account):
|
||||||
|
return
|
||||||
|
|
||||||
|
allow_send = app.config.get_per(
|
||||||
|
'accounts', self._account, 'send_idle_time')
|
||||||
|
if app.is_installed('IDLE') and allow_send:
|
||||||
|
iq = stanza.buildReply('result')
|
||||||
|
query = iq.setQuery()
|
||||||
|
query.attrs['seconds'] = idle.Monitor.get_idle_sec()
|
||||||
|
else:
|
||||||
|
iq = stanza.buildReply('error')
|
||||||
|
err = nbxmpp.ErrorNode(nbxmpp.ERR_SERVICE_UNAVAILABLE)
|
||||||
|
iq.addChild(node=err)
|
||||||
|
|
||||||
|
self._con.connection.send(iq)
|
||||||
|
|
||||||
|
raise nbxmpp.NodeProcessed
|
Loading…
Add table
Reference in a new issue