forked from mirrors/bookwyrm
Cache user relationship for follow buttons
This commit is contained in:
parent
b6d04e9997
commit
2cca9fab2d
2 changed files with 36 additions and 4 deletions
|
@ -1,13 +1,18 @@
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
|
{% load interaction %}
|
||||||
|
|
||||||
{% if request.user == user or not request.user.is_authenticated %}
|
{% if request.user == user or not request.user.is_authenticated %}
|
||||||
{% elif user in request.user.blocks.all %}
|
{# nothing to see here -- either it's yourself or your logged out #}
|
||||||
|
{% else %}
|
||||||
|
|
||||||
|
{% get_relationship user as relationship %}
|
||||||
|
{% if relationship.is_blocked %}
|
||||||
{% include 'snippets/block_button.html' with blocks=True %}
|
{% include 'snippets/block_button.html' with blocks=True %}
|
||||||
{% else %}
|
{% else %}
|
||||||
|
|
||||||
<div class="field{% if not minimal %} has-addons{% else %} mb-0{% endif %}">
|
<div class="field{% if not minimal %} has-addons{% else %} mb-0{% endif %}">
|
||||||
<div class="control">
|
<div class="control">
|
||||||
<form action="{% url 'follow' %}" method="POST" class="interaction follow_{{ user.id }} {% if request.user in user.followers.all or request.user in user.follower_requests.all %}is-hidden{%endif %}" data-id="follow_{{ user.id }}">
|
<form action="{% url 'follow' %}" method="POST" class="interaction follow_{{ user.id }} {% if relationship.is_following or relationship.is_follow_pending %}is-hidden{%endif %}" data-id="follow_{{ user.id }}">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<input type="hidden" name="user" value="{{ user.username }}">
|
<input type="hidden" name="user" value="{{ user.username }}">
|
||||||
<button class="button is-small{% if not minimal %} is-link{% endif %}" type="submit">
|
<button class="button is-small{% if not minimal %} is-link{% endif %}" type="submit">
|
||||||
|
@ -18,10 +23,10 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</button>
|
</button>
|
||||||
</form>
|
</form>
|
||||||
<form action="{% url 'unfollow' %}" method="POST" class="interaction follow_{{ user.id }} {% if not request.user in user.followers.all and not request.user in user.follower_requests.all %}is-hidden{%endif %}" data-id="follow_{{ user.id }}">
|
<form action="{% url 'unfollow' %}" method="POST" class="interaction follow_{{ user.id }} {% if not relationship.is_following and not relationship.is_follow_pending %}is-hidden{%endif %}" data-id="follow_{{ user.id }}">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<input type="hidden" name="user" value="{{ user.username }}">
|
<input type="hidden" name="user" value="{{ user.username }}">
|
||||||
{% if user.manually_approves_followers and request.user not in user.followers.all %}
|
{% if user.manually_approves_followers and not relationship.is_following %}
|
||||||
<button class="button is-small is-danger is-light" type="submit">
|
<button class="button is-small is-danger is-light" type="submit">
|
||||||
{% trans "Undo follow request" %}
|
{% trans "Undo follow request" %}
|
||||||
</button>
|
</button>
|
||||||
|
@ -42,4 +47,7 @@
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
|
@ -32,3 +32,27 @@ def get_user_boosted(user, status):
|
||||||
def get_user_saved_lists(user, book_list):
|
def get_user_saved_lists(user, book_list):
|
||||||
"""did the user save a list"""
|
"""did the user save a list"""
|
||||||
return user.saved_lists.filter(id=book_list.id).exists()
|
return user.saved_lists.filter(id=book_list.id).exists()
|
||||||
|
|
||||||
|
@register.simple_tag(takes_context=True)
|
||||||
|
def get_relationship(context, user_object):
|
||||||
|
"""caches the relationship between the logged in user and another user"""
|
||||||
|
user = context["request"].user
|
||||||
|
return cache.get(f"relationship-{user.id}-{user_object.id}") or cache.set(
|
||||||
|
get_relationship_name(user, user_object),
|
||||||
|
timeout=259200,
|
||||||
|
)
|
||||||
|
|
||||||
|
def get_relationship_name(user, user_object):
|
||||||
|
"""returns the relationship type"""
|
||||||
|
types = {
|
||||||
|
"is_following": False,
|
||||||
|
"is_follow_pending": False,
|
||||||
|
"is_blocked": False,
|
||||||
|
}
|
||||||
|
if user_object in user.blocks.all():
|
||||||
|
types["is_blocked"] = True
|
||||||
|
elif user_object in user.following.all():
|
||||||
|
types["is_following"] = True
|
||||||
|
elif user_object in user.follower_requests.all():
|
||||||
|
types["is_follow_pending"] = True
|
||||||
|
return types
|
||||||
|
|
Loading…
Reference in a new issue