diff --git a/i2p2www/__init__.py b/i2p2www/__init__.py index 4c057cb3..f385c596 100644 --- a/i2p2www/__init__.py +++ b/i2p2www/__init__.py @@ -191,6 +191,61 @@ def site_show(page='index'): return render_template(name, **options) +######################## +# Meeting helper methods + +def get_meetings_feed_items(num=0): + meetings = get_meetings(num) + items = [] + for meeting in meetings: + parts = render_meeting_rst(meeting) + if parts: + try: + updated = datetime.datetime.strptime(parts['title'], 'I2P dev meeting, %B %d, %Y @ %H:%M %Z') + except ValueError: + updated = datetime.datetime.strptime(parts['title'], 'I2P dev meeting, %B %d, %Y') + a = {} + a['title'] = parts['title'] + a['content'] = parts['fragment'] + a['url'] = url_for('meetings_show', lang=g.lang, id=meeting) + a['updated'] = updated + items.append(a) + return items + +def get_meetings(num=0): + """ + Returns the latest #num valid meetings, or all meetings if num=0. + """ + # list of meetings + meetings=[] + # walk over all directories/files + for v in os.walk(MEETINGS_DIR): + # iterate over all files + for f in v[2]: + # ignore all non-.rst files + if not f.endswith('.rst'): + continue + meetings.append(int(f[:-4])) + meetings.sort() + meetings.reverse() + if (num > 0): + return meetings[:num] + return meetings + +def render_meeting_rst(id): + # check if that file actually exists + name = str(id) + '.rst' + path = safe_join(MEETINGS_DIR, name) + if not os.path.exists(path): + abort(404) + + # read file + with codecs.open(path, encoding='utf-8') as fd: + content = fd.read() + + return publish_parts(source=content, source_path=MEETINGS_DIR, writer_name="html") + + ################## # Meeting handlers @@ -253,6 +308,19 @@ def meetings_show_log(id): def meetings_show_rst(id): return meetings_show(id, rst=True) +@app.route('//feed/meetings/atom') +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() + ################### # Download handlers diff --git a/i2p2www/meetings/207.rst b/i2p2www/meetings/207.rst index d4051224..2d18312f 100644 --- a/i2p2www/meetings/207.rst +++ b/i2p2www/meetings/207.rst @@ -1,5 +1,5 @@ -I2P dev meeting, February 10, 2009 -================================== +I2P dev meeting, February 10, 2009 @ 21:00 UTC +============================================== Quick recap ----------- diff --git a/i2p2www/meetings/208.rst b/i2p2www/meetings/208.rst index a6e08061..20c9182a 100644 --- a/i2p2www/meetings/208.rst +++ b/i2p2www/meetings/208.rst @@ -1,5 +1,5 @@ -I2P dev meeting, September 8, 2010 -================================== +I2P dev meeting, September 8, 2010 @ 22:00 UTC +============================================== Quick recap ----------- diff --git a/i2p2www/meetings/209.rst b/i2p2www/meetings/209.rst index dc4bf694..1977ac30 100644 --- a/i2p2www/meetings/209.rst +++ b/i2p2www/meetings/209.rst @@ -1,5 +1,5 @@ -I2P dev meeting, November 20, 2012 -================================== +I2P dev meeting, November 20, 2012 @ 20:00 UTC +============================================== Quick recap ----------- diff --git a/i2p2www/meetings/210.rst b/i2p2www/meetings/210.rst index 650cff9b..a27f8b26 100644 --- a/i2p2www/meetings/210.rst +++ b/i2p2www/meetings/210.rst @@ -1,5 +1,5 @@ -I2P dev meeting, November 27, 2012 -=================================== +I2P dev meeting, November 27, 2012 @ 19:30 UTC +=============================================== Quick recap -----------