From 5501318f95b61acd01398bb86dbd18dd9eac7afe Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Mon, 2 Nov 2020 15:10:41 -0800 Subject: [PATCH] Incoming shelve activities --- bookwyrm/incoming.py | 18 ++++++++++++++++++ bookwyrm/models/base_model.py | 5 ++++- bookwyrm/models/shelf.py | 4 ++-- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/bookwyrm/incoming.py b/bookwyrm/incoming.py index 5f4cc15b..c6a22caa 100644 --- a/bookwyrm/incoming.py +++ b/bookwyrm/incoming.py @@ -62,6 +62,8 @@ def shared_inbox(request): 'Announce': handle_boost, 'Add': { 'Tag': handle_tag, + 'Edition': handle_shelve, + 'Work': handle_shelve, }, 'Undo': { 'Follow': handle_unfollow, @@ -318,6 +320,22 @@ def handle_tag(activity): status_builder.create_tag(user, book, activity['object']['name']) +@app.task +def handle_shelve(activity): + ''' putting a book on a shelf ''' + user = get_or_create_remote_user(activity['actor']) + book = books_manager.get_or_create_book(activity['object']) + try: + shelf = models.Shelf.objects.get(remote_id=activity['target']) + except models.Shelf.DoesNotExist: + return + if shelf.user != user: + # this doesn't add up. + return + shelf.books.add(book) + shelf.save() + + @app.task def handle_update_user(activity): ''' receive an updated user Person activity object ''' diff --git a/bookwyrm/models/base_model.py b/bookwyrm/models/base_model.py index 8150d650..2215a28a 100644 --- a/bookwyrm/models/base_model.py +++ b/bookwyrm/models/base_model.py @@ -68,7 +68,10 @@ class ActivitypubMixin: if not hasattr(self, mapping.model_key) or not mapping.activity_key: continue value = getattr(self, mapping.model_key) - if hasattr(value, 'remote_id'): + print(value) + if hasattr(value, 'local_id'): + value = value.local_id + elif hasattr(value, 'remote_id'): value = value.remote_id if isinstance(value, datetime): value = value.isoformat() diff --git a/bookwyrm/models/shelf.py b/bookwyrm/models/shelf.py index 53e557ee..24f1fdce 100644 --- a/bookwyrm/models/shelf.py +++ b/bookwyrm/models/shelf.py @@ -49,8 +49,8 @@ class ShelfBook(BookWyrmModel): return activitypub.Add( id='%s#add' % self.remote_id, actor=user.remote_id, - object=self.book.to_activity(), - target=self.shelf.to_activity() + object=self.book.local_id, + target=self.shelf.remote_id, ).serialize() def to_remove_activity(self, user):