Merge pull request #65 from cthulahoops/following

Following
This commit is contained in:
Mouse Reeve 2020-03-06 16:15:42 -08:00 committed by GitHub
commit 984c04a374
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 52 additions and 16 deletions

View file

@ -187,7 +187,7 @@ def get_following(request, username):
return HttpResponseBadRequest() return HttpResponseBadRequest()
user = models.User.objects.get(localname=username) user = models.User.objects.get(localname=username)
following = models.User.objects.filter(followers=user) following = user.following
page = request.GET.get('page') page = request.GET.get('page')
return JsonResponse(activitypub.get_following(user, page, following)) return JsonResponse(activitypub.get_following(user, page, following))
@ -201,8 +201,8 @@ def handle_incoming_follow(activity):
# TODO: allow users to manually approve requests # TODO: allow users to manually approve requests
try: try:
models.UserRelationship.objects.create( models.UserRelationship.objects.create(
user_subject=to_follow, user_subject=user,
user_object=user, user_object=to_follow,
status='follow_request', status='follow_request',
relationship_id=activity['id'] relationship_id=activity['id']
) )

View file

@ -0,0 +1,19 @@
# Generated by Django 3.0.3 on 2020-02-24 15:04
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('fedireads', '0007_auto_20200223_0902'),
]
operations = [
migrations.AlterField(
model_name='user',
name='followers',
field=models.ManyToManyField(related_name='following', through='fedireads.UserRelationship', to=settings.AUTH_USER_MODEL),
),
]

View file

@ -38,7 +38,8 @@ class User(AbstractUser):
'self', 'self',
symmetrical=False, symmetrical=False,
through='UserRelationship', through='UserRelationship',
through_fields=('user_subject', 'user_object') through_fields=('user_object', 'user_subject'),
related_name='following'
) )
favorites = models.ManyToManyField( favorites = models.ManyToManyField(
'Status', 'Status',

View file

@ -88,8 +88,8 @@ def handle_outgoing_follow(user, to_follow):
def handle_outgoing_unfollow(user, to_unfollow): def handle_outgoing_unfollow(user, to_unfollow):
''' someone local wants to follow someone ''' ''' someone local wants to follow someone '''
relationship = models.UserRelationship.objects.get( relationship = models.UserRelationship.objects.get(
user_object=user, user_subject=user,
user_subject=to_unfollow user_object=to_unfollow
) )
activity = activitypub.get_unfollow(relationship) activity = activitypub.get_unfollow(relationship)
errors = broadcast(user, activity, [to_unfollow.inbox]) errors = broadcast(user, activity, [to_unfollow.inbox])

View file

@ -25,7 +25,7 @@
<div id="branding"><a href="/">📚FediReads</a></div> <div id="branding"><a href="/">📚FediReads</a></div>
<div id="actions"> <div id="actions">
<div id="account"> <div id="account">
{% if user.is_authenticated %} {% if request.user.is_authenticated %}
<form name="logout" action="/logout/" method="post"> <form name="logout" action="/logout/" method="post">
{% csrf_token %} {% csrf_token %}
Welcome, {% include 'snippets/username.html' with user=request.user %} Welcome, {% include 'snippets/username.html' with user=request.user %}

View file

@ -25,12 +25,25 @@
{% for follower in user.followers.all %} {% for follower in user.followers.all %}
<div> <div>
<a href="{{ follower.actor }}">{{ follower.username }}</a> <a href="{{ follower.actor }}">{{ follower.username }}</a>
{% if not request.user in follower.followers.all %} {% if not request.user in follower.followers.all and request.user != follower %}
{% include 'snippets/follow_button.html' with user=follower %} {% include 'snippets/follow_button.html' with user=follower %}
{% endif %} {% endif %}
</div> </div>
{% endfor %} {% endfor %}
</div> </div>
<div>
<h2>Following</h2>
{% for following in user.following.all %}
<div>
<a href="{{ following.actor }}">{{ following.username }}</a>
{% if not request.user in following.followers.all and request.user != following %}
{% include 'snippets/follow_button.html' with user=following %}
{% endif %}
</div>
{% endfor %}
</div>
</div> </div>
<div id="content"> <div id="content">

10
init_db.py Normal file
View file

@ -0,0 +1,10 @@
from fedireads.models import User
from fedireads.openlibrary import get_or_create_book
User.objects.create_user('mouse', 'mouse.reeve@gmail.com', 'password123')
User.objects.create_user('rat', 'rat@rat.com', 'ratword')
User.objects.get(id=1).followers.add(User.objects.get(id=2))
get_or_create_book('OL1715344W')
get_or_create_book('OL102749W')

View file

@ -21,12 +21,5 @@ fi
python manage.py makemigrations fedireads python manage.py makemigrations fedireads
python manage.py migrate python manage.py migrate
echo "from fedireads.models import User python manage.py shell < init_db.py
User.objects.create_user('mouse', 'mouse.reeve@gmail.com', 'password123')" | python manage.py shell
echo "from fedireads.models import User
User.objects.create_user('rat', 'rat@rat.com', 'ratword')
User.objects.get(id=1).followers.add(User.objects.get(id=2))" | python manage.py shell
echo "from fedireads.openlibrary import get_or_create_book
get_or_create_book('OL1715344W')
get_or_create_book('OL102749W')" | python manage.py shell
python manage.py runserver python manage.py runserver