Ejemplo n.º 1
0
    def _on_message(self, message):
        '''handle the reception of a message'''
        if message['type'] not in ('chat', 'normal'):
            log.error("Unhandled message: %s" % message)
            return

        body = message['body']
        account = message['from'].bare

        if account in self.conversations:
            cid = self.conversations[account]
        else:
            cid = time.time()
            self.conversations[account] = cid
            self.rconversations[cid] = [account]
            self.session.conv_first_action(cid, [account])

        if body is None:
            type_ = e3.Message.TYPE_TYPING
        else:
            type_ = e3.Message.TYPE_MESSAGE

        msgobj = e3.Message(type_, body, account)
        # override font size!
        msgobj.style.size = self.session.config.i_font_size
        self.session.conv_message(cid, account, msgobj)
        # log message
        e3.Logger.log_message(self.session, None, msgobj, False)
Ejemplo n.º 2
0
 def _gui_message_(self,text,conv):
     cedict = conv.emcache.parse()
     custom_emoticons = gui.base.MarkupParser.get_custom_emotes(text, cedict)
     message = e3.Message(e3.Message.TYPE_INFO, text, None, None) 
     self.session.send_message(conv.cid, text, conv.cstyle, cedict, custom_emoticons)
     message.body="<b><a href = \"%s\">%s</a> was successfully generated and sent :)</b>" % (text, text)
     self.session.gui_message(conv.cid, '', message)
Ejemplo n.º 3
0
    def _on_message(self, client, message):
        '''handle the reception of a message'''
        body = message.getBody()
        account = message.getFrom().getStripped()

        if account in self.conversations:
            cid = self.conversations[account]
        else:
            cid = time.time()
            self.conversations[account] = cid
            self.rconversations[cid] = [account]
            self.session.add_event(e3.Event.EVENT_CONV_FIRST_ACTION, cid,
                                   [account])

        if body is None:
            type_ = e3.Message.TYPE_TYPING
        else:
            type_ = e3.Message.TYPE_MESSAGE

        msgobj = e3.Message(type_, body, account)
        self.session.add_event(e3.Event.EVENT_CONV_MESSAGE, cid, account,
                               msgobj)

        # log message
        e3.Logger.log_message(self.session, None, msgobj, False)
Ejemplo n.º 4
0
    def _on_chats_ready(self, results):
        '''called when the chat history is ready'''

        self.conversation.conv_status.clear()

        if not results:
            self.conversation.output.unlock()
            return

        for stat, timestamp, msg_text, nick, account in results:
            is_me = self.session.contacts.me.account == account
            if is_me:
                contact = self.session.contacts.me
            else:
                contact = self.session.contacts.get(account)

            if contact == None:
                contact = e3.Contact(account, nick=nick)

            datetimestamp = datetime.datetime.utcfromtimestamp(timestamp)
            message = e3.Message(e3.Message.TYPE_OLDMSG,
                                 msg_text,
                                 account,
                                 timestamp=datetimestamp)
            message.style = self.conversation.cstyle

            if is_me:
                self.conversation.output_message(message, None)
            else:
                self.conversation.input_message(message, contact, None, None)

        self.conversation.conv_status.clear()
        self.conversation.output.unlock()
Ejemplo n.º 5
0
 def request_attention(self, cid):
     '''request the attention of the contact'''
     account = self.account.account
     message = e3.Message(e3.Message.TYPE_MESSAGE,
                          '%s requests your attention' % (account, ),
                          account)
     self.add_action(e3.Action.ACTION_SEND_MESSAGE, (cid, message))
