Example #1
0
 def on_update_motd(self, action, param):
     account = param.get_string()
     server = app.config.get_per('accounts', account, 'hostname')
     server += '/announce/motd/update'
     dialogs.SingleMessageWindow(account, server, 'send')
Example #2
0
 def on_single_message(self, action, param):
     dialogs.SingleMessageWindow(param.get_string(), action='send')
Example #3
0
 def on_single_message_menuitem_activate(self, widget, account):
     dialogs.SingleMessageWindow(account, action='send')
Example #4
0
 def on_send_server_message(self, action, param):
     account = param.get_string()
     server = app.config.get_per('accounts', account, 'hostname')
     server += '/announce/online'
     dialogs.SingleMessageWindow(account, server, 'send')
Example #5
0
    def roster_message(self,
                       jid,
                       msg,
                       tim,
                       encrypted=False,
                       msg_type='',
                       subject=None,
                       resource='',
                       msg_log_id=None,
                       user_nick='',
                       xhtml=None,
                       form_node=None,
                       displaymarking=None,
                       additional_data=None):
        """
        Display the message or show notification in the roster
        """
        contact = None
        fjid = jid

        if additional_data is None:
            additional_data = {}

        # Try to catch the contact with correct resource
        if resource:
            fjid = jid + '/' + resource
            contact = app.contacts.get_contact(self.conn.name, jid, resource)

        highest_contact = app.contacts.get_contact_with_highest_priority(
            self.conn.name, jid)
        if not contact:
            # If there is another resource, it may be a message from an invisible
            # resource
            lcontact = app.contacts.get_contacts(self.conn.name, jid)
            if (len(lcontact) > 1 or (lcontact and lcontact[0].resource and \
            lcontact[0].show != 'offline')) and jid.find('@') > 0:
                contact = app.contacts.copy_contact(highest_contact)
                contact.resource = resource
                if resource:
                    fjid = jid + '/' + resource
                contact.priority = 0
                contact.show = 'offline'
                contact.status = ''
                app.contacts.add_contact(self.conn.name, contact)

            else:
                # Default to highest prio
                fjid = jid
                contact = highest_contact

        if not contact:
            # contact is not in roster
            contact = app.interface.roster.add_to_not_in_the_roster(
                self.conn.name, jid, user_nick)

        if not self.control:
            ctrl = app.interface.msg_win_mgr.get_control(fjid, self.conn.name)
            if ctrl:
                self.control = ctrl
                self.control.set_session(self)
            else:
                fjid = jid

        # Do we have a queue?
        no_queue = len(app.events.get_events(self.conn.name, fjid)) == 0

        popup = helpers.allow_popup_window(self.conn.name)

        if msg_type == 'normal' and popup:  # it's single message to be autopopuped
            dialogs.SingleMessageWindow(self.conn.name,
                                        contact.jid,
                                        action='receive',
                                        from_whom=jid,
                                        subject=subject,
                                        message=msg,
                                        resource=resource,
                                        session=self,
                                        form_node=form_node)
            return

        # We print if window is opened and it's not a single message
        if self.control and msg_type != 'normal':
            typ = ''

            if msg_type == 'error':
                typ = 'error'

            self.control.print_conversation(msg,
                                            typ,
                                            tim=tim,
                                            encrypted=encrypted,
                                            subject=subject,
                                            xhtml=xhtml,
                                            displaymarking=displaymarking,
                                            additional_data=additional_data)

            if msg_log_id:
                app.logger.set_read_messages([msg_log_id])

            return

        # We save it in a queue
        event_t = events.ChatEvent
        event_type = 'message_received'

        if msg_type == 'normal':
            event_t = events.NormalEvent
            event_type = 'single_message_received'

        show_in_roster = notify.get_show_in_roster(event_type, self.conn.name,
                                                   contact, self)
        show_in_systray = notify.get_show_in_systray(event_type,
                                                     self.conn.name, contact)

        event = event_t(msg,
                        subject,
                        msg_type,
                        tim,
                        encrypted,
                        resource,
                        msg_log_id,
                        xhtml=xhtml,
                        session=self,
                        form_node=form_node,
                        displaymarking=displaymarking,
                        sent_forwarded=False,
                        show_in_roster=show_in_roster,
                        show_in_systray=show_in_systray,
                        additional_data=additional_data)

        app.events.add_event(self.conn.name, fjid, event)

        if popup:
            if not self.control:
                self.control = app.interface.new_chat(contact,
                                                      self.conn.name,
                                                      session=self)

                if len(app.events.get_events(self.conn.name, fjid)):
                    self.control.read_queue()
        else:
            if no_queue:  # We didn't have a queue: we change icons
                app.interface.roster.draw_contact(jid, self.conn.name)

            app.interface.roster.show_title()  # we show the * or [n]
        # Select the big brother contact in roster, it's visible because it has
        # events.
        family = app.contacts.get_metacontacts_family(self.conn.name, jid)
        if family:
            nearby_family, bb_jid, bb_account = \
                    app.contacts.get_nearby_family_and_big_brother(family,
                    self.conn.name)
        else:
            bb_jid, bb_account = jid, self.conn.name
        app.interface.roster.select_contact(bb_jid, bb_account)