mirror of
https://codeberg.org/rimu/pyfedi
synced 2025-01-23 19:36:56 -08:00
Only send separate Note if community is remote or local community has no followers from post.author's instance
This commit is contained in:
parent
403a04df7c
commit
a0e974df11
2 changed files with 17 additions and 4 deletions
|
@ -470,6 +470,14 @@ class Community(db.Model):
|
||||||
instances = instances.filter(Instance.id != 1, Instance.gone_forever == False)
|
instances = instances.filter(Instance.id != 1, Instance.gone_forever == False)
|
||||||
return instances.all()
|
return instances.all()
|
||||||
|
|
||||||
|
def has_followers_from_domain(self, domain: str) -> bool:
|
||||||
|
instances = Instance.query.join(User, User.instance_id == Instance.id).join(CommunityMember, CommunityMember.user_id == User.id)
|
||||||
|
instances = instances.filter(CommunityMember.community_id == self.id, CommunityMember.is_banned == False)
|
||||||
|
for instance in instances:
|
||||||
|
if instance.domain == domain:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
def delete_dependencies(self):
|
def delete_dependencies(self):
|
||||||
for post in self.posts:
|
for post in self.posts:
|
||||||
post.delete_dependencies()
|
post.delete_dependencies()
|
||||||
|
|
|
@ -183,10 +183,15 @@ def show_post(post_id: int):
|
||||||
if instance.inbox and not current_user.has_blocked_instance(instance.id) and not instance_banned(instance.domain):
|
if instance.inbox and not current_user.has_blocked_instance(instance.id) and not instance_banned(instance.domain):
|
||||||
send_to_remote_instance(instance.id, community.id, announce)
|
send_to_remote_instance(instance.id, community.id, announce)
|
||||||
|
|
||||||
# send copy of Note to post author (who won't otherwise get it if they're not subscribed to the community)
|
# send copy of Note to post author (who won't otherwise get it if no-one else on their instance is subscribed to the community)
|
||||||
if not post.author.is_local():
|
if not post.author.is_local() and post.author.ap_domain != community.ap_domain:
|
||||||
if post.author.ap_domain != community.ap_domain:
|
if not community.is_local() or (community.is_local and not community.has_followers_from_domain(post.author.ap_domain)):
|
||||||
post_request(post.author.ap_inbox_url, create_json, current_user.private_key,
|
success = post_request(post.author.ap_inbox_url, create_json, current_user.private_key,
|
||||||
|
current_user.ap_profile_id + '#main-key')
|
||||||
|
if not success:
|
||||||
|
# sending to shared inbox is good enough for Mastodon, but Lemmy will reject it the local community has no followers
|
||||||
|
personal_inbox = post.author.public_url() + '/inbox'
|
||||||
|
post_request(personal_inbox, create_json, current_user.private_key,
|
||||||
current_user.ap_profile_id + '#main-key')
|
current_user.ap_profile_id + '#main-key')
|
||||||
|
|
||||||
return redirect(url_for('activitypub.post_ap', post_id=post_id)) # redirect to current page to avoid refresh resubmitting the form
|
return redirect(url_for('activitypub.post_ap', post_id=post_id)) # redirect to current page to avoid refresh resubmitting the form
|
||||||
|
|
Loading…
Add table
Reference in a new issue