diff --git a/woodwind/templates/subscriptions.jinja2 b/woodwind/templates/subscriptions.jinja2
index 3a1abc2..74c583d 100644
--- a/woodwind/templates/subscriptions.jinja2
+++ b/woodwind/templates/subscriptions.jinja2
@@ -19,6 +19,7 @@
diff --git a/woodwind/templates/subscriptions_opml.xml b/woodwind/templates/subscriptions_opml.xml
new file mode 100644
index 0000000..70ed840
--- /dev/null
+++ b/woodwind/templates/subscriptions_opml.xml
@@ -0,0 +1,10 @@
+
+
+
+
+ {% for s in subscriptions %}
+
+ {% endfor %}
+
+
+
diff --git a/woodwind/views.py b/woodwind/views.py
index 5cdab70..57b80ee 100644
--- a/woodwind/views.py
+++ b/woodwind/views.py
@@ -55,7 +55,8 @@ def index():
.join(Subscription.user)\
.filter(User.id == flask_login.current_user.id)\
.filter(db.or_(Entry.deleted == None,
- Entry.deleted >= now))
+ Entry.deleted >= now))\
+ .order_by(Entry.published.desc())
if 'entry' in flask.request.args:
entry_url = flask.request.args.get('entry')
@@ -126,6 +127,21 @@ def subscriptions():
subscriptions=subscs)
+@views.route('/subscriptions_opml.xml')
+@flask_login.login_required
+def subscriptions_opml():
+ subscs = Subscription\
+ .query\
+ .filter_by(user_id=flask_login.current_user.id)\
+ .options(sqlalchemy.orm.subqueryload(Subscription.feed))\
+ .order_by(db.func.lower(Subscription.name))\
+ .all()
+ template = flask.render_template('subscriptions_opml.xml',
+ subscriptions=subscs)
+ response = flask.make_response(template)
+ response.headers['Content-Type'] = 'application/xml'
+ return response
+
@views.route('/settings', methods=['GET', 'POST'])
@flask_login.login_required
def settings():