mirror of
https://codeberg.org/rimu/pyfedi
synced 2025-01-23 19:36:56 -08:00
notification subscription - user notif #20
This commit is contained in:
parent
fb34de8da3
commit
fae5d70aab
2 changed files with 16 additions and 3 deletions
|
@ -1520,9 +1520,22 @@ def create_post(activity_log: ActivityPubLog, community: Community, request_json
|
||||||
|
|
||||||
|
|
||||||
def notify_about_post(post: Post):
|
def notify_about_post(post: Post):
|
||||||
|
|
||||||
|
# Send notifications based on subscriptions to the author
|
||||||
|
notifications_sent_to = set()
|
||||||
|
for notify_id in post.author.notification_subscribers():
|
||||||
|
new_notification = Notification(title=shorten_string(post.title, 50), url=f"/post/{post.id}",
|
||||||
|
user_id=notify_id, author_id=post.user_id)
|
||||||
|
db.session.add(new_notification)
|
||||||
|
user = User.query.get(notify_id)
|
||||||
|
user.unread_notifications += 1
|
||||||
|
db.session.commit()
|
||||||
|
notifications_sent_to.add(notify_id)
|
||||||
|
|
||||||
|
# Send notifications based on subscriptions to the community
|
||||||
people_to_notify = CommunityMember.query.filter_by(community_id=post.community_id, notify_new_posts=True, is_banned=False)
|
people_to_notify = CommunityMember.query.filter_by(community_id=post.community_id, notify_new_posts=True, is_banned=False)
|
||||||
for person in people_to_notify:
|
for person in people_to_notify:
|
||||||
if person.user_id != post.user_id:
|
if person.user_id != post.user_id and person.user_id not in notifications_sent_to:
|
||||||
new_notification = Notification(title=shorten_string(post.title, 50), url=f"/post/{post.id}", user_id=person.user_id, author_id=post.user_id)
|
new_notification = Notification(title=shorten_string(post.title, 50), url=f"/post/{post.id}", user_id=person.user_id, author_id=post.user_id)
|
||||||
db.session.add(new_notification)
|
db.session.add(new_notification)
|
||||||
user = User.query.get(person.user_id) # todo: make this more efficient by doing a join with CommunityMember at the start of the function
|
user = User.query.get(person.user_id) # todo: make this more efficient by doing a join with CommunityMember at the start of the function
|
||||||
|
|
|
@ -889,8 +889,8 @@ class User(UserMixin, db.Model):
|
||||||
|
|
||||||
# ids of all the users who want to be notified when self makes a post
|
# ids of all the users who want to be notified when self makes a post
|
||||||
def notification_subscribers(self):
|
def notification_subscribers(self):
|
||||||
return db.session.execute(text('SELECT user_id FROM "notification_subscription" WHERE entity_id = :user_id AND type = :type '),
|
return list(db.session.execute(text('SELECT user_id FROM "notification_subscription" WHERE entity_id = :user_id AND type = :type '),
|
||||||
{'user_id': self.id, 'type': NOTIF_USER}).scalars()
|
{'user_id': self.id, 'type': NOTIF_USER}).scalars())
|
||||||
|
|
||||||
|
|
||||||
class ActivityLog(db.Model):
|
class ActivityLog(db.Model):
|
||||||
|
|
Loading…
Add table
Reference in a new issue