quote notifs
This commit is contained in:
parent
c8ce87e4f9
commit
623fa7da80
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
42
app/services/process_quote_service.rb
Normal file
42
app/services/process_quote_service.rb
Normal 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
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user