--- a/Allura/allura/model/notification.py
+++ b/Allura/allura/model/notification.py
@@ -297,7 +297,10 @@
'artifact_index_id', 'topic', 'is_flash'),
]
indexes = [
- ('project_id', 'artifact_index_id') ]
+ ('project_id', 'artifact_index_id'),
+ ('is_flash', 'user_id'),
+ ('type', 'next_scheduled')]
+
_id = FieldProperty(S.ObjectId)
user_id = ForeignIdProperty('User', if_missing=lambda:c.user._id)
project_id = ForeignIdProperty('Project', if_missing=lambda:c.project._id)
@@ -440,20 +443,20 @@
now = datetime.utcnow()
# Queries to find all matching subscription objects
q_direct = dict(
- type='direct',
- queue={'$ne':[]})
+ type='direct')
if MAILBOX_QUIESCENT:
q_direct['last_modified']={'$lt':now - MAILBOX_QUIESCENT}
q_digest = dict(
type={'$in': ['digest', 'summary']},
next_scheduled={'$lt':now})
for mbox in cls.query.find(q_direct):
- mbox = cls.query.find_and_modify(
- query=dict(_id=mbox._id),
- update={'$set': dict(
- queue=[])},
- new=False)
- mbox.fire(now)
+ if mbox.queue:
+ mbox = cls.query.find_and_modify(
+ query=dict(_id=mbox._id),
+ update={'$set': dict(
+ queue=[])},
+ new=False)
+ mbox.fire(now)
for mbox in cls.query.find(q_digest):
next_scheduled = now
if mbox.frequency.unit == 'day':