# You should have received a copy of the GNU General Public License
# along with this program. If not, see http://www.gnu.org/licenses/ .
-"""Generate HTML for one or more notmuch searches.
+"""Generate text and/or HTML for one or more notmuch searches.
Messages matching each search are grouped by thread. Each message
that contains both a subject and message-id will have the displayed
-subject link to the Gmane view of the message.
+subject link to an archive view of the message (defaulting to Gmane).
"""
from __future__ import print_function
view['title'], sort_key))
if 'query-string' not in view:
query = view['query']
- view['query-string'] = ' and '.join(query)
+ view['query-string'] = ' and '.join(
+ '( {} )'.format(q) for q in query)
q = notmuch.Query(database, view['query-string'])
q.set_sort(sort)
threads = self._get_threads(messages=q.search_messages())
class HtmlPage (Page):
_slug_regexp = re.compile('\W+')
+ def __init__(self, message_url_template, **kwargs):
+ self.message_url_template = message_url_template
+ super(HtmlPage, self).__init__(**kwargs)
+
def _write_header(self, views, stream):
super(HtmlPage, self)._write_header(views=views, stream=stream)
stream.write('<ul>\n')
'message-id': quote(display_data['message-id']),
'subject': xml.sax.saxutils.escape(display_data['subject']),
}
+ d['url'] = self.message_url_template.format(**d)
display_data['subject'] = (
- '<a href="http://mid.gmane.org/{message-id}">{subject}</a>'
+ '<a href="{url}">{subject}</a>'
).format(**d)
for key in ['message-id', 'from']:
if key in display_data:
<meta http-equiv="Content-Type" content="text/html; charset={encoding}" />
<title>{title}</title>
<style media="screen" type="text/css">
+ h1 {{
+ font-size: 1.5em;
+ }}
+ h2 {{
+ font-size: 1.17em;
+ }}
+ h3 {{
+ font-size: 100%;
+ }}
table {{
border-spacing: 0;
}}
</head>
<body>
<h1>{title}</h1>
+<p>
{blurb}
</p>
<h2>Views</h2>
footer_template = config['meta'].get('footer', '''
<hr>
-<p>Generated: {datetime}
+<p>Generated: {datetime}</p>
</body>
</html>
''')
_PAGES['html'] = HtmlPage(
header=header_template.format(**context),
footer=footer_template.format(**context),
+ message_url_template=config['meta'].get(
+ 'message-url', 'http://mid.gmane.org/{message-id}'),
)
if args.list_views:
elif args.get_query != None:
for view in config['views']:
if args.get_query == view['title']:
- print(' and '.join(view['query']))
+ print(' and '.join('( {} )'.format(q) for q in view['query']))
sys.exit(0)
else:
# only import notmuch if needed