def on_muc_receive(self, msg): """ Whenever a group message is received, it is processed according to whatever the user is currently doing. :param Message msg: The XMPP message object. """ sender = str(msg['from']).strip() text = str(msg['body']).strip() if self.chatting == "Operator Group": lab = Label(text=sender.split('/')[1] + ": " + text, size_hint_y=None, markup=True, halign='left') lab.bind(width=lambda s, w: s.setter('text_size')(s, (w, None))) lab.bind(texture_size=lab.setter('size')) lab.color = colorsys.hsv_to_rgb( self.name_to_txt(sender.split('/')[1]), 1, 1) with lab.canvas.before: Color(name_to_bg(sender.split('/')[1]), 1, 1, mode='hsv') lab.bg_rect = Rectangle(pos=self.pos, size=self.size) lab.bind(pos=self.redraw, size=self.redraw) self.sub_layout.add_widget(lab) if self.new: self.sub_layout.remove_widget(self.new_lab) self.new = False else: toast(sender.split('/')[1] + ": " + text, True) vibrator.vibrate(.1) if sender.split('/')[0] in self.messages: self.main_app.xmpp_log('info', 'receiving new message from ' + sender) else: self.main_app.xmpp_log('info', 'receiving first message from ' + sender) m = Message(sender.split('/')[1], text) self.messages[sender.split('/')[0]].append(m)
def disabled_menu(self): """ Creates a disabled messaging menu should xmpp be disabled. """ self.clear_widgets() sub_layout = BoxLayout(size_hint=(1, 1)) sub_layout.clear_widgets() lab = Label(text='XMPP messaging is disabled due to config errors!', size_hint=(1, 1), markup=True) lab.color = colorsys.hsv_to_rgb(0, 0, 1) with lab.canvas.before: Color(1, 1, 0, mode='hsv') lab.bg_rect = Rectangle(pos=self.pos, size=self.size) lab.bind(pos=self.redraw, size=self.redraw) sub_layout.add_widget(lab) self.add_widget(sub_layout)
def send_message(self, user, event): """ When the user hits the reply button, it sends the message back to the user (or group if it is a groupchat). :param str user: The username of whomever the user is chatting with. """ msg = self.reply.text if msg: if user == self.users['Operator Group']: self.main_app.send_muc(msg, user) else: self.main_app.send_message(msg, user) m = Message(None, msg) self.messages[user].append(m) lab = Label(text=msg, size_hint_y=None, color=(1, 1, 1, 1), markup=True, halign='right') lab.bind(width=lambda s, w: s.setter('text_size')(s, (w, None))) lab.bind(texture_size=lab.setter('size')) with lab.canvas.before: Color(.67, .82, 1, mode='hsv') lab.bg_rect = Rectangle(pos=self.pos, size=self.size) lab.bind(pos=self.redraw, size=self.redraw) self.sub_layout.add_widget(lab) self.reply.text = "" if self.new: self.sub_layout.remove_widget(self.new_lab) self.new = False
def chat_panel(self, user, event): """ Creates the actual chat screen where the messages are displayed and where the user can respond. :param str user: The username of whomever the user is chatting with. """ full_name = self.users[user] self.chatting = user self.clear_widgets() self.master_layout.clear_widgets() self.message_layout.clear_widgets() self.sub_layout.clear_widgets() if full_name in self.messages: self.new = False temp = self.messages[full_name] for msg in temp: if not msg.sender: lab = Label(text=msg.body, color=(1, 1, 1, 1), size_hint_y=None, markup=True, halign='right') with lab.canvas.before: Color(.67, .82, 1, mode='hsv') lab.bg_rect = Rectangle(pos=self.pos, size=self.size) else: lab = Label(text=msg.sender + ": " + msg.body, color=(0, 0, 0, 1), size_hint_y=None, markup=True, halign='left') lab.color = colorsys.hsv_to_rgb( self.name_to_txt(msg.sender), 1, 1) with lab.canvas.before: Color(name_to_bg(msg.sender), 1, 1, mode='hsv') lab.bg_rect = Rectangle(pos=self.pos, size=self.size) lab.bind( width=lambda s, w: s.setter('text_size')(s, (w, None))) lab.bind(texture_size=lab.setter('size')) lab.bind(pos=self.redraw, size=self.redraw) self.sub_layout.add_widget(lab) else: self.new_lab = Label(text="Start a new conversation with " + user + "!", color=(0, 0, 0, 1)) self.new = True self.sub_layout.add_widget(self.new_lab) bottom = BoxLayout(size_hint_y=None, height=130) self.reply = TextInput(hint_text="Write a message...") title = Label(text=user, halign='left', color=(0, 0, 0, 1)) send = Button(text="Send", size_hint_x=.25, on_release=functools.partial(self.send_message, full_name)) bottom.add_widget(self.reply) bottom.add_widget(send) header = BoxLayout(size_hint_y=None, height=130) back_btn = Button(text='< Recent', size_hint_x=.5, on_release=lambda x: self.gen_menu()) presence = Label(size_hint_x=.3) header.add_widget(back_btn) header.add_widget(title) header.add_widget(presence) self.message_layout.add_widget(self.sub_layout) self.master_layout.add_widget(self.message_layout) self.add_widget(header) self.add_widget(self.master_layout) self.add_widget(bottom)