Browse Source

further cleanups and improvs

Rafał Pitoń 8 years ago
parent
commit
b810c8f2f5

+ 7 - 1
misago/readtracker/signals.py

@@ -1,7 +1,7 @@
 from django.dispatch import Signal, receiver
 from django.dispatch import Signal, receiver
 
 
 from misago.categories.models import PRIVATE_THREADS_ROOT_NAME
 from misago.categories.models import PRIVATE_THREADS_ROOT_NAME
-from misago.categories.signals import move_category_content
+from misago.categories.signals import delete_category_content, move_category_content
 from misago.threads.signals import move_thread
 from misago.threads.signals import move_thread
 
 
 
 
@@ -14,6 +14,12 @@ thread_read = Signal(providing_args=["thread"])
 """
 """
 Signal handlers
 Signal handlers
 """
 """
+@receiver(delete_category_content)
+def delete_category_threads(sender, **kwargs):
+    sender.categoryread_set.all().delete()
+    sender.threadread_set.all().delete()
+
+
 @receiver(move_category_content)
 @receiver(move_category_content)
 def delete_category_tracker(sender, **kwargs):
 def delete_category_tracker(sender, **kwargs):
     sender.categoryread_set.all().delete()
     sender.categoryread_set.all().delete()

+ 1 - 0
misago/threads/participants.py

@@ -176,6 +176,7 @@ def remove_participant(request, thread, user):
         thread.delete()
         thread.delete()
     else:
     else:
         thread.threadparticipant_set.filter(user=user).delete()
         thread.threadparticipant_set.filter(user=user).delete()
+        thread.subscription_set.filter(user=user).delete()
 
 
         if removed_owner:
         if removed_owner:
             thread.is_closed = True # flag thread to close
             thread.is_closed = True # flag thread to close

+ 16 - 11
misago/threads/signals.py

@@ -8,7 +8,8 @@ from misago.categories.signals import delete_category_content, move_category_con
 from misago.core.pgutils import batch_delete, batch_update
 from misago.core.pgutils import batch_delete, batch_update
 from misago.users.signals import delete_user_content, username_changed
 from misago.users.signals import delete_user_content, username_changed
 
 
-from .models import Attachment, Poll, PollVote, Post, PostEdit, PostLike, Thread
+from .models import (
+    Attachment, Poll, PollVote, Post, PostEdit, PostLike, Thread)
 
 
 
 
 delete_post = Signal()
 delete_post = Signal()
@@ -37,15 +38,18 @@ def merge_posts(sender, **kwargs):
 
 
 @receiver(move_thread)
 @receiver(move_thread)
 def move_thread_content(sender, **kwargs):
 def move_thread_content(sender, **kwargs):
-    Post.objects.filter(thread=sender).update(category=sender.category)
-    PostEdit.objects.filter(thread=sender).update(category=sender.category)
-    PostLike.objects.filter(thread=sender).update(category=sender.category)
+    sender.post_set.update(category=sender.category)
+    sender.postedit_set.update(category=sender.category)
+    sender.postlike_set.update(category=sender.category)
+    sender.pollvote_set.update(category=sender.category)
+    sender.subscription_set.update(category=sender.category)
+
     Poll.objects.filter(thread=sender).update(category=sender.category)
     Poll.objects.filter(thread=sender).update(category=sender.category)
-    PollVote.objects.filter(thread=sender).update(category=sender.category)
 
 
 
 
 @receiver(delete_category_content)
 @receiver(delete_category_content)
 def delete_category_threads(sender, **kwargs):
 def delete_category_threads(sender, **kwargs):
+    sender.subscription_set.all().delete()
     sender.pollvote_set.all().delete()
     sender.pollvote_set.all().delete()
     sender.poll_set.all().delete()
     sender.poll_set.all().delete()
     sender.postlike_set.all().delete()
     sender.postlike_set.all().delete()
@@ -58,12 +62,13 @@ def delete_category_threads(sender, **kwargs):
 def move_category_threads(sender, **kwargs):
 def move_category_threads(sender, **kwargs):
     new_category = kwargs['new_category']
     new_category = kwargs['new_category']
 
 
-    Thread.objects.filter(category=sender).update(category=new_category)
-    Post.objects.filter(category=sender).update(category=new_category)
-    PostEdit.objects.filter(category=sender).update(category=new_category)
-    PostLike.objects.filter(category=sender).update(category=new_category)
-    Poll.objects.filter(category=sender).update(category=new_category)
-    PollVote.objects.filter(category=sender).update(category=new_category)
+    sender.thread_set.update(category=new_category)
+    sender.post_set.filter(category=sender).update(category=new_category)
+    sender.postedit_set.filter(category=sender).update(category=new_category)
+    sender.postlike_set.filter(category=sender).update(category=new_category)
+    sender.poll_set.filter(category=sender).update(category=new_category)
+    sender.pollvote_set.update(category=new_category)
+    sender.subscription_set.update(category=new_category)
 
 
 
 
 @receiver(delete_user_content)
 @receiver(delete_user_content)

+ 8 - 0
misago/threads/tests/test_privatethread_patch_api.py

@@ -260,6 +260,11 @@ class PrivateThreadRemoveParticipantApiTests(PrivateThreadPatchApiTestCase):
         ThreadParticipant.objects.set_owner(self.thread, self.other_user)
         ThreadParticipant.objects.set_owner(self.thread, self.other_user)
         ThreadParticipant.objects.add_participants(self.thread, [self.user])
         ThreadParticipant.objects.add_participants(self.thread, [self.user])
 
 
+        self.user.subscription_set.create(
+            category=self.category,
+            thread=self.thread,
+        )
+
         response = self.patch(self.api_link, [
         response = self.patch(self.api_link, [
             {'op': 'remove', 'path': 'participants', 'value': self.user.pk}
             {'op': 'remove', 'path': 'participants', 'value': self.user.pk}
         ])
         ])
@@ -284,6 +289,9 @@ class PrivateThreadRemoveParticipantApiTests(PrivateThreadPatchApiTestCase):
         self.assertEqual(self.thread.participants.count(), 1)
         self.assertEqual(self.thread.participants.count(), 1)
         self.assertEqual(self.thread.participants.filter(pk=self.user.pk).count(), 0)
         self.assertEqual(self.thread.participants.filter(pk=self.user.pk).count(), 0)
 
 
+        # thread was removed from user subscriptions
+        self.assertEqual(self.user.subscription_set.count(), 0)
+
     def test_user_leave_closed_thread(self):
     def test_user_leave_closed_thread(self):
         """api allows user to remove himself from closed thread"""
         """api allows user to remove himself from closed thread"""
         ThreadParticipant.objects.set_owner(self.thread, self.other_user)
         ThreadParticipant.objects.set_owner(self.thread, self.other_user)