]>
git.gir.st - subscriptionfeed.git/blob - app/reddit/__init__.py
5 #from flask_login import current_user, login_required
6 from flask_login
import LoginManager
, UserMixin
, current_user
, login_user
, logout_user
, login_required
7 from flask
import Blueprint
, render_template
, request
, redirect
, flash
, url_for
, jsonify
, g
9 from ..common
.common
import *
11 frontend
= Blueprint('reddit', __name__
,
12 template_folder
='templates',
13 static_folder
='static',
14 static_url_path
='/static/rd')
16 @frontend.route('/feed/subreddits')
17 @frontend.route('/r/<subreddit>')
18 def reddit(subreddit
=None):
19 token
= getattr(current_user
, 'token', 'guest')
20 count
= int(request
.args
.get('count', 0))
21 before
= request
.args
.get('before')
22 after
= request
.args
.get('after')
24 subreddits
= [subreddit
] if subreddit
else get_subreddits(token
)
27 videos
, before
, after
= fetch_reddit(subreddits
, [], count
, before
, after
)
28 except RedditException
as e
:
29 return f
"error retrieving reddit data: {e}", 502 # TODO: better
31 # TODO: for /feed/reddit: pin/hide videos
33 title
= f
"/r/{subreddit}" if subreddit
else "my subreddits"
34 return render_template('reddit.html.j2', subreddit
=title
, rows
=videos
, before
=before
, after
=after
, count
=count
)
36 @frontend.route('/manage/subreddits')
37 # disabled for guest user: @login_required
38 def subscription_manager():
39 token
= getattr(current_user
, 'token', 'guest')
40 subreddits
= get_subreddits(token
)
41 return render_template('subreddit_manager.html.j2', subreddits
=subreddits
)
43 @frontend.route('/feed/subreddits', methods
=['POST'])
46 token
= current_user
.token
48 action
= next(request
.form
.keys(), None)
49 if action
in ['pin', 'unpin', 'hide']:
50 post_id
= request
.form
.get(action
)
56 with sqlite3
.connect(cf
['global']['database']) as conn
:
59 INSERT OR REPLACE INTO flags (user, post_id, display)
61 """, (token
, post_id
, display
))
63 flash("unsupported action", "error")
64 return redirect(request
.url
, code
=303)
66 @frontend.route('/manage/subreddits', methods
=['POST'])
68 def manage_subscriptions():
69 token
= current_user
.token
70 if 'subscribe' in request
.form
:
71 subreddit
= request
.form
.get("subscribe")
72 match
= re
.search(r
"(?:(?:https?://)?(?:old.|www.|\w\w.)?reddit.com)?(?:/?r/)?([-+_0-9A-Za-z]{2,21})", subreddit
)
74 subreddit
= match
.group(1)
76 flash("invalid subreddit", "error")
77 return redirect(request
.url
, code
=303)
78 with sqlite3
.connect(cf
['global']['database']) as conn
:
81 INSERT OR IGNORE INTO subreddits (user, subreddit)
83 """, (token
, subreddit
))
85 elif 'unsubscribe' in request
.form
:
86 subreddit
= request
.form
.get("unsubscribe")
87 with sqlite3
.connect(cf
['global']['database']) as conn
:
90 DELETE FROM subreddits
91 WHERE user = ? AND subreddit = ?
92 """, (token
, subreddit
))
93 # TODO: sql-error-handling, report success
96 flash("unsupported action", "error")
98 return redirect(request
.url
, code
=303)
100 def get_subreddits(token
):
101 with sqlite3
.connect(cf
['global']['database']) as conn
:
107 ORDER BY subreddit COLLATE NOCASE ASC
109 subreddits
= [sr
for (sr
,) in c
.fetchall()]