mirror of
https://github.com/bookwyrm-social/bookwyrm.git
synced 2024-09-26 13:30:13 +00:00
66 lines
1.8 KiB
Python
66 lines
1.8 KiB
Python
""" template filters for status interaction buttons """
|
|
from django import template
|
|
|
|
from bookwyrm import models
|
|
from bookwyrm.utils.cache import get_or_set
|
|
|
|
|
|
register = template.Library()
|
|
|
|
|
|
@register.filter(name="liked")
|
|
def get_user_liked(user, status):
|
|
"""did the given user fav a status?"""
|
|
return get_or_set(
|
|
f"fav-{user.id}-{status.id}",
|
|
lambda u, s: models.Favorite.objects.filter(user=u, status=s).exists(),
|
|
user,
|
|
status,
|
|
timeout=259200,
|
|
)
|
|
|
|
|
|
@register.filter(name="boosted")
|
|
def get_user_boosted(user, status):
|
|
"""did the given user fav a status?"""
|
|
return get_or_set(
|
|
f"boost-{user.id}-{status.id}",
|
|
lambda u: status.boosters.filter(user=u).exists(),
|
|
user,
|
|
timeout=259200,
|
|
)
|
|
|
|
|
|
@register.filter(name="saved")
|
|
def get_user_saved_lists(user, book_list):
|
|
"""did the user save a list"""
|
|
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 get_or_set(
|
|
f"cached-relationship-{user.id}-{user_object.id}",
|
|
get_relationship_name,
|
|
user,
|
|
user_object,
|
|
timeout=60 * 60,
|
|
)
|
|
|
|
|
|
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 in user_object.follower_requests.all():
|
|
types["is_follow_pending"] = True
|
|
return types
|