1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-07-10 13:44:02 +00:00
seahub/base/models.py

164 lines
5.4 KiB
Python
Raw Normal View History

2012-08-26 03:48:43 +00:00
import datetime
2012-09-14 14:15:14 +00:00
import re
2011-03-19 05:15:02 +00:00
from django.db import models
2012-09-14 14:15:14 +00:00
from django.db.models.signals import post_save
from django.dispatch import receiver
2011-03-19 05:15:02 +00:00
2012-09-14 14:15:14 +00:00
from seaserv import get_emailusers
from shortcuts import get_first_object_or_none
from base.templatetags.seahub_tags import at_pattern
2012-09-14 14:15:14 +00:00
from notifications.models import UserNotification
from profile.models import Profile
2012-07-23 14:44:09 +00:00
class UuidObjidMap(models.Model):
2012-07-23 14:44:09 +00:00
"""
Model used for store crocdoc uuid and file object id mapping.
"""
uuid = models.CharField(max_length=40)
obj_id = models.CharField(max_length=40, unique=True)
2012-08-26 03:48:43 +00:00
class FileComment(models.Model):
"""
Model used for leave comment on file.
NOTE:
Need manually create index for (file_path_hash, repo_id).
"""
repo_id = models.CharField(max_length=36, db_index=True)
file_path = models.TextField()
file_path_hash = models.CharField(max_length=12)
from_email = models.EmailField()
message = models.TextField()
timestamp = models.DateTimeField(default=datetime.datetime.now)
class Meta:
ordering = ['-timestamp']
class FileContributors(models.Model):
"""(repo_id, file path, file_id, contributors)"""
repo_id = models.CharField(max_length=36, db_index=True)
file_id = models.CharField(max_length=40)
file_path = models.TextField()
file_path_hash = models.CharField(max_length=12)
2012-09-25 09:56:26 +00:00
last_modified = models.BigIntegerField()
2012-10-16 06:47:36 +00:00
last_commit_id = models.CharField(max_length=40)
# email addresses seperated by comma
emails = models.TextField()
2012-09-14 14:15:14 +00:00
class InnerPubMsg(models.Model):
"""
Model used for leave message on inner pub page.
"""
from_email = models.EmailField()
message = models.CharField(max_length=500)
timestamp = models.DateTimeField(default=datetime.datetime.now)
class Meta:
ordering = ['-timestamp']
class InnerPubMsgReply(models.Model):
reply_to = models.ForeignKey(InnerPubMsg)
from_email = models.EmailField()
message = models.CharField(max_length=150)
timestamp = models.DateTimeField(default=datetime.datetime.now)
2012-09-27 08:05:07 +00:00
# @receiver(post_save, sender=InnerPubMsgReply)
2012-09-14 14:15:14 +00:00
def msgreply_save_handler(sender, instance, **kwargs):
"""
Handle sending notification to '@<user>' when reply messages.
"""
from_email = instance.from_email
reply_msg = instance.message
innerpub_msg = instance.reply_to
to_user = ''
2012-09-14 14:15:14 +00:00
m = re.match(at_pattern, reply_msg)
if m:
nickname_or_emailprefix = m.group()[1:]
for member in get_emailusers(-1, -1):
# For every user, get his username and nickname if
# it exists, check whether match.
username = member.email
if username == from_email:
continue
p = get_first_object_or_none(
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'
# message.
try:
UserNotification.objects.get(to_user=to_user,
msg_type='innerpubmsg_reply',
detail=innerpub_msg.id)
except UserNotification.DoesNotExist:
n = UserNotification(to_user=to_user,
msg_type='innerpubmsg_reply',
detail=innerpub_msg.id)
n.save()
2012-09-27 08:05:07 +00:00
# @receiver(post_save, sender=InnerPubMsg)
2012-09-14 14:15:14 +00:00
def innerpub_msg_added_cb(sender, instance, **kwargs):
from_email = instance.from_email
users = get_emailusers(-1, -1)
for u in users:
if u.email == from_email:
continue
try:
UserNotification.objects.get(to_user=u.email,
msg_type='innerpub_msg')
except UserNotification.DoesNotExist:
n = UserNotification(to_user=u.email, msg_type='innerpub_msg',
detail='')
n.save()
2012-09-27 08:05:07 +00:00
# @receiver(post_save, sender=InnerPubMsgReply)
2012-09-14 14:15:14 +00:00
def innerpubmsg_reply_added_cb(sender, instance, **kwargs):
innerpub_msg = instance.reply_to
from_email = instance.from_email
msg_id = innerpub_msg.id
if from_email == innerpub_msg.from_email:
# No need to send notification when reply own message.
return
try:
innerpub_msg = InnerPubMsg.objects.get(id=msg_id)
except InnerPubMsg.DoesNotExist:
pass
try:
UserNotification.objects.get(to_user=innerpub_msg.from_email,
msg_type='innerpubmsg_reply',
detail=msg_id)
except UserNotification.DoesNotExist:
n = UserNotification(to_user=innerpub_msg.from_email,
msg_type='innerpubmsg_reply',
detail=msg_id)
n.save()
2012-10-26 11:50:36 +00:00
class UserStarredFiles(models.Model):
"""Starred files are marked by users to get quick access to it on user
home page.
"""
email = models.EmailField()
org_id = models.IntegerField()
repo_id = models.CharField(max_length=36)
path = models.TextField()
is_dir = models.BooleanField()