summaryrefslogtreecommitdiffstats
path: root/app/lib
diff options
context:
space:
mode:
authorTakeshi Umeda <noel.yoshiba@gmail.com>2019-12-05 04:36:33 +0900
committerEugen Rochko <eugen@zeonfederated.com>2019-12-04 20:36:33 +0100
commitf43f1e01840cd0bad7a88c90d9ea44b183a2a15d (patch)
tree5ec3f032aba9e3fe43cb2a99908a3e0844f7041f /app/lib
parentf92ed32df4489210ab0ef557f1df90bc5e97d8e6 (diff)
Add basic support for group actors (#12071)
* Show badge on group actor in WebUI * Do not notify in case of by following group actor * If you mention group actor, also mention group actor followers * Relax characters that can be used in username (same as Application) * Revert "Relax characters that can be used in username (same as Application)" This reverts commit 7e10a137b878d0db1b5252c52106faef5e09ca4b. * Delete display_name method
Diffstat (limited to 'app/lib')
-rw-r--r--app/lib/activitypub/activity.rb6
-rw-r--r--app/lib/activitypub/tag_manager.rb30
2 files changed, 29 insertions, 7 deletions
diff --git a/app/lib/activitypub/activity.rb b/app/lib/activitypub/activity.rb
index cdd40604376..0ca6b92a4f5 100644
--- a/app/lib/activitypub/activity.rb
+++ b/app/lib/activitypub/activity.rb
@@ -89,7 +89,7 @@ class ActivityPub::Activity
def distribute(status)
crawl_links(status)
- notify_about_reblog(status) if reblog_of_local_account?(status)
+ notify_about_reblog(status) if reblog_of_local_account?(status) && !reblog_by_following_group_account?(status)
notify_about_mentions(status)
# Only continue if the status is supposed to have arrived in real-time.
@@ -105,6 +105,10 @@ class ActivityPub::Activity
status.reblog? && status.reblog.account.local?
end
+ def reblog_by_following_group_account?(status)
+ status.reblog? && status.account.group? && status.reblog.account.following?(status.account)
+ end
+
def notify_about_reblog(status)
NotifyService.new.call(status.reblog.account, status)
end
diff --git a/app/lib/activitypub/tag_manager.rb b/app/lib/activitypub/tag_manager.rb
index 512272dbebe..ed680d762c2 100644
--- a/app/lib/activitypub/tag_manager.rb
+++ b/app/lib/activitypub/tag_manager.rb
@@ -68,10 +68,19 @@ class ActivityPub::TagManager
if status.account.silenced?
# Only notify followers if the account is locally silenced
account_ids = status.active_mentions.pluck(:account_id)
- to = status.account.followers.where(id: account_ids).map { |account| uri_for(account) }
- to.concat(FollowRequest.where(target_account_id: status.account_id, account_id: account_ids).map { |request| uri_for(request.account) })
+ to = status.account.followers.where(id: account_ids).each_with_object([]) do |account, result|
+ result << uri_for(account)
+ result << account.followers_url if account.group?
+ end
+ to.concat(FollowRequest.where(target_account_id: status.account_id, account_id: account_ids).each_with_object([]) do |request, result|
+ result << uri_for(request.account)
+ result << request.account.followers_url if request.account.group?
+ end)
else
- status.active_mentions.map { |mention| uri_for(mention.account) }
+ status.active_mentions.each_with_object([]) do |mention, result|
+ result << uri_for(mention.account)
+ result << mention.account.followers_url if mention.account.group?
+ end
end
end
end
@@ -97,10 +106,19 @@ class ActivityPub::TagManager
if status.account.silenced?
# Only notify followers if the account is locally silenced
account_ids = status.active_mentions.pluck(:account_id)
- cc.concat(status.account.followers.where(id: account_ids).map { |account| uri_for(account) })
- cc.concat(FollowRequest.where(target_account_id: status.account_id, account_id: account_ids).map { |request| uri_for(request.account) })
+ cc.concat(status.account.followers.where(id: account_ids).each_with_object([]) do |account, result|
+ result << uri_for(account)
+ result << account.followers_url if account.group?
+ end)
+ cc.concat(FollowRequest.where(target_account_id: status.account_id, account_id: account_ids).each_with_object([]) do |request, result|
+ result << uri_for(request.account)
+ result << request.account.followers_url if request.account.group?
+ end)
else
- cc.concat(status.active_mentions.map { |mention| uri_for(mention.account) })
+ cc.concat(status.active_mentions.each_with_object([]) do |mention, result|
+ result << uri_for(mention.account)
+ result << mention.account.followers_url if mention.account.group?
+ end)
end
end