Exemple #1
0
    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)
Exemple #2
0
    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)
Exemple #3
0
    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
Exemple #4
0
    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)