summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxime “pep” Buquet <pep@bouah.net>2019-04-28 00:32:09 +0100
committerMaxime “pep” Buquet <pep@bouah.net>2019-04-28 00:32:09 +0100
commit200f229464d87791f9cc67a03df0259741bf24a6 (patch)
tree9aac3480fc61aa8d4c09cf79751b1e8c965586a0
parent89a9b33e52a515cbaa9bd766133883540d163e33 (diff)
downloadpoezio-200f229464d87791f9cc67a03df0259741bf24a6.tar.gz
poezio-200f229464d87791f9cc67a03df0259741bf24a6.tar.bz2
poezio-200f229464d87791f9cc67a03df0259741bf24a6.tar.xz
poezio-200f229464d87791f9cc67a03df0259741bf24a6.zip
MucTab: Replace tab.name with tab.jid where appropriate
Signed-off-by: Maxime “pep” Buquet <pep@bouah.net>
-rw-r--r--poezio/tabs/muctab.py120
1 files changed, 65 insertions, 55 deletions
diff --git a/poezio/tabs/muctab.py b/poezio/tabs/muctab.py
index 1c752fa9..81bb5f0b 100644
--- a/poezio/tabs/muctab.py
+++ b/poezio/tabs/muctab.py
@@ -14,10 +14,11 @@ import os
import random
import re
import functools
+from copy import copy
from datetime import datetime
from typing import Dict, Callable, List, Optional, Union, Set
-from slixmpp import JID
+from slixmpp import InvalidJID, JID
from poezio.tabs import ChatTab, Tab, SHOW_NAME
from poezio import common
@@ -63,7 +64,6 @@ class MucTab(ChatTab):
self.own_nick = nick
# self User object
self.own_user = None # type: Optional[User]
- self.name = jid
self.password = password
# buffered presences
self.presence_buffer = []
@@ -95,7 +95,7 @@ class MucTab(ChatTab):
@property
def general_jid(self):
- return self.name
+ return self.jid
def check_send_chat_state(self) -> bool:
"If we should send a chat state"
@@ -128,14 +128,14 @@ class MucTab(ChatTab):
"""
The user do not want to send their config, send an iq cancel
"""
- muc.cancel_config(self.core.xmpp, self.name)
+ muc.cancel_config(self.core.xmpp, self.jid.bare)
self.core.close_tab()
def send_config(self, form):
"""
The user sends their config to the server
"""
- muc.configure_room(self.core.xmpp, self.name, form)
+ muc.configure_room(self.core.xmpp, self.jid.bare, form)
self.core.close_tab()
def join(self):
@@ -150,7 +150,7 @@ class MucTab(ChatTab):
seconds = None
muc.join_groupchat(
self.core,
- self.name,
+ self.jid.bare,
self.own_nick,
self.password,
status=status.message,
@@ -195,11 +195,11 @@ class MucTab(ChatTab):
self.add_message(msg, typ=2)
self.disconnect()
- muc.leave_groupchat(self.core.xmpp, self.name, self.own_nick,
+ muc.leave_groupchat(self.core.xmpp, self.jid.bare, self.own_nick,
message)
- self.core.disable_private_tabs(self.name, reason=msg)
+ self.core.disable_private_tabs(self.jid.bare, reason=msg)
else:
- muc.leave_groupchat(self.core.xmpp, self.name, self.own_nick,
+ muc.leave_groupchat(self.core.xmpp, self.jid.bare, self.own_nick,
message)
def change_affiliation(self,
@@ -227,7 +227,7 @@ class MucTab(ChatTab):
if nick_or_jid in [user.nick for user in self.users]:
muc.set_user_affiliation(
self.core.xmpp,
- self.name,
+ self.jid.bare,
affiliation,
nick=nick_or_jid,
callback=callback,
@@ -235,7 +235,7 @@ class MucTab(ChatTab):
else:
muc.set_user_affiliation(
self.core.xmpp,
- self.name,
+ self.jid.bare,
affiliation,
jid=safeJID(nick_or_jid),
callback=callback,
@@ -258,10 +258,14 @@ class MucTab(ChatTab):
return self.core.information(
'The role must be one of ' + ', '.join(valid_roles), 'Error')
- if not safeJID(self.name + '/' + nick):
+ try:
+ target_jid = copy(self.jid)
+ target_jid.resource = nick
+ except InvalidJID:
return self.core.information('Invalid nick', 'Info')
+
muc.set_user_role(
- self.core.xmpp, self.name, nick, reason, role, callback=callback)
+ self.core.xmpp, self.jid.bare, nick, reason, role, callback=callback)
@refresh_wrapper.conditional
def print_info(self, nick: str) -> bool:
@@ -297,7 +301,7 @@ class MucTab(ChatTab):
def change_topic(self, topic: str):
"""Change the current topic"""
- muc.change_subject(self.core.xmpp, self.name, topic)
+ muc.change_subject(self.core.xmpp, self.jid.bare, topic)
@refresh_wrapper.always
def show_topic(self):
@@ -326,7 +330,7 @@ class MucTab(ChatTab):
def recolor(self, random_colors=False):
"""Recolor the current MUC users"""
deterministic = config.get_by_tabname('deterministic_nick_colors',
- self.name)
+ self.jid.bare)
if deterministic:
for user in self.users:
if user is self.own_user:
@@ -375,7 +379,7 @@ class MucTab(ChatTab):
user.change_color(color)
config.set_and_save(nick, color, 'muc_colors')
nick_color_aliases = config.get_by_tabname('nick_color_aliases',
- self.name)
+ self.jid.bare)
if nick_color_aliases:
# if any user in the room has a nick which is an alias of the
# nick, update its color
@@ -402,12 +406,12 @@ class MucTab(ChatTab):
def get_nick(self) -> str:
if config.get('show_muc_jid'):
- return self.name
- bookmark = self.core.bookmarks[self.name]
+ return self.jid.bare
+ bookmark = self.core.bookmarks[self.jid.bare]
if bookmark is not None and bookmark.name:
return bookmark.name
# TODO: send the disco#info identity name here, if it exists.
- return safeJID(self.name).user
+ return self.jid.user
def get_text_window(self):
return self.text_win
@@ -448,7 +452,7 @@ class MucTab(ChatTab):
for status_code in presence.xml.findall(STATUS_XPATH):
status_codes.add(status_code.attrib['code'])
if presence['type'] == 'error':
- self.core.room_error(presence, self.name)
+ self.core.room_error(presence, self.jid.bare)
elif not self.joined:
own = '110' in status_codes or self.own_nick == presence['from'].resource
if own or len(self.presence_buffer) >= 10:
@@ -475,7 +479,7 @@ class MucTab(ChatTab):
Batch-process all the initial presences
"""
deterministic = config.get_by_tabname('deterministic_nick_colors',
- self.name)
+ self.jid.bare)
for stanza in self.presence_buffer:
try:
@@ -520,8 +524,8 @@ class MucTab(ChatTab):
self.own_nick = from_nick
self.own_user = new_user
self.joined = True
- if self.name in self.core.initial_joins:
- self.core.initial_joins.remove(self.name)
+ if self.jid.bare in self.core.initial_joins:
+ self.core.initial_joins.remove(self.jid.bare)
self._state = 'normal'
elif self != self.core.tabs.current_tab:
self._state = 'joined'
@@ -550,7 +554,7 @@ class MucTab(ChatTab):
'info_col': info_col,
}
self.add_message(enable_message, typ=2)
- self.core.enable_private_tabs(self.name, enable_message)
+ self.core.enable_private_tabs(self.jid.bare, enable_message)
if '201' in status_codes:
self.add_message(
'\x19%(info_col)s}Info: The room '
@@ -593,7 +597,7 @@ class MucTab(ChatTab):
self.on_user_join(from_nick, affiliation, show, status, role, jid,
user_color)
elif user is None:
- log.error('BUG: User %s in %s is None', from_nick, self.name)
+ log.error('BUG: User %s in %s is None', from_nick, self.jid.bare)
return
elif change_nick:
self.core.events.trigger('muc_nickchange', presence, self)
@@ -647,7 +651,7 @@ class MucTab(ChatTab):
When a new user joins the groupchat
"""
deterministic = config.get_by_tabname('deterministic_nick_colors',
- self.name)
+ self.jid.bare)
user = User(from_nick, affiliation, show, status, role, jid,
deterministic, color)
bisect.insort_left(self.users, user)
@@ -685,7 +689,7 @@ class MucTab(ChatTab):
'color_spec': spec_col,
}
self.add_message(msg, typ=2)
- self.core.on_user_rejoined_private_conversation(self.name, from_nick)
+ self.core.on_user_rejoined_private_conversation(self.jid.bare, from_nick)
def on_user_nick_change(self, presence, user, from_nick, from_room):
new_nick = presence.xml.find(
@@ -699,7 +703,7 @@ class MucTab(ChatTab):
else:
user.change_nick(new_nick)
deterministic = config.get_by_tabname('deterministic_nick_colors',
- self.name)
+ self.jid.bare)
color = config.get_by_tabname(new_nick, 'muc_colors') or None
if color or deterministic:
user.change_color(color, deterministic)
@@ -724,7 +728,7 @@ class MucTab(ChatTab):
},
typ=2)
# rename the private tabs if needed
- self.core.rename_private_tabs(self.name, from_nick, user)
+ self.core.rename_private_tabs(self.jid.bare, from_nick, user)
def on_user_banned(self, presence, user, from_nick):
"""
@@ -758,7 +762,7 @@ class MucTab(ChatTab):
'spec': char_kick,
'info_col': info_col
}
- self.core.disable_private_tabs(self.name, reason=kick_msg)
+ self.core.disable_private_tabs(self.jid.bare, reason=kick_msg)
self.disconnect()
self.refresh_tab_win()
self.core.tabs.current_tab.refresh_input()
@@ -767,11 +771,11 @@ class MucTab(ChatTab):
self.general_jid)
delay = common.parse_str_to_secs(delay)
if delay <= 0:
- muc.join_groupchat(self.core, self.name, self.own_nick)
+ muc.join_groupchat(self.core, self.jid.bare, self.own_nick)
else:
self.core.add_timed_event(
timed_events.DelayedEvent(delay, muc.join_groupchat,
- self.core, self.name,
+ self.core, self.jid.bare,
self.own_nick))
else:
@@ -837,7 +841,7 @@ class MucTab(ChatTab):
'spec': char_kick,
'info_col': info_col
}
- self.core.disable_private_tabs(self.name, reason=kick_msg)
+ self.core.disable_private_tabs(self.jid.bare, reason=kick_msg)
self.disconnect()
self.refresh_tab_win()
self.core.tabs.current_tab.refresh_input()
@@ -847,11 +851,11 @@ class MucTab(ChatTab):
self.general_jid)
delay = common.parse_str_to_secs(delay)
if delay <= 0:
- muc.join_groupchat(self.core, self.name, self.own_nick)
+ muc.join_groupchat(self.core, self.jid.bare, self.own_nick)
else:
self.core.add_timed_event(
timed_events.DelayedEvent(delay, muc.join_groupchat,
- self.core, self.name,
+ self.core, self.jid.bare,
self.own_nick))
else:
if config.get_by_tabname('display_user_color_in_join_part',
@@ -1039,7 +1043,7 @@ class MucTab(ChatTab):
to be
"""
if time is None and self.joined: # don't log the history messages
- if not logger.log_message(self.name, nickname, txt, typ=typ):
+ if not logger.log_message(self.jid.bare, nickname, txt, typ=typ):
self.core.information('Unable to write in the log file',
'Error')
@@ -1083,7 +1087,7 @@ class MucTab(ChatTab):
if (not time and nickname and nickname != self.own_nick
and self.state != 'current'):
if (self.state != 'highlight'
- and config.get_by_tabname('notify_messages', self.name)):
+ and config.get_by_tabname('notify_messages', self.jid.bare)):
self.state = 'message'
if time and not txt.startswith('/me'):
txt = '\x19%(info_col)s}%(txt)s' % {
@@ -1125,7 +1129,7 @@ class MucTab(ChatTab):
return False
def matching_names(self):
- return [(1, safeJID(self.name).user), (3, self.name)]
+ return [(1, self.jid.user), (3, self.jid.full)]
def enable_self_ping_event(self):
delay = config.get_by_tabname(
@@ -1148,7 +1152,7 @@ class MucTab(ChatTab):
def send_self_ping(self):
timeout = config.get_by_tabname(
"self_ping_timeout", self.general_jid, default=60)
- to = self.name + "/" + self.own_nick
+ to = self.jid.bare + "/" + self.own_nick
self.core.xmpp.plugin['xep_0199'].send_ping(
jid=to,
callback=self.on_self_ping_result,
@@ -1174,7 +1178,7 @@ class MucTab(ChatTab):
if color != '':
return color
nick_color_aliases = config.get_by_tabname('nick_color_aliases',
- self.name)
+ self.jid.bare)
if nick_color_aliases:
nick_alias = re.sub('^_*(.*?)_*$', '\\1', nick)
color = config.get_by_tabname(nick_alias, 'muc_colors')
@@ -1341,7 +1345,7 @@ class MucTab(ChatTab):
self.state = 'highlight'
beep_on = config.get('beep_on').split()
if 'highlight' in beep_on and 'message' not in beep_on:
- if not config.get_by_tabname('disable_beep', self.name):
+ if not config.get_by_tabname('disable_beep', self.jid.bare):
curses.beep()
return True
return False
@@ -1354,7 +1358,7 @@ class MucTab(ChatTab):
if args is None:
return self.core.command.help('invite')
jid, reason = args
- self.core.command.invite('%s %s "%s"' % (jid, self.name, reason))
+ self.core.command.invite('%s %s "%s"' % (jid, self.jid.bare, reason))
@command_args_parser.quoted(1)
def command_info(self, args):
@@ -1380,7 +1384,7 @@ class MucTab(ChatTab):
return
self.core.open_new_form(form, self.cancel_config, self.send_config)
- fixes.get_room_form(self.core.xmpp, self.name, on_form_received)
+ fixes.get_room_form(self.core.xmpp, self.jid.bare, on_form_received)
@command_args_parser.raw
def command_cycle(self, msg):
@@ -1425,11 +1429,14 @@ class MucTab(ChatTab):
if args is None:
return self.core.command.help('version')
nick = args[0]
- if nick in [user.nick for user in self.users]:
- jid = safeJID(self.name).bare
- jid = safeJID(jid + '/' + nick)
- else:
- jid = safeJID(nick)
+ try:
+ if nick in [user.nick for user in self.users]:
+ jid = copy(self.jid)
+ jid.resource = nick
+ else:
+ jid = JID(nick)
+ except InvalidJID:
+ return self.core.information('Invalid jid or nick %r' % nick, 'Error')
self.core.xmpp.plugin['xep_0092'].get_version(
jid, callback=self.core.handler.on_version_result)
@@ -1445,9 +1452,12 @@ class MucTab(ChatTab):
return self.core.information('/nick only works in joined rooms',
'Info')
current_status = self.core.get_status()
- if not safeJID(self.name + '/' + nick):
+ try:
+ target_jid = copy(self.jid)
+ target_jid.resource = nick
+ except InvalidJID:
return self.core.information('Invalid nick', 'Info')
- muc.change_nick(self.core, self.name, nick, current_status.message,
+ muc.change_nick(self.core, self.jid.bare, nick, current_status.message,
current_status.show)
@command_args_parser.quoted(0, 1, [''])
@@ -1484,7 +1494,7 @@ class MucTab(ChatTab):
r = None
for user in self.users:
if user.nick == nick:
- r = self.core.open_private_window(self.name, user.nick)
+ r = self.core.open_private_window(self.jid.bare, user.nick)
if r and len(args) == 2:
msg = args[1]
self.core.tabs.current_tab.command_say(
@@ -1575,7 +1585,7 @@ class MucTab(ChatTab):
def callback(iq):
if iq['type'] == 'error':
- self.core.room_error(iq, self.name)
+ self.core.room_error(iq, self.jid.bare)
if args is None:
return self.core.command.help('role')
@@ -1593,7 +1603,7 @@ class MucTab(ChatTab):
def callback(iq):
if iq['type'] == 'error':
- self.core.room_error(iq, self.name)
+ self.core.room_error(iq, self.jid.bare)
if args is None:
return self.core.command.help('affiliation')
@@ -1608,7 +1618,7 @@ class MucTab(ChatTab):
Or normal input + enter
"""
needed = 'inactive' if self.inactive else 'active'
- msg = self.core.xmpp.make_message(self.name)
+ msg = self.core.xmpp.make_message(self.jid.bare)
msg['type'] = 'groupchat'
msg['body'] = line
# trigger the event BEFORE looking for colors.
@@ -1742,7 +1752,7 @@ class MucTab(ChatTab):
nicks = [
os.environ.get('USER'),
config.get('default_nick'),
- self.core.get_bookmark_nickname(self.name)
+ self.core.get_bookmark_nickname(self.jid.bare)
]
nicks = [i for i in nicks if i]
return Completion(the_input.auto_completion, nicks, '', quotify=False)