89 lines
2.8 KiB
Python
89 lines
2.8 KiB
Python
from __future__ import absolute_import
|
|
import codecs
|
|
from flask import abort, render_template, request, safe_join, send_from_directory
|
|
import os.path
|
|
from werkzeug.contrib.atom import AtomFeed
|
|
|
|
from i2p2www import MEETINGS_DIR, MEETINGS_PER_PAGE, cache
|
|
from i2p2www.helpers import Pagination, get_for_page
|
|
from i2p2www.meetings.helpers import get_meetings, get_meetings_feed_items
|
|
|
|
|
|
##################
|
|
# Meeting handlers
|
|
|
|
# Meeting index
|
|
@cache.memoize(600)
|
|
def meetings_index(page):
|
|
all_meetings = get_meetings()
|
|
meetings = get_for_page(all_meetings, page, MEETINGS_PER_PAGE)
|
|
if not meetings and page != 1:
|
|
abort(404)
|
|
pagination = Pagination(page, MEETINGS_PER_PAGE, len(all_meetings))
|
|
return render_template('meetings/index.html', pagination=pagination, meetings=meetings)
|
|
|
|
# Renderer for specific meetings
|
|
@cache.memoize(600)
|
|
def meetings_show(id, log=False, rst=False):
|
|
"""
|
|
Render the meeting X.
|
|
Either display the raw IRC .log or render as html and include .rst as header if it exists
|
|
"""
|
|
# generate file name for the raw meeting file(and header)
|
|
lname = '%03d.log' % id
|
|
hname = '%03d.rst' % id
|
|
lfile = safe_join(MEETINGS_DIR, lname)
|
|
hfile = safe_join(MEETINGS_DIR, hname)
|
|
|
|
# check if meeting file exists and throw error if it does not..
|
|
if not os.path.exists(lfile):
|
|
abort(404)
|
|
|
|
# if the user just wanted the .log
|
|
if log:
|
|
# hmm... maybe replace with something non-render_template like?
|
|
# return render_template('meetings/show_raw.html', log=log)
|
|
return send_from_directory(MEETINGS_DIR, lname, mimetype='text/plain')
|
|
|
|
log=''
|
|
header=None
|
|
|
|
# try to load header if that makes sense
|
|
if os.path.exists(hfile):
|
|
# if the user just wanted the .rst...
|
|
if rst:
|
|
return send_from_directory(MEETINGS_DIR, hname, mimetype='text/plain')
|
|
|
|
# open the file as utf-8 file
|
|
with codecs.open(hfile, encoding='utf-8') as fd:
|
|
header = fd.read()
|
|
elif rst:
|
|
abort(404)
|
|
|
|
# load log
|
|
with codecs.open(lfile, encoding='utf-8') as fd:
|
|
log = fd.read()
|
|
|
|
return render_template('meetings/show.html', log=log, header=header, id=id)
|
|
|
|
# Just return the raw .log for the meeting
|
|
def meetings_show_log(id):
|
|
return meetings_show(id, log=True)
|
|
|
|
# Just return the raw .rst for the meeting
|
|
def meetings_show_rst(id):
|
|
return meetings_show(id, rst=True)
|
|
|
|
@cache.cached(600)
|
|
def meetings_atom():
|
|
feed = AtomFeed('I2P Meetings', feed_url=request.url, url=request.url_root)
|
|
items = get_meetings_feed_items(10)
|
|
for item in items:
|
|
feed.add(item['title'],
|
|
item['content'],
|
|
title_type='html',
|
|
content_type='html',
|
|
url=item['url'],
|
|
updated=item['updated'])
|
|
return feed.get_response()
|