mirror of
https://github.com/bookwyrm-social/bookwyrm.git
synced 2024-12-30 03:50:40 +00:00
Fixing up notifications.
This commit is contained in:
parent
0bf73fef24
commit
22b2a95fd3
6 changed files with 80 additions and 33 deletions
|
@ -5,7 +5,7 @@ from requests import HTTPError
|
||||||
from fedireads import outgoing
|
from fedireads import outgoing
|
||||||
from fedireads.tasks import app
|
from fedireads.tasks import app
|
||||||
from fedireads.models import ImportJob, ImportItem
|
from fedireads.models import ImportJob, ImportItem
|
||||||
|
from fedireads.status import create_notification
|
||||||
|
|
||||||
# TODO: remove or notify about this in the UI
|
# TODO: remove or notify about this in the UI
|
||||||
MAX_ENTRIES = 20
|
MAX_ENTRIES = 20
|
||||||
|
@ -25,32 +25,34 @@ def start_import(job):
|
||||||
@app.task
|
@app.task
|
||||||
def import_data(job_id):
|
def import_data(job_id):
|
||||||
job = ImportJob.objects.get(id=job_id)
|
job = ImportJob.objects.get(id=job_id)
|
||||||
user = job.user
|
try:
|
||||||
results = []
|
results = []
|
||||||
reviews = []
|
reviews = []
|
||||||
for item in job.items.all():
|
for item in job.items.all():
|
||||||
try:
|
try:
|
||||||
item.resolve()
|
item.resolve()
|
||||||
except HTTPError:
|
except HTTPError:
|
||||||
pass
|
pass
|
||||||
if item.book:
|
if item.book:
|
||||||
item.save()
|
item.save()
|
||||||
results.append(item)
|
results.append(item)
|
||||||
if item.rating or item.review:
|
if item.rating or item.review:
|
||||||
reviews.append(item)
|
reviews.append(item)
|
||||||
else:
|
else:
|
||||||
item.fail_reason = "Could not match book on OpenLibrary"
|
item.fail_reason = "Could not match book on OpenLibrary"
|
||||||
item.save()
|
item.save()
|
||||||
|
|
||||||
outgoing.handle_import_books(user, results)
|
outgoing.handle_import_books(job.user, results)
|
||||||
for item in reviews:
|
for item in reviews:
|
||||||
review_title = "Review of {!r} on Goodreads".format(
|
review_title = "Review of {!r} on Goodreads".format(
|
||||||
item.book.title,
|
item.book.title,
|
||||||
) if item.review else ""
|
) if item.review else ""
|
||||||
outgoing.handle_review(
|
outgoing.handle_review(
|
||||||
user,
|
job.user,
|
||||||
item.book,
|
item.book,
|
||||||
review_title,
|
review_title,
|
||||||
item.review,
|
item.review,
|
||||||
item.rating,
|
item.rating,
|
||||||
)
|
)
|
||||||
|
finally:
|
||||||
|
create_notification(job.user, 'IMPORT', related_import=job)
|
||||||
|
|
43
fedireads/migrations/0033_auto_20200422_1249.py
Normal file
43
fedireads/migrations/0033_auto_20200422_1249.py
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
# Generated by Django 3.0.3 on 2020-04-22 12:49
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('fedireads', '0032_auto_20200421_1347'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RemoveConstraint(
|
||||||
|
model_name='notification',
|
||||||
|
name='notification_type_valid',
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='importitem',
|
||||||
|
name='fail_reason',
|
||||||
|
field=models.TextField(null=True),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='importitem',
|
||||||
|
name='index',
|
||||||
|
field=models.IntegerField(default=1),
|
||||||
|
preserve_default=False,
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='notification',
|
||||||
|
name='related_import',
|
||||||
|
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, to='fedireads.ImportJob'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='notification',
|
||||||
|
name='notification_type',
|
||||||
|
field=models.CharField(choices=[('FAVORITE', 'Favorite'), ('REPLY', 'Reply'), ('TAG', 'Tag'), ('FOLLOW', 'Follow'), ('FOLLOW_REQUEST', 'Follow Request'), ('BOOST', 'Boost'), ('IMPORT', 'Import')], max_length=255),
|
||||||
|
),
|
||||||
|
migrations.AddConstraint(
|
||||||
|
model_name='notification',
|
||||||
|
constraint=models.CheckConstraint(check=models.Q(notification_type__in=['FAVORITE', 'REPLY', 'TAG', 'FOLLOW', 'FOLLOW_REQUEST', 'BOOST', 'IMPORT']), name='notification_type_valid'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -151,7 +151,7 @@ class ReadThrough(FedireadsModel):
|
||||||
|
|
||||||
NotificationType = models.TextChoices(
|
NotificationType = models.TextChoices(
|
||||||
'NotificationType',
|
'NotificationType',
|
||||||
'FAVORITE REPLY TAG FOLLOW FOLLOW_REQUEST BOOST IMPORT_RESULT')
|
'FAVORITE REPLY TAG FOLLOW FOLLOW_REQUEST BOOST IMPORT')
|
||||||
|
|
||||||
class Notification(FedireadsModel):
|
class Notification(FedireadsModel):
|
||||||
''' you've been tagged, liked, followed, etc '''
|
''' you've been tagged, liked, followed, etc '''
|
||||||
|
@ -163,6 +163,8 @@ class Notification(FedireadsModel):
|
||||||
on_delete=models.PROTECT, null=True, related_name='related_user')
|
on_delete=models.PROTECT, null=True, related_name='related_user')
|
||||||
related_status = models.ForeignKey(
|
related_status = models.ForeignKey(
|
||||||
'Status', on_delete=models.PROTECT, null=True)
|
'Status', on_delete=models.PROTECT, null=True)
|
||||||
|
related_import = models.ForeignKey(
|
||||||
|
'ImportJob', on_delete=models.PROTECT, null=True)
|
||||||
read = models.BooleanField(default=False)
|
read = models.BooleanField(default=False)
|
||||||
notification_type = models.CharField(
|
notification_type = models.CharField(
|
||||||
max_length=255, choices=NotificationType.choices)
|
max_length=255, choices=NotificationType.choices)
|
||||||
|
|
|
@ -203,7 +203,6 @@ def handle_import_books(user, items):
|
||||||
status.status_type = 'Update'
|
status.status_type = 'Update'
|
||||||
status.save()
|
status.save()
|
||||||
|
|
||||||
create_notification(user, 'IMPORT_RESULT', related_status=status)
|
|
||||||
create_activity = activitypub.get_create(
|
create_activity = activitypub.get_create(
|
||||||
user, activitypub.get_status(status))
|
user, activitypub.get_status(status))
|
||||||
broadcast(user, create_activity)
|
broadcast(user, create_activity)
|
||||||
|
|
|
@ -234,7 +234,7 @@ def create_tag(user, possible_book, name):
|
||||||
|
|
||||||
|
|
||||||
def create_notification(user, notification_type, related_user=None, \
|
def create_notification(user, notification_type, related_user=None, \
|
||||||
related_book=None, related_status=None):
|
related_book=None, related_status=None, related_import=None):
|
||||||
''' let a user know when someone interacts with their content '''
|
''' let a user know when someone interacts with their content '''
|
||||||
if user == related_user:
|
if user == related_user:
|
||||||
# don't create notification when you interact with your own stuff
|
# don't create notification when you interact with your own stuff
|
||||||
|
@ -244,6 +244,7 @@ def create_notification(user, notification_type, related_user=None, \
|
||||||
related_book=related_book,
|
related_book=related_book,
|
||||||
related_user=related_user,
|
related_user=related_user,
|
||||||
related_status=related_status,
|
related_status=related_status,
|
||||||
|
related_import=related_import,
|
||||||
notification_type=notification_type,
|
notification_type=notification_type,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -38,7 +38,7 @@
|
||||||
boosted your <a href="{{ notification.related_status.absolute_id}}">status</a>
|
boosted your <a href="{{ notification.related_status.absolute_id}}">status</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% else %}
|
{% else %}
|
||||||
your <a href="{{ notification.related_status.absolute_id }}">import</a> succeeded.
|
your <a href="/import_status/{{ notification.related_import.id }}">import</a> completed.
|
||||||
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
|
Loading…
Reference in a new issue