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])
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 ''
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))
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)
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 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 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
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