2021-03-08 11:49:10 -05:00
|
|
|
""" views for actions you can take in the application """
|
2021-01-13 16:36:01 -05:00
|
|
|
from django.contrib.auth.decorators import login_required
|
2021-02-17 14:28:54 -05:00
|
|
|
from django.db import IntegrityError
|
2021-09-27 19:04:40 -04:00
|
|
|
from django.shortcuts import get_object_or_404, redirect
|
2021-01-13 16:36:01 -05:00
|
|
|
from django.views.decorators.http import require_POST
|
|
|
|
|
|
|
|
from bookwyrm import models
|
|
|
|
from .helpers import get_user_from_username
|
|
|
|
|
2021-03-08 11:49:10 -05:00
|
|
|
|
2021-01-13 16:36:01 -05:00
|
|
|
@login_required
|
|
|
|
@require_POST
|
|
|
|
def follow(request):
|
2021-04-26 12:15:42 -04:00
|
|
|
"""follow another user, here or abroad"""
|
2021-03-08 11:49:10 -05:00
|
|
|
username = request.POST["user"]
|
2021-04-30 12:33:36 -04:00
|
|
|
to_follow = get_user_from_username(request.user, username)
|
2021-01-13 16:36:01 -05:00
|
|
|
|
2021-02-17 14:28:54 -05:00
|
|
|
try:
|
|
|
|
models.UserFollowRequest.objects.create(
|
|
|
|
user_subject=request.user,
|
|
|
|
user_object=to_follow,
|
|
|
|
)
|
|
|
|
except IntegrityError:
|
|
|
|
pass
|
2021-02-12 19:16:22 -05:00
|
|
|
|
2021-01-13 16:36:01 -05:00
|
|
|
return redirect(to_follow.local_path)
|
|
|
|
|
|
|
|
|
|
|
|
@login_required
|
|
|
|
@require_POST
|
|
|
|
def unfollow(request):
|
2021-04-26 12:15:42 -04:00
|
|
|
"""unfollow a user"""
|
2021-03-08 11:49:10 -05:00
|
|
|
username = request.POST["user"]
|
2021-04-30 12:33:36 -04:00
|
|
|
to_unfollow = get_user_from_username(request.user, username)
|
2021-01-13 16:36:01 -05:00
|
|
|
|
2021-03-13 17:55:09 -05:00
|
|
|
try:
|
|
|
|
models.UserFollows.objects.get(
|
|
|
|
user_subject=request.user, user_object=to_unfollow
|
|
|
|
).delete()
|
|
|
|
except models.UserFollows.DoesNotExist:
|
|
|
|
pass
|
|
|
|
|
|
|
|
try:
|
|
|
|
models.UserFollowRequest.objects.get(
|
|
|
|
user_subject=request.user, user_object=to_unfollow
|
|
|
|
).delete()
|
|
|
|
except models.UserFollowRequest.DoesNotExist:
|
|
|
|
pass
|
|
|
|
|
|
|
|
# this is handled with ajax so it shouldn't really matter
|
|
|
|
return redirect(request.headers.get("Referer", "/"))
|
2021-01-13 16:36:01 -05:00
|
|
|
|
|
|
|
|
|
|
|
@login_required
|
|
|
|
@require_POST
|
|
|
|
def accept_follow_request(request):
|
2021-04-26 12:15:42 -04:00
|
|
|
"""a user accepts a follow request"""
|
2021-03-08 11:49:10 -05:00
|
|
|
username = request.POST["user"]
|
2021-04-30 12:33:36 -04:00
|
|
|
requester = get_user_from_username(request.user, username)
|
2021-01-13 16:36:01 -05:00
|
|
|
|
|
|
|
try:
|
|
|
|
follow_request = models.UserFollowRequest.objects.get(
|
2021-03-08 11:49:10 -05:00
|
|
|
user_subject=requester, user_object=request.user
|
2021-01-13 16:36:01 -05:00
|
|
|
)
|
|
|
|
except models.UserFollowRequest.DoesNotExist:
|
|
|
|
# Request already dealt with.
|
|
|
|
return redirect(request.user.local_path)
|
2021-02-06 22:12:49 -05:00
|
|
|
follow_request.accept()
|
2021-01-13 16:36:01 -05:00
|
|
|
|
|
|
|
return redirect(request.user.local_path)
|
|
|
|
|
|
|
|
|
|
|
|
@login_required
|
|
|
|
@require_POST
|
|
|
|
def delete_follow_request(request):
|
2021-04-26 12:15:42 -04:00
|
|
|
"""a user rejects a follow request"""
|
2021-03-08 11:49:10 -05:00
|
|
|
username = request.POST["user"]
|
2021-04-30 12:33:36 -04:00
|
|
|
requester = get_user_from_username(request.user, username)
|
2021-01-13 16:36:01 -05:00
|
|
|
|
2021-09-27 19:08:52 -04:00
|
|
|
follow_request = get_object_or_404(
|
|
|
|
models.UserFollowRequest, user_subject=requester, user_object=request.user
|
2021-09-27 19:04:40 -04:00
|
|
|
)
|
|
|
|
follow_request.raise_not_deletable(request.user)
|
2021-01-13 16:36:01 -05:00
|
|
|
|
|
|
|
follow_request.delete()
|
2021-09-18 14:32:00 -04:00
|
|
|
return redirect(f"/user/{request.user.localname}")
|