Philipp Hörist pushed to branch master at gajim / python-nbxmpp
Commits:
14e676a6 by lovetox at 2021-02-13T21:24:13+01:00
Add Last Activity module (XEP-0012)
- - - - -
3 changed files:
- nbxmpp/dispatcher.py
- + nbxmpp/modules/last_activity.py
- nbxmpp/structs.py
Changes:
=====================================
nbxmpp/dispatcher.py
=====================================
@@ -82,6 +82,7 @@ from nbxmpp.modules.vcard4 import VCard4
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.misc import unwrap_carbon
from nbxmpp.modules.misc import unwrap_mam
from nbxmpp.util import get_properties_struct
@@ -193,6 +194,7 @@ class StanzaDispatcher(Observable):
self._modules['Ping'] = Ping(self._client)
self._modules['Delimiter'] = Delimiter(self._client)
self._modules['Roster'] = Roster(self._client)
+ self._modules['LastActivity'] = LastActivity(self._client)
for instance in self._modules.values():
for handler in instance.handlers:
=====================================
nbxmpp/modules/last_activity.py
=====================================
@@ -0,0 +1,87 @@
+# 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 LastActivityData
+from nbxmpp.structs import StanzaHandler
+from nbxmpp.errors import MalformedStanzaError
+from nbxmpp.errors import StanzaError
+from nbxmpp.modules.base import BaseModule
+
+
+class LastActivity(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.LAST),
+ ]
+
+ self._idle_func = None
+
+ def disable(self):
+ self._idle_func = None
+
+ def set_idle_func(self, func):
+ self._idle_func = func
+
+ @iq_request_task
+ def request_last_activity(self, jid):
+ _task = yield
+
+ response = yield _make_request(jid)
+ if response.isError():
+ raise StanzaError(response)
+
+ yield _parse_response(response)
+
+ def _answer_request(self, _client, stanza, _properties):
+ self._log.info('Request received from %s', stanza.getFrom())
+ if self._idle_func is None:
+ return
+
+ seconds = self._idle_func()
+ iq = stanza.buildReply('result')
+ query = iq.getQuery()
+ query.setAttr('seconds', seconds)
+ self._log.info('Send last activity: %s', seconds)
+ self._client.send_stanza(iq)
+ raise NodeProcessed
+
+
+def _make_request(jid):
+ return Iq('get', queryNS=Namespace.LAST, to=jid)
+
+
+def _parse_response(response):
+ query = response.getQuery()
+ seconds = query.getAttr('seconds')
+
+ try:
+ seconds = int(seconds)
+ except Exception:
+ raise MalformedStanzaError('seconds attribute invalid', response)
+
+ return LastActivityData(seconds=seconds, status=query.getData())
=====================================
nbxmpp/structs.py
=====================================
@@ -129,6 +129,8 @@ MAMPreferencesData = namedtuple('MAMPreferencesData', 'default always never')
RosterData = namedtuple('RosterData', 'items version')
RosterItem = namedtuple('RosterItem', 'data jid')
+LastActivityData = namedtuple('LastActivityData', 'seconds status')
+
class DiscoInfo(namedtuple('DiscoInfo', 'stanza identities features dataforms timestamp')):
View it on GitLab: https://dev.gajim.org/gajim/python-nbxmpp/-/commit/14e676a6e059ffb58bc8465d…
--
View it on GitLab: https://dev.gajim.org/gajim/python-nbxmpp/-/commit/14e676a6e059ffb58bc8465d…
You're receiving this email because of your account on dev.gajim.org.
Philipp Hörist pushed to branch master at gajim / gajim
Commits:
9e0c64b1 by mimi89999 at 2021-02-13T21:45:51+01:00
Change dataform to href markup URLs in instructions
- - - - -
1 changed file:
- gajim/gtk/dataform.py
Changes:
=====================================
gajim/gtk/dataform.py
=====================================
@@ -220,7 +220,8 @@ def add(self, form_grid, row_number):
class Instructions:
def __init__(self, instructions):
- self._label = Gtk.Label(label=instructions)
+ self._label = Gtk.Label()
+ self._label.set_markup(make_href_markup(instructions))
self._label.set_line_wrap(True)
self._label.set_line_wrap_mode(Pango.WrapMode.WORD)
self._label.set_justify(Gtk.Justification.CENTER)
View it on GitLab: https://dev.gajim.org/gajim/gajim/-/commit/9e0c64b175ff94a3ae6e56dcd9f113ee…
--
View it on GitLab: https://dev.gajim.org/gajim/gajim/-/commit/9e0c64b175ff94a3ae6e56dcd9f113ee…
You're receiving this email because of your account on dev.gajim.org.
Philipp Hörist pushed to branch master at gajim / gajim
Commits:
a4fba1f4 by mimi89999 at 2021-02-13T10:08:20+01:00
Change dataform to href markup URLs in fixed field
Closes #10445
- - - - -
1 changed file:
- gajim/gtk/dataform.py
Changes:
=====================================
gajim/gtk/dataform.py
=====================================
@@ -27,6 +27,7 @@
from .util import MultiLineLabel
from .util import MaxWidthComboBoxText
+from .util import make_href_markup
# Options
@@ -329,7 +330,7 @@ class FixedField(Field):
def __init__(self, field, form_grid, options):
Field.__init__(self, field, form_grid, options)
- self._label.set_text(field.value)
+ self._label.set_markup(make_href_markup(field.value))
# If the value is more than 40 chars it proabably isn’t
# meant as a section header
View it on GitLab: https://dev.gajim.org/gajim/gajim/-/commit/a4fba1f47c8abdd4bbd759741ef98f22…
--
View it on GitLab: https://dev.gajim.org/gajim/gajim/-/commit/a4fba1f47c8abdd4bbd759741ef98f22…
You're receiving this email because of your account on dev.gajim.org.