def get_datestring(self): """ returns reformated datestring for this message. It uses :meth:`SettingsManager.represent_datetime` to represent this messages `Date` header :rtype: str """ if self._datetime == None: res = None else: res = settings.represent_datetime(self._datetime) return res
def _build_part(self, name, struct, minw, maxw, align): def pad(string, shorten=None): if maxw: if len(string) > maxw: if shorten: string = shorten(string, maxw) else: string = string[:maxw] if minw: if len(string) < minw: if align == 'left': string = string.ljust(minw) elif align == 'center': string = string.center(minw) else: string = string.rjust(minw) return string part = None width = None if name == 'date': newest = None datestring = '' if self.thread: newest = self.thread.get_newest_date() if newest != None: datestring = settings.represent_datetime(newest) datestring = pad(datestring) width = len(datestring) part = AttrFlipWidget(urwid.Text(datestring), struct['date']) elif name == 'mailcount': if self.thread: mailcountstring = "(%d)" % self.thread.get_total_messages() else: mailcountstring = "(?)" mailcountstring = pad(mailcountstring) width = len(mailcountstring) mailcount_w = AttrFlipWidget(urwid.Text(mailcountstring), struct['mailcount']) part = mailcount_w elif name == 'authors': if self.thread: authors = self.thread.get_authors_string() or '(None)' else: authors = '(None)' authorsstring = pad(authors, shorten_author_string) authors_w = AttrFlipWidget(urwid.Text(authorsstring), struct['authors']) width = len(authorsstring) part = authors_w elif name == 'subject': if self.thread: subjectstring = self.thread.get_subject() or ' ' else: subjectstring = ' ' # sanitize subject string: subjectstring = subjectstring.replace('\n', ' ') subjectstring = subjectstring.replace('\r', '') subjectstring = pad(subjectstring) subject_w = AttrFlipWidget(urwid.Text(subjectstring, wrap='clip'), struct['subject']) if subjectstring: width = len(subjectstring) part = subject_w elif name == 'content': if self.thread: msgs = self.thread.get_messages().keys() else: msgs = [] # sort the most recent messages first msgs.sort(key=lambda msg: msg.get_date(), reverse=True) lastcontent = ' '.join([m.get_text_content() for m in msgs]) contentstring = pad(lastcontent.replace('\n', ' ').strip()) content_w = AttrFlipWidget(urwid.Text(contentstring, wrap='clip'), struct['content']) width = len(contentstring) part = content_w elif name == 'tags': if self.thread: fallback_normal = struct[name]['normal'] fallback_focus = struct[name]['focus'] tag_widgets = [ TagWidget(t, fallback_normal, fallback_focus) for t in self.thread.get_tags() ] tag_widgets.sort(tag_cmp, lambda tag_widget: tag_widget.translated) else: tag_widgets = [] cols = [] length = -1 for tag_widget in tag_widgets: if not tag_widget.hidden: wrapped_tagwidget = tag_widget tag_width = tag_widget.width() cols.append(('fixed', tag_width, wrapped_tagwidget)) length += tag_width + 1 if cols: part = urwid.Columns(cols, dividechars=1) width = length return width, part
def _build_part(self, name, struct, minw, maxw, align): def pad(string, shorten=None): if maxw: if len(string) > maxw: if shorten: string = shorten(string, maxw) else: string = string[:maxw] if minw: if len(string) < minw: if align == 'left': string = string.ljust(minw) elif align == 'center': string = string.center(minw) else: string = string.rjust(minw) return string part = None width = None if name == 'date': newest = None datestring = '' if self.thread: newest = self.thread.get_newest_date() datestring = settings.represent_datetime(newest) datestring = pad(datestring) width = len(datestring) part = AttrFlipWidget(urwid.Text(datestring), struct['date']) elif name == 'mailcount': if self.thread: mailcountstring = "(%d)" % self.thread.get_total_messages() else: mailcountstring = "(?)" mailcountstring = pad(mailcountstring) width = len(mailcountstring) mailcount_w = AttrFlipWidget(urwid.Text(mailcountstring), struct['mailcount']) part = mailcount_w elif name == 'authors': if self.thread: authors = self.thread.get_authors_string() or '(None)' else: authors = '(None)' authorsstring = pad(authors, shorten_author_string) authors_w = AttrFlipWidget(urwid.Text(authorsstring), struct['authors']) width = len(authorsstring) part = authors_w elif name == 'subject': if self.thread: subjectstring = self.thread.get_subject() or ' ' else: subjectstring = ' ' # sanitize subject string: subjectstring = subjectstring.replace('\n', ' ') subjectstring = subjectstring.replace('\r', '') subjectstring = pad(subjectstring) subject_w = AttrFlipWidget(urwid.Text(subjectstring, wrap='clip'), struct['subject']) if subjectstring: width = len(subjectstring) part = subject_w elif name == 'content': if self.thread: msgs = self.thread.get_messages().keys() else: msgs = [] # sort the most recent messages first msgs.sort(key=lambda msg: msg.get_date(), reverse=True) lastcontent = ' '.join([m.get_text_content() for m in msgs]) contentstring = pad(lastcontent.replace('\n', ' ').strip()) content_w = AttrFlipWidget(urwid.Text(contentstring, wrap='clip'), struct['content']) width = len(contentstring) part = content_w elif name == 'tags': if self.thread: fallback_normal = struct[name]['normal'] fallback_focus = struct[name]['focus'] tag_widgets = [TagWidget(t, fallback_normal, fallback_focus) for t in self.thread.get_tags()] tag_widgets.sort(tag_cmp, lambda tag_widget: tag_widget.translated) else: tag_widgets = [] cols = [] length = -1 for tag_widget in tag_widgets: if not tag_widget.hidden: wrapped_tagwidget = tag_widget tag_width = tag_widget.width() cols.append(('fixed', tag_width, wrapped_tagwidget)) length += tag_width + 1 if cols: part = urwid.Columns(cols, dividechars=1) width = length return width, part