Philipp Hörist pushed to branch mainwindow at gajim / gajim
Commits:
df1dd5c2 by lovetox at 2021-03-20T15:31:37+01:00
Convert JID
- - - - -
1 changed file:
- gajim/gtk/add_contact.py
Changes:
=====================================
gajim/gtk/add_contact.py
=====================================
@@ -48,7 +48,7 @@ def __init__(self, account=None, contact_jid=None, user_nick=None, group=None):
self.adding_jid = False
if contact_jid is not None:
- contact_jid = app.get_jid_without_resource(contact_jid)
+ contact_jid = app.get_jid_without_resource(str(contact_jid))
# fill accounts with active accounts
accounts = app.get_enabled_accounts_with_labels()
View it on GitLab: https://dev.gajim.org/gajim/gajim/-/commit/df1dd5c2de43cfb808b1bb8cc9803526…
--
View it on GitLab: https://dev.gajim.org/gajim/gajim/-/commit/df1dd5c2de43cfb808b1bb8cc9803526…
You're receiving this email because of your account on dev.gajim.org.
Philipp Hörist pushed to branch master at gajim / python-nbxmpp
Commits:
b655a690 by lovetox at 2021-03-19T17:57:11+01:00
Add EntityTime(XEP-0202) module
- - - - -
4 changed files:
- nbxmpp/dispatcher.py
- nbxmpp/modules/date_and_time.py
- + nbxmpp/modules/entity_time.py
- nbxmpp/namespaces.py
Changes:
=====================================
nbxmpp/dispatcher.py
=====================================
@@ -83,6 +83,7 @@ from nbxmpp.modules.ping import Ping
from nbxmpp.modules.delimiter import Delimiter
from nbxmpp.modules.roster import Roster
from nbxmpp.modules.last_activity import LastActivity
+from nbxmpp.modules.entity_time import EntityTime
from nbxmpp.modules.misc import unwrap_carbon
from nbxmpp.modules.misc import unwrap_mam
from nbxmpp.util import get_properties_struct
@@ -195,6 +196,7 @@ class StanzaDispatcher(Observable):
self._modules['Delimiter'] = Delimiter(self._client)
self._modules['Roster'] = Roster(self._client)
self._modules['LastActivity'] = LastActivity(self._client)
+ self._modules['EntityTime'] = EntityTime(self._client)
for instance in self._modules.values():
for handler in instance.handlers:
=====================================
nbxmpp/modules/date_and_time.py
=====================================
@@ -195,3 +195,12 @@ def parse_datetime(timestring, check_utc=False,
# convert=None
return date_time
return None
+
+
+def get_local_time():
+ formated_time = time.strftime('%Y-%m-%dT%H:%M:%SZ', time.gmtime())
+ isdst = time.localtime().tm_isdst
+ zone = -(time.timezone, time.altzone)[isdst] / 60.0
+ zone = (zone / 60, abs(zone % 60))
+ tzo = '%+03d:%02d' % zone
+ return formated_time, tzo
=====================================
nbxmpp/modules/entity_time.py
=====================================
@@ -0,0 +1,106 @@
+# Copyright (C) 2021 Philipp Hörist <philipp AT hoerist.com>
+#
+# This file is part of nbxmpp.
+#
+# This program 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; either version 3
+# of the License, or (at your option) any later version.
+#
+# This program 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 this program; If not, see <http://www.gnu.org/licenses/>.
+
+from nbxmpp.protocol import Iq
+from nbxmpp.protocol import NodeProcessed
+from nbxmpp.namespaces import Namespace
+from nbxmpp.task import iq_request_task
+from nbxmpp.structs import StanzaHandler
+from nbxmpp.errors import MalformedStanzaError
+from nbxmpp.errors import StanzaError
+from nbxmpp.modules.base import BaseModule
+
+from nbxmpp.modules.date_and_time import parse_datetime
+from nbxmpp.modules.date_and_time import create_tzinfo
+from nbxmpp.modules.date_and_time import get_local_time
+
+
+class EntityTime(BaseModule):
+ def __init__(self, client):
+ BaseModule.__init__(self, client)
+
+ self._client = client
+ self.handlers = [
+ StanzaHandler(name='iq',
+ callback=self._answer_request,
+ priority=30,
+ typ='get',
+ ns=Namespace.TIME),
+ ]
+
+ self._enabled = False
+
+ def disable(self):
+ self._enabled = False
+
+ def enable(self):
+ self._enabled = True
+
+ @iq_request_task
+ def request_entity_time(self, jid):
+ _task = yield
+
+ response = yield _make_request(jid)
+ if response.isError():
+ raise StanzaError(response)
+
+ yield _parse_response(response)
+
+ def _answer_request(self, _con, stanza, _properties):
+ self._log.info('Request received from %s', stanza.getFrom())
+ if not self._enabled:
+ return
+
+ time, tzo = get_local_time()
+ iq = stanza.buildSimpleReply('result')
+ time_node = iq.addChild('time', namespace=Namespace.TIME)
+ time_node.setTagData('utc', time)
+ time_node.setTagData('tzo', tzo)
+ self._log.info('Send time: %s %s', time, tzo)
+ self._client.send_stanza(iq)
+ raise NodeProcessed
+
+
+def _make_request(jid):
+ iq = Iq('get', to=jid)
+ iq.addChild('time', namespace=Namespace.TIME)
+ return iq
+
+
+def _parse_response(response):
+ time_ = response.getTag('time')
+ if not time_:
+ raise MalformedStanzaError('time node missing', response)
+
+ tzo = time_.getTagData('tzo')
+ if not tzo:
+ raise MalformedStanzaError('tzo node or data missing', response)
+
+ remote_tz = create_tzinfo(tz_string=tzo)
+ if remote_tz is None:
+ raise MalformedStanzaError('invalid tzo data', response)
+
+ utc_time = time_.getTagData('utc')
+ if not utc_time:
+ raise MalformedStanzaError('utc node or data missing', response)
+
+ date_time = parse_datetime(utc_time, check_utc=True)
+ if date_time is None:
+ raise MalformedStanzaError('invalid timezone definition', response)
+
+ date_time = date_time.astimezone(remote_tz)
+ return date_time.strftime('%c %Z')
=====================================
nbxmpp/namespaces.py
=====================================
@@ -155,6 +155,7 @@ class _Namespaces:
STREAM_MGMT: str = 'urn:xmpp:sm:3'
STYLING: str = 'urn:xmpp:styling:0'
TIME_REVISED: str = 'urn:xmpp:time'
+ TIME: str = 'urn:xmpp:time'
TLS: str = 'urn:ietf:params:xml:ns:xmpp-tls'
TUNE: str = 'http://jabber.org/protocol/tune'
URL_DATA: str = 'http://jabber.org/protocol/url-data'
View it on GitLab: https://dev.gajim.org/gajim/python-nbxmpp/-/commit/b655a69053ab962d014bf524…
--
View it on GitLab: https://dev.gajim.org/gajim/python-nbxmpp/-/commit/b655a69053ab962d014bf524…
You're receiving this email because of your account on dev.gajim.org.