diff options
author | ThibG <thib@sitedethib.com> | 2019-01-02 20:03:32 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-01-02 20:03:32 +0100 |
commit | 0acd51acdc1e670bf57f58671cb8e30743782c63 (patch) | |
tree | f5ff0b5c3b1e8fd94691264f2bc147e5fa233ecb /app/workers | |
parent | b300948526d967aaf5608c93546ee0d54940c0ef (diff) | |
parent | e77ceb1b29547ed89b4110b3cc3edc9ac325b620 (diff) |
Merge pull request #878 from ThibG/glitch-soc/merge-upstream
Merge upstream changes
Diffstat (limited to 'app/workers')
-rw-r--r-- | app/workers/activitypub/distribution_worker.rb | 23 | ||||
-rw-r--r-- | app/workers/activitypub/reply_distribution_worker.rb | 15 | ||||
-rw-r--r-- | app/workers/scheduler/email_scheduler.rb | 12 |
3 files changed, 34 insertions, 16 deletions
diff --git a/app/workers/activitypub/distribution_worker.rb b/app/workers/activitypub/distribution_worker.rb index 17c1ef7ff..d83f01700 100644 --- a/app/workers/activitypub/distribution_worker.rb +++ b/app/workers/activitypub/distribution_worker.rb @@ -12,7 +12,7 @@ class ActivityPub::DistributionWorker return if skip_distribution? ActivityPub::DeliveryWorker.push_bulk(inboxes) do |inbox_url| - [signed_payload, @account.id, inbox_url] + [payload, @account.id, inbox_url] end relay! if relayable? @@ -31,24 +31,35 @@ class ActivityPub::DistributionWorker end def inboxes - @inboxes ||= @account.followers.inboxes + # Deliver the status to all followers. + # If the status is a reply to another local status, also forward it to that + # status' authors' followers. + @inboxes ||= if @status.reply? && @status.thread.account.local? && @status.distributable? + @account.followers.or(@status.thread.account.followers).inboxes + else + @account.followers.inboxes + end end def signed_payload - @signed_payload ||= Oj.dump(ActivityPub::LinkedDataSignature.new(payload).sign!(@account)) + Oj.dump(ActivityPub::LinkedDataSignature.new(unsigned_payload).sign!(@account)) end - def payload - @payload ||= ActiveModelSerializers::SerializableResource.new( + def unsigned_payload + ActiveModelSerializers::SerializableResource.new( @status, serializer: ActivityPub::ActivitySerializer, adapter: ActivityPub::Adapter ).as_json end + def payload + @payload ||= @status.distributable? ? signed_payload : Oj.dump(unsigned_payload) + end + def relay! ActivityPub::DeliveryWorker.push_bulk(Relay.enabled.pluck(:inbox_url)) do |inbox_url| - [signed_payload, @account.id, inbox_url] + [payload, @account.id, inbox_url] end end end diff --git a/app/workers/activitypub/reply_distribution_worker.rb b/app/workers/activitypub/reply_distribution_worker.rb index c0ed3a1f4..d8fea6c4e 100644 --- a/app/workers/activitypub/reply_distribution_worker.rb +++ b/app/workers/activitypub/reply_distribution_worker.rb @@ -1,5 +1,8 @@ # frozen_string_literal: true +# Obsolete but kept around to make sure existing jobs do not fail after upgrade. +# Should be removed in a subsequent release. + class ActivityPub::ReplyDistributionWorker include Sidekiq::Worker @@ -12,7 +15,7 @@ class ActivityPub::ReplyDistributionWorker return unless @account.present? && @status.distributable? ActivityPub::DeliveryWorker.push_bulk(inboxes) do |inbox_url| - [signed_payload, @status.account_id, inbox_url] + [payload, @status.account_id, inbox_url] end rescue ActiveRecord::RecordNotFound true @@ -25,14 +28,18 @@ class ActivityPub::ReplyDistributionWorker end def signed_payload - @signed_payload ||= Oj.dump(ActivityPub::LinkedDataSignature.new(payload).sign!(@status.account)) + Oj.dump(ActivityPub::LinkedDataSignature.new(unsigned_payload).sign!(@status.account)) end - def payload - @payload ||= ActiveModelSerializers::SerializableResource.new( + def unsigned_payload + ActiveModelSerializers::SerializableResource.new( @status, serializer: ActivityPub::ActivitySerializer, adapter: ActivityPub::Adapter ).as_json end + + def payload + @payload ||= @status.distributable? ? signed_payload : Oj.dump(unsigned_payload) + end end diff --git a/app/workers/scheduler/email_scheduler.rb b/app/workers/scheduler/email_scheduler.rb index 24ec89b29..1eeeee412 100644 --- a/app/workers/scheduler/email_scheduler.rb +++ b/app/workers/scheduler/email_scheduler.rb @@ -5,6 +5,9 @@ class Scheduler::EmailScheduler sidekiq_options unique: :until_executed, retry: 0 + FREQUENCY = 7.days.freeze + SIGN_IN_OFFSET = 1.day.freeze + def perform eligible_users.reorder(nil).find_each do |user| next unless user.allows_digest_emails? @@ -15,11 +18,8 @@ class Scheduler::EmailScheduler private def eligible_users - User.confirmed - .joins(:account) - .where(accounts: { silenced: false, suspended: false }) - .where(disabled: false) - .where('current_sign_in_at < ?', 20.days.ago) - .where('last_emailed_at IS NULL OR last_emailed_at < ?', 20.days.ago) + User.emailable + .where('current_sign_in_at < ?', (FREQUENCY + SIGN_IN_OFFSET).ago) + .where('last_emailed_at IS NULL OR last_emailed_at < ?', FREQUENCY.ago) end end |