Mercurial > libervia-backend
annotate sat/plugins/plugin_xep_0045.py @ 2816:114cdde9ff96
plugin XEP-0280: priority and "sent" fixes:
- carbon prioriy must be bigger than ones of encryption plugins, because the carbon copied messages must be unwrapped to be decrypted, this patch fixes it
- "sent" carbon elements was only stored and notified to frontends, it is now unwrapped and injected in normal traffic, this way other plugin can manage it, in particular encrypted elements can be decrypted
author | Goffi <goffi@goffi.org> |
---|---|
date | Thu, 28 Feb 2019 18:57:06 +0100 |
parents | 27d9d25ec3cd |
children | 5284be4c601b |
rev | line source |
---|---|
1934
2daf7b4c6756
use of /usr/bin/env instead of /usr/bin/python in shebang
Goffi <goffi@goffi.org>
parents:
1891
diff
changeset
|
1 #!/usr/bin/env python2 |
72 | 2 # -*- coding: utf-8 -*- |
3 | |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
599
diff
changeset
|
4 # SAT plugin for managing xep-0045 |
2771 | 5 # Copyright (C) 2009-2019 Jérôme Poisson (goffi@goffi.org) |
72 | 6 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
599
diff
changeset
|
7 # This program is free software: you can redistribute it and/or modify |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
599
diff
changeset
|
8 # it under the terms of the GNU Affero General Public License as published by |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
599
diff
changeset
|
9 # the Free Software Foundation, either version 3 of the License, or |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
599
diff
changeset
|
10 # (at your option) any later version. |
72 | 11 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
599
diff
changeset
|
12 # This program is distributed in the hope that it will be useful, |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
599
diff
changeset
|
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
599
diff
changeset
|
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
599
diff
changeset
|
15 # GNU Affero General Public License for more details. |
72 | 16 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
599
diff
changeset
|
17 # You should have received a copy of the GNU Affero General Public License |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
599
diff
changeset
|
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
72 | 19 |
1068
1513511a0586
plugin XEP-0045: room configuration returns a success or failure message
souliane <souliane@mailoo.org>
parents:
1007
diff
changeset
|
20 from sat.core.i18n import _, D_ |
916
1a759096ccbd
core: use of Const for profile_key + replaced '@DEFAULT@' default profile_key by '@NONE@'
Goffi <goffi@goffi.org>
parents:
811
diff
changeset
|
21 from sat.core.constants import Const as C |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
950
diff
changeset
|
22 from sat.core.log import getLogger |
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
950
diff
changeset
|
23 log = getLogger(__name__) |
507
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
24 from twisted.internet import defer |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
25 from twisted.words.protocols.jabber import jid |
1986
fbd313cfd40b
plugin xep-0045: ask for password when getting a "not-allowed" error
Goffi <goffi@goffi.org>
parents:
1984
diff
changeset
|
26 from twisted.python import failure |
505
2402668b5d05
plugin xep-0045: nick change management
Goffi <goffi@goffi.org>
parents:
488
diff
changeset
|
27 |
2402668b5d05
plugin xep-0045: nick change management
Goffi <goffi@goffi.org>
parents:
488
diff
changeset
|
28 from sat.core import exceptions |
801
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
29 from sat.memory import memory |
505
2402668b5d05
plugin xep-0045: nick change management
Goffi <goffi@goffi.org>
parents:
488
diff
changeset
|
30 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
31 import time |
319 | 32 import uuid |
72 | 33 |
1466
2184d5f496b5
plugin XEP-0045: added disco announce
Goffi <goffi@goffi.org>
parents:
1417
diff
changeset
|
34 from wokkel import muc, disco, iwokkel |
801
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
35 from sat.tools import xml_tools |
72 | 36 |
1466
2184d5f496b5
plugin XEP-0045: added disco announce
Goffi <goffi@goffi.org>
parents:
1417
diff
changeset
|
37 from zope.interface import implements |
2184d5f496b5
plugin XEP-0045: added disco announce
Goffi <goffi@goffi.org>
parents:
1417
diff
changeset
|
38 |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
39 # XXX: mam and rsm come from sat_tmp.wokkel |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
40 from wokkel import rsm |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
41 from wokkel import mam |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
42 |
72 | 43 |
44 PLUGIN_INFO = { | |
2145
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
45 C.PI_NAME: "XEP-0045 Plugin", |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
46 C.PI_IMPORT_NAME: "XEP-0045", |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
47 C.PI_TYPE: "XEP", |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
48 C.PI_PROTOCOLS: ["XEP-0045"], |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
49 C.PI_DEPENDENCIES: ["XEP-0359"], |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
50 C.PI_RECOMMENDATIONS: [C.TEXT_CMDS, u"XEP-0313"], |
2145
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
51 C.PI_MAIN: "XEP_0045", |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
52 C.PI_HANDLER: "yes", |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
53 C.PI_DESCRIPTION: _("""Implementation of Multi-User Chat""") |
72 | 54 } |
55 | |
1466
2184d5f496b5
plugin XEP-0045: added disco announce
Goffi <goffi@goffi.org>
parents:
1417
diff
changeset
|
56 NS_MUC = 'http://jabber.org/protocol/muc' |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
57 AFFILIATIONS = ('owner', 'admin', 'member', 'none', 'outcast') |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
58 ROOM_USER_JOINED = 'ROOM_USER_JOINED' |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
59 ROOM_USER_LEFT = 'ROOM_USER_LEFT' |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
60 OCCUPANT_KEYS = ('nick', 'entity', 'affiliation', 'role') |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
61 ENTITY_TYPE_MUC = "MUC" |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
62 ROOM_STATE_OCCUPANTS = "occupants" |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
63 ROOM_STATE_SELF_PRESENCE = "self-presence" |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
64 ROOM_STATE_LIVE = "live" |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
65 ROOM_STATES = (ROOM_STATE_OCCUPANTS, ROOM_STATE_SELF_PRESENCE, ROOM_STATE_LIVE) |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
66 HISTORY_LEGACY = u"legacy" |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
67 HISTORY_MAM = u"mam" |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
68 |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
69 |
1407
77f07ea90420
plugin XEP-0045, quick_frontend, primitivus: replace C.DEFAULT_MUC by bridge method getDefaultMUC (value is defined in plugin XEP-0045 and can be overriden with the config file)
souliane <souliane@mailoo.org>
parents:
1396
diff
changeset
|
70 CONFIG_SECTION = u'plugin muc' |
77f07ea90420
plugin XEP-0045, quick_frontend, primitivus: replace C.DEFAULT_MUC by bridge method getDefaultMUC (value is defined in plugin XEP-0045 and can be overriden with the config file)
souliane <souliane@mailoo.org>
parents:
1396
diff
changeset
|
71 |
77f07ea90420
plugin XEP-0045, quick_frontend, primitivus: replace C.DEFAULT_MUC by bridge method getDefaultMUC (value is defined in plugin XEP-0045 and can be overriden with the config file)
souliane <souliane@mailoo.org>
parents:
1396
diff
changeset
|
72 default_conf = {"default_muc": u'sat@chat.jabberfr.org'} |
77f07ea90420
plugin XEP-0045, quick_frontend, primitivus: replace C.DEFAULT_MUC by bridge method getDefaultMUC (value is defined in plugin XEP-0045 and can be overriden with the config file)
souliane <souliane@mailoo.org>
parents:
1396
diff
changeset
|
73 |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
74 |
2066
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
75 class AlreadyJoined(exceptions.ConflictError): |
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
76 |
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
77 def __init__(self, room): |
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
78 super(AlreadyJoined, self).__init__() |
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
79 self.room = room |
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
80 |
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
81 |
588
beaf6bec2fcd
Remove every old-style class.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
82 class XEP_0045(object): |
2046
b99bd02ea643
plugin XEP-0045, XEP-0054, XEP-0096: deprecated bridge method are not used anymore
Goffi <goffi@goffi.org>
parents:
2028
diff
changeset
|
83 # TODO: handle invitations |
2461
34cb8b713370
plugin XEP-0045: added mucNickGet to retrieve our nickname in a MUC room
Goffi <goffi@goffi.org>
parents:
2414
diff
changeset
|
84 # FIXME: this plugin need a good cleaning, join method is messy |
72 | 85 |
86 def __init__(self, host): | |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
950
diff
changeset
|
87 log.info(_("Plugin XEP_0045 initialization")) |
72 | 88 self.host = host |
801
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
89 self._sessions = memory.Sessions() |
2066
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
90 host.bridge.addMethod("mucJoin", ".plugin", in_sign='ssa{ss}s', out_sign='(bsa{sa{ss}}sss)', method=self._join, async=True) # return same arguments as mucRoomJoined + a boolean set to True is the room was already joined (first argument) |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
91 host.bridge.addMethod("mucNick", ".plugin", in_sign='sss', out_sign='', method=self._nick) |
2461
34cb8b713370
plugin XEP-0045: added mucNickGet to retrieve our nickname in a MUC room
Goffi <goffi@goffi.org>
parents:
2414
diff
changeset
|
92 host.bridge.addMethod("mucNickGet", ".plugin", in_sign='ss', out_sign='s', method=self._getRoomNick) |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
93 host.bridge.addMethod("mucLeave", ".plugin", in_sign='ss', out_sign='', method=self._leave, async=True) |
2021
6c51e8f17c92
plugin XEP-0045: added bridge method to change subject
Goffi <goffi@goffi.org>
parents:
1992
diff
changeset
|
94 host.bridge.addMethod("mucSubject", ".plugin", in_sign='sss', out_sign='', method=self._subject) |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
95 host.bridge.addMethod("mucGetRoomsJoined", ".plugin", in_sign='s', out_sign='a(sa{sa{ss}}ss)', method=self._getRoomsJoined) |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
96 host.bridge.addMethod("mucGetUniqueRoomName", ".plugin", in_sign='ss', out_sign='s', method=self._getUniqueName) |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
97 host.bridge.addMethod("mucConfigureRoom", ".plugin", in_sign='ss', out_sign='s', method=self._configureRoom, async=True) |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
98 host.bridge.addMethod("mucGetDefaultService", ".plugin", in_sign='', out_sign='s', method=self.getDefaultMUC) |
2468
8f14c1865e9e
plugin XEP-0045: new mucGetService bridge method to retrieve MUC service of the server.
Goffi <goffi@goffi.org>
parents:
2461
diff
changeset
|
99 host.bridge.addMethod("mucGetService", ".plugin", in_sign='ss', out_sign='s', method=self._getMUCService, async=True) |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
100 host.bridge.addSignal("mucRoomJoined", ".plugin", signature='sa{sa{ss}}sss') # args: room_jid, occupants, user_nick, subject, profile |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
101 host.bridge.addSignal("mucRoomLeft", ".plugin", signature='ss') # args: room_jid, profile |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
102 host.bridge.addSignal("mucRoomUserChangedNick", ".plugin", signature='ssss') # args: room_jid, old_nick, new_nick, profile |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
103 host.bridge.addSignal("mucRoomNewSubject", ".plugin", signature='sss') # args: room_jid, subject, profile |
801
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
104 self.__submit_conf_id = host.registerCallback(self._submitConfiguration, with_data=True) |
1990
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
105 self._room_join_id = host.registerCallback(self._UIRoomJoinCb, with_data=True) |
1538
55967cf161b1
reverted patch ad4ec8d9235e: there must not be security limit on room configuration
Goffi <goffi@goffi.org>
parents:
1466
diff
changeset
|
106 host.importMenu((D_("MUC"), D_("configure")), self._configureRoomMenu, security_limit=0, help_string=D_("Configure Multi-User Chat room"), type_=C.MENU_ROOM) |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
107 try: |
1992
d5befe7253aa
plugin XEP-0045: fixed typo in text commands
Goffi <goffi@goffi.org>
parents:
1990
diff
changeset
|
108 self.text_cmds = self.host.plugins[C.TEXT_CMDS] |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
109 except KeyError: |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
110 log.info(_(u"Text commands not available")) |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
111 else: |
1992
d5befe7253aa
plugin XEP-0045: fixed typo in text commands
Goffi <goffi@goffi.org>
parents:
1990
diff
changeset
|
112 self.text_cmds.registerTextCommands(self) |
d5befe7253aa
plugin XEP-0045: fixed typo in text commands
Goffi <goffi@goffi.org>
parents:
1990
diff
changeset
|
113 self.text_cmds.addWhoIsCb(self._whois, 100) |
507
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
114 |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
115 self._mam = self.host.plugins.get(u"XEP-0313") |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
116 self._si = self.host.plugins[u"XEP-0359"] |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
117 |
1239
b6dbac8ee485
plugin XEP-0045: handle MUC presence
souliane <souliane@mailoo.org>
parents:
1199
diff
changeset
|
118 host.trigger.add("presence_available", self.presenceTrigger) |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
119 host.trigger.add("MessageReceived", self.messageReceivedTrigger, priority=1000000) |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
120 host.trigger.add("message_parse", self._message_parseTrigger) |
1239
b6dbac8ee485
plugin XEP-0045: handle MUC presence
souliane <souliane@mailoo.org>
parents:
1199
diff
changeset
|
121 |
2144
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2066
diff
changeset
|
122 def profileConnected(self, client): |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
123 def assign_service(service): |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
124 client.muc_service = service |
2468
8f14c1865e9e
plugin XEP-0045: new mucGetService bridge method to retrieve MUC service of the server.
Goffi <goffi@goffi.org>
parents:
2461
diff
changeset
|
125 return self.getMUCService(client).addCallback(assign_service) |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
126 |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
127 def _message_parseTrigger(self, client, message_elt, data): |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
128 """Add stanza-id from the room if present""" |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
129 if message_elt.getAttribute(u"type") != C.MESS_TYPE_GROUPCHAT: |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
130 return True |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
131 |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
132 # stanza_id will not be filled by parseMessage because the emitter |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
133 # is the room and not our server, so we have to parse it here |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
134 room_jid = data[u"from"].userhostJID() |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
135 stanza_id = self._si.getStanzaId(message_elt, room_jid) |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
136 if stanza_id: |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
137 data[u"extra"][u"stanza_id"] = stanza_id |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
138 |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
139 def messageReceivedTrigger(self, client, message_elt, post_treat): |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
140 if message_elt.getAttribute("type") == C.MESS_TYPE_GROUPCHAT: |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
141 if message_elt.subject or message_elt.delay: |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
142 return False |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
143 from_jid = jid.JID(message_elt['from']) |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
144 room_jid = from_jid.userhostJID() |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
145 if room_jid in client._muc_client.joined_rooms: |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
146 room = client._muc_client.joined_rooms[room_jid] |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
147 if room.state != ROOM_STATE_LIVE: |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
148 if getattr(room, "_history_type", HISTORY_LEGACY) == HISTORY_LEGACY: |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
149 # With MAM history, order is different, and we can get live |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
150 # messages before history is complete, so this is not a warning |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
151 # but an expected case. |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
152 # On the other hand, with legacy history, it's not normal. |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
153 log.warning(_( |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
154 u"Received non delayed message in a room before its " |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
155 u"initialisation: state={state}, msg={msg}").format( |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
156 state=room.state, |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
157 msg=message_elt.toXml())) |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
158 room._cache.append(message_elt) |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
159 return False |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
160 else: |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
161 log.warning(u"Received groupchat message for a room which has not been " |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
162 u"joined, ignoring it: {}".format(message_elt.toXml())) |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
163 return False |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
164 return True |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
165 |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
166 def checkRoomJoined(self, client, room_jid): |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
167 """Check that given room has been joined in current session |
1083
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
168 |
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
169 @param room_jid (JID): room JID |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
170 """ |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
171 if room_jid not in client._muc_client.joined_rooms: |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
172 raise exceptions.NotFound(_(u"This room has not been joined")) |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
173 |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
174 def isJoinedRoom(self, client, room_jid): |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
175 """Tell if a jid is a known and joined room |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
176 |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
177 @room_jid(jid.JID): jid of the room |
1083
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
178 """ |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
179 try: |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
180 self.checkRoomJoined(client, room_jid) |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
181 except exceptions.NotFound: |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
182 return False |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
183 else: |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
184 return True |
1083
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
185 |
2066
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
186 def _getRoomJoinedArgs(self, room, profile): |
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
187 return [ |
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
188 room.roomJID.userhost(), |
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
189 XEP_0045._getOccupants(room), |
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
190 room.nick, |
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
191 room.subject, |
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
192 profile |
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
193 ] |
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
194 |
1990
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
195 def _UIRoomJoinCb(self, data, profile): |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
196 room_jid = jid.JID(data['index']) |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
197 client = self.host.getClient(profile) |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
198 self.join(client, room_jid) |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
199 return {} |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
200 |
1986
fbd313cfd40b
plugin xep-0045: ask for password when getting a "not-allowed" error
Goffi <goffi@goffi.org>
parents:
1984
diff
changeset
|
201 def _passwordUICb(self, data, client, room_jid, nick): |
fbd313cfd40b
plugin xep-0045: ask for password when getting a "not-allowed" error
Goffi <goffi@goffi.org>
parents:
1984
diff
changeset
|
202 """Called when the user has given room password (or cancelled)""" |
fbd313cfd40b
plugin xep-0045: ask for password when getting a "not-allowed" error
Goffi <goffi@goffi.org>
parents:
1984
diff
changeset
|
203 if C.bool(data.get(C.XMLUI_DATA_CANCELLED, "false")): |
fbd313cfd40b
plugin xep-0045: ask for password when getting a "not-allowed" error
Goffi <goffi@goffi.org>
parents:
1984
diff
changeset
|
204 log.info(u"room join for {} is cancelled".format(room_jid.userhost())) |
fbd313cfd40b
plugin xep-0045: ask for password when getting a "not-allowed" error
Goffi <goffi@goffi.org>
parents:
1984
diff
changeset
|
205 raise failure.Failure(exceptions.CancelError(D_(u"Room joining cancelled by user"))) |
fbd313cfd40b
plugin xep-0045: ask for password when getting a "not-allowed" error
Goffi <goffi@goffi.org>
parents:
1984
diff
changeset
|
206 password = data[xml_tools.formEscape('password')] |
fbd313cfd40b
plugin xep-0045: ask for password when getting a "not-allowed" error
Goffi <goffi@goffi.org>
parents:
1984
diff
changeset
|
207 return client._muc_client.join(room_jid, nick, password).addCallbacks(self._joinCb, self._joinEb, (client, room_jid, nick), errbackArgs=(client, room_jid, nick, password)) |
fbd313cfd40b
plugin xep-0045: ask for password when getting a "not-allowed" error
Goffi <goffi@goffi.org>
parents:
1984
diff
changeset
|
208 |
1990
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
209 def _showListUI(self, items, client, service): |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
210 xmlui = xml_tools.XMLUI(title=D_('Rooms in {}'.format(service.full()))) |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
211 adv_list = xmlui.changeContainer('advanced_list', columns=1, selectable='single', callback_id=self._room_join_id) |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
212 items = sorted(items, key=lambda i: i.name.lower()) |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
213 for item in items: |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
214 adv_list.setRowIndex(item.entity.full()) |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
215 xmlui.addText(item.name) |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
216 adv_list.end() |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
217 self.host.actionNew({'xmlui': xmlui.toXml()}, profile=client.profile) |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
218 |
1986
fbd313cfd40b
plugin xep-0045: ask for password when getting a "not-allowed" error
Goffi <goffi@goffi.org>
parents:
1984
diff
changeset
|
219 def _joinCb(self, room, client, room_jid, nick): |
72 | 220 """Called when the user is in the requested room""" |
452
fd455b3ca6d4
plugin XEP-0045: room unlocking fix
Goffi <goffi@goffi.org>
parents:
451
diff
changeset
|
221 if room.locked: |
1358
bf3f669a6052
plugins XEP-0045, XEP-0249, parrot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1356
diff
changeset
|
222 # FIXME: the current behaviour is to create an instant room |
bf3f669a6052
plugins XEP-0045, XEP-0249, parrot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1356
diff
changeset
|
223 # and send the signal only when the room is unlocked |
bf3f669a6052
plugins XEP-0045, XEP-0249, parrot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1356
diff
changeset
|
224 # a proper configuration management should be done |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
225 log.debug(_(u"room locked !")) |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
226 d = client._muc_client.configure(room.roomJID, {}) |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
227 d.addErrback(lambda __: log.error(_(u'Error while configuring the room'))) |
2066
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
228 return room.fully_joined |
319 | 229 |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
230 def _joinEb(self, failure, client, room_jid, nick, password): |
72 | 231 """Called when something is going wrong when joining the room""" |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
232 try: |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
233 condition = failure.value.condition |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
234 except AttributeError: |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
235 msg_suffix = '' |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
236 else: |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
237 if condition == 'conflict': |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
238 # we have a nickname conflict, we try again with "_" suffixed to current nickname |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
239 nick += '_' |
1986
fbd313cfd40b
plugin xep-0045: ask for password when getting a "not-allowed" error
Goffi <goffi@goffi.org>
parents:
1984
diff
changeset
|
240 return client._muc_client.join(room_jid, nick, password).addCallbacks(self._joinCb, self._joinEb, (client, room_jid, nick), errbackArgs=(client, room_jid, nick, password)) |
fbd313cfd40b
plugin xep-0045: ask for password when getting a "not-allowed" error
Goffi <goffi@goffi.org>
parents:
1984
diff
changeset
|
241 elif condition == 'not-allowed': |
fbd313cfd40b
plugin xep-0045: ask for password when getting a "not-allowed" error
Goffi <goffi@goffi.org>
parents:
1984
diff
changeset
|
242 # room is restricted, we need a password |
fbd313cfd40b
plugin xep-0045: ask for password when getting a "not-allowed" error
Goffi <goffi@goffi.org>
parents:
1984
diff
changeset
|
243 password_ui = xml_tools.XMLUI("form", title=D_(u'Room {} is restricted').format(room_jid.userhost()), submit_id='') |
fbd313cfd40b
plugin xep-0045: ask for password when getting a "not-allowed" error
Goffi <goffi@goffi.org>
parents:
1984
diff
changeset
|
244 password_ui.addText(D_("This room is restricted, please enter the password")) |
fbd313cfd40b
plugin xep-0045: ask for password when getting a "not-allowed" error
Goffi <goffi@goffi.org>
parents:
1984
diff
changeset
|
245 password_ui.addPassword('password') |
fbd313cfd40b
plugin xep-0045: ask for password when getting a "not-allowed" error
Goffi <goffi@goffi.org>
parents:
1984
diff
changeset
|
246 d = xml_tools.deferXMLUI(self.host, password_ui, profile=client.profile) |
fbd313cfd40b
plugin xep-0045: ask for password when getting a "not-allowed" error
Goffi <goffi@goffi.org>
parents:
1984
diff
changeset
|
247 d.addCallback(self._passwordUICb, client, room_jid, nick) |
fbd313cfd40b
plugin xep-0045: ask for password when getting a "not-allowed" error
Goffi <goffi@goffi.org>
parents:
1984
diff
changeset
|
248 return d |
fbd313cfd40b
plugin xep-0045: ask for password when getting a "not-allowed" error
Goffi <goffi@goffi.org>
parents:
1984
diff
changeset
|
249 |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
250 msg_suffix = ' with condition "{}"'.format(failure.value.condition) |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
251 |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
252 mess = D_(u"Error while joining the room {room}{suffix}".format( |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
253 room = room_jid.userhost(), suffix = msg_suffix)) |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
950
diff
changeset
|
254 log.error(mess) |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
255 xmlui = xml_tools.note(mess, D_(u"Group chat error"), level=C.XMLUI_DATA_LVL_ERROR) |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
256 self.host.actionNew({'xmlui': xmlui.toXml()}, profile=client.profile) |
72 | 257 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
258 @staticmethod |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
259 def _getOccupants(room): |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
260 """Get occupants of a room in a form suitable for bridge""" |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
261 return {u.nick: {k:unicode(getattr(u,k) or '') for k in OCCUPANT_KEYS} for u in room.roster.values()} |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
262 |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
263 def _getRoomsJoined(self, profile_key=C.PROF_KEY_NONE): |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
264 client = self.host.getClient(profile_key) |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
265 return self.getRoomsJoined(client) |
1392
c7082457d03f
memory, plugin XEP-0045: getMainResource returns None when asking a MUC entity + fixes /whois on a MUC (bare) entity
souliane <souliane@mailoo.org>
parents:
1384
diff
changeset
|
266 |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
267 def getRoomsJoined(self, client): |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
268 """Return rooms where user is""" |
78
ace2af8abc5a
Added method to know which MUC are joined, and which subjects were received.
Goffi <goffi@goffi.org>
parents:
77
diff
changeset
|
269 result = [] |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
270 for room in client._muc_client.joined_rooms.values(): |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
271 if room.state == ROOM_STATE_LIVE: |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
272 result.append((room.roomJID.userhost(), self._getOccupants(room), room.nick, room.subject)) |
78
ace2af8abc5a
Added method to know which MUC are joined, and which subjects were received.
Goffi <goffi@goffi.org>
parents:
77
diff
changeset
|
273 return result |
ace2af8abc5a
Added method to know which MUC are joined, and which subjects were received.
Goffi <goffi@goffi.org>
parents:
77
diff
changeset
|
274 |
2461
34cb8b713370
plugin XEP-0045: added mucNickGet to retrieve our nickname in a MUC room
Goffi <goffi@goffi.org>
parents:
2414
diff
changeset
|
275 def _getRoomNick(self, room_jid_s, profile_key=C.PROF_KEY_NONE): |
34cb8b713370
plugin XEP-0045: added mucNickGet to retrieve our nickname in a MUC room
Goffi <goffi@goffi.org>
parents:
2414
diff
changeset
|
276 client = self.host.getClient(profile_key) |
34cb8b713370
plugin XEP-0045: added mucNickGet to retrieve our nickname in a MUC room
Goffi <goffi@goffi.org>
parents:
2414
diff
changeset
|
277 return self.getRoomNick(client, jid.JID(room_jid_s)) |
34cb8b713370
plugin XEP-0045: added mucNickGet to retrieve our nickname in a MUC room
Goffi <goffi@goffi.org>
parents:
2414
diff
changeset
|
278 |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
279 def getRoomNick(self, client, room_jid): |
93 | 280 """return nick used in room by user |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
281 |
1358
bf3f669a6052
plugins XEP-0045, XEP-0249, parrot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1356
diff
changeset
|
282 @param room_jid (jid.JID): JID of the room |
93 | 283 @profile_key: profile |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
284 @return: nick or empty string in case of error |
2461
34cb8b713370
plugin XEP-0045: added mucNickGet to retrieve our nickname in a MUC room
Goffi <goffi@goffi.org>
parents:
2414
diff
changeset
|
285 @raise exceptions.Notfound: use has not joined the room |
715
f47d7c09c60b
plugins XEP-0045: added methods to get room nicks and "MUC user left" trigger
souliane <souliane@mailoo.org>
parents:
713
diff
changeset
|
286 """ |
2461
34cb8b713370
plugin XEP-0045: added mucNickGet to retrieve our nickname in a MUC room
Goffi <goffi@goffi.org>
parents:
2414
diff
changeset
|
287 self.checkRoomJoined(client, room_jid) |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
288 return client._muc_client.joined_rooms[room_jid].nick |
715
f47d7c09c60b
plugins XEP-0045: added methods to get room nicks and "MUC user left" trigger
souliane <souliane@mailoo.org>
parents:
713
diff
changeset
|
289 |
916
1a759096ccbd
core: use of Const for profile_key + replaced '@DEFAULT@' default profile_key by '@NONE@'
Goffi <goffi@goffi.org>
parents:
811
diff
changeset
|
290 def _configureRoom(self, room_jid_s, profile_key=C.PROF_KEY_NONE): |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
291 client = self.host.getClient(profile_key) |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
292 d = self.configureRoom(client, jid.JID(room_jid_s)) |
801
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
293 d.addCallback(lambda xmlui: xmlui.toXml()) |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
294 return d |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
295 |
1094
4286a19e9e8a
pluging XEP-0045: configure room dynamic menu
Goffi <goffi@goffi.org>
parents:
1083
diff
changeset
|
296 def _configureRoomMenu(self, menu_data, profile): |
4286a19e9e8a
pluging XEP-0045: configure room dynamic menu
Goffi <goffi@goffi.org>
parents:
1083
diff
changeset
|
297 """Return room configuration form |
1135
3158f9e08760
plugin OTR: a warning is logged when Account is instancied with a bare jid.
Goffi <goffi@goffi.org>
parents:
1101
diff
changeset
|
298 |
1094
4286a19e9e8a
pluging XEP-0045: configure room dynamic menu
Goffi <goffi@goffi.org>
parents:
1083
diff
changeset
|
299 @param menu_data: %(menu_data)s |
4286a19e9e8a
pluging XEP-0045: configure room dynamic menu
Goffi <goffi@goffi.org>
parents:
1083
diff
changeset
|
300 @param profile: %(doc_profile)s |
4286a19e9e8a
pluging XEP-0045: configure room dynamic menu
Goffi <goffi@goffi.org>
parents:
1083
diff
changeset
|
301 """ |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
302 client = self.host.getClient(profile) |
1094
4286a19e9e8a
pluging XEP-0045: configure room dynamic menu
Goffi <goffi@goffi.org>
parents:
1083
diff
changeset
|
303 try: |
4286a19e9e8a
pluging XEP-0045: configure room dynamic menu
Goffi <goffi@goffi.org>
parents:
1083
diff
changeset
|
304 room_jid = jid.JID(menu_data['room_jid']) |
4286a19e9e8a
pluging XEP-0045: configure room dynamic menu
Goffi <goffi@goffi.org>
parents:
1083
diff
changeset
|
305 except KeyError: |
4286a19e9e8a
pluging XEP-0045: configure room dynamic menu
Goffi <goffi@goffi.org>
parents:
1083
diff
changeset
|
306 log.error(_("room_jid key is not present !")) |
4286a19e9e8a
pluging XEP-0045: configure room dynamic menu
Goffi <goffi@goffi.org>
parents:
1083
diff
changeset
|
307 return defer.fail(exceptions.DataError) |
1358
bf3f669a6052
plugins XEP-0045, XEP-0249, parrot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1356
diff
changeset
|
308 |
1094
4286a19e9e8a
pluging XEP-0045: configure room dynamic menu
Goffi <goffi@goffi.org>
parents:
1083
diff
changeset
|
309 def xmluiReceived(xmlui): |
2584
f8e4d855001e
plugin XEP-0045: display a note when no configuration is available on the room
Goffi <goffi@goffi.org>
parents:
2583
diff
changeset
|
310 if not xmlui: |
f8e4d855001e
plugin XEP-0045: display a note when no configuration is available on the room
Goffi <goffi@goffi.org>
parents:
2583
diff
changeset
|
311 msg = D_(u"No configuration available for this room") |
f8e4d855001e
plugin XEP-0045: display a note when no configuration is available on the room
Goffi <goffi@goffi.org>
parents:
2583
diff
changeset
|
312 return {"xmlui": xml_tools.note(msg).toXml()} |
1094
4286a19e9e8a
pluging XEP-0045: configure room dynamic menu
Goffi <goffi@goffi.org>
parents:
1083
diff
changeset
|
313 return {"xmlui": xmlui.toXml()} |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
314 return self.configureRoom(client, room_jid).addCallback(xmluiReceived) |
1094
4286a19e9e8a
pluging XEP-0045: configure room dynamic menu
Goffi <goffi@goffi.org>
parents:
1083
diff
changeset
|
315 |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
316 def configureRoom(self, client, room_jid): |
1094
4286a19e9e8a
pluging XEP-0045: configure room dynamic menu
Goffi <goffi@goffi.org>
parents:
1083
diff
changeset
|
317 """return the room configuration form |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
318 |
801
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
319 @param room: jid of the room to configure |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
320 @return: configuration form as XMLUI |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
321 """ |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
322 self.checkRoomJoined(client, room_jid) |
801
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
323 |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
324 def config2XMLUI(result): |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
325 if not result: |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
326 return "" |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
327 session_id, session_data = self._sessions.newSession(profile=client.profile) |
801
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
328 session_data["room_jid"] = room_jid |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
329 xmlui = xml_tools.dataForm2XMLUI(result, submit_id=self.__submit_conf_id) |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
330 xmlui.session_id = session_id |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
331 return xmlui |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
332 |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
333 d = client._muc_client.getConfiguration(room_jid) |
801
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
334 d.addCallback(config2XMLUI) |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
335 return d |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
336 |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
337 def _submitConfiguration(self, raw_data, profile): |
2583
8378806a70fe
plugin XEP-0045: fixed room configuration cancellation
Goffi <goffi@goffi.org>
parents:
2581
diff
changeset
|
338 cancelled = C.bool(raw_data.get("cancelled", C.BOOL_FALSE)) |
8378806a70fe
plugin XEP-0045: fixed room configuration cancellation
Goffi <goffi@goffi.org>
parents:
2581
diff
changeset
|
339 if cancelled: |
8378806a70fe
plugin XEP-0045: fixed room configuration cancellation
Goffi <goffi@goffi.org>
parents:
2581
diff
changeset
|
340 return defer.succeed({}) |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
341 client = self.host.getClient(profile) |
801
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
342 try: |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
343 session_data = self._sessions.profileGet(raw_data["session_id"], profile) |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
344 except KeyError: |
1068
1513511a0586
plugin XEP-0045: room configuration returns a success or failure message
souliane <souliane@mailoo.org>
parents:
1007
diff
changeset
|
345 log.warning(D_("Session ID doesn't exist, session has probably expired.")) |
1513511a0586
plugin XEP-0045: room configuration returns a success or failure message
souliane <souliane@mailoo.org>
parents:
1007
diff
changeset
|
346 _dialog = xml_tools.XMLUI('popup', title=D_('Room configuration failed')) |
1513511a0586
plugin XEP-0045: room configuration returns a success or failure message
souliane <souliane@mailoo.org>
parents:
1007
diff
changeset
|
347 _dialog.addText(D_("Session ID doesn't exist, session has probably expired.")) |
1513511a0586
plugin XEP-0045: room configuration returns a success or failure message
souliane <souliane@mailoo.org>
parents:
1007
diff
changeset
|
348 return defer.succeed({'xmlui': _dialog.toXml()}) |
801
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
349 |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
350 data = xml_tools.XMLUIResult2DataFormResult(raw_data) |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
351 d = client._muc_client.configure(session_data['room_jid'], data) |
1068
1513511a0586
plugin XEP-0045: room configuration returns a success or failure message
souliane <souliane@mailoo.org>
parents:
1007
diff
changeset
|
352 _dialog = xml_tools.XMLUI('popup', title=D_('Room configuration succeed')) |
1513511a0586
plugin XEP-0045: room configuration returns a success or failure message
souliane <souliane@mailoo.org>
parents:
1007
diff
changeset
|
353 _dialog.addText(D_("The new settings have been saved.")) |
1513511a0586
plugin XEP-0045: room configuration returns a success or failure message
souliane <souliane@mailoo.org>
parents:
1007
diff
changeset
|
354 d.addCallback(lambda ignore: {'xmlui': _dialog.toXml()}) |
801
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
355 del self._sessions[raw_data["session_id"]] |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
356 return d |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
357 |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
358 def isNickInRoom(self, client, room_jid, nick): |
522
3446ce33247d
plugin XEP-0045: added isNickInRoom method
Goffi <goffi@goffi.org>
parents:
519
diff
changeset
|
359 """Tell if a nick is currently present in a room""" |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
360 self.checkRoomJoined(client, room_jid) |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
361 return client._muc_client.joined_rooms[room_jid].inRoster(muc.User(nick)) |
78
ace2af8abc5a
Added method to know which MUC are joined, and which subjects were received.
Goffi <goffi@goffi.org>
parents:
77
diff
changeset
|
362 |
2468
8f14c1865e9e
plugin XEP-0045: new mucGetService bridge method to retrieve MUC service of the server.
Goffi <goffi@goffi.org>
parents:
2461
diff
changeset
|
363 def _getMUCService(self, jid_=None, profile=C.PROF_KEY_NONE): |
8f14c1865e9e
plugin XEP-0045: new mucGetService bridge method to retrieve MUC service of the server.
Goffi <goffi@goffi.org>
parents:
2461
diff
changeset
|
364 client = self.host.getClient(profile) |
8f14c1865e9e
plugin XEP-0045: new mucGetService bridge method to retrieve MUC service of the server.
Goffi <goffi@goffi.org>
parents:
2461
diff
changeset
|
365 d = self.getMUCService(client, jid_ or None) |
8f14c1865e9e
plugin XEP-0045: new mucGetService bridge method to retrieve MUC service of the server.
Goffi <goffi@goffi.org>
parents:
2461
diff
changeset
|
366 d.addCallback(lambda service_jid: service_jid.full() if service_jid is not None else u'') |
8f14c1865e9e
plugin XEP-0045: new mucGetService bridge method to retrieve MUC service of the server.
Goffi <goffi@goffi.org>
parents:
2461
diff
changeset
|
367 return d |
8f14c1865e9e
plugin XEP-0045: new mucGetService bridge method to retrieve MUC service of the server.
Goffi <goffi@goffi.org>
parents:
2461
diff
changeset
|
368 |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
369 @defer.inlineCallbacks |
2468
8f14c1865e9e
plugin XEP-0045: new mucGetService bridge method to retrieve MUC service of the server.
Goffi <goffi@goffi.org>
parents:
2461
diff
changeset
|
370 def getMUCService(self, client, jid_=None): |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
371 """Return first found MUC service of an entity |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
372 |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
373 @param jid_: entity which may have a MUC service, or None for our own server |
2468
8f14c1865e9e
plugin XEP-0045: new mucGetService bridge method to retrieve MUC service of the server.
Goffi <goffi@goffi.org>
parents:
2461
diff
changeset
|
374 @return (jid.JID, None): found service jid or None |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
375 """ |
2468
8f14c1865e9e
plugin XEP-0045: new mucGetService bridge method to retrieve MUC service of the server.
Goffi <goffi@goffi.org>
parents:
2461
diff
changeset
|
376 if jid_ is None: |
8f14c1865e9e
plugin XEP-0045: new mucGetService bridge method to retrieve MUC service of the server.
Goffi <goffi@goffi.org>
parents:
2461
diff
changeset
|
377 try: |
8f14c1865e9e
plugin XEP-0045: new mucGetService bridge method to retrieve MUC service of the server.
Goffi <goffi@goffi.org>
parents:
2461
diff
changeset
|
378 muc_service = client.muc_service |
8f14c1865e9e
plugin XEP-0045: new mucGetService bridge method to retrieve MUC service of the server.
Goffi <goffi@goffi.org>
parents:
2461
diff
changeset
|
379 except AttributeError: |
8f14c1865e9e
plugin XEP-0045: new mucGetService bridge method to retrieve MUC service of the server.
Goffi <goffi@goffi.org>
parents:
2461
diff
changeset
|
380 pass |
8f14c1865e9e
plugin XEP-0045: new mucGetService bridge method to retrieve MUC service of the server.
Goffi <goffi@goffi.org>
parents:
2461
diff
changeset
|
381 else: |
8f14c1865e9e
plugin XEP-0045: new mucGetService bridge method to retrieve MUC service of the server.
Goffi <goffi@goffi.org>
parents:
2461
diff
changeset
|
382 # we have a cached value, we return it |
8f14c1865e9e
plugin XEP-0045: new mucGetService bridge method to retrieve MUC service of the server.
Goffi <goffi@goffi.org>
parents:
2461
diff
changeset
|
383 defer.returnValue(muc_service) |
2148
a543eda2c923
core (memory/disco): getInfos now handle node + use client instead of profile in many methods
Goffi <goffi@goffi.org>
parents:
2145
diff
changeset
|
384 services = yield self.host.findServiceEntities(client, "conference", "text", jid_) |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
385 for service in services: |
1358
bf3f669a6052
plugins XEP-0045, XEP-0249, parrot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1356
diff
changeset
|
386 if ".irc." not in service.userhost(): |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
387 # FIXME: |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
388 # This ugly hack is here to avoid an issue with openfire: the IRC gateway |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
389 # use "conference/text" identity (instead of "conference/irc") |
712
f610864eb7a5
plugins (MUC, tools, games): generalize the generation of a unique room name when joining a MUC and no room is specified:
souliane <souliane@mailoo.org>
parents:
609
diff
changeset
|
390 muc_service = service |
f610864eb7a5
plugins (MUC, tools, games): generalize the generation of a unique room name when joining a MUC and no room is specified:
souliane <souliane@mailoo.org>
parents:
609
diff
changeset
|
391 break |
2613
9680cd958529
plugin XEP-0045: fixed crash when muc service is not found
Goffi <goffi@goffi.org>
parents:
2584
diff
changeset
|
392 else: |
9680cd958529
plugin XEP-0045: fixed crash when muc service is not found
Goffi <goffi@goffi.org>
parents:
2584
diff
changeset
|
393 muc_service = None |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
394 defer.returnValue(muc_service) |
712
f610864eb7a5
plugins (MUC, tools, games): generalize the generation of a unique room name when joining a MUC and no room is specified:
souliane <souliane@mailoo.org>
parents:
609
diff
changeset
|
395 |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
396 def _getUniqueName(self, muc_service="", profile_key=C.PROF_KEY_NONE): |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
397 client = self.host.getClient(profile_key) |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
398 return self.getUniqueName(client, muc_service or None).full() |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
399 |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
400 def getUniqueName(self, client, muc_service=None): |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
401 """Return unique name for a room, avoiding collision |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
402 |
1356
c01cbd8fc8dd
plugin XEP-0045: make joinMUC asynchronous and fixes its handler
souliane <souliane@mailoo.org>
parents:
1315
diff
changeset
|
403 @param muc_service (jid.JID) : leave empty string to use the default service |
c01cbd8fc8dd
plugin XEP-0045: make joinMUC asynchronous and fixes its handler
souliane <souliane@mailoo.org>
parents:
1315
diff
changeset
|
404 @return: jid.JID (unique room bare JID) |
712
f610864eb7a5
plugins (MUC, tools, games): generalize the generation of a unique room name when joining a MUC and no room is specified:
souliane <souliane@mailoo.org>
parents:
609
diff
changeset
|
405 """ |
1358
bf3f669a6052
plugins XEP-0045, XEP-0249, parrot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1356
diff
changeset
|
406 # TODO: we should use #RFC-0045 10.1.4 when available here |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
407 room_name = unicode(uuid.uuid4()) |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
408 if muc_service is None: |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
409 try: |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
410 muc_service = client.muc_service |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
411 except AttributeError: |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
412 raise exceptions.NotReady(u"Main server MUC service has not been checked yet") |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
413 if muc_service is None: |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
950
diff
changeset
|
414 log.warning(_("No MUC service found on main server")) |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
415 raise exceptions.FeatureNotFound |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
416 |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
417 muc_service = muc_service.userhost() |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
418 return jid.JID(u"{}@{}".format(room_name, muc_service)) |
319 | 419 |
1407
77f07ea90420
plugin XEP-0045, quick_frontend, primitivus: replace C.DEFAULT_MUC by bridge method getDefaultMUC (value is defined in plugin XEP-0045 and can be overriden with the config file)
souliane <souliane@mailoo.org>
parents:
1396
diff
changeset
|
420 def getDefaultMUC(self): |
77f07ea90420
plugin XEP-0045, quick_frontend, primitivus: replace C.DEFAULT_MUC by bridge method getDefaultMUC (value is defined in plugin XEP-0045 and can be overriden with the config file)
souliane <souliane@mailoo.org>
parents:
1396
diff
changeset
|
421 """Return the default MUC. |
77f07ea90420
plugin XEP-0045, quick_frontend, primitivus: replace C.DEFAULT_MUC by bridge method getDefaultMUC (value is defined in plugin XEP-0045 and can be overriden with the config file)
souliane <souliane@mailoo.org>
parents:
1396
diff
changeset
|
422 |
77f07ea90420
plugin XEP-0045, quick_frontend, primitivus: replace C.DEFAULT_MUC by bridge method getDefaultMUC (value is defined in plugin XEP-0045 and can be overriden with the config file)
souliane <souliane@mailoo.org>
parents:
1396
diff
changeset
|
423 @return: unicode |
77f07ea90420
plugin XEP-0045, quick_frontend, primitivus: replace C.DEFAULT_MUC by bridge method getDefaultMUC (value is defined in plugin XEP-0045 and can be overriden with the config file)
souliane <souliane@mailoo.org>
parents:
1396
diff
changeset
|
424 """ |
77f07ea90420
plugin XEP-0045, quick_frontend, primitivus: replace C.DEFAULT_MUC by bridge method getDefaultMUC (value is defined in plugin XEP-0045 and can be overriden with the config file)
souliane <souliane@mailoo.org>
parents:
1396
diff
changeset
|
425 return self.host.memory.getConfig(CONFIG_SECTION, 'default_muc', default_conf['default_muc']) |
77f07ea90420
plugin XEP-0045, quick_frontend, primitivus: replace C.DEFAULT_MUC by bridge method getDefaultMUC (value is defined in plugin XEP-0045 and can be overriden with the config file)
souliane <souliane@mailoo.org>
parents:
1396
diff
changeset
|
426 |
2066
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
427 def _join_eb(self, failure_, client): |
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
428 failure_.trap(AlreadyJoined) |
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
429 room = failure_.value.room |
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
430 return [True] + self._getRoomJoinedArgs(room, client.profile) |
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
431 |
2028
70bd7b242a9e
plugin XEP-0045: fixed options parameter handling in bridge callback
Goffi <goffi@goffi.org>
parents:
2021
diff
changeset
|
432 def _join(self, room_jid_s, nick, options, profile_key=C.PROF_KEY_NONE): |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
433 """join method used by bridge |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
434 |
2461
34cb8b713370
plugin XEP-0045: added mucNickGet to retrieve our nickname in a MUC room
Goffi <goffi@goffi.org>
parents:
2414
diff
changeset
|
435 @return (tuple): already_joined boolean + room joined arguments (see [_getRoomJoinedArgs]) |
712
f610864eb7a5
plugins (MUC, tools, games): generalize the generation of a unique room name when joining a MUC and no room is specified:
souliane <souliane@mailoo.org>
parents:
609
diff
changeset
|
436 """ |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
437 client = self.host.getClient(profile_key) |
1356
c01cbd8fc8dd
plugin XEP-0045: make joinMUC asynchronous and fixes its handler
souliane <souliane@mailoo.org>
parents:
1315
diff
changeset
|
438 if room_jid_s: |
1989
757c512fe06c
plugin XEP-0045: various fixes/improvments:
Goffi <goffi@goffi.org>
parents:
1986
diff
changeset
|
439 muc_service = client.muc_service |
1356
c01cbd8fc8dd
plugin XEP-0045: make joinMUC asynchronous and fixes its handler
souliane <souliane@mailoo.org>
parents:
1315
diff
changeset
|
440 try: |
c01cbd8fc8dd
plugin XEP-0045: make joinMUC asynchronous and fixes its handler
souliane <souliane@mailoo.org>
parents:
1315
diff
changeset
|
441 room_jid = jid.JID(room_jid_s) |
c01cbd8fc8dd
plugin XEP-0045: make joinMUC asynchronous and fixes its handler
souliane <souliane@mailoo.org>
parents:
1315
diff
changeset
|
442 except (RuntimeError, jid.InvalidFormat, AttributeError): |
2170 | 443 return defer.fail(jid.InvalidFormat(_(u"Invalid room identifier: {room_id}'. Please give a room short or full identifier like 'room' or 'room@{muc_service}'.").format( |
444 room_id=room_jid_s, | |
445 muc_service=unicode(muc_service)))) | |
1384
73f8582c7c99
plugins XEP-0045, XEP-0249: allow to join / invite without specifying the JID's host part (use client's values)
souliane <souliane@mailoo.org>
parents:
1381
diff
changeset
|
446 if not room_jid.user: |
73f8582c7c99
plugins XEP-0045, XEP-0249: allow to join / invite without specifying the JID's host part (use client's values)
souliane <souliane@mailoo.org>
parents:
1381
diff
changeset
|
447 room_jid.user, room_jid.host = room_jid.host, muc_service |
1356
c01cbd8fc8dd
plugin XEP-0045: make joinMUC asynchronous and fixes its handler
souliane <souliane@mailoo.org>
parents:
1315
diff
changeset
|
448 else: |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
449 room_jid = self.getUniqueName(profile_key=client.profile) |
743
5a131930348d
plugin XEP-0045: remove redondant errback from _join
souliane <souliane@mailoo.org>
parents:
742
diff
changeset
|
450 # TODO: error management + signal in bridge |
2028
70bd7b242a9e
plugin XEP-0045: fixed options parameter handling in bridge callback
Goffi <goffi@goffi.org>
parents:
2021
diff
changeset
|
451 d = self.join(client, room_jid, nick, options or None) |
2066
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
452 d.addCallback(lambda room: [False] + self._getRoomJoinedArgs(room, client.profile)) |
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
453 d.addErrback(self._join_eb, client) |
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
454 return d |
505
2402668b5d05
plugin xep-0045: nick change management
Goffi <goffi@goffi.org>
parents:
488
diff
changeset
|
455 |
1989
757c512fe06c
plugin XEP-0045: various fixes/improvments:
Goffi <goffi@goffi.org>
parents:
1986
diff
changeset
|
456 def join(self, client, room_jid, nick=None, options=None): |
757c512fe06c
plugin XEP-0045: various fixes/improvments:
Goffi <goffi@goffi.org>
parents:
1986
diff
changeset
|
457 if not nick: |
757c512fe06c
plugin XEP-0045: various fixes/improvments:
Goffi <goffi@goffi.org>
parents:
1986
diff
changeset
|
458 nick = client.jid.user |
757c512fe06c
plugin XEP-0045: various fixes/improvments:
Goffi <goffi@goffi.org>
parents:
1986
diff
changeset
|
459 if options is None: |
757c512fe06c
plugin XEP-0045: various fixes/improvments:
Goffi <goffi@goffi.org>
parents:
1986
diff
changeset
|
460 options = {} |
1977
bdc6a5b07922
plugin XEP-0045: fixed calls to join, nick, kick, ban and affiliate
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
461 if room_jid in client._muc_client.joined_rooms: |
2066
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
462 room = client._muc_client.joined_rooms[room_jid] |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
463 log.info(_(u'{profile} is already in room {room_jid}').format(profile=client.profile, room_jid = room_jid.userhost())) |
2066
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
464 return defer.fail(AlreadyJoined(room)) |
1977
bdc6a5b07922
plugin XEP-0045: fixed calls to join, nick, kick, ban and affiliate
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
465 log.info(_(u"[{profile}] is joining room {room} with nick {nick}").format(profile=client.profile, room=room_jid.userhost(), nick=nick)) |
bdc6a5b07922
plugin XEP-0045: fixed calls to join, nick, kick, ban and affiliate
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
466 |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
467 password = options.get("password") |
1977
bdc6a5b07922
plugin XEP-0045: fixed calls to join, nick, kick, ban and affiliate
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
468 |
1986
fbd313cfd40b
plugin xep-0045: ask for password when getting a "not-allowed" error
Goffi <goffi@goffi.org>
parents:
1984
diff
changeset
|
469 return client._muc_client.join(room_jid, nick, password).addCallbacks(self._joinCb, self._joinEb, (client, room_jid, nick), errbackArgs=(client, room_jid, nick, password)) |
1977
bdc6a5b07922
plugin XEP-0045: fixed calls to join, nick, kick, ban and affiliate
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
470 |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
471 def _nick(self, room_jid_s, nick, profile_key=C.PROF_KEY_NONE): |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
472 client = self.host.getClient(profile_key) |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
473 return self.nick(client, jid.JID(room_jid_s), nick) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
474 |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
475 def nick(self, client, room_jid, nick): |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
476 """Change nickname in a room""" |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
477 self.checkRoomJoined(client, room_jid) |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
478 return client._muc_client.nick(room_jid, nick) |
507
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
479 |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
480 def _leave(self, room_jid, profile_key): |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
481 client = self.host.getClient(profile_key) |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
482 return self.leave(client, jid.JID(room_jid)) |
515
29b5ef129488
plugin XEP-0045, plugin text commands: added '/title' command
Goffi <goffi@goffi.org>
parents:
509
diff
changeset
|
483 |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
484 def leave(self, client, room_jid): |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
485 self.checkRoomJoined(client, room_jid) |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
486 return client._muc_client.leave(room_jid) |
505
2402668b5d05
plugin xep-0045: nick change management
Goffi <goffi@goffi.org>
parents:
488
diff
changeset
|
487 |
2021
6c51e8f17c92
plugin XEP-0045: added bridge method to change subject
Goffi <goffi@goffi.org>
parents:
1992
diff
changeset
|
488 def _subject(self, room_jid_s, new_subject, profile_key): |
6c51e8f17c92
plugin XEP-0045: added bridge method to change subject
Goffi <goffi@goffi.org>
parents:
1992
diff
changeset
|
489 client = self.host.getClient(profile_key) |
6c51e8f17c92
plugin XEP-0045: added bridge method to change subject
Goffi <goffi@goffi.org>
parents:
1992
diff
changeset
|
490 return self.subject(client, jid.JID(room_jid_s), new_subject) |
6c51e8f17c92
plugin XEP-0045: added bridge method to change subject
Goffi <goffi@goffi.org>
parents:
1992
diff
changeset
|
491 |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
492 def subject(self, client, room_jid, subject): |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
493 self.checkRoomJoined(client, room_jid) |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
494 return client._muc_client.subject(room_jid, subject) |
507
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
495 |
2144
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2066
diff
changeset
|
496 def getHandler(self, client): |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
497 # create a MUC client and associate it with profile' session |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
498 muc_client = client._muc_client = SatMUCClient(self) |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
499 return muc_client |
72 | 500 |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
501 def kick(self, client, nick, room_jid, options=None): |
2689
d715d912afac
plugin XEP-0199: implementation of XMPP Ping
Goffi <goffi@goffi.org>
parents:
2613
diff
changeset
|
502 """Kick a participant from the room |
d715d912afac
plugin XEP-0199: implementation of XMPP Ping
Goffi <goffi@goffi.org>
parents:
2613
diff
changeset
|
503 |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
504 @param nick (str): nick of the user to kick |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
505 @param room_jid_s (JID): jid of the room |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
506 @param options (dict): attribute with extra info (reason, password) as in #XEP-0045 |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
507 """ |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
508 if options is None: |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
509 options = {} |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
510 self.checkRoomJoined(client, room_jid) |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
511 return client._muc_client.kick(room_jid, nick, reason=options.get('reason', None)) |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
512 |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
513 def ban(self, client, entity_jid, room_jid, options=None): |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
514 """Ban an entity from the room |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
515 |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
516 @param entity_jid (JID): bare jid of the entity to be banned |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
517 @param room_jid (JID): jid of the room |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
518 @param options: attribute with extra info (reason, password) as in #XEP-0045 |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
519 """ |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
520 self.checkRoomJoined(client, room_jid) |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
521 if options is None: |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
522 options = {} |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
523 assert not entity_jid.resource |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
524 assert not room_jid.resource |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
525 return client._muc_client.ban(room_jid, entity_jid, reason=options.get('reason', None)) |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
526 |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
527 def affiliate(self, client, entity_jid, room_jid, options): |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
528 """Change the affiliation of an entity |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
529 |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
530 @param entity_jid (JID): bare jid of the entity |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
531 @param room_jid_s (JID): jid of the room |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
532 @param options: attribute with extra info (reason, nick) as in #XEP-0045 |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
533 """ |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
534 self.checkRoomJoined(client, room_jid) |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
535 assert not entity_jid.resource |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
536 assert not room_jid.resource |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
537 assert 'affiliation' in options |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
538 # TODO: handles reason and nick |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
539 return client._muc_client.modifyAffiliationList(room_jid, [entity_jid], options['affiliation']) |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
540 |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
541 # Text commands # |
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
542 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
543 def cmd_nick(self, client, mess_data): |
1371
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
544 """change nickname |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
545 |
1371
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
546 @command (group): new_nick |
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
547 - new_nick: new nick to use |
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
548 """ |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
549 nick = mess_data["unparsed"].strip() |
1371
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
550 if nick: |
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
551 room = mess_data["to"] |
1977
bdc6a5b07922
plugin XEP-0045: fixed calls to join, nick, kick, ban and affiliate
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
552 self.nick(client, room, nick) |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
553 |
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
554 return False |
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
555 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
556 def cmd_join(self, client, mess_data): |
1371
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
557 """join a new room |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
558 |
1381
0d12d4e32664
plugin XEP-0045: /join text command can be used in all contexts, not only group
Goffi <goffi@goffi.org>
parents:
1371
diff
changeset
|
559 @command (all): JID |
1371
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
560 - JID: room to join (on the same service if full jid is not specified) |
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
561 """ |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
562 if mess_data["unparsed"].strip(): |
1989
757c512fe06c
plugin XEP-0045: various fixes/improvments:
Goffi <goffi@goffi.org>
parents:
1986
diff
changeset
|
563 room_jid = self.text_cmds.getRoomJID(mess_data["unparsed"].strip(), mess_data["to"].host) |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
564 nick = (self.getRoomNick(client, room_jid) or |
1989
757c512fe06c
plugin XEP-0045: various fixes/improvments:
Goffi <goffi@goffi.org>
parents:
1986
diff
changeset
|
565 client.jid.user) |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
566 self.join(client, room_jid, nick, {}) |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
567 |
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
568 return False |
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
569 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
570 def cmd_leave(self, client, mess_data): |
1371
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
571 """quit a room |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
572 |
1371
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
573 @command (group): [ROOM_JID] |
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
574 - ROOM_JID: jid of the room to live (current room if not specified) |
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
575 """ |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
576 if mess_data["unparsed"].strip(): |
1989
757c512fe06c
plugin XEP-0045: various fixes/improvments:
Goffi <goffi@goffi.org>
parents:
1986
diff
changeset
|
577 room = self.text_cmds.getRoomJID(mess_data["unparsed"].strip(), mess_data["to"].host) |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
578 else: |
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
579 room = mess_data["to"] |
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
580 |
1977
bdc6a5b07922
plugin XEP-0045: fixed calls to join, nick, kick, ban and affiliate
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
581 self.leave(client, room) |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
582 |
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
583 return False |
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
584 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
585 def cmd_part(self, client, mess_data): |
1371
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
586 """just a synonym of /leave |
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
587 |
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
588 @command (group): [ROOM_JID] |
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
589 - ROOM_JID: jid of the room to live (current room if not specified) |
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
590 """ |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
591 return self.cmd_leave(client, mess_data) |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
592 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
593 def cmd_kick(self, client, mess_data): |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
594 """kick a room member |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
595 |
1371
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
596 @command (group): ROOM_NICK |
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
597 - ROOM_NICK: the nick of the person to kick |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
598 """ |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
599 options = mess_data["unparsed"].strip().split() |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
600 try: |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
601 nick = options[0] |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
602 assert self.isNickInRoom(client, mess_data["to"], nick) |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
603 except (IndexError, AssertionError): |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
604 feedback = _(u"You must provide a member's nick to kick.") |
1989
757c512fe06c
plugin XEP-0045: various fixes/improvments:
Goffi <goffi@goffi.org>
parents:
1986
diff
changeset
|
605 self.text_cmds.feedBack(client, feedback, mess_data) |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
606 return False |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
607 |
1977
bdc6a5b07922
plugin XEP-0045: fixed calls to join, nick, kick, ban and affiliate
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
608 d = self.kick(client, nick, mess_data["to"], {} if len(options) == 1 else {'reason': options[1]}) |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
609 |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
610 def cb(__): |
1890
0a45bc8e7cf4
plugin XEP-0045: fixed feedback for /kick /ban and /afficiliate commands which should not be public
Goffi <goffi@goffi.org>
parents:
1789
diff
changeset
|
611 feedback_msg = _(u'You have kicked {}').format(nick) |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
612 if len(options) > 1: |
1890
0a45bc8e7cf4
plugin XEP-0045: fixed feedback for /kick /ban and /afficiliate commands which should not be public
Goffi <goffi@goffi.org>
parents:
1789
diff
changeset
|
613 feedback_msg += _(u' for the following reason: {}').format(options[1]) |
1989
757c512fe06c
plugin XEP-0045: various fixes/improvments:
Goffi <goffi@goffi.org>
parents:
1986
diff
changeset
|
614 self.text_cmds.feedBack(client, feedback_msg, mess_data) |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
615 return True |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
616 d.addCallback(cb) |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
617 return d |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
618 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
619 def cmd_ban(self, client, mess_data): |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
620 """ban an entity from the room |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
621 |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
622 @command (group): (JID) [reason] |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
623 - JID: the JID of the entity to ban |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
624 - reason: the reason why this entity is being banned |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
625 """ |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
626 options = mess_data["unparsed"].strip().split() |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
627 try: |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
628 jid_s = options[0] |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
629 entity_jid = jid.JID(jid_s).userhostJID() |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
630 assert(entity_jid.user) |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
631 assert(entity_jid.host) |
1742
244a605623d6
complete the Exception's list when catching JID error:
souliane <souliane@mailoo.org>
parents:
1700
diff
changeset
|
632 except (RuntimeError, jid.InvalidFormat, AttributeError, IndexError, AssertionError): |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
633 feedback = _(u"You must provide a valid JID to ban, like in '/ban contact@example.net'") |
1989
757c512fe06c
plugin XEP-0045: various fixes/improvments:
Goffi <goffi@goffi.org>
parents:
1986
diff
changeset
|
634 self.text_cmds.feedBack(client, feedback, mess_data) |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
635 return False |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
636 |
1977
bdc6a5b07922
plugin XEP-0045: fixed calls to join, nick, kick, ban and affiliate
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
637 d = self.ban(client, entity_jid, mess_data["to"], {} if len(options) == 1 else {'reason': options[1]}) |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
638 |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
639 def cb(__): |
1890
0a45bc8e7cf4
plugin XEP-0045: fixed feedback for /kick /ban and /afficiliate commands which should not be public
Goffi <goffi@goffi.org>
parents:
1789
diff
changeset
|
640 feedback_msg = _(u'You have banned {}').format(entity_jid) |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
641 if len(options) > 1: |
1890
0a45bc8e7cf4
plugin XEP-0045: fixed feedback for /kick /ban and /afficiliate commands which should not be public
Goffi <goffi@goffi.org>
parents:
1789
diff
changeset
|
642 feedback_msg += _(u' for the following reason: {}').format(options[1]) |
1989
757c512fe06c
plugin XEP-0045: various fixes/improvments:
Goffi <goffi@goffi.org>
parents:
1986
diff
changeset
|
643 self.text_cmds.feedBack(client, feedback_msg, mess_data) |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
644 return True |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
645 d.addCallback(cb) |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
646 return d |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
647 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
648 def cmd_affiliate(self, client, mess_data): |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
649 """affiliate an entity to the room |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
650 |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
651 @command (group): (JID) [owner|admin|member|none|outcast] |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
652 - JID: the JID of the entity to affiliate |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
653 - owner: grant owner privileges |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
654 - admin: grant admin privileges |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
655 - member: grant member privileges |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
656 - none: reset entity privileges |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
657 - outcast: ban entity |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
658 """ |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
659 options = mess_data["unparsed"].strip().split() |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
660 try: |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
661 jid_s = options[0] |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
662 entity_jid = jid.JID(jid_s).userhostJID() |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
663 assert(entity_jid.user) |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
664 assert(entity_jid.host) |
1742
244a605623d6
complete the Exception's list when catching JID error:
souliane <souliane@mailoo.org>
parents:
1700
diff
changeset
|
665 except (RuntimeError, jid.InvalidFormat, AttributeError, IndexError, AssertionError): |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
666 feedback = _(u"You must provide a valid JID to affiliate, like in '/affiliate contact@example.net member'") |
1989
757c512fe06c
plugin XEP-0045: various fixes/improvments:
Goffi <goffi@goffi.org>
parents:
1986
diff
changeset
|
667 self.text_cmds.feedBack(client, feedback, mess_data) |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
668 return False |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
669 |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
670 affiliation = options[1] if len(options) > 1 else 'none' |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
671 if affiliation not in AFFILIATIONS: |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
672 feedback = _(u"You must provide a valid affiliation: %s") % ' '.join(AFFILIATIONS) |
1989
757c512fe06c
plugin XEP-0045: various fixes/improvments:
Goffi <goffi@goffi.org>
parents:
1986
diff
changeset
|
673 self.text_cmds.feedBack(client, feedback, mess_data) |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
674 return False |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
675 |
1977
bdc6a5b07922
plugin XEP-0045: fixed calls to join, nick, kick, ban and affiliate
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
676 d = self.affiliate(client, entity_jid, mess_data["to"], {'affiliation': affiliation}) |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
677 |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
678 def cb(__): |
1890
0a45bc8e7cf4
plugin XEP-0045: fixed feedback for /kick /ban and /afficiliate commands which should not be public
Goffi <goffi@goffi.org>
parents:
1789
diff
changeset
|
679 feedback_msg = _(u'New affiliation for %(entity)s: %(affiliation)s').format(entity=entity_jid, affiliation=affiliation) |
1989
757c512fe06c
plugin XEP-0045: various fixes/improvments:
Goffi <goffi@goffi.org>
parents:
1986
diff
changeset
|
680 self.text_cmds.feedBack(client, feedback_msg, mess_data) |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
681 return True |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
682 d.addCallback(cb) |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
683 return d |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
684 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
685 def cmd_title(self, client, mess_data): |
1371
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
686 """change room's subject |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
687 |
1371
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
688 @command (group): title |
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
689 - title: new room subject |
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
690 """ |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
691 subject = mess_data["unparsed"].strip() |
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
692 |
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
693 if subject: |
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
694 room = mess_data["to"] |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
695 self.subject(client, room, subject) |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
696 |
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
697 return False |
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
698 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
699 def cmd_topic(self, client, mess_data): |
1371
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
700 """just a synonym of /title |
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
701 |
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
702 @command (group): title |
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
703 - title: new room subject |
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
704 """ |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
705 return self.cmd_title(client, mess_data) |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
706 |
1990
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
707 def cmd_list(self, client, mess_data): |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
708 """list available rooms in a muc server |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
709 |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
710 @command (all): [MUC_SERVICE] |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
711 - MUC_SERVICE: service to request |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
712 empty value will request room's service for a room, |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
713 or user's server default MUC service in a one2one chat |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
714 """ |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
715 unparsed = mess_data["unparsed"].strip() |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
716 try: |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
717 service = jid.JID(unparsed) |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
718 except RuntimeError: |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
719 if mess_data['type'] == C.MESS_TYPE_GROUPCHAT: |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
720 room_jid = mess_data["to"] |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
721 service = jid.JID(room_jid.host) |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
722 elif client.muc_service is not None: |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
723 service = client.muc_service |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
724 else: |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
725 msg = D_(u"No known default MUC service".format(unparsed)) |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
726 self.text_cmds.feedBack(client, msg, mess_data) |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
727 return False |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
728 except jid.InvalidFormat: |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
729 msg = D_(u"{} is not a valid JID!".format(unparsed)) |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
730 self.text_cmds.feedBack(client, msg, mess_data) |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
731 return False |
2148
a543eda2c923
core (memory/disco): getInfos now handle node + use client instead of profile in many methods
Goffi <goffi@goffi.org>
parents:
2145
diff
changeset
|
732 d = self.host.getDiscoItems(client, service) |
1990
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
733 d.addCallback(self._showListUI, client, service) |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
734 |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
735 return False |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
736 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
737 def _whois(self, client, whois_msg, mess_data, target_jid): |
1199 | 738 """ Add MUC user information to whois """ |
928
73873e9b56f7
plugin XEP-0045: added user information to /whois text command
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
739 if mess_data['type'] != "groupchat": |
73873e9b56f7
plugin XEP-0045: added user information to /whois text command
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
740 return |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
741 if target_jid.userhostJID() not in client._muc_client.joined_rooms: |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
950
diff
changeset
|
742 log.warning(_("This room has not been joined")) |
928
73873e9b56f7
plugin XEP-0045: added user information to /whois text command
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
743 return |
1392
c7082457d03f
memory, plugin XEP-0045: getMainResource returns None when asking a MUC entity + fixes /whois on a MUC (bare) entity
souliane <souliane@mailoo.org>
parents:
1384
diff
changeset
|
744 if not target_jid.resource: |
c7082457d03f
memory, plugin XEP-0045: getMainResource returns None when asking a MUC entity + fixes /whois on a MUC (bare) entity
souliane <souliane@mailoo.org>
parents:
1384
diff
changeset
|
745 return |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
746 user = client._muc_client.joined_rooms[target_jid.userhostJID()].getUser(target_jid.resource) |
928
73873e9b56f7
plugin XEP-0045: added user information to /whois text command
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
747 whois_msg.append(_("Nickname: %s") % user.nick) |
73873e9b56f7
plugin XEP-0045: added user information to /whois text command
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
748 if user.entity: |
73873e9b56f7
plugin XEP-0045: added user information to /whois text command
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
749 whois_msg.append(_("Entity: %s") % user.entity) |
1083
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
750 if user.affiliation != 'none': |
928
73873e9b56f7
plugin XEP-0045: added user information to /whois text command
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
751 whois_msg.append(_("Affiliation: %s") % user.affiliation) |
1083
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
752 if user.role != 'none': |
928
73873e9b56f7
plugin XEP-0045: added user information to /whois text command
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
753 whois_msg.append(_("Role: %s") % user.role) |
73873e9b56f7
plugin XEP-0045: added user information to /whois text command
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
754 if user.status: |
73873e9b56f7
plugin XEP-0045: added user information to /whois text command
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
755 whois_msg.append(_("Status: %s") % user.status) |
73873e9b56f7
plugin XEP-0045: added user information to /whois text command
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
756 if user.show: |
73873e9b56f7
plugin XEP-0045: added user information to /whois text command
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
757 whois_msg.append(_("Show: %s") % user.show) |
73873e9b56f7
plugin XEP-0045: added user information to /whois text command
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
758 |
1239
b6dbac8ee485
plugin XEP-0045: handle MUC presence
souliane <souliane@mailoo.org>
parents:
1199
diff
changeset
|
759 def presenceTrigger(self, presence_elt, client): |
b6dbac8ee485
plugin XEP-0045: handle MUC presence
souliane <souliane@mailoo.org>
parents:
1199
diff
changeset
|
760 # XXX: shouldn't it be done by the server ?!! |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
761 muc_client = client._muc_client |
1358
bf3f669a6052
plugins XEP-0045, XEP-0249, parrot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1356
diff
changeset
|
762 for room_jid, room in muc_client.joined_rooms.iteritems(): |
2815
27d9d25ec3cd
plugin XEP-0045: fixed issue with deepcopy by using new xml_tools.elementCopy method
Goffi <goffi@goffi.org>
parents:
2794
diff
changeset
|
763 elt = xml_tools.elementCopy(presence_elt) |
1358
bf3f669a6052
plugins XEP-0045, XEP-0249, parrot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1356
diff
changeset
|
764 elt['to'] = room_jid.userhost() + '/' + room.nick |
1239
b6dbac8ee485
plugin XEP-0045: handle MUC presence
souliane <souliane@mailoo.org>
parents:
1199
diff
changeset
|
765 client.presence.send(elt) |
b6dbac8ee485
plugin XEP-0045: handle MUC presence
souliane <souliane@mailoo.org>
parents:
1199
diff
changeset
|
766 return True |
b6dbac8ee485
plugin XEP-0045: handle MUC presence
souliane <souliane@mailoo.org>
parents:
1199
diff
changeset
|
767 |
72 | 768 |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
769 class SatMUCClient(muc.MUCClient): |
1466
2184d5f496b5
plugin XEP-0045: added disco announce
Goffi <goffi@goffi.org>
parents:
1417
diff
changeset
|
770 implements(iwokkel.IDisco) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
771 |
72 | 772 def __init__(self, plugin_parent): |
773 self.plugin_parent = plugin_parent | |
774 muc.MUCClient.__init__(self) | |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
775 self._changing_nicks = set() # used to keep trace of who is changing nick, |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
776 # and to discard userJoinedRoom signal in this case |
72 | 777 print "init SatMUCClient OK" |
515
29b5ef129488
plugin XEP-0045, plugin text commands: added '/title' command
Goffi <goffi@goffi.org>
parents:
509
diff
changeset
|
778 |
1358
bf3f669a6052
plugins XEP-0045, XEP-0249, parrot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1356
diff
changeset
|
779 @property |
bf3f669a6052
plugins XEP-0045, XEP-0249, parrot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1356
diff
changeset
|
780 def joined_rooms(self): |
bf3f669a6052
plugins XEP-0045, XEP-0249, parrot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1356
diff
changeset
|
781 return self._rooms |
bf3f669a6052
plugins XEP-0045, XEP-0249, parrot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1356
diff
changeset
|
782 |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
783 @property |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
784 def host(self): |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
785 return self.plugin_parent.host |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
786 |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
787 @property |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
788 def client(self): |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
789 return self.parent |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
790 |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
791 @property |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
792 def _mam(self): |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
793 return self.plugin_parent._mam |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
794 |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
795 @property |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
796 def _si(self): |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
797 return self.plugin_parent._si |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
798 |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
799 def changeRoomState(self, room, new_state): |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
800 """Check that room is in expected state, and change it |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
801 |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
802 @param new_state: one of ROOM_STATE_* |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
803 """ |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
804 new_state_idx = ROOM_STATES.index(new_state) |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
805 if new_state_idx == -1: |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
806 raise exceptions.InternalError("unknown room state") |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
807 if new_state_idx < 1: |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
808 raise exceptions.InternalError("unexpected new room state ({room}): {state}".format( |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
809 room=room.userhost(), |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
810 state=new_state)) |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
811 expected_state = ROOM_STATES[new_state_idx-1] |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
812 if room.state != expected_state: |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
813 log.error(_( |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
814 u"room {room} is not in expected state: room is in state {current_state} " |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
815 u"while we were expecting {expected_state}").format( |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
816 room=room.userhost(), |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
817 current_state=room.state, |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
818 expected_state=expected_state)) |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
819 room.state = new_state |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
820 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
821 def _addRoom(self, room): |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
822 super(SatMUCClient, self)._addRoom(room) |
2066
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
823 room._roster_ok = False # True when occupants list has been fully received |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
824 room.state = ROOM_STATE_OCCUPANTS |
2066
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
825 # FIXME: check if history_d is not redundant with fully_joined |
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
826 room.fully_joined = defer.Deferred() # called when everything is OK |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
827 # cache data until room is ready |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
828 # list of elements which will be re-injected in stream |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
829 room._cache = [] |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
830 |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
831 @defer.inlineCallbacks |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
832 def _joinLegacy(self, client, room_jid, nick, password): |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
833 """Join room an retrieve history with legacy method""" |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
834 mess_data_list = yield self.host.memory.historyGet(room_jid, |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
835 client.jid.userhostJID(), |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
836 limit=1, |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
837 between=True, |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
838 profile=client.profile) |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
839 if mess_data_list: |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
840 timestamp = mess_data_list[0][1] |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
841 # we use seconds since last message to get backlog without duplicates |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
842 # and we remove 1 second to avoid getting the last message again |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
843 seconds = int(time.time() - timestamp) - 1 |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
844 else: |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
845 seconds = None |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
846 |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
847 room = yield super(SatMUCClient, self).join( |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
848 room_jid, nick, muc.HistoryOptions(seconds=seconds), password) |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
849 # used to send bridge signal once backlog are written in history |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
850 room._history_type = HISTORY_LEGACY |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
851 room._history_d = defer.Deferred() |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
852 room._history_d.callback(None) |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
853 defer.returnValue(room) |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
854 |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
855 @defer.inlineCallbacks |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
856 def _joinMAM(self, client, room_jid, nick, password): |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
857 """Join room and retrieve history using MAM""" |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
858 room = yield super(SatMUCClient, self).join( |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
859 # we don't want any history from room as we'll get it with MAM |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
860 room_jid, nick, muc.HistoryOptions(maxStanzas=0), password=password) |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
861 room._history_type = HISTORY_MAM |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
862 room._history_d = defer.Deferred() |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
863 |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
864 last_mess = yield self.host.memory.historyGet(room_jid, |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
865 None, |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
866 limit=1, |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
867 between=False, |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
868 filters={u'last_stanza_id': True}, |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
869 profile=client.profile) |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
870 if last_mess: |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
871 stanza_id = last_mess[0][-1][u'stanza_id'] |
2718
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
872 rsm_req = rsm.RSMRequest(max_=100, after=stanza_id) |
2724
35a0ab3032bb
plugin XEP-0045: don't loop when initiating MAM archive
Goffi <goffi@goffi.org>
parents:
2723
diff
changeset
|
873 no_loop=False |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
874 else: |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
875 log.info(u"We have no MAM archive for room {room_jid}.".format( |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
876 room_jid=room_jid)) |
2718
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
877 # we don't want the whole archive if we have no archive yet |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
878 # as it can be huge |
2723
c6be5962752d
plugin XEP-0045: request 50 *last* MAM messages if new archive
Goffi <goffi@goffi.org>
parents:
2718
diff
changeset
|
879 rsm_req = rsm.RSMRequest(max_=50, before=u'') |
2724
35a0ab3032bb
plugin XEP-0045: don't loop when initiating MAM archive
Goffi <goffi@goffi.org>
parents:
2723
diff
changeset
|
880 no_loop=True |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
881 |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
882 mam_req = mam.MAMRequest(rsm_=rsm_req) |
2718
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
883 complete = False |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
884 count = 0 |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
885 while not complete: |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
886 mam_data = yield self._mam.getArchives(client, mam_req, |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
887 service=room_jid) |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
888 elt_list, rsm_response, mam_response = mam_data |
2724
35a0ab3032bb
plugin XEP-0045: don't loop when initiating MAM archive
Goffi <goffi@goffi.org>
parents:
2723
diff
changeset
|
889 complete = True if no_loop else mam_response[u"complete"] |
2718
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
890 # we update MAM request for next iteration |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
891 mam_req.rsm.after = rsm_response.last |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
892 |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
893 if not elt_list: |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
894 break |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
895 else: |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
896 count += len(elt_list) |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
897 |
2718
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
898 for mess_elt in elt_list: |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
899 try: |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
900 fwd_message_elt = self._mam.getMessageFromResult( |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
901 client, mess_elt, mam_req, service=room_jid) |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
902 except exceptions.DataError: |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
903 continue |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
904 if fwd_message_elt.getAttribute(u"to"): |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
905 log.warning( |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
906 u'Forwarded message element has a "to" attribute while it is ' |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
907 u'forbidden by specifications') |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
908 fwd_message_elt[u"to"] = client.jid.full() |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
909 mess_data = client.messageProt.parseMessage(fwd_message_elt) |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
910 # we attache parsed message data to element, to avoid parsing |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
911 # again in _addToHistory |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
912 fwd_message_elt._mess_data = mess_data |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
913 # and we inject to MUC workflow |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
914 client._muc_client._onGroupChat(fwd_message_elt) |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
915 |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
916 if not count: |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
917 log.info(_(u"No message received while offline in {room_jid}".format( |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
918 room_jid=room_jid))) |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
919 else: |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
920 log.info( |
2718
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
921 _(u"We have received {num_mess} message(s) in {room_jid} while " |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
922 u"offline.") |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
923 .format(num_mess=count, room_jid=room_jid)) |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
924 |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
925 # for legacy history, the following steps are done in receivedSubject but for MAM |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
926 # the order is different (we have to join then get MAM archive, so subject |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
927 # is received before archive), so we change state and add the callbacks here. |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
928 self.changeRoomState(room, ROOM_STATE_LIVE) |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
929 room._history_d.addCallbacks(self._historyCb, self._historyEb, [room], |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
930 errbackArgs=[room]) |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
931 |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
932 # callback is done now that all needed Deferred have been added to _history_d |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
933 room._history_d.callback(None) |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
934 |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
935 defer.returnValue(room) |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
936 |
2728
1b11da85492c
plugin XEP-0045: fixed bad MAM detection on join
Goffi <goffi@goffi.org>
parents:
2724
diff
changeset
|
937 @defer.inlineCallbacks |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
938 def join(self, room_jid, nick, password=None): |
2728
1b11da85492c
plugin XEP-0045: fixed bad MAM detection on join
Goffi <goffi@goffi.org>
parents:
2724
diff
changeset
|
939 has_mam = yield self.host.hasFeature(self.client, mam.NS_MAM, room_jid) |
1b11da85492c
plugin XEP-0045: fixed bad MAM detection on join
Goffi <goffi@goffi.org>
parents:
2724
diff
changeset
|
940 if not self._mam or not has_mam: |
1b11da85492c
plugin XEP-0045: fixed bad MAM detection on join
Goffi <goffi@goffi.org>
parents:
2724
diff
changeset
|
941 room = yield self._joinLegacy(self.client, room_jid, nick, password) |
1b11da85492c
plugin XEP-0045: fixed bad MAM detection on join
Goffi <goffi@goffi.org>
parents:
2724
diff
changeset
|
942 defer.returnValue(room) |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
943 else: |
2728
1b11da85492c
plugin XEP-0045: fixed bad MAM detection on join
Goffi <goffi@goffi.org>
parents:
2724
diff
changeset
|
944 room = yield self._joinMAM(self.client, room_jid, nick, password) |
1b11da85492c
plugin XEP-0045: fixed bad MAM detection on join
Goffi <goffi@goffi.org>
parents:
2724
diff
changeset
|
945 defer.returnValue(room) |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
946 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
947 ## presence/roster ## |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
948 |
1891
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
949 def availableReceived(self, presence): |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
950 """ |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
951 Available presence was received. |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
952 """ |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
953 # XXX: we override MUCClient.availableReceived to fix bugs |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
954 # (affiliation and role are not set) |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
955 |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
956 room, user = self._getRoomUser(presence) |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
957 |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
958 if room is None: |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
959 return |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
960 |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
961 if user is None: |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
962 nick = presence.sender.resource |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
963 if not nick: |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
964 log.warning(_(u"missing nick in presence: {xml}").format( |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
965 xml = presence.toElement().toXml())) |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
966 return |
1891
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
967 user = muc.User(nick, presence.entity) |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
968 |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
969 # Update user data |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
970 user.role = presence.role |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
971 user.affiliation = presence.affiliation |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
972 user.status = presence.status |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
973 user.show = presence.show |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
974 |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
975 if room.inRoster(user): |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
976 self.userUpdatedStatus(room, user, presence.show, presence.status) |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
977 else: |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
978 room.addUser(user) |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
979 self.userJoinedRoom(room, user) |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
980 |
507
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
981 def unavailableReceived(self, presence): |
1358
bf3f669a6052
plugins XEP-0045, XEP-0249, parrot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1356
diff
changeset
|
982 # XXX: we override this method to manage nickname change |
507
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
983 """ |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
984 Unavailable presence was received. |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
985 |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
986 If this was received from a MUC room occupant JID, that occupant has |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
987 left the room. |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
988 """ |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
989 room, user = self._getRoomUser(presence) |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
990 |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
991 if room is None or user is None: |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
992 return |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
993 |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
994 room.removeUser(user) |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
995 |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
996 if muc.STATUS_CODE.NEW_NICK in presence.mucStatuses: |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
997 self._changing_nicks.add(presence.nick) |
507
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
998 self.userChangedNick(room, user, presence.nick) |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
999 else: |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1000 self._changing_nicks.discard(presence.nick) |
507
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1001 self.userLeftRoom(room, user) |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1002 |
74
6e3a06b4dd36
plugin xep-0045: added roomUserJoined and roomUserLeft signals
Goffi <goffi@goffi.org>
parents:
73
diff
changeset
|
1003 def userJoinedRoom(self, room, user): |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1004 if user.nick == room.nick: |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1005 # we have received our own nick, this mean that the full room roster was received |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1006 self.changeRoomState(room, ROOM_STATE_SELF_PRESENCE) |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1007 log.debug(u"room {room} joined with nick {nick}".format(room=room.occupantJID.userhost(), nick=user.nick)) |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1008 # We set type so we don't have to use a deferred with disco to check entity type |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1009 self.host.memory.updateEntityData(room.roomJID, C.ENTITY_TYPE, ENTITY_TYPE_MUC, profile_key=self.client.profile) |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1010 elif room.state not in (ROOM_STATE_OCCUPANTS, ROOM_STATE_LIVE): |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1011 log.warning(u"Received user presence data in a room before its initialisation (current state: {state})," |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1012 "this is not standard! Ignoring it: {room} ({nick})".format( |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1013 state=room.state, |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1014 room=room.roomJID.userhost(), |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1015 nick=user.nick)) |
1984
de4fac507dc4
xep-0045: ignore non standard presence received between own presence and room subject
Goffi <goffi@goffi.org>
parents:
1977
diff
changeset
|
1016 return |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1017 else: |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1018 if not room.fully_joined.called: |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1019 return |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1020 try: |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1021 self._changing_nicks.remove(user.nick) |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1022 except KeyError: |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1023 # this is a new user |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1024 log.debug(_(u"user {nick} has joined room {room_id}").format(nick=user.nick, room_id=room.occupantJID.userhost())) |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1025 if not self.host.trigger.point("MUC user joined", room, user, self.client.profile): |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1026 return |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1027 |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1028 extra = {'info_type': ROOM_USER_JOINED, |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1029 'user_affiliation': user.affiliation, |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1030 'user_role': user.role, |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1031 'user_nick': user.nick |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1032 } |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1033 if user.entity is not None: |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1034 extra['user_entity'] = user.entity.full() |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1035 mess_data = { # dict is similar to the one used in client.onMessage |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1036 "from": room.roomJID, |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1037 "to": self.client.jid, |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1038 "uid": unicode(uuid.uuid4()), |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1039 "message": {'': D_(u"=> {} has joined the room").format(user.nick)}, |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1040 "subject": {}, |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1041 "type": C.MESS_TYPE_INFO, |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1042 "extra": extra, |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1043 "timestamp": time.time(), |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1044 } |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1045 # FIXME: we disable presence in history as it's taking a lot of space |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1046 # while not indispensable. In the future an option may allow |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1047 # to re-enable it |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1048 # self.client.messageAddToHistory(mess_data) |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1049 self.client.messageSendToBridge(mess_data) |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1050 |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
1051 |
74
6e3a06b4dd36
plugin xep-0045: added roomUserJoined and roomUserLeft signals
Goffi <goffi@goffi.org>
parents:
73
diff
changeset
|
1052 def userLeftRoom(self, room, user): |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1053 if not self.host.trigger.point("MUC user left", room, user, self.client.profile): |
715
f47d7c09c60b
plugins XEP-0045: added methods to get room nicks and "MUC user left" trigger
souliane <souliane@mailoo.org>
parents:
713
diff
changeset
|
1054 return |
507
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1055 if user.nick == room.nick: |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1056 # we left the room |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1057 room_jid_s = room.roomJID.userhost() |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1058 log.info(_(u"Room ({room}) left ({profile})").format( |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1059 room = room_jid_s, profile = self.client.profile)) |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1060 self.host.memory.delEntityCache(room.roomJID, profile_key=self.client.profile) |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1061 self.host.bridge.mucRoomLeft(room.roomJID.userhost(), self.client.profile) |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1062 elif room.state != ROOM_STATE_LIVE: |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1063 log.warning(u"Received user presence data in a room before its initialisation (current state: {state})," |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1064 "this is not standard! Ignoring it: {room} ({nick})".format( |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1065 state=room.state, |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1066 room=room.roomJID.userhost(), |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1067 nick=user.nick)) |
1984
de4fac507dc4
xep-0045: ignore non standard presence received between own presence and room subject
Goffi <goffi@goffi.org>
parents:
1977
diff
changeset
|
1068 return |
507
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1069 else: |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1070 if not room.fully_joined.called: |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1071 return |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1072 log.debug(_(u"user {nick} left room {room_id}").format(nick=user.nick, room_id=room.occupantJID.userhost())) |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1073 extra = {'info_type': ROOM_USER_LEFT, |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1074 'user_affiliation': user.affiliation, |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1075 'user_role': user.role, |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1076 'user_nick': user.nick |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1077 } |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1078 if user.entity is not None: |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1079 extra['user_entity'] = user.entity.full() |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1080 mess_data = { # dict is similar to the one used in client.onMessage |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1081 "from": room.roomJID, |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1082 "to": self.client.jid, |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1083 "uid": unicode(uuid.uuid4()), |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1084 "message": {'': D_(u"<= {} has left the room").format(user.nick)}, |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1085 "subject": {}, |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1086 "type": C.MESS_TYPE_INFO, |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1087 "extra": extra, |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1088 "timestamp": time.time(), |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1089 } |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1090 # FIXME: disable history, see userJoinRoom comment |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1091 # self.client.messageAddToHistory(mess_data) |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1092 self.client.messageSendToBridge(mess_data) |
507
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1093 |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1094 def userChangedNick(self, room, user, new_nick): |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1095 self.host.bridge.mucRoomUserChangedNick(room.roomJID.userhost(), user.nick, new_nick, self.client.profile) |
72 | 1096 |
77
1ae680f9682e
wix: MUC groupchat management + short nick shown in chat window instead of full jid when possible
Goffi <goffi@goffi.org>
parents:
76
diff
changeset
|
1097 def userUpdatedStatus(self, room, user, show, status): |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1098 self.host.bridge.presenceUpdate(room.roomJID.userhost() + '/' + user.nick, show or '', 0, {C.PRESENCE_STATUSES_DEFAULT: status or ''}, self.client.profile) |
77
1ae680f9682e
wix: MUC groupchat management + short nick shown in chat window instead of full jid when possible
Goffi <goffi@goffi.org>
parents:
76
diff
changeset
|
1099 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1100 ## messages ## |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1101 |
1256
4b27b9bf31b0
plugin XEP-0045: use HISTORY_LIMIT param to retrieve the MUC history
souliane <souliane@mailoo.org>
parents:
1250
diff
changeset
|
1102 def receivedGroupChat(self, room, user, body): |
1409
3265a2639182
massive (preventive) addition of 'u' (unicode) before the strings passed to logging functions
souliane <souliane@mailoo.org>
parents:
1407
diff
changeset
|
1103 log.debug(u'receivedGroupChat: room=%s user=%s body=%s' % (room.roomJID.full(), user, body)) |
1256
4b27b9bf31b0
plugin XEP-0045: use HISTORY_LIMIT param to retrieve the MUC history
souliane <souliane@mailoo.org>
parents:
1250
diff
changeset
|
1104 |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1105 def _addToHistory(self, __, user, message): |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1106 try: |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1107 # message can be already parsed (with MAM), in this case mess_data |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1108 # it attached to the element |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1109 mess_data = message.element._mess_data |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1110 except AttributeError: |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1111 mess_data = self.client.messageProt.parseMessage(message.element) |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1112 if mess_data[u'message'] or mess_data[u'subject']: |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1113 return self.host.memory.addToHistory(self.client, mess_data) |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1114 else: |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1115 return defer.succeed(None) |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1116 |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1117 def _addToHistoryEb(self, failure): |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1118 failure.trap(exceptions.CancelError) |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1119 |
1256
4b27b9bf31b0
plugin XEP-0045: use HISTORY_LIMIT param to retrieve the MUC history
souliane <souliane@mailoo.org>
parents:
1250
diff
changeset
|
1120 def receivedHistory(self, room, user, message): |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1121 """Called when history (backlog) message are received |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1122 |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1123 we check if message is not already in our history |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1124 and add it if needed |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1125 @param room(muc.Room): room instance |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1126 @param user(muc.User, None): the user that sent the message |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1127 None if the message come from the room |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1128 @param message(muc.GroupChat): the parsed message |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1129 """ |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1130 if room.state != ROOM_STATE_SELF_PRESENCE: |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1131 log.warning(_( |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1132 u"received history in unexpected state in room {room} (state: " |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1133 u"{state})").format(room = room.roomJID.userhost(), |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1134 state = room.state)) |
2794
33fa70c102de
plugin XEP-0045: fixed crash when <delay> is used at an unexpected time.
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
1135 if not hasattr(room, "_history_d"): |
33fa70c102de
plugin XEP-0045: fixed crash when <delay> is used at an unexpected time.
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
1136 # XXX: this hack is due to buggy behaviour seen in the wild because of the |
33fa70c102de
plugin XEP-0045: fixed crash when <delay> is used at an unexpected time.
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
1137 # "mod_delay" prosody module being activated. This module add an |
33fa70c102de
plugin XEP-0045: fixed crash when <delay> is used at an unexpected time.
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
1138 # unexpected <delay> elements which break our workflow. |
33fa70c102de
plugin XEP-0045: fixed crash when <delay> is used at an unexpected time.
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
1139 log.warning(_(u"storing the unexpected message anyway, to avoid loss")) |
33fa70c102de
plugin XEP-0045: fixed crash when <delay> is used at an unexpected time.
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
1140 # we have to restore URI which are stripped by wokkel parsing |
33fa70c102de
plugin XEP-0045: fixed crash when <delay> is used at an unexpected time.
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
1141 for c in message.element.children: |
33fa70c102de
plugin XEP-0045: fixed crash when <delay> is used at an unexpected time.
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
1142 if c.uri is None: |
33fa70c102de
plugin XEP-0045: fixed crash when <delay> is used at an unexpected time.
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
1143 c.uri = C.NS_CLIENT |
33fa70c102de
plugin XEP-0045: fixed crash when <delay> is used at an unexpected time.
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
1144 mess_data = self.client.messageProt.parseMessage(message.element) |
33fa70c102de
plugin XEP-0045: fixed crash when <delay> is used at an unexpected time.
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
1145 message.element._mess_data = mess_data |
33fa70c102de
plugin XEP-0045: fixed crash when <delay> is used at an unexpected time.
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
1146 self._addToHistory(None, user, message) |
33fa70c102de
plugin XEP-0045: fixed crash when <delay> is used at an unexpected time.
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
1147 if mess_data[u'message'] or mess_data[u'subject']: |
33fa70c102de
plugin XEP-0045: fixed crash when <delay> is used at an unexpected time.
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
1148 self.host.bridge.messageNew( |
33fa70c102de
plugin XEP-0045: fixed crash when <delay> is used at an unexpected time.
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
1149 *self.client.messageGetBridgeArgs(mess_data), |
33fa70c102de
plugin XEP-0045: fixed crash when <delay> is used at an unexpected time.
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
1150 profile=self.client.profile |
33fa70c102de
plugin XEP-0045: fixed crash when <delay> is used at an unexpected time.
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
1151 ) |
33fa70c102de
plugin XEP-0045: fixed crash when <delay> is used at an unexpected time.
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
1152 return |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1153 room._history_d.addCallback(self._addToHistory, user, message) |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1154 room._history_d.addErrback(self._addToHistoryEb) |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1155 |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1156 ## subject ## |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1157 |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1158 def groupChatReceived(self, message): |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1159 """ |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1160 A group chat message has been received from a MUC room. |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1161 |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1162 There are a few event methods that may get called here. |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1163 L{receivedGroupChat}, L{receivedSubject} or L{receivedHistory}. |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1164 """ |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1165 # We override this method to fix subject handling |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1166 # FIXME: remove this merge fixed upstream |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1167 room, user = self._getRoomUser(message) |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1168 |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1169 if room is None: |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1170 return |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1171 |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1172 if message.subject is not None: |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1173 self.receivedSubject(room, user, message.subject) |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1174 elif message.delay is None: |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1175 self.receivedGroupChat(room, user, message) |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1176 else: |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1177 self.receivedHistory(room, user, message) |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1178 |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1179 def subject(self, room, subject): |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1180 return muc.MUCClientProtocol.subject(self, room, subject) |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1181 |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1182 def _historyCb(self, __, room): |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1183 """Called when history have been written to database and subject is received |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1184 |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1185 this method will finish joining by: |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1186 - sending message to bridge |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1187 - calling fully_joined deferred |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1188 - sending stanza put in cache |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1189 - cleaning variables not needed anymore |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1190 """ |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1191 args = self.plugin_parent._getRoomJoinedArgs(room, self.client.profile) |
2066
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
1192 self.host.bridge.mucRoomJoined(*args) |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1193 room.fully_joined.callback(room) |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1194 del room._history_d |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1195 del room._history_type |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1196 cache = room._cache |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1197 del room._cache |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1198 for elem in cache: |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1199 self.client.xmlstream.dispatch(elem) |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1200 |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1201 def _historyEb(self, failure_, room): |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1202 log.error(u"Error while managing history: {}".format(failure_)) |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1203 self._historyCb(None, room) |
1256
4b27b9bf31b0
plugin XEP-0045: use HISTORY_LIMIT param to retrieve the MUC history
souliane <souliane@mailoo.org>
parents:
1250
diff
changeset
|
1204 |
405
10b4f577d0c0
MUC update to follow wokkel's MUC branch update
Goffi <goffi@goffi.org>
parents:
372
diff
changeset
|
1205 def receivedSubject(self, room, user, subject): |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1206 # when subject is received, we know that we have whole roster and history |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1207 # cf. http://xmpp.org/extensions/xep-0045.html#enter-subject |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1208 room.subject = subject # FIXME: subject doesn't handle xml:lang |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1209 if room.state != ROOM_STATE_LIVE: |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1210 if room._history_type == HISTORY_LEGACY: |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1211 self.changeRoomState(room, ROOM_STATE_LIVE) |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1212 room._history_d.addCallbacks(self._historyCb, self._historyEb, [room], errbackArgs=[room]) |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1213 else: |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1214 # the subject has been changed |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1215 log.debug(_(u"New subject for room ({room_id}): {subject}").format(room_id = room.roomJID.full(), subject = subject)) |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1216 self.host.bridge.mucRoomNewSubject(room.roomJID.userhost(), subject, self.client.profile) |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1217 |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1218 ## disco ## |
1466
2184d5f496b5
plugin XEP-0045: added disco announce
Goffi <goffi@goffi.org>
parents:
1417
diff
changeset
|
1219 |
2184d5f496b5
plugin XEP-0045: added disco announce
Goffi <goffi@goffi.org>
parents:
1417
diff
changeset
|
1220 def getDiscoInfo(self, requestor, target, nodeIdentifier=''): |
2184d5f496b5
plugin XEP-0045: added disco announce
Goffi <goffi@goffi.org>
parents:
1417
diff
changeset
|
1221 return [disco.DiscoFeature(NS_MUC)] |
2184d5f496b5
plugin XEP-0045: added disco announce
Goffi <goffi@goffi.org>
parents:
1417
diff
changeset
|
1222 |
2184d5f496b5
plugin XEP-0045: added disco announce
Goffi <goffi@goffi.org>
parents:
1417
diff
changeset
|
1223 def getDiscoItems(self, requestor, target, nodeIdentifier=''): |
2184d5f496b5
plugin XEP-0045: added disco announce
Goffi <goffi@goffi.org>
parents:
1417
diff
changeset
|
1224 # TODO: manage room queries ? Bad for privacy, must be disabled by default |
2184d5f496b5
plugin XEP-0045: added disco announce
Goffi <goffi@goffi.org>
parents:
1417
diff
changeset
|
1225 # see XEP-0045 § 6.7 |
2184d5f496b5
plugin XEP-0045: added disco announce
Goffi <goffi@goffi.org>
parents:
1417
diff
changeset
|
1226 return [] |