aboutsummaryrefslogtreecommitdiff
path: root/src/web/views/article.py
diff options
context:
space:
mode:
authorFrançois Schmidts <francois.schmidts@gmail.com>2015-10-11 12:18:07 +0200
committerFrançois Schmidts <francois.schmidts@gmail.com>2016-01-26 23:46:30 +0100
commit5b7db9398abaacea241d9fcce7885457c562d7fa (patch)
treeef8982202ac7492892ba184c66c67a303c8cc795 /src/web/views/article.py
parentassigning categories to feeds and articles (diff)
downloadnewspipe-5b7db9398abaacea241d9fcce7885457c562d7fa.tar.gz
newspipe-5b7db9398abaacea241d9fcce7885457c562d7fa.tar.bz2
newspipe-5b7db9398abaacea241d9fcce7885457c562d7fa.zip
a bit of cleaning, putting code where it belongs
Diffstat (limited to 'src/web/views/article.py')
-rw-r--r--src/web/views/article.py81
1 files changed, 72 insertions, 9 deletions
diff --git a/src/web/views/article.py b/src/web/views/article.py
index bb914a6b..d308d37e 100644
--- a/src/web/views/article.py
+++ b/src/web/views/article.py
@@ -1,31 +1,32 @@
#! /usr/bin/env python
# -*- coding: utf-8 -
+from flask import Blueprint, g, render_template, redirect, flash, url_for
+from flask.ext.babel import gettext
+from flask.ext.login import login_required
-from flask import Blueprint, g, render_template, redirect
-
-from web import controllers, utils
+from web.lib.utils import clear_string, redirect_url
+from web.controllers import ArticleController
from web.lib.view_utils import etag_match
-from web.decorators import pyagg_default_decorator
articles_bp = Blueprint('articles', __name__, url_prefix='/articles')
article_bp = Blueprint('article', __name__, url_prefix='/article')
@article_bp.route('/redirect/<int:article_id>', methods=['GET'])
-@pyagg_default_decorator
+@login_required
def redirect_to_article(article_id):
- article = controllers.ArticleController(g.user.id).get(id=article_id)
+ article = ArticleController(g.user.id).get(id=article_id)
return redirect(article.link)
@article_bp.route('/<int:article_id>', methods=['GET'])
-@pyagg_default_decorator
+@login_required
@etag_match
def article(article_id=None):
"""
Presents the content of an article.
"""
- article = controllers.ArticleController(g.user.id).get(id=article_id)
+ article = ArticleController(g.user.id).get(id=article_id)
previous_article = article.previous_article()
if previous_article is None:
previous_article = article.source.articles[0]
@@ -34,7 +35,69 @@ def article(article_id=None):
next_article = article.source.articles[-1]
return render_template('article.html',
- head_titles=[utils.clear_string(article.title)],
+ head_titles=[clear_string(article.title)],
article=article,
previous_article=previous_article,
next_article=next_article)
+
+
+@article_bp.route('/like/<int:article_id>', methods=['GET'])
+@login_required
+def like(article_id=None):
+ """
+ Mark or unmark an article as favorites.
+ """
+ art_contr = ArticleController(g.user.id)
+ article = art_contr.get(id=article_id)
+ art_contr = art_contr.update({'id': article_id},
+ {'like': not article.like})
+ return redirect(redirect_url())
+
+
+@article_bp.route('/delete/<int:article_id>', methods=['GET'])
+@login_required
+def delete(article_id=None):
+ """
+ Delete an article from the database.
+ """
+ article = ArticleController(g.user.id).delete(article_id)
+ flash(gettext('Article %(article_title)s deleted',
+ article_title=article.title), 'success')
+ return redirect(url_for('home'))
+
+
+@articles_bp.route('/history', methods=['GET'])
+@articles_bp.route('/history/<int:year>', methods=['GET'])
+@articles_bp.route('/history/<int:year>/<int:month>', methods=['GET'])
+@login_required
+def history(year=None, month=None):
+ counter, articles = ArticleController(g.user.id).get_history(year, month)
+ return render_template('history.html', articles_counter=counter,
+ articles=articles, year=year, month=month)
+
+
+@article_bp.route('/mark_as/<string:new_value>', methods=['GET'])
+@article_bp.route('/mark_as/<string:new_value>/article/<int:article_id>',
+ methods=['GET'])
+@login_required
+def mark_as(new_value='read', feed_id=None, article_id=None):
+ """
+ Mark all unreaded articles as read.
+ """
+ readed = new_value == 'read'
+ art_contr = ArticleController(g.user.id)
+ filters = {'readed': not readed}
+ if feed_id is not None:
+ filters['feed_id'] = feed_id
+ message = 'Feed marked as %s.'
+ elif article_id is not None:
+ filters['id'] = article_id
+ message = 'Article marked as %s.'
+ else:
+ message = 'All article marked as %s.'
+ art_contr.update(filters, {"readed": readed})
+ flash(gettext(message % new_value), 'info')
+
+ if readed:
+ return redirect(redirect_url())
+ return redirect('home')
bgstack15