From 932e662369e6291c8f7d53edd320f778399cea84 Mon Sep 17 00:00:00 2001 From: Alan Roberts Date: Mon, 12 Aug 2024 15:43:00 -0400 Subject: [PATCH 1/4] Adding a view for subscribed or local or all to home page --- app/main/routes.py | 38 +++++++++++++++++++++++------ app/templates/_view_filter_nav.html | 11 +++++++++ app/templates/index.html | 1 + 3 files changed, 42 insertions(+), 8 deletions(-) create mode 100644 app/templates/_view_filter_nav.html diff --git a/app/main/routes.py b/app/main/routes.py index 4927c1bc..30e5648a 100644 --- a/app/main/routes.py +++ b/app/main/routes.py @@ -34,44 +34,64 @@ from app.models import Community, CommunityMember, Post, Site, User, utcnow, Dom @bp.route('/', methods=['HEAD', 'GET', 'POST']) @bp.route('/home', methods=['GET', 'POST']) @bp.route('/home/', methods=['GET', 'POST']) +@bp.route('/home//', methods=['GET', 'POST']) @cache.cached(make_cache_key=make_cache_key) -def index(sort=None): +def index(sort=None, view_filter=None): if 'application/ld+json' in request.headers.get('Accept', '') or 'application/activity+json' in request.headers.get( 'Accept', ''): return activitypub_application() + # view_filter = request.view_args['view_filter'] if request.view_args['view_filter'] else None + # view_filter_list = list(request.view_args) + # view_filter = view_filter_list + if 'sort' in request.view_args: + view_filter = request.view_args['sort'] + + return CachedResponse( - response=home_page('home', sort), + response=home_page('home', sort, view_filter), timeout=50 if current_user.is_anonymous else 5, ) @bp.route('/popular', methods=['GET']) @bp.route('/popular/', methods=['GET']) +@bp.route('/popular//', methods=['GET', 'POST']) @cache.cached(timeout=5, make_cache_key=make_cache_key) -def popular(sort=None): +def popular(sort=None, view_filter=None): + # view_filter = request.view_args['view_filter'] if request.view_args['view_filter'] else None + if 'sort' in request.view_args: + view_filter = request.view_args['sort'] return CachedResponse( - response=home_page('popular', sort), + response=home_page('popular', sort, view_filter), timeout=50 if current_user.is_anonymous else 5, ) @bp.route('/all', methods=['GET']) @bp.route('/all/', methods=['GET']) +@bp.route('/all//', methods=['GET', 'POST']) @cache.cached(timeout=5, make_cache_key=make_cache_key) -def all_posts(sort=None): +def all_posts(sort=None, view_filter=None): + # view_filter = request.view_args['view_filter'] if request.view_args['view_filter'] else None + if 'sort' in request.view_args: + view_filter = request.view_args['sort'] return CachedResponse( - response=home_page('all', sort), + response=home_page('all', sort, view_filter), timeout=50 if current_user.is_anonymous else 5, ) -def home_page(type, sort): +def home_page(type, sort, view_filter): verification_warning() if sort is None: sort = current_user.default_sort if current_user.is_authenticated else 'hot' + if view_filter is None: + # view_filter = current_user.default_view_filter if current_user.is_authenticated else 'all' + view_filter = 'all' + # If nothing has changed since their last visit, return HTTP 304 current_etag = f"{type}_{sort}_{hash(str(g.site.last_active))}" if current_user.is_anonymous and request_etag_matches(current_etag): @@ -169,6 +189,8 @@ def home_page(type, sort): recently_upvoted = [] recently_downvoted = [] + flash(_(f'view_filter: {view_filter}')) + return render_template('index.html', posts=posts, active_communities=active_communities, show_post_community=True, POST_TYPE_IMAGE=POST_TYPE_IMAGE, POST_TYPE_LINK=POST_TYPE_LINK, POST_TYPE_VIDEO=POST_TYPE_VIDEO, POST_TYPE_POLL=POST_TYPE_POLL, low_bandwidth=low_bandwidth, recently_upvoted=recently_upvoted, @@ -179,7 +201,7 @@ def home_page(type, sort): #rss_feed_name=f"Posts on " + g.site.name, title=f"{g.site.name} - {g.site.description}", description=shorten_string(markdown_to_text(g.site.sidebar), 150), - content_filters=content_filters, type=type, sort=sort, + content_filters=content_filters, type=type, sort=sort, view_filter=view_filter, announcement=allowlist_html(get_setting('announcement', '')), moderating_communities=moderating_communities(current_user.get_id()), joined_communities=joined_communities(current_user.get_id()), diff --git a/app/templates/_view_filter_nav.html b/app/templates/_view_filter_nav.html new file mode 100644 index 00000000..386864c7 --- /dev/null +++ b/app/templates/_view_filter_nav.html @@ -0,0 +1,11 @@ + \ No newline at end of file diff --git a/app/templates/index.html b/app/templates/index.html index 2e8798bf..dfd874ee 100644 --- a/app/templates/index.html +++ b/app/templates/index.html @@ -13,6 +13,7 @@
{{ announcement|safe }}
{% endif -%} {% include "_home_nav.html" %} + {% include "_view_filter_nav.html" %}
{% for post in posts.items -%} {% include 'post/_post_teaser.html' %} From de7c8c9d4c7c948a064194f1476881aa287f28d4 Mon Sep 17 00:00:00 2001 From: Alan Roberts Date: Mon, 12 Aug 2024 19:36:25 -0400 Subject: [PATCH 2/4] work to get the routes aligned and working --- app/main/routes.py | 28 +++++++++++++--------------- app/templates/_home_nav.html | 8 ++++---- app/templates/_view_filter_nav.html | 6 +++--- app/utils.py | 2 +- 4 files changed, 21 insertions(+), 23 deletions(-) diff --git a/app/main/routes.py b/app/main/routes.py index 30e5648a..21476cbe 100644 --- a/app/main/routes.py +++ b/app/main/routes.py @@ -33,7 +33,7 @@ from app.models import Community, CommunityMember, Post, Site, User, utcnow, Dom @bp.route('/', methods=['HEAD', 'GET', 'POST']) @bp.route('/home', methods=['GET', 'POST']) -@bp.route('/home/', methods=['GET', 'POST']) +# @bp.route('/home/', methods=['GET', 'POST']) @bp.route('/home//', methods=['GET', 'POST']) @cache.cached(make_cache_key=make_cache_key) def index(sort=None, view_filter=None): @@ -41,11 +41,8 @@ def index(sort=None, view_filter=None): 'Accept', ''): return activitypub_application() - # view_filter = request.view_args['view_filter'] if request.view_args['view_filter'] else None - # view_filter_list = list(request.view_args) - # view_filter = view_filter_list - if 'sort' in request.view_args: - view_filter = request.view_args['sort'] + if 'view_filter' in request.view_args: + view_filter = request.view_args['view_filter'] return CachedResponse( @@ -55,13 +52,14 @@ def index(sort=None, view_filter=None): @bp.route('/popular', methods=['GET']) -@bp.route('/popular/', methods=['GET']) +# @bp.route('/popular/', methods=['GET']) @bp.route('/popular//', methods=['GET', 'POST']) @cache.cached(timeout=5, make_cache_key=make_cache_key) def popular(sort=None, view_filter=None): - # view_filter = request.view_args['view_filter'] if request.view_args['view_filter'] else None - if 'sort' in request.view_args: - view_filter = request.view_args['sort'] + + if 'view_filter' in request.view_args: + view_filter = request.view_args['view_filter'] + return CachedResponse( response=home_page('popular', sort, view_filter), timeout=50 if current_user.is_anonymous else 5, @@ -69,13 +67,14 @@ def popular(sort=None, view_filter=None): @bp.route('/all', methods=['GET']) -@bp.route('/all/', methods=['GET']) +# @bp.route('/all/', methods=['GET']) @bp.route('/all//', methods=['GET', 'POST']) @cache.cached(timeout=5, make_cache_key=make_cache_key) def all_posts(sort=None, view_filter=None): - # view_filter = request.view_args['view_filter'] if request.view_args['view_filter'] else None - if 'sort' in request.view_args: - view_filter = request.view_args['sort'] + + if 'view_filter' in request.view_args: + view_filter = request.view_args['view_filter'] + return CachedResponse( response=home_page('all', sort, view_filter), timeout=50 if current_user.is_anonymous else 5, @@ -89,7 +88,6 @@ def home_page(type, sort, view_filter): sort = current_user.default_sort if current_user.is_authenticated else 'hot' if view_filter is None: - # view_filter = current_user.default_view_filter if current_user.is_authenticated else 'all' view_filter = 'all' # If nothing has changed since their last visit, return HTTP 304 diff --git a/app/templates/_home_nav.html b/app/templates/_home_nav.html index 30f055da..97dcb973 100644 --- a/app/templates/_home_nav.html +++ b/app/templates/_home_nav.html @@ -1,14 +1,14 @@ \ No newline at end of file diff --git a/app/templates/_view_filter_nav.html b/app/templates/_view_filter_nav.html index 386864c7..07029f15 100644 --- a/app/templates/_view_filter_nav.html +++ b/app/templates/_view_filter_nav.html @@ -1,11 +1,11 @@ \ No newline at end of file diff --git a/app/utils.py b/app/utils.py index c85a98b1..eef7bb28 100644 --- a/app/utils.py +++ b/app/utils.py @@ -169,7 +169,7 @@ def gibberish(length: int = 10) -> str: # used by @cache.cached() for home page and post caching -def make_cache_key(sort=None, post_id=None): +def make_cache_key(sort=None, post_id=None, view_filter=None): if current_user.is_anonymous: return f'{request.url}_{sort}_{post_id}_anon_{request.headers.get("Accept")}_{request.headers.get("Accept-Language")}' # The Accept header differentiates between activitypub requests and everything else else: From 25091be8419d2eaaafc7f4da799c3d464f17d2bf Mon Sep 17 00:00:00 2001 From: Alan Roberts Date: Tue, 13 Aug 2024 15:56:38 -0400 Subject: [PATCH 3/4] adding more work for the view filter --- app/main/routes.py | 15 ++++++++++++++- app/templates/_view_filter_nav.html | 8 +++++--- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/app/main/routes.py b/app/main/routes.py index 21476cbe..48bee83c 100644 --- a/app/main/routes.py +++ b/app/main/routes.py @@ -100,6 +100,12 @@ def home_page(type, sort, view_filter): if current_user.is_anonymous: flash(_('Create an account to tailor this feed to your interests.')) + # view filter + # anon can only filter to local/all + # if view_filter == 'local': + # posts = Post.query.filter(Post.from_bot == False, Post.nsfw == False, Post.nsfl == False, Post.deleted == False, Post.instance_id == 1) + # else: + # posts = Post.query.filter(Post.from_bot == False, Post.nsfw == False, Post.nsfl == False, Post.deleted == False) posts = Post.query.filter(Post.from_bot == False, Post.nsfw == False, Post.nsfl == False, Post.deleted == False) posts = posts.join(Community, Community.id == Post.community_id) if type == 'home': @@ -146,6 +152,12 @@ def home_page(type, sort, view_filter): posts = posts.filter(Post.user_id.not_in(blocked_accounts)) content_filters = user_filters_home(current_user.id) + # view filter - subscribed/local/all + if view_filter == 'subscribed': + posts = posts.filter(CommunityMember.user_id == current_user.id) + elif view_filter == 'local': + posts = posts.filter(Post.instance_id == 1) + # Sorting if sort == 'hot': posts = posts.order_by(desc(Post.ranking)).order_by(desc(Post.posted_at)) @@ -156,6 +168,8 @@ def home_page(type, sort, view_filter): elif sort == 'active': posts = posts.order_by(desc(Post.last_active)) + # flash(_(f'posts: {posts}')) + # Pagination posts = posts.paginate(page=page, per_page=100 if current_user.is_authenticated and not low_bandwidth else 50, error_out=False) if type == 'home': @@ -187,7 +201,6 @@ def home_page(type, sort, view_filter): recently_upvoted = [] recently_downvoted = [] - flash(_(f'view_filter: {view_filter}')) return render_template('index.html', posts=posts, active_communities=active_communities, show_post_community=True, POST_TYPE_IMAGE=POST_TYPE_IMAGE, POST_TYPE_LINK=POST_TYPE_LINK, POST_TYPE_VIDEO=POST_TYPE_VIDEO, POST_TYPE_POLL=POST_TYPE_POLL, diff --git a/app/templates/_view_filter_nav.html b/app/templates/_view_filter_nav.html index 07029f15..1ab95e58 100644 --- a/app/templates/_view_filter_nav.html +++ b/app/templates/_view_filter_nav.html @@ -1,7 +1,9 @@
- - {{ _('Subscribed') }} - + {% if not current_user.is_anonymous %} + + {{ _('Subscribed') }} + + {% endif %} {{ _('Local') }} From f78538941b67e61459b5b7737db2600fe7b94144 Mon Sep 17 00:00:00 2001 From: Alan Roberts Date: Wed, 14 Aug 2024 15:03:09 -0400 Subject: [PATCH 4/4] comment cleanup --- app/main/routes.py | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/app/main/routes.py b/app/main/routes.py index 48bee83c..b46ec14f 100644 --- a/app/main/routes.py +++ b/app/main/routes.py @@ -33,7 +33,7 @@ from app.models import Community, CommunityMember, Post, Site, User, utcnow, Dom @bp.route('/', methods=['HEAD', 'GET', 'POST']) @bp.route('/home', methods=['GET', 'POST']) -# @bp.route('/home/', methods=['GET', 'POST']) +@bp.route('/home/', methods=['GET', 'POST']) @bp.route('/home//', methods=['GET', 'POST']) @cache.cached(make_cache_key=make_cache_key) def index(sort=None, view_filter=None): @@ -52,7 +52,7 @@ def index(sort=None, view_filter=None): @bp.route('/popular', methods=['GET']) -# @bp.route('/popular/', methods=['GET']) +@bp.route('/popular/', methods=['GET']) @bp.route('/popular//', methods=['GET', 'POST']) @cache.cached(timeout=5, make_cache_key=make_cache_key) def popular(sort=None, view_filter=None): @@ -67,7 +67,7 @@ def popular(sort=None, view_filter=None): @bp.route('/all', methods=['GET']) -# @bp.route('/all/', methods=['GET']) +@bp.route('/all/', methods=['GET']) @bp.route('/all//', methods=['GET', 'POST']) @cache.cached(timeout=5, make_cache_key=make_cache_key) def all_posts(sort=None, view_filter=None): @@ -100,12 +100,6 @@ def home_page(type, sort, view_filter): if current_user.is_anonymous: flash(_('Create an account to tailor this feed to your interests.')) - # view filter - # anon can only filter to local/all - # if view_filter == 'local': - # posts = Post.query.filter(Post.from_bot == False, Post.nsfw == False, Post.nsfl == False, Post.deleted == False, Post.instance_id == 1) - # else: - # posts = Post.query.filter(Post.from_bot == False, Post.nsfw == False, Post.nsfl == False, Post.deleted == False) posts = Post.query.filter(Post.from_bot == False, Post.nsfw == False, Post.nsfl == False, Post.deleted == False) posts = posts.join(Community, Community.id == Post.community_id) if type == 'home': @@ -168,8 +162,6 @@ def home_page(type, sort, view_filter): elif sort == 'active': posts = posts.order_by(desc(Post.last_active)) - # flash(_(f'posts: {posts}')) - # Pagination posts = posts.paginate(page=page, per_page=100 if current_user.is_authenticated and not low_bandwidth else 50, error_out=False) if type == 'home':