from django.db.models import Manager


class ThreadManager(Manager):
    def inbox(self, user):
        return self.filter(userthread__user=user, userthread__deleted=False)
    
    def unread(self, user):
        return self.filter(userthread__user=user, userthread__deleted=False, userthread__unread=True)


class MessageManager(Manager):
    def new_reply(self, thread, user, content):
        msg = self.create(thread=thread, sender=user, content=content)
        thread.userthread_set.exclude(user=user).update(deleted=False, unread=True)
        return msg
    
    def new_message(self, from_user, to_users, subject, content):
        from user_messages.models import Thread
        thread = Thread.objects.create(subject=subject)
        for user in to_users:
            thread.userthread_set.create(user=user, deleted=False, unread=True)
        thread.userthread_set.create(user=from_user, deleted=True, unread=False)
        return self.create(thread=thread, sender=from_user, content=content)

from django.db.models import Manager

from user_messages.signals import message_sent


class ThreadManager(Manager):
    def inbox(self, user):
        return self.filter(userthread__user=user, userthread__deleted=False)
    
    def unread(self, user):
        return self.filter(userthread__user=user, userthread__deleted=False, userthread__unread=True)


class MessageManager(Manager):
    def new_reply(self, thread, user, content):
        msg = self.create(thread=thread, sender=user, content=content)
        thread.userthread_set.exclude(user=user).update(deleted=False, unread=True)
        message_sent.send(sender=self.model, message=msg, thread=thread)
        return msg
    
    def new_message(self, from_user, to_users, subject, content):
        from user_messages.models import Thread
        thread = Thread.objects.create(subject=subject)
        for user in to_users:
            thread.userthread_set.create(user=user, deleted=False, unread=True)
        thread.userthread_set.create(user=from_user, deleted=True, unread=False)
        msg = self.create(thread=thread, sender=from_user, content=content)
        message_sent.send(sender=self.model, message=msg, thread=thread)
        return msg

Send a signal on each message that is sent to allow for external customization.
Send a signal on each message that is sent to allow for external customization.

  from django.db.models import Manager
+ 
+ from user_messages.signals import message_sent
  
  
  class ThreadManager(Manager):
      def inbox(self, user):
          return self.filter(userthread__user=user, userthread__deleted=False)
      
      def unread(self, user):
          return self.filter(userthread__user=user, userthread__deleted=False, userthread__unread=True)
  
  
  class MessageManager(Manager):
      def new_reply(self, thread, user, content):
          msg = self.create(thread=thread, sender=user, content=content)
          thread.userthread_set.exclude(user=user).update(deleted=False, unread=True)
+         message_sent.send(sender=self.model, message=msg, thread=thread)
          return msg
      
      def new_message(self, from_user, to_users, subject, content):
          from user_messages.models import Thread
          thread = Thread.objects.create(subject=subject)
          for user in to_users:
              thread.userthread_set.create(user=user, deleted=False, unread=True)
          thread.userthread_set.create(user=from_user, deleted=True, unread=False)
-         return self.create(thread=thread, sender=from_user, content=content)
+         msg = self.create(thread=thread, sender=from_user, content=content)
+         message_sent.send(sender=self.model, message=msg, thread=thread)
+         return msg
  
Send a signal on each message that is sent to allow for external customization.
## Code Before:
from django.db.models import Manager


class ThreadManager(Manager):
    def inbox(self, user):
        return self.filter(userthread__user=user, userthread__deleted=False)
    
    def unread(self, user):
        return self.filter(userthread__user=user, userthread__deleted=False, userthread__unread=True)


class MessageManager(Manager):
    def new_reply(self, thread, user, content):
        msg = self.create(thread=thread, sender=user, content=content)
        thread.userthread_set.exclude(user=user).update(deleted=False, unread=True)
        return msg
    
    def new_message(self, from_user, to_users, subject, content):
        from user_messages.models import Thread
        thread = Thread.objects.create(subject=subject)
        for user in to_users:
            thread.userthread_set.create(user=user, deleted=False, unread=True)
        thread.userthread_set.create(user=from_user, deleted=True, unread=False)
        return self.create(thread=thread, sender=from_user, content=content)

## Instruction:
Send a signal on each message that is sent to allow for external customization.
## Code After:
from django.db.models import Manager

from user_messages.signals import message_sent


class ThreadManager(Manager):
    def inbox(self, user):
        return self.filter(userthread__user=user, userthread__deleted=False)
    
    def unread(self, user):
        return self.filter(userthread__user=user, userthread__deleted=False, userthread__unread=True)


class MessageManager(Manager):
    def new_reply(self, thread, user, content):
        msg = self.create(thread=thread, sender=user, content=content)
        thread.userthread_set.exclude(user=user).update(deleted=False, unread=True)
        message_sent.send(sender=self.model, message=msg, thread=thread)
        return msg
    
    def new_message(self, from_user, to_users, subject, content):
        from user_messages.models import Thread
        thread = Thread.objects.create(subject=subject)
        for user in to_users:
            thread.userthread_set.create(user=user, deleted=False, unread=True)
        thread.userthread_set.create(user=from_user, deleted=True, unread=False)
        msg = self.create(thread=thread, sender=from_user, content=content)
        message_sent.send(sender=self.model, message=msg, thread=thread)
        return msg