Ejemplo n.º 6
0
 def check_url(self,cid, account, msg):
     
     s = msg
     l=re.findall(r'(http?://www.youtube.com/watch\S+)', s)
     if len(l) >= 1:
             msg_text=l[0]
             url_data = urlparse.urlparse(msg_text)
             query = urlparse.parse_qs(url_data.query)
             video_id = query["v"][0]
             if video_id:
                     try:		
                         src = BeautifulSoup.BeautifulSoup(urllib.urlopen("http://www.youtube.com/watch?v=%s"%video_id))
                         title=src.title.string.split('\n')[1].strip()
                         urllib.urlretrieve ("http://img.youtube.com/vi/%s/hqdefault.jpg"%video_id,tempfile.gettempdir()+"/%s.jpg"%video_id)
                         image=tempfile.gettempdir()+"/%s.jpg"%video_id
                         if self.watch.bl:                    
                             self.watch.set_video(title,"http://www.youtube.com/v/%s"%video_id,image,account)
                         else:
                             self.watch.init_info()
                             self.watch.set_video(title,"http://www.youtube.com/v/%s"%video_id,image,account)
                             self.watch.win_show()                 
                     except NameError:
                         warn="""<P><B>BeautifulSoup</B> is required by youtube plugin please run <B>easy_install BeautifulSoup</B> or <B>pip install BeautifulSoup</B> </P> """
                         url=e3.Message(e3.Message.TYPE_INFO, warn,account,timestamp=None)
                         self.session.gui_message(cid, account, url)
Ejemplo n.º 7
0
    def _on_chats_ready(self, results):
        '''called when the chat history is ready'''
        if not results:
            return

        for stat, timestamp, msg_text, nick, account in results:

            contact = founded_account = self.session.contacts.get(account)

            if contact == None:
                contact = e3.Contact(account, nick=nick)

            is_me = self.session.contacts.me.account == account
            datetimestamp = datetime.datetime.fromtimestamp(timestamp)

            if is_me:
                self.text.send_message(self.formatter, contact, msg_text, None,
                                       None, None, self.first)
            else:
                message = e3.Message(e3.Message.TYPE_MESSAGE,
                                     msg_text,
                                     account,
                                     timestamp=datetimestamp)

                self.text.receive_message(self.formatter, contact, message,
                                          None, None, self.first)

            self.first = False
Ejemplo n.º 8
0
    def _on_chats_ready(self, results):
        '''called when the chat history is ready'''

        account_colors = {}
        style = e3.Style()
        font_color_default = style.color.to_hex()
        possible_colors = [
            "#0000FF", "#00FFFF", "#FF0000", "#FF00FF", font_color_default
        ]

        if not results:
            return

        self.conv_status.clear()

        for stat, timestamp, msg_text, nick, account in results:
            is_me = self.session.contacts.me.account == account
            if is_me:
                contact = self.session.contacts.me
            else:
                contact = self.session.contacts.get(account)

            if contact == None:
                contact = e3.Contact(account, nick=nick)

            datetimestamp = datetime.datetime.utcfromtimestamp(timestamp)
            message = e3.Message(e3.Message.TYPE_OLDMSG,
                                 msg_text,
                                 account,
                                 timestamp=datetimestamp)

            if is_me:
                msg = self.conv_status.pre_process_message(
                    contact, message, False, None, None, message.timestamp,
                    message.type, None)
                self.text.send_message(self.formatter, msg)
            else:
                try:
                    account_colors[account]
                except KeyError:
                    if not len(possible_colors) == 0:
                        account_colors[account] = possible_colors.pop()
                    else:
                        account_colors[account] = font_color_default

                message.style = self._get_style(account_colors[account])

                msg = self.conv_status.pre_process_message(
                    contact, message, True, None, None, message.timestamp,
                    message.type, message.style)

                self.text.receive_message(self.formatter, msg)

            self.conv_status.post_process_message(msg)
            self.conv_status.update_status()

        if len(results) >= 1000:
            self.nicebar.new_message(_('Too many messages to display'),
                                     gtk.STOCK_DIALOG_WARNING)
Ejemplo n.º 9
0
 def _on_message(self, cid, account, message, cedict=None):
     user = self.session.contacts.get(account)
     msg_text = message.body
     message = e3.Message(e3.Message.TYPE_INFO,
                          msg_text,
                          account,
                          timestamp=None)
     self.check_url(cid, account, message.body)
Ejemplo n.º 10
0
    def on_notify_attention(self):
        '''called when the nudge button is clicked'''
        self.session.request_attention(self.cid)
        message = e3.Message(e3.Message.TYPE_NUDGE, '', None, None)
        self.output.send_message(self.formatter, self.session.contacts.me,
                                 message, {}, '', self.first)

        self.play_nudge()
Ejemplo n.º 11
0
    def request_information(self, msg):
        '''display a message for user'''
        contact = self.session.contacts.me
        message = e3.Message(e3.Message.TYPE_MESSAGE, msg, None, None)
        msg = gui.Message.from_information(contact, message)

        self.text.information(msg)
        self.conv_status.post_process_message(msg)
        self.conv_status.update_status()
Ejemplo n.º 12
0
    def on_send_message_failed(self, errorCode):
        '''method called when a message fails to be delivered'''
        contact = self.session.contacts.me
        message = e3.Message(e3.Message.TYPE_MESSAGE, '', None, None)
        message.body = _('Error delivering message')
        msg = gui.Message.from_information(contact, message)

        self.output.information(self.formatter, msg)
        self.conv_status.post_process_message(msg)
        self.conv_status.update_status()
Ejemplo n.º 13
0
    def on_notify_attention(self):
        '''called when the nudge button is clicked'''
        self.session.request_attention(self.cid)
        message = e3.Message(e3.Message.TYPE_NUDGE, '', None, None)
        message.body = _('You just sent a nudge!')
        msg = gui.Message.from_information(self.session.contacts.me, message)
        self.output.information(self.formatter, msg)
        self.conv_status.post_process_message(msg)

        self.play_nudge()
Ejemplo n.º 14
0
    def send_message(self, cid, text, style=None, cedict=None, celist=None):
        '''send a common message'''
        if cedict is None:
            cedict = {}

        if celist is None:
            celist = []

        account = self.account.account
        message = e3.Message(e3.Message.TYPE_MESSAGE, text, account, style)
        self.add_action(e3.Action.ACTION_SEND_MESSAGE, (cid, message))
Ejemplo n.º 15
0
    def _on_send_message(self, text):
        '''method called when the user press enter on the input text'''
        custom_emoticons = gui.base.MarkupParser.get_custom_emotes(
            text, self.emcache.parse())

        self.session.send_message(self.cid, text, self.cstyle,
                                  self.emcache.parse(), custom_emoticons)
        message = e3.Message(e3.Message.TYPE_MESSAGE, text, None, self.cstyle)
        self.output.send_message(self.formatter,
                                 self.session.contacts.me, message,
                                 self.emcache.parse(), self.emcache.path,
                                 self.first)
        self.messages.push(text)
        self.play_send()
        self.first = False
Ejemplo n.º 16
0
    def _on_send_message(self, text):
        '''method called when the user press enter on the input text'''
        cedict = self.emcache.parse()
        custom_emoticons = gui.base.MarkupParser.get_custom_emotes(
            text, cedict)

        self.session.send_message(self.cid, text, self.cstyle, cedict,
                                  custom_emoticons)

        message = e3.Message(e3.Message.TYPE_MESSAGE, text, None, self.cstyle)
        self.output_message(message, cedict)

        self.messages.push(text)
        self.play_send()
        self.conv_status.update_status()
Ejemplo n.º 17
0
    def check_url(self,cid, account, msg):

        s = msg
        l=re.findall(r'(http?://www.youtube.com/watch\S+)', s)
        if len(l) >= 1:
                msg_text=l[0]
                url_data = urlparse.urlparse(msg_text)
                query = urlparse.parse_qs(url_data.query)
                video_id = query["v"][0]
                if video_id:		
                        src = BeautifulSoup.BeautifulSoup(urllib.urlopen("http://www.youtube.com/watch?v=%s"%video_id))
                        title=src.title.string.split('\n')[1].strip()
                        image="""<a  href="http://www.youtube.com/v/%s">
<img  src="http://img.youtube.com/vi/%s/hqdefault.jpg" width="150" height="150"></a> <h3>%s</h3>"""%(video_id, video_id,title)
                        url=e3.Message(e3.Message.TYPE_INFO, image,account,timestamp=None)     
                        self.session.gui_message(cid, account, url)
Ejemplo n.º 18
0
    def _on_chats_ready(self, results):
        '''called when the chat history is ready'''

        account_colors = {}
        style = e3.Style()
        font_color_default = style.color.to_hex()
        possible_colors = ["#0000FF", "#00FFFF", "#FF0000",
                           "#FF00FF", font_color_default]

        if not results:
            return

        for stat, timestamp, msg_text, nick, account in results:
            is_me = self.session.contacts.me.account == account
            if is_me:
                contact = self.session.contacts.me
            else:
                contact = self.session.contacts.get(account)

            if contact == None:
                contact = e3.Contact(account, nick=nick)

            datetimestamp = datetime.datetime.utcfromtimestamp(timestamp)
            message = e3.Message(e3.Message.TYPE_MESSAGE, msg_text,
                        account, timestamp=datetimestamp)

            if is_me:
                self.text.send_message(self.formatter, contact,
                        message, None, None, self.first)
            else:
                try:
                    account_colors[account]
                except KeyError:
                    if not len(possible_colors) == 0:
                        account_colors[account] = possible_colors.pop()
                    else:
                        account_colors[account] = font_color_default

                message.style = self._get_style(account_colors[account])

                self.text.receive_message(self.formatter, contact, message,
                        None, None, self.first)

            self.first = False
Ejemplo n.º 19
0
    def _on_shake_message(self, value):

        data = json.loads(value)
        from_uin = data["from_uin"]
        account = str(from_uin)
        contact = self.session.contacts.contacts.get(account, None)
        if contact is None:
            return

        if account in self.conversations:
            cid = self.conversations[account]
        else:
            cid = time.time()
            self.conversations[account] = cid
            self.rconversations[cid] = [account]
            self.session.conv_first_action(cid, [account])

        msgobj = e3.Message(e3.Message.TYPE_MESSAGE,
                            '%s requests your attention' % (contact.nick, ),
                            account)
        self.session.conv_message(cid, account, msgobj)
        # log message
        e3.Logger.log_message(self.session, None, msgobj, False)
Ejemplo n.º 20
0
    def _on_message(self, message):
        '''handle the reception of a message'''
        data = json.loads(message)

        from_uin = str(data['from_uin'])

        account = from_uin
        body = data['content'][-1]
        type_ = e3.Message.TYPE_MESSAGE

        if account in self.conversations:
            cid = self.conversations[account]
        else:
            cid = time.time()
            self.conversations[account] = cid
            self.rconversations[cid] = [account]
            self.session.conv_first_action(cid, [account])

        msgobj = e3.Message(type_, body, account)
        self.session.conv_message(cid, account, msgobj)

        # log message
        e3.Logger.log_message(self.session, None, msgobj, False)
Ejemplo n.º 21
0
 def send(self, mail, body):
     '''Builds a P2P Message and sends Worker a ACTION_SEND_MESSAGE
     with cid returned by self.request.'''
     message = e3.Message(e3.Message.TYPE_P2P, body, self.mail, dest=mail)
     self.manager.output_action(e3.Action.ACTION_SEND_MESSAGE,
                                (self.request(mail), message))
Ejemplo n.º 22
0
    def custom_on_send_message(self, conversation, text):
        cid = conversation.cid
        if text.startswith("/"):
            commands = ["/help", "/clear", "/nudge", "/run", "/tiny", "/all"]
            chck = text.split('[')
            text = text.split(' ')
            command = text[0]
            message = e3.Message(e3.Message.TYPE_INFO, '', None, None)
            if command in commands:
                if command == "/help":
                    help = """<ul><strong><li>/clear for cleaning chat window.</li></strong>
                            <strong><li>/nudge for sending nudge to user.</li></strong>
                            <strong><li>/run for running command e.g /run mplayer [fatman.mp3], /run firefox or /run mplayer [james axl.flv]
                            <span>DEFAULT PATH IS YOUR HOME DIRECTORY</span>.</li></strong>
                            <strong><li>/tiny for sending large URL e.g /tiny large_url.</li></strong<ul>"""
                    message = e3.Message(e3.Message.TYPE_INFO, help, '', timestamp = None)
                elif command == "/clear":
                    conversation.output.clear()
                elif command == "/nudge":
                    self.session.request_attention(cid)
                    message.body = _('You just sent a nudge!')
                    self.soundPlayer.play(gui.theme.sound_theme.sound_nudge)
                elif command == "/run":
                    if len(chck) == 2:
                        try:
                            subprocess.Popen([text[1], self.homedir+chck[1][:-1]])
                        except NameError:
                            message.body = "<b>Command not found</b>"
                    elif len(text) == 2:
                        try:
                            subprocess.Popen([text[1]])
                        except OSError:
                            message.body = "<b>Command not found</b>"
                    elif len(text) == 1:
                             message.body = "<b>Please type /help for more help</b>"
                elif command == "/tiny":
                    if len(text) != 2:
                        message.body = "<b>Please type /help for more help</b>"
                    else:
                        req = urllib2.Request(text[1])
                        try:
                            urllib2.urlopen(req)
                            url = tinyurl.create_one(text[1])
                            message = e3.Message(e3.Message.TYPE_MESSAGE, url, None, None) #It is look ilogical but i need it :).
                            self.session.gui_message(cid, '', message)
                            message.type = e3.Message.TYPE_INFO
                            message.body = "<b><a href = \"%s\">%s</a> was successfully generated and sent :)</b>" % (url, url)
                        except NameError:
                            message.body = "<b>Please install tinyurl</b>"
                        except ValueError:
                            message.body = "<b>Check your URL</b>"
                        except urllib2.URLError:
                            message.body = "<b>Check your URL</b>"
                elif command == "/all":
                    if len(text) > 1:
                        for conv in self.session.conversations.itervalues():
                            conv._on_send_message(' '.join(text[1:]))

            else:
                message.body = "<b>Please type /help for more help</b>"

            if message.body:
                self.session.gui_message(cid, '', message)
        else:
            conversation._on_send_message(text)
Ejemplo n.º 23
0
    def custom_on_send_message(self, conversation, text):
        cid = conversation.cid
        if text.startswith("/"):
            commands = ["/help", "/clear", "/nudge", "/run", "/tiny", "/all","/tiny-all",
            "/message","/online","/away","/busy","/invisible","/block","/idle"]
            text = text.split()
            command = text[0]
            message = e3.Message(e3.Message.TYPE_INFO, '', None, None)
            if command in commands:
                if command == "/help":
                    help = """<ul><strong><li>/clear for cleaning chat window.</li></strong>
                            <strong><li>/nudge for sending nudge to user.</li></strong>
                            <strong><li>/run for running command e.g /run mplayer <I>fatman.mp3</I>, /run firefox or /run mplayer <I>james axl.flv</I>
                            <span>DEFAULT PATH IS YOUR HOME DIRECTORY</span>.</li></strong>
                            <strong><li>/tiny for sending large URL e.g /tiny large_url.</li></strong>
			    <strong><li>/all for sending message to all conversations.</li></strong>
			    <strong><li>/tiny-all for sending large URL to all conversations.</li></strong>
                <strong><li>Change status, <b>/online "Status"<b/>, <b>/busy "Status"<b/>, <b>/away "Status"<b/>, <b>/idle "Status"<b/>, <b>/invisible<b/>.</li></strong>
                <strong><li>/message to set message of the session.</li></strong>
			    <ul>"""
                    message = e3.Message(e3.Message.TYPE_INFO, help, '', timestamp = None)
                elif command == "/clear":
                    conversation.output.clear()
                elif command == "/nudge":
                    self.session.request_attention(cid)
                    message.body = _('You just sent a nudge!')
                    self.soundPlayer.play(gui.theme.sound_theme.sound_nudge)
                elif command == "/run":
                    if len(text) >= 3 :
                        try:
                            subprocess.Popen([text[1], self.homedir+' '.join(text[2:])])
                        except NameError:
                            message.body = "<b>Command not found</b>"
                    elif len(text) < 3 and len(text)>1:
                        try:
                            subprocess.Popen([text[1]])
                        except OSError:
                            message.body = "<b>Command not found</b>"
                    else:
                            message.body = "<b>Please type /help for more help</b>"
                elif command == "/tiny":
                    self.check_tiny(conversation,text,message,False)        
                elif command == "/all":
                    if len(text) > 1:
                        for conv in self.session.conversations.itervalues():
                            conv._on_send_message(' '.join(text[1:]))
                elif command == "/tiny-all":
                    self.check_tiny(None,text,message)
                elif command == "/online":
                    self.session.set_status(e3.status.ONLINE)
                    if text[1:]: self.session.set_message(' '.join(text[1:]))
                elif command == "/invisible":
                    self.session.set_status(e3.status.OFFLINE)
                    if text[1:]: self.session.set_message(' '.join(text[1:]))
                elif command == "/busy":
                    self.session.set_status(e3.status.BUSY)
                    if text[1:]: self.session.set_message(' '.join(text[1:]))
                elif command == "/away":
                    self.session.set_status(e3.status.AWAY)
                    if text[1:]: self.session.set_message(' '.join(text[1:]))
                elif command == "/idle":
                    self.session.set_status(e3.status.IDLE)
                    if text[1:]: self.session.set_message(' '.join(text[1:]))  
                elif command == "/message":
                    self.session.set_message(' '.join(text[1:]))
            else:
                message.body = "<b>Please type /help for more help</b>"

            if message.body:
                self.session.gui_message(cid, '', message)
        else:
            conversation._on_send_message(text)
Ejemplo n.º 24
0
 def request_attention(self, cid):
     '''send a nudge message'''
     account = self.account.account
     message = e3.Message(Message.TYPE_NUDGE, None, account)
     self.add_action(e3.Action.ACTION_SEND_MESSAGE, (cid, message))
Ejemplo n.º 25
0
                break
            except KeyError, e:
                log.error("Can not get group buddy display name")
                pass

        account = group_code
        if account in self.conversations:
            cid = self.conversations[account]
        else:
            cid = time.time()
            self.conversations[account] = cid
            self.rconversations[cid] = [account]
            self.session.conv_first_action(cid, [account])

        type_ = e3.Message.TYPE_MESSAGE
        msgobj = e3.Message(type_, body, display_name)
        self.session.conv_message(cid, display_name, msgobj)
        e3.Logger.log_message(self.session, None, msgobj, False)

    def _on_nick_update(self, value):
        data = json.loads(value)
        uin = str(data["uin"])
        nick = data["nick"]
        contact = self.session.contacts.contacts.get(uin, None)

        if contact is None:
            return
        account = uin
        old_nick = contact.nick
        status_ = contact.status
Ejemplo n.º 26
0
 def send_typing_notification(self, cid):
     '''send typing notification to contact'''
     account = self.account.account
     message = e3.Message(e3.Message.TYPE_TYPING, None, account)
     self.add_action(e3.Action.ACTION_SEND_MESSAGE, (cid, message))
Ejemplo n.º 27
0
 def send_message(self, cid, text, style=None):
     '''send a common message'''
     account = self.account.account
     message = e3.Message(e3.Message.TYPE_MESSAGE, text, account, style)
     self.add_action(e3.Action.ACTION_SEND_MESSAGE, (cid, message))