quick_frontend, primitivus: better PEP-8 compliance + remove/rename some (Quick)Chat attributes:
- remove QuickChat.id, use QuickChat.target instead
- rename Chat.present_panel to Chat.occupants_panel
- rename Chat.present_wid to Chat.occupants_list
This commit is contained in:
parent
6875e4f906
commit
6dc8b211bf
2 changed files with 51 additions and 57 deletions
|
|
@ -52,7 +52,7 @@ class ChatText(urwid.FlowWidget):
|
|||
def keypress(self, size, key):
|
||||
return key
|
||||
|
||||
def rows(self,size,focus=False):
|
||||
def rows(self, size, focus=False):
|
||||
return self.display_widget(size, focus).rows(size, focus)
|
||||
|
||||
def render(self, size, focus=False):
|
||||
|
|
@ -62,19 +62,18 @@ class ChatText(urwid.FlowWidget):
|
|||
return canvas
|
||||
|
||||
def get_cursor_coords(self, size):
|
||||
#(maxcol,) = size
|
||||
return 0, 0
|
||||
|
||||
def display_widget(self, size, focus):
|
||||
render_txt = []
|
||||
if not self.is_info:
|
||||
if self.parent.show_timestamp:
|
||||
time_format = "%c" if self.timestamp < self.parent.day_change else "%H:%M" #if the message was sent before today, we print the full date
|
||||
render_txt.append(('date',"[%s]" % time.strftime(time_format, self.timestamp).decode('utf-8')))
|
||||
time_format = "%c" if self.timestamp < self.parent.day_change else "%H:%M" # if the message was sent before today, we print the full date
|
||||
render_txt.append(('date', "[%s]" % time.strftime(time_format, self.timestamp).decode('utf-8')))
|
||||
if self.parent.show_short_nick:
|
||||
render_txt.append(('my_nick' if self.my_mess else 'other_nick',"**" if self.my_mess else "*"))
|
||||
render_txt.append(('my_nick' if self.my_mess else 'other_nick', "**" if self.my_mess else "*"))
|
||||
else:
|
||||
render_txt.append(('my_nick' if self.my_mess else 'other_nick',"[%s] " % self.nick))
|
||||
render_txt.append(('my_nick' if self.my_mess else 'other_nick', "[%s] " % self.nick))
|
||||
render_txt.append(self.message)
|
||||
txt_widget = urwid.Text(render_txt, align=self.align)
|
||||
if self.is_info:
|
||||
|
|
@ -99,39 +98,39 @@ class Chat(PrimitivusWidget, QuickChat):
|
|||
self.historyPrint(profile=self.profile)
|
||||
elif type_ == C.CHAT_GROUP:
|
||||
if len(self.chat_colums.contents) == 1:
|
||||
present_widget = self._buildPresentList()
|
||||
self.present_panel = sat_widgets.VerticalSeparator(present_widget)
|
||||
self._appendPresentPanel()
|
||||
self.occupants_list = sat_widgets.GenericList([], option_type=sat_widgets.ClickableText, on_click=self._occupantsClicked)
|
||||
self.occupants_panel = sat_widgets.VerticalSeparator(self.occupants_list)
|
||||
self._appendOccupantsPanel()
|
||||
|
||||
self.day_change = time.strptime(time.strftime("%a %b %d 00:00:00 %Y")) #struct_time of day changing time
|
||||
self.day_change = time.strptime(time.strftime("%a %b %d 00:00:00 %Y")) # struct_time of day changing time
|
||||
self.show_timestamp = True
|
||||
self.show_short_nick = False
|
||||
self.show_title = 1 #0: clip title; 1: full title; 2: no title
|
||||
self.show_title = 1 # 0: clip title; 1: full title; 2: no title
|
||||
self.subject = None
|
||||
|
||||
def keypress(self, size, key):
|
||||
if key == a_key['OCCUPANTS_HIDE']: #user wants to (un)hide the presents panel
|
||||
if key == a_key['OCCUPANTS_HIDE']: # user wants to (un)hide the occupants panel
|
||||
if self.type == C.CHAT_GROUP:
|
||||
widgets = [widget for (widget, options) in self.chat_colums.contents]
|
||||
if self.present_panel in widgets:
|
||||
self._removePresentPanel()
|
||||
if self.occupants_panel in widgets:
|
||||
self._removeOccupantsPanel()
|
||||
else:
|
||||
self._appendPresentPanel()
|
||||
elif key == a_key['TIMESTAMP_HIDE']: #user wants to (un)hide timestamp
|
||||
self._appendOccupantsPanel()
|
||||
elif key == a_key['TIMESTAMP_HIDE']: # user wants to (un)hide timestamp
|
||||
self.show_timestamp = not self.show_timestamp
|
||||
for wid in self.content:
|
||||
wid._invalidate()
|
||||
elif key == a_key['SHORT_NICKNAME']: #user wants to (not) use short nick
|
||||
elif key == a_key['SHORT_NICKNAME']: # user wants to (not) use short nick
|
||||
self.show_short_nick = not self.show_short_nick
|
||||
for wid in self.content:
|
||||
wid._invalidate()
|
||||
elif key == a_key['SUBJECT_SWITCH']: #user wants to (un)hide group's subject or change its apperance
|
||||
elif key == a_key['SUBJECT_SWITCH']: # user wants to (un)hide group's subject or change its apperance
|
||||
if self.subject:
|
||||
self.show_title = (self.show_title + 1) % 3
|
||||
if self.show_title == 0:
|
||||
self.setSubject(self.subject,'clip')
|
||||
self.setSubject(self.subject, 'clip')
|
||||
elif self.show_title == 1:
|
||||
self.setSubject(self.subject,'space')
|
||||
self.setSubject(self.subject, 'space')
|
||||
elif self.show_title == 2:
|
||||
self.chat_widget.header = None
|
||||
self._invalidate()
|
||||
|
|
@ -156,12 +155,12 @@ class Chat(PrimitivusWidget, QuickChat):
|
|||
@param occupant_jid (jid.JID): occupant to update
|
||||
@param states (dict{unicode: unicode}): new states
|
||||
"""
|
||||
options = self.present_wid.getAllValues()
|
||||
options = self.occupants_list.getAllValues()
|
||||
for index in xrange(0, len(options)):
|
||||
nick = options[index].value
|
||||
if nick == occupant_jid.resource:
|
||||
options[index] = (nick, "%s %s" % (u''.join(states.values()), nick))
|
||||
self.present_wid.changeValues(options)
|
||||
self.occupants_list.changeValues(options)
|
||||
break
|
||||
self.host.redraw()
|
||||
|
||||
|
|
@ -174,31 +173,27 @@ class Chat(PrimitivusWidget, QuickChat):
|
|||
self.title_dynamic = ' '.join([u'({})'.format(state) for state in states.values()])
|
||||
self.host.redraw()
|
||||
|
||||
def _presentClicked(self, list_wid, clicked_wid):
|
||||
def _occupantsClicked(self, list_wid, clicked_wid):
|
||||
assert self.type == C.CHAT_GROUP
|
||||
nick = clicked_wid.getValue().value
|
||||
if nick == self.getUserNick():
|
||||
#We ignore clicks on our own nick
|
||||
# We ignore clicks on our own nick
|
||||
return
|
||||
contact_list = self.host.contact_lists[self.profile]
|
||||
full_jid = jid.JID("%s/%s" % (self.target.bare, nick))
|
||||
|
||||
#we have a click on a nick, we need to create the widget if it doesn't exists
|
||||
# we have a click on a nick, we need to create the widget if it doesn't exists
|
||||
self.getOrCreatePrivateWidget(full_jid)
|
||||
|
||||
#now we select the new window
|
||||
# now we select the new window
|
||||
contact_list.setFocus(full_jid, True)
|
||||
|
||||
def _buildPresentList(self):
|
||||
self.present_wid = sat_widgets.GenericList([],option_type = sat_widgets.ClickableText, on_click=self._presentClicked)
|
||||
return self.present_wid
|
||||
def _appendOccupantsPanel(self):
|
||||
self.chat_colums.contents.append((self.occupants_panel, ('weight', 2, False)))
|
||||
|
||||
def _appendPresentPanel(self):
|
||||
self.chat_colums.contents.append((self.present_panel,('weight', 2, False)))
|
||||
|
||||
def _removePresentPanel(self):
|
||||
def _removeOccupantsPanel(self):
|
||||
for widget, options in self.chat_colums.contents:
|
||||
if widget is self.present_panel:
|
||||
if widget is self.occupants_panel:
|
||||
self.chat_colums.contents.remove((widget, options))
|
||||
break
|
||||
|
||||
|
|
@ -225,27 +220,27 @@ class Chat(PrimitivusWidget, QuickChat):
|
|||
"""Set title for a group chat"""
|
||||
QuickChat.setSubject(self, subject)
|
||||
self.subject = subject
|
||||
self.subj_wid = urwid.Text(unicode(subject.replace('\n','|') if wrap == 'clip' else subject ),
|
||||
align='left' if wrap=='clip' else 'center',wrap=wrap)
|
||||
self.chat_widget.header = urwid.AttrMap(self.subj_wid,'title')
|
||||
self.subj_wid = urwid.Text(unicode(subject.replace('\n', '|') if wrap == 'clip' else subject),
|
||||
align='left' if wrap == 'clip' else 'center', wrap=wrap)
|
||||
self.chat_widget.header = urwid.AttrMap(self.subj_wid, 'title')
|
||||
self.host.redraw()
|
||||
|
||||
def addUser(self, param_nick):
|
||||
"""Add user if it is not in the group list"""
|
||||
nick = unicode(param_nick) #FIXME: should be done in DBus bridge
|
||||
nick = unicode(param_nick) # FIXME: should be done in DBus bridge
|
||||
QuickChat.addUser(self, nick)
|
||||
presents = self.present_wid.getAllValues()
|
||||
if nick not in [present.value for present in presents]:
|
||||
presents.append(nick)
|
||||
presents.sort(cmp=lambda a, b: cmp(a.value if hasattr(a, 'value') else a, b.value if hasattr(b, 'value') else b))
|
||||
self.present_wid.changeValues(presents)
|
||||
occupants = self.occupants_list.getAllValues()
|
||||
if nick not in [occupants.value for occupants in occupants]:
|
||||
occupants.append(nick)
|
||||
occupants.sort(cmp=lambda a, b: cmp(a.value if hasattr(a, 'value') else a, b.value if hasattr(b, 'value') else b))
|
||||
self.occupants_list.changeValues(occupants)
|
||||
self.host.redraw()
|
||||
|
||||
def removeUser(self, param_nick):
|
||||
"""Remove a user from the group list"""
|
||||
nick = unicode(param_nick) #FIXME: should be done in DBus bridge
|
||||
nick = unicode(param_nick) # FIXME: should be done in DBus bridge
|
||||
QuickChat.removeUser(self, nick)
|
||||
self.present_wid.deleteValue(nick)
|
||||
self.occupants_list.deleteValue(nick)
|
||||
self.host.redraw()
|
||||
|
||||
def clearHistory(self):
|
||||
|
|
@ -268,7 +263,7 @@ class Chat(PrimitivusWidget, QuickChat):
|
|||
try:
|
||||
timestamp = float(extra['timestamp'])
|
||||
except KeyError:
|
||||
timestamp=None
|
||||
timestamp = None
|
||||
try:
|
||||
nick, mymess = QuickChat.printMessage(self, from_jid, msg, extra, profile)
|
||||
except TypeError:
|
||||
|
|
@ -283,7 +278,7 @@ class Chat(PrimitivusWidget, QuickChat):
|
|||
if older and idx > 0:
|
||||
continue # the new message is older, we need to insert it upper
|
||||
|
||||
#we discard double messages, to avoid backlog / history conflict
|
||||
# we discard double messages, to avoid backlog / history conflict
|
||||
# FIXME: messages that have been sent several times will be displayed only once
|
||||
if ((idx and self.content[idx - 1].message == msg) or
|
||||
(self.content[idx].message == msg) or
|
||||
|
|
@ -313,7 +308,7 @@ class Chat(PrimitivusWidget, QuickChat):
|
|||
try:
|
||||
timestamp = float(extra['timestamp'])
|
||||
except KeyError:
|
||||
timestamp=None
|
||||
timestamp = None
|
||||
_widget = ChatText(self, timestamp, None, False, msg, is_info=True)
|
||||
self.content.append(_widget)
|
||||
self._notify(msg=msg)
|
||||
|
|
@ -326,8 +321,8 @@ class Chat(PrimitivusWidget, QuickChat):
|
|||
if msg == "":
|
||||
return
|
||||
if self.text_list.get_focus()[1] == len(self.content) - 2:
|
||||
#we don't change focus if user is not at the bottom
|
||||
#as that mean that he is probably watching discussion history
|
||||
# we don't change focus if user is not at the bottom
|
||||
# as that mean that he is probably watching discussion history
|
||||
self.text_list.focus_position = len(self.content) - 1
|
||||
self.host.redraw()
|
||||
if not self.host.x_notify.hasFocus():
|
||||
|
|
@ -336,36 +331,36 @@ class Chat(PrimitivusWidget, QuickChat):
|
|||
elif self.getUserNick().lower() in msg.lower():
|
||||
self.host.x_notify.sendNotification(_("Primitivus: %(user)s mentioned you in room '%(room)s'") % {'user': from_jid, 'room': self.target})
|
||||
|
||||
#MENU EVENTS#
|
||||
# MENU EVENTS #
|
||||
def onTarotRequest(self, menu):
|
||||
# TODO: move this to plugin_misc_tarot with dynamic menu
|
||||
if len(self.occupants) != 4:
|
||||
self.host.showPopUp(sat_widgets.Alert(_("Can't start game"), _("You need to be exactly 4 peoples in the room to start a Tarot game"), ok_cb=self.host.removePopUp))
|
||||
else:
|
||||
self.host.bridge.tarotGameCreate(self.id, list(self.occupants), self.profile)
|
||||
self.host.bridge.tarotGameCreate(self.target, list(self.occupants), self.profile)
|
||||
|
||||
def onSendFileRequest(self, menu):
|
||||
# TODO: move this to core with dynamic menus
|
||||
dialog = FileDialog(ok_cb=self.onFileSelected, cancel_cb=self.host.removePopUp)
|
||||
self.host.showPopUp(dialog, 80, 80)
|
||||
|
||||
#MISC EVENTS#
|
||||
# MISC EVENTS #
|
||||
def onFileSelected(self, filepath):
|
||||
self.host.removePopUp()
|
||||
try:
|
||||
filepath = filepath.decode('utf-8') # FIXME: correctly manage unicode
|
||||
filepath = filepath.decode('utf-8') # FIXME: correctly manage unicode
|
||||
except UnicodeError:
|
||||
log.error("FIXME: filepath with unicode error are not managed yet")
|
||||
self.host.showDialog(_(u"File has a unicode error in its name, it's not yet managed by SàT"), title=_("Can't send file"), type_="error")
|
||||
return
|
||||
#FIXME: check last_resource: what if self.target.resource exists ?
|
||||
# FIXME: check last_resource: what if self.target.resource exists ?
|
||||
last_resource = self.host.bridge.getMainResource(unicode(self.target.bare), self.profile)
|
||||
if last_resource:
|
||||
full_jid = jid.JID("%s/%s" % (self.target.bare, last_resource))
|
||||
else:
|
||||
full_jid = self.target
|
||||
progress_id = self.host.bridge.sendFile(full_jid, filepath, {}, self.profile)
|
||||
self.host.addProgress(progress_id,filepath)
|
||||
self.host.addProgress(progress_id, filepath)
|
||||
self.host.showDialog(_(u"You file request has been sent, we are waiting for your contact answer"), title=_("File request sent"))
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -533,7 +533,6 @@ class QuickApp(object):
|
|||
room_jid = jid.JID(room_jid_s)
|
||||
chat_widget = self.widgets.getOrCreateWidget(quick_chat.QuickChat, room_jid, type_=C.CHAT_GROUP, profile=profile)
|
||||
chat_widget.setUserNick(user_nick)
|
||||
chat_widget.id = room_jid # FIXME: to be removed
|
||||
self.contact_lists[profile].setSpecial(room_jid, C.CONTACT_SPECIAL_GROUP)
|
||||
|
||||
def roomLeftHandler(self, room_jid_s, profile):
|
||||
|
|
|
|||
Loading…
Reference in a new issue