2012-06-25 06:57:14 +00:00
|
|
|
import datetime
|
2012-07-11 07:13:59 +00:00
|
|
|
import os
|
2012-08-08 12:16:00 +00:00
|
|
|
import re
|
2011-09-10 12:14:08 +00:00
|
|
|
from django.db import models
|
2012-08-08 12:16:00 +00:00
|
|
|
from django.db.models.signals import post_save
|
|
|
|
from django.dispatch import receiver
|
|
|
|
|
|
|
|
from seaserv import get_group_members
|
|
|
|
|
|
|
|
from shortcuts import get_first_object_or_none
|
|
|
|
from notifications.models import UserNotification
|
|
|
|
from profile.models import Profile
|
2011-09-10 12:14:08 +00:00
|
|
|
|
2012-06-25 06:57:14 +00:00
|
|
|
class GroupMessage(models.Model):
|
2012-07-30 12:19:17 +00:00
|
|
|
group_id = models.IntegerField(db_index=True)
|
2012-06-25 06:57:14 +00:00
|
|
|
from_email = models.EmailField()
|
2012-06-27 03:27:00 +00:00
|
|
|
message = models.CharField(max_length=500)
|
2012-06-25 06:57:14 +00:00
|
|
|
timestamp = models.DateTimeField(default=datetime.datetime.now)
|
|
|
|
|
|
|
|
class MessageReply(models.Model):
|
|
|
|
reply_to = models.ForeignKey(GroupMessage)
|
|
|
|
from_email = models.EmailField()
|
|
|
|
message = models.CharField(max_length=150)
|
|
|
|
timestamp = models.DateTimeField(default=datetime.datetime.now)
|
2012-08-08 12:16:00 +00:00
|
|
|
|
2012-08-10 13:16:55 +00:00
|
|
|
class MessageAttachment(models.Model):
|
|
|
|
"""
|
2012-08-26 03:48:43 +00:00
|
|
|
Model used to represents a message attachment related to a group message.
|
2012-08-10 13:16:55 +00:00
|
|
|
"""
|
|
|
|
group_message = models.ForeignKey(GroupMessage)
|
|
|
|
repo_id = models.CharField(max_length=40)
|
2012-08-26 03:48:43 +00:00
|
|
|
attach_type = models.CharField(max_length=5) # `file` or `dir`
|
2012-08-13 07:58:54 +00:00
|
|
|
path = models.TextField()
|
2012-08-26 09:29:29 +00:00
|
|
|
src = models.CharField(max_length=20) # `recommend` or `filecomment`
|
2012-08-26 03:48:43 +00:00
|
|
|
|
2012-08-09 09:13:34 +00:00
|
|
|
at_pattern = re.compile(r'(\s|^)(@\w+)', flags=re.U)
|
|
|
|
|
2012-08-08 12:16:00 +00:00
|
|
|
@receiver(post_save, sender=MessageReply)
|
|
|
|
def msgreply_save_handler(sender, instance, **kwargs):
|
|
|
|
"""
|
2012-08-09 09:13:34 +00:00
|
|
|
Handle sending notification to '@<user>' when reply messages.
|
2012-08-08 12:16:00 +00:00
|
|
|
"""
|
|
|
|
from_email = instance.from_email
|
|
|
|
reply_msg = instance.message
|
|
|
|
group_msg = instance.reply_to
|
|
|
|
to_user = ''
|
|
|
|
|
|
|
|
m = re.match(at_pattern, reply_msg)
|
|
|
|
if m:
|
|
|
|
nickname_or_emailprefix = m.group()[1:]
|
2012-08-08 14:53:20 +00:00
|
|
|
for member in get_group_members(group_msg.group_id):
|
|
|
|
# For every group member, get his username and nickname if
|
|
|
|
# it exists, check whether match.
|
|
|
|
username = member.user_name
|
|
|
|
if username == from_email:
|
|
|
|
continue
|
|
|
|
|
2012-08-09 09:13:34 +00:00
|
|
|
p = get_first_object_or_none(
|
2012-08-08 14:53:20 +00:00
|
|
|
Profile.objects.filter(user=username))
|
|
|
|
nickname = p.nickname if p else ''
|
|
|
|
if nickname == nickname_or_emailprefix or \
|
|
|
|
username.split('@')[0] == nickname_or_emailprefix:
|
|
|
|
to_user = username
|
|
|
|
break
|
|
|
|
|
|
|
|
if to_user:
|
|
|
|
# Send notification to the user if he replies someone else'
|
2012-08-08 12:16:00 +00:00
|
|
|
# message.
|
|
|
|
try:
|
|
|
|
UserNotification.objects.get(to_user=to_user,
|
|
|
|
msg_type='grpmsg_reply',
|
|
|
|
detail=group_msg.id)
|
|
|
|
except UserNotification.DoesNotExist:
|
|
|
|
n = UserNotification(to_user=to_user,
|
|
|
|
msg_type='grpmsg_reply',
|
|
|
|
detail=group_msg.id)
|
|
|
|
n.save()
|
2012-08-08 14:53:20 +00:00
|
|
|
|