]>
git.gir.st - subscriptionfeed.git/blob - app/reddit/__init__.py
3 from flask_login
import current_user
, login_required
4 from flask
import Blueprint
, render_template
, request
, redirect
, flash
6 from ..common
.common
import *
8 frontend
= Blueprint('reddit', __name__
,
9 template_folder
='templates',
10 static_folder
='static',
11 static_url_path
='/static/rd')
13 @frontend.route('/feed/subreddits')
14 @frontend.route('/r/<subreddit>')
15 def reddit(subreddit
=None):
16 token
= getattr(current_user
, 'token', 'guest')
17 count
= int(request
.args
.get('count', 0))
18 before
= request
.args
.get('before')
19 after
= request
.args
.get('after')
21 subreddits
= [subreddit
] if subreddit
else get_subreddits(token
)
24 videos
, before
, after
= fetch_reddit(subreddits
, [], count
, before
, after
)
25 except RedditException
as e
:
26 return f
"error retrieving reddit data: {e}", 502 # TODO: better
28 # TODO: for /feed/reddit: pin/hide videos
30 title
= f
"/r/{subreddit}" if subreddit
else "my subreddits"
31 return render_template('reddit.html.j2', title
=title
, rows
=videos
,
32 subreddits
=subreddits
, before
=before
, after
=after
, count
=count
)
34 @frontend.route('/manage/subreddits')
35 # disabled for guest user: @login_required
36 def subscription_manager():
37 token
= getattr(current_user
, 'token', 'guest')
38 subreddits
= get_subreddits(token
)
39 return render_template('subreddit_manager.html.j2', subreddits
=subreddits
)
41 @frontend.route('/feed/subreddits', methods
=['POST'])
44 token
= current_user
.token
46 action
= next(request
.form
.keys(), None)
47 if action
in ['pin', 'unpin', 'hide']:
48 post_id
= request
.form
.get(action
)
54 with sqlite3
.connect(cf
['global']['database']) as conn
:
57 INSERT OR REPLACE INTO flags (user, post_id, display)
59 """, (token
, post_id
, display
))
61 flash("unsupported action", "error")
62 return redirect(request
.url
, code
=303)
64 @frontend.route('/manage/subreddits', methods
=['POST'])
66 def manage_subscriptions():
67 token
= current_user
.token
68 if 'subscribe' in request
.form
:
69 subreddit
= request
.form
.get("subscribe")
70 match
= re
.search(r
"(?:(?:https?://)?(?:old.|www.|\w\w.)?reddit.com)?(?:/?r/)?([-+_0-9A-Za-z]{2,21})", subreddit
)
72 subreddit
= match
.group(1)
74 flash("invalid subreddit", "error")
75 return redirect(request
.url
, code
=303)
76 with sqlite3
.connect(cf
['global']['database']) as conn
:
79 INSERT OR IGNORE INTO subreddits (user, subreddit)
81 """, (token
, subreddit
))
83 elif 'unsubscribe' in request
.form
:
84 subreddit
= request
.form
.get("unsubscribe")
85 with sqlite3
.connect(cf
['global']['database']) as conn
:
88 DELETE FROM subreddits
89 WHERE user = ? AND subreddit = ?
90 """, (token
, subreddit
))
91 # TODO: sql-error-handling, report success
94 flash("unsupported action", "error")
96 return redirect(request
.url
, code
=303)
98 def get_subreddits(token
):
99 with sqlite3
.connect(cf
['global']['database']) as conn
:
105 ORDER BY subreddit COLLATE NOCASE ASC
107 subreddits
= [sr
for (sr
,) in c
.fetchall()]
110 @frontend.app_template_filter('trim3')
112 if round(n
, 1) >= 10_000:
113 return "%.0fk" % (n
/1000)
115 return "%.1fk" % (n
/1000)