예제 #1
0
    def append_messages_to_store(self, store, metas):
        # Display hot messages first
        hot = []
        normal = []
        for meta in metas:
            if msgboard.is_hot(meta):
                hot.append((True, meta))
            else:
                normal.append((False, meta))

        for l in hot, normal:
            for (ishot, meta) in l:
                user = None
                uid = meta.get('src')
                if uid != None:
                    user = community.get_user(uid)
                if user == community.get_myself():
                    sender = 'Myself'
                elif user != None:
                    sender = pango_escape(user.tag())
                else:
                    sender = pango_escape(meta.get('from'))
                timestamp = msgtime(meta)
                subject = pango_escape(meta.get('subject'))
                if ishot:
                    line = '%s <span foreground="gray"><small>%s</small></span>\n<span foreground="red">[HOT] </span><b>%s</b>' % (sender, timestamp, subject)
                else:
                    line = '%s <span foreground="gray"><small>%s</small></span>\n<b>%s</b>' % (sender, timestamp, subject)
                icon = self.message_icon
                if user != None:
                    icon = get_user_profile_picture(user).scale_simple(64, 64, gtk.gdk.INTERP_BILINEAR)
                store.append([icon, line, meta])
예제 #2
0
 def join_list(l):
     out = []
     for s in l:
         value = self.user.get(s)
         if value != None:
             out.append(pango_escape(str(value)))
     if len(out) > 0:
         return ', '.join(out) + '\n'
     else:
         return ''
예제 #3
0
 def open_gui(self):
     """ This is called when:
         1. the user requests a key exchange
         2. the other user accepts the key exchange """
     self.main_gui.show_page(self)
     nick = pango_escape(self.user.get('nick'))
     self.show_key_header.set_markup(
         '<span foreground="white" size="xx-large">Show this secret to <b>%s</b></span>' %(nick))
     self.key_entry_header.set_markup(
         '<span foreground="white" size="xx-large">Enter secret from <b>%s</b></span>' %(nick))
예제 #4
0
    def __init__(self, gui, msg):

        self.gui = gui
        self.main_gui = gui.main_gui
        self.msg = msg

        self.user = None
        uid = msg.get('src')
        if uid != None:
            self.user = community.get_user(uid)

        if self.user == community.get_myself():
            sender = 'Myself'
        elif self.user != None:
            sender = self.user.tag()
        else:
            sender = msg.get('from')

        subject = msg.get('subject')
        title = 'Message from %s: %s' % (sender, subject)
        GUI_Page.__init__(self, title)

        self.vbox = gtk.VBox()

        self.top_hbox = gtk.HBox(False, 10)

        if self.user != None:
            self.profile_image = gtk.Image()
            self.profile_image.set_size_request(64+5, 64+5)
            icon = get_user_profile_picture(self.user).scale_simple(64, 64, gtk.gdk.INTERP_BILINEAR)
            self.profile_image.set_from_pixbuf(icon)
            eventbox = gtk.EventBox()
            eventbox.connect("button-press-event", self.image_clicked)
            eventbox.add(self.profile_image)
            self.top_hbox.pack_start(eventbox, False, True)

        self.info_widgets = {}

        info_vbox = gtk.VBox()

        label = gtk.Label()
        label.set_markup('<b>From:</b>')
        label.set_size_request(100, -1)
        label.set_alignment(1, 0)
        widget = gtk.Label()
        widget.set_markup('<span color="#ff0000"><u>%s</u></span>' % pango_escape(sender))
        widget.set_alignment(0, 0)
        eventbox = gtk.EventBox()
        eventbox.connect("button-press-event", self.image_clicked)
        eventbox.add(widget)

        hbox = gtk.HBox(False, 5)
        hbox.pack_start(label, False, False)
        hbox.pack_start(eventbox, True, True)
        info_vbox.pack_start(hbox, False, True)

        for name in ('subject', 'date'):
            label = gtk.Label()
            label.set_markup('<b>%s:</b>' % name.title())
            label.set_size_request(100, -1)
            label.set_alignment(1, 0)
            if name == 'date':
                value = msgtime(msg)
            else:
                value = msg.get(name)
            widget = gtk.Label(value)
            widget.set_alignment(0, 0)

            hbox = gtk.HBox(False, 5)
            hbox.pack_start(label, False, False)
            hbox.pack_start(widget, True, True)
            info_vbox.pack_start(hbox, False, False)

            self.info_widgets[name] = widget

        self.edit_button = gtk.Button(label='Edit', stock=gtk.STOCK_EDIT)
        self.edit_button.connect('clicked', self.edit_cb)

        self.delete_button = gtk.Button(label='Delete', stock=gtk.STOCK_DELETE)
        self.delete_button.connect('clicked', self.delete_cb)

        self.top_hbox.pack_start(info_vbox, True, True)
        self.top_hbox.pack_start(self.edit_button, False, False)
        self.top_hbox.pack_start(self.delete_button, False, False)

        # Message textview
        message_scrollarea = new_scrollarea()
        self.messagebuffer = gtk.TextBuffer()
        self.messageview = new_textview()
        self.messageview.set_buffer(self.messagebuffer)
        self.messageview.set_wrap_mode(gtk.WRAP_WORD)
        self.messageview.set_editable(False)
        self.messageview.set_cursor_visible(False)
        message_scrollarea.add(self.messageview)

        self.vbox.pack_start(self.top_hbox, expand=False, fill=True)
        self.vbox.pack_start(message_scrollarea, expand=True, fill=True)
        self.pack_start(self.vbox)

        self.urltag = self.messagebuffer.create_tag()
        self.urltag.set_property('foreground', '#0000ff')
        self.urltag.set_property('underline', pango.UNDERLINE_SINGLE)
        self.urltag.connect('event', self.urltag_event_cb)

        self.load_message()

        self.show_all()
        self.main_gui.add_page(self)
예제 #5
0
 def field(s):
     value = self.user.get(s)
     if value != None:
         return '<b>%s:</b> %s\n' % (field_descriptions[s], pango_escape(str(value)))
     else:
         return ''
예제 #6
0
 def heading(s):
     # Returns a heading string s formatted with pango markup and
     # a new-line
     return '<span color="slategray" weight="bold" size="large">%s</span>\n' % pango_escape(s)
예제 #7
0
    def construct_profile_info_str(self):

        def heading(s):
            # Returns a heading string s formatted with pango markup and
            # a new-line
            return '<span color="slategray" weight="bold" size="large">%s</span>\n' % pango_escape(s)

        def field(s):
            value = self.user.get(s)
            if value != None:
                return '<b>%s:</b> %s\n' % (field_descriptions[s], pango_escape(str(value)))
            else:
                return ''

        def join_list(l):
            out = []
            for s in l:
                value = self.user.get(s)
                if value != None:
                    out.append(pango_escape(str(value)))
            if len(out) > 0:
                return ', '.join(out) + '\n'
            else:
                return ''

        s = heading(self.user.get('nick'))
        s += field('name')

        s += join_list(('age', 'gender'))
        s += field('birth_date')

        s += join_list(('city', 'state', 'country'))

        s += field('phone_numbers')
        s += field('email')
        s += field('www')

        s += field('occupation')
        s += field('languages')

        s += field('description')

        s += heading('Last contact')
        l = []
        for (t, location) in self.user.log():
            ss = t
            if len(location) > 0:
                ss += '\n(at %s)' %(location)
            l.append(ss)
        if len(l) == 0:
            l = ['never']
        s += pango_escape('\n'.join(l)) + '\n'

        if get_debug_mode():
            s += heading('Debug information')
            s += field('uid')
            s += field('ip')
            s += field('port')
            s += field('hops')
            s += field('status_icon')
            s += field('v')
            s += field('faceversion')
            s += field('myfaceversion')

        return s
예제 #8
0
 def get_user_display_name(self, user):
     nick = pango_escape(user.get('nick'))
     if user == self.community.get_myself():
         nick = '<b>%s</b> (me)' % nick
     return nick