Merge branch 'quote-notifs' into feature/groups-improvements

* quote-notifs:
  quote notifs
  migration
This commit is contained in:
2458773093 2019-08-12 16:25:42 +03:00
commit cca45c54f1
4 changed files with 52 additions and 0 deletions

View File

@ -59,6 +59,7 @@ class Notification < ApplicationRecord
def target_status def target_status
case type case type
when :reblog when :reblog
return status if status&.quote?
status&.reblog status&.reblog
when :favourite when :favourite
favourite&.status favourite&.status

View File

@ -162,6 +162,10 @@ class Status < ApplicationRecord
!reblog_of_id.nil? !reblog_of_id.nil?
end end
def quote?
!quote_of_id.nil?
end
def within_realtime_window? def within_realtime_window?
created_at >= REAL_TIME_WINDOW.ago created_at >= REAL_TIME_WINDOW.ago
end end

View File

@ -68,6 +68,7 @@ class PostStatusService < BaseService
process_hashtags_service.call(@status) process_hashtags_service.call(@status)
process_mentions_service.call(@status) process_mentions_service.call(@status)
process_quote_service.call(@status)
end end
def schedule_status! def schedule_status!
@ -117,6 +118,10 @@ class PostStatusService < BaseService
ISO_639.find(str)&.alpha2 ISO_639.find(str)&.alpha2
end end
def process_quote_service
ProcessQuoteService.new
end
def process_mentions_service def process_mentions_service
ProcessMentionsService.new ProcessMentionsService.new
end end

View File

@ -0,0 +1,42 @@
# frozen_string_literal: true
class ProcessQuoteService < BaseService
include StreamEntryRenderer
# Create notification for a quote
# @param [Status] status Quoting status
# @return [Status]
def call(status)
create_notification(status)
bump_potential_friendship(status)
end
private
def create_notification(status)
quoted_status = status.quote
if quoted_status.account.local?
LocalNotificationWorker.perform_async(quoted_status.account_id, status.id, status.class.name)
elsif quoted_status.account.ostatus?
NotificationWorker.perform_async(stream_entry_to_xml(status.stream_entry), status.account_id, quoted_status.account_id)
elsif quoted_status.account.activitypub? && !quoted_status.account.following?(status.account)
ActivityPub::DeliveryWorker.perform_async(build_json(status), status.account_id, quoted_status.account.inbox_url)
end
end
def bump_potential_friendship(status)
ActivityTracker.increment('activity:interactions')
return if status.account.following?(status.quote.account_id)
PotentialFriendshipTracker.record(status.account_id, status.quote.account_id, :reblog)
end
def build_json(status)
Oj.dump(ActivityPub::LinkedDataSignature.new(ActiveModelSerializers::SerializableResource.new(
status,
serializer: ActivityPub::ActivitySerializer,
adapter: ActivityPub::Adapter
).as_json).sign!(status.account))
end
end