Adding embedded PuSH server

This commit is contained in:
Eugen Rochko
2016-11-28 13:36:47 +01:00
parent 26287b6e7d
commit 2d2c81765b
21 changed files with 262 additions and 8 deletions

View File

@ -7,7 +7,9 @@ class FavouriteService < BaseService
# @return [Favourite]
def call(account, status)
favourite = Favourite.create!(account: account, status: status)
HubPingWorker.perform_async(account.id)
Pubsubhubbub::DistributionWorker.perform_async(favourite.stream_entry.id)
if status.local?
NotifyService.new.call(status.account, favourite)

View File

@ -19,7 +19,10 @@ class FollowService < BaseService
end
merge_into_timeline(target_account, source_account)
HubPingWorker.perform_async(source_account.id)
Pubsubhubbub::DistributionWorker.perform_async(follow.stream_entry.id)
follow
end

View File

@ -14,8 +14,11 @@ class PostStatusService < BaseService
attach_media(status, options[:media_ids])
process_mentions_service.call(status)
process_hashtags_service.call(status)
DistributionWorker.perform_async(status.id)
HubPingWorker.perform_async(account.id)
Pubsubhubbub::DistributionWorker.perform_async(status.stream_entry.id)
status
end

View File

@ -0,0 +1,13 @@
# frozen_string_literal: true
class Pubsubhubbub::SubscribeService < BaseService
def call(account, callback, secret, lease_seconds)
return ['Invalid topic URL', 422] if account.nil?
return ['Invalid callback URL', 422] unless !callback.blank? && callback =~ /\A#{URI.regexp(%w(http https))}\z/
subscription = Subscription.where(account: account, callback_url: callback).first_or_create!(account: account, callback_url: callback)
Pubsubhubbub::ConfirmationWorker.perform_async(subscription.id, 'subscribe', secret, lease_seconds)
['', 202]
end
end

View File

@ -0,0 +1,15 @@
# frozen_string_literal: true
class Pubsubhubbub::SubscribeService < BaseService
def call(account, callback)
return ['Invalid topic URL', 422] if account.nil?
subscription = Subscription.where(account: account, callback_url: callback)
unless subscription.nil?
Pubsubhubbub::ConfirmationWorker.perform_async(subscription.id, 'unsubscribe')
end
['', 202]
end
end

View File

@ -7,8 +7,10 @@ class ReblogService < BaseService
# @return [Status]
def call(account, reblogged_status)
reblog = account.statuses.create!(reblog: reblogged_status, text: '')
DistributionWorker.perform_async(reblog.id)
HubPingWorker.perform_async(account.id)
Pubsubhubbub::DistributionWorker.perform_async(reblog.stream_entry.id)
if reblogged_status.local?
NotifyService.new.call(reblogged_status.account, reblog)

View File

@ -10,6 +10,9 @@ class RemoveStatusService < BaseService
remove_from_public(status)
status.destroy!
HubPingWorker.perform_async(status.account.id)
Pubsubhubbub::DistributionWorker.perform_async(status.stream_entry.id)
end
private