2023-08-15 15:46:11 -04:00
|
|
|
from django.contrib.auth.decorators import login_required
|
2025-01-11 17:20:02 -05:00
|
|
|
from django.core.exceptions import BadRequest, PermissionDenied
|
2024-06-20 16:01:21 -04:00
|
|
|
from django.http import Http404
|
2023-08-15 15:46:11 -04:00
|
|
|
from django.shortcuts import get_object_or_404, redirect, render
|
|
|
|
from django.urls import reverse
|
2024-06-07 22:29:10 -04:00
|
|
|
from django.utils.translation import gettext as _
|
2023-12-29 16:03:31 -05:00
|
|
|
from django.views.decorators.http import require_http_methods
|
2023-08-15 15:46:11 -04:00
|
|
|
|
2025-01-11 17:20:02 -05:00
|
|
|
from common.utils import AuthedHttpRequest, get_uuid_or_404
|
2023-08-15 15:46:11 -04:00
|
|
|
from takahe.utils import Takahe
|
|
|
|
|
|
|
|
from ..forms import *
|
|
|
|
from ..models import *
|
|
|
|
|
|
|
|
|
|
|
|
@login_required
|
|
|
|
def piece_replies(request: AuthedHttpRequest, piece_uuid: str):
|
|
|
|
piece = get_object_or_404(Piece, uid=get_uuid_or_404(piece_uuid))
|
|
|
|
if not piece.is_visible_to(request.user):
|
2024-04-23 23:57:49 -04:00
|
|
|
raise PermissionDenied(_("Insufficient permission"))
|
2023-08-15 15:46:11 -04:00
|
|
|
replies = piece.get_replies(request.user.identity)
|
2023-08-26 01:27:18 +00:00
|
|
|
return render(
|
|
|
|
request, "replies.html", {"post": piece.latest_post, "replies": replies}
|
|
|
|
)
|
2023-08-15 15:46:11 -04:00
|
|
|
|
|
|
|
|
|
|
|
@login_required
|
|
|
|
def post_replies(request: AuthedHttpRequest, post_id: int):
|
2023-08-26 01:27:18 +00:00
|
|
|
replies = Takahe.get_replies_for_posts([post_id], request.user.identity.pk)
|
2023-08-15 15:46:11 -04:00
|
|
|
return render(
|
|
|
|
request, "replies.html", {"post": Takahe.get_post(post_id), "replies": replies}
|
|
|
|
)
|
|
|
|
|
|
|
|
|
2024-06-20 16:01:21 -04:00
|
|
|
@require_http_methods(["POST"])
|
|
|
|
@login_required
|
|
|
|
def post_delete(request: AuthedHttpRequest, post_id: int):
|
|
|
|
p = Takahe.get_post(post_id)
|
|
|
|
if not p:
|
|
|
|
raise Http404(_("Post not found"))
|
|
|
|
if p.author_id != request.user.identity.pk:
|
|
|
|
raise PermissionDenied(_("Insufficient permission"))
|
|
|
|
parent_post = p.in_reply_to_post()
|
|
|
|
Takahe.delete_posts([post_id])
|
|
|
|
if parent_post:
|
|
|
|
return post_replies(request, parent_post.pk)
|
|
|
|
return redirect(reverse("home")) # FIXME
|
|
|
|
|
|
|
|
|
2023-12-29 16:03:31 -05:00
|
|
|
@require_http_methods(["POST"])
|
2023-08-15 15:46:11 -04:00
|
|
|
@login_required
|
|
|
|
def post_reply(request: AuthedHttpRequest, post_id: int):
|
|
|
|
content = request.POST.get("content", "").strip()
|
|
|
|
visibility = Takahe.Visibilities(int(request.POST.get("visibility", -1)))
|
2023-12-29 16:03:31 -05:00
|
|
|
if not content:
|
2024-04-23 23:57:49 -04:00
|
|
|
raise BadRequest(_("Invalid parameter"))
|
2023-08-15 15:46:11 -04:00
|
|
|
Takahe.reply_post(post_id, request.user.identity.pk, content, visibility)
|
2023-08-26 01:27:18 +00:00
|
|
|
replies = Takahe.get_replies_for_posts([post_id], request.user.identity.pk)
|
2023-08-15 15:46:11 -04:00
|
|
|
return render(
|
|
|
|
request, "replies.html", {"post": Takahe.get_post(post_id), "replies": replies}
|
|
|
|
)
|
|
|
|
|
|
|
|
|
2023-12-29 16:03:31 -05:00
|
|
|
@require_http_methods(["POST"])
|
|
|
|
@login_required
|
|
|
|
def post_boost(request: AuthedHttpRequest, post_id: int):
|
2024-06-16 21:54:20 -04:00
|
|
|
# classic_crosspost = request.user.preference.mastodon_repost_mode == 1
|
2023-12-29 17:21:46 -05:00
|
|
|
post = Takahe.get_post(post_id)
|
|
|
|
if not post:
|
2024-04-23 23:57:49 -04:00
|
|
|
raise BadRequest(_("Invalid parameter"))
|
2024-07-06 08:30:09 -04:00
|
|
|
boost = Takahe.boost_post(post_id, request.user.identity.pk)
|
|
|
|
if boost and boost.state == "new":
|
|
|
|
if request.user.mastodon and request.user.preference.mastodon_repost_mode == 1:
|
|
|
|
request.user.mastodon.boost_later(post.object_uri)
|
2023-12-29 17:21:46 -05:00
|
|
|
return render(request, "action_boost_post.html", {"post": post})
|
2023-12-29 16:03:31 -05:00
|
|
|
|
|
|
|
|
|
|
|
@require_http_methods(["POST"])
|
2023-08-15 15:46:11 -04:00
|
|
|
@login_required
|
|
|
|
def post_like(request: AuthedHttpRequest, post_id: int):
|
|
|
|
Takahe.like_post(post_id, request.user.identity.pk)
|
|
|
|
return render(request, "action_like_post.html", {"post": Takahe.get_post(post_id)})
|
|
|
|
|
|
|
|
|
2023-12-29 16:03:31 -05:00
|
|
|
@require_http_methods(["POST"])
|
2023-08-15 15:46:11 -04:00
|
|
|
@login_required
|
|
|
|
def post_unlike(request: AuthedHttpRequest, post_id: int):
|
|
|
|
Takahe.unlike_post(post_id, request.user.identity.pk)
|
|
|
|
return render(request, "action_like_post.html", {"post": Takahe.get_post(post_id)})
|