diff --git a/bookwyrm/connectors/connector_manager.py b/bookwyrm/connectors/connector_manager.py index 853609de..caf6bcbe 100644 --- a/bookwyrm/connectors/connector_manager.py +++ b/bookwyrm/connectors/connector_manager.py @@ -3,6 +3,9 @@ import importlib import re from urllib.parse import urlparse +from django.dispatch import receiver +from django.db.models import signals + from requests import HTTPError from bookwyrm import models @@ -44,6 +47,7 @@ def search(query, min_confidence=0.1): except (HTTPError, ConnectorException): continue + # if the search results look the same, ignore them result_set = [r for r in result_set if dedup_slug(r) not in result_index] # `|=` concats two sets. WE ARE GETTING FANCY HERE result_index |= set(dedup_slug(r) for r in result_set) @@ -85,7 +89,7 @@ def get_connectors(): def get_or_create_connector(remote_id): - """ get the connector related to the author's server """ + """ get the connector related to the object's server """ url = urlparse(remote_id) identifier = url.netloc if not identifier: @@ -122,3 +126,11 @@ def load_connector(connector_info): "bookwyrm.connectors.%s" % connector_info.connector_file ) return connector.Connector(connector_info.identifier) + + +@receiver(signals.post_save, sender="bookwyrm.FederatedServer") +# pylint: disable=unused-argument +def create_connector(sender, instance, created, *args, **kwargs): + """ create a connector to an external bookwyrm server """ + if instance.application_type == "bookwyrm": + get_or_create_connector("https://{:s}".format(instance.server_name)) diff --git a/bookwyrm/migrations/0060_siteinvite_invitees.py b/bookwyrm/migrations/0060_siteinvite_invitees.py new file mode 100644 index 00000000..acd00977 --- /dev/null +++ b/bookwyrm/migrations/0060_siteinvite_invitees.py @@ -0,0 +1,21 @@ +# Generated by Django 3.1.6 on 2021-04-02 00:14 + +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookwyrm", "0059_user_preferred_timezone"), + ] + + operations = [ + migrations.AddField( + model_name="siteinvite", + name="invitees", + field=models.ManyToManyField( + related_name="invitees", to=settings.AUTH_USER_MODEL + ), + ), + ] diff --git a/bookwyrm/models/site.py b/bookwyrm/models/site.py index c3c1d8a4..1eb31869 100644 --- a/bookwyrm/models/site.py +++ b/bookwyrm/models/site.py @@ -58,6 +58,7 @@ class SiteInvite(models.Model): use_limit = models.IntegerField(blank=True, null=True) times_used = models.IntegerField(default=0) user = models.ForeignKey(User, on_delete=models.CASCADE) + invitees = models.ManyToManyField(User, related_name="invitees") def valid(self): """ make sure it hasn't expired or been used """ diff --git a/bookwyrm/templates/settings/manage_invite_requests.html b/bookwyrm/templates/settings/manage_invite_requests.html index 03ddd210..f28118bf 100644 --- a/bookwyrm/templates/settings/manage_invite_requests.html +++ b/bookwyrm/templates/settings/manage_invite_requests.html @@ -59,6 +59,8 @@ {% endif %} + {# no invite OR invite not yet used #} + {% if not req.invite.times_used %}
{% csrf_token %} @@ -68,9 +70,16 @@ {% endif %}
+ {% endif %} + {# invite created but not used #} {% if req.invite and not req.invite.times_used %} {# #} + {% elif req.invite %} + {# accepted #} + {% if req.invite.invitees.exists %} + @{{ req.invite.invitees.first.localname }} + {% endif %} {% else %}
{% csrf_token %} @@ -78,7 +87,7 @@ {% if not req.ignored %} {% else %} - + {% endif %}
{% endif %} diff --git a/bookwyrm/templates/snippets/filters_panel/filters_panel.html b/bookwyrm/templates/snippets/filters_panel/filters_panel.html index 185f5bc4..8c178860 100644 --- a/bookwyrm/templates/snippets/filters_panel/filters_panel.html +++ b/bookwyrm/templates/snippets/filters_panel/filters_panel.html @@ -11,7 +11,10 @@ -