From 53e14dd2d6de0f78730935bf0f0acfe973859edb Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Sat, 30 Apr 2016 23:23:01 +0200 Subject: [PATCH] add ReceiveLocal worker --- app/workers/receive_local.rb | 12 +++++ config/initializers/diaspora_federation.rb | 53 ++++++++++++---------- lib/diaspora/federation/receive.rb | 8 ++-- 3 files changed, 46 insertions(+), 27 deletions(-) create mode 100644 app/workers/receive_local.rb diff --git a/app/workers/receive_local.rb b/app/workers/receive_local.rb new file mode 100644 index 000000000..409d33d4f --- /dev/null +++ b/app/workers/receive_local.rb @@ -0,0 +1,12 @@ +module Workers + class ReceiveLocal < Base + sidekiq_options queue: :receive_local + + def perform(object_class_string, object_id, recipient_user_ids) + object = object_class_string.constantize.find(object_id) + # TODO: create visibilities + # TODO: send notifications + rescue ActiveRecord::RecordNotFound # Already deleted before the job could run + end + end +end diff --git a/config/initializers/diaspora_federation.rb b/config/initializers/diaspora_federation.rb index 979f3250c..58e16071c 100644 --- a/config/initializers/diaspora_federation.rb +++ b/config/initializers/diaspora_federation.rb @@ -94,33 +94,38 @@ DiasporaFederation.configure do |config| case entity when DiasporaFederation::Entities::AccountDeletion Diaspora::Federation::Receive.account_deletion(entity) - when DiasporaFederation::Entities::Comment - Diaspora::Federation::Receive.comment(entity) - when DiasporaFederation::Entities::Contact - Diaspora::Federation::Receive.contact(entity) - # TODO: post receive actions (auto-follow-back and fetch posts) - when DiasporaFederation::Entities::Conversation - Diaspora::Federation::Receive.conversation(entity) - when DiasporaFederation::Entities::Like - Diaspora::Federation::Receive.like(entity) - when DiasporaFederation::Entities::Message - Diaspora::Federation::Receive.message(entity) - when DiasporaFederation::Entities::Participation - Diaspora::Federation::Receive.participation(entity) - when DiasporaFederation::Entities::Photo - Diaspora::Federation::Receive.photo(entity) - when DiasporaFederation::Entities::PollParticipation - Diaspora::Federation::Receive.poll_participation(entity) - when DiasporaFederation::Entities::Profile - # TODO: update profile - when DiasporaFederation::Entities::Reshare - Diaspora::Federation::Receive.reshare(entity) when DiasporaFederation::Entities::Retraction # TODO - when DiasporaFederation::Entities::StatusMessage - Diaspora::Federation::Receive.status_message(entity) else - raise DiasporaFederation::Entity::UnknownEntity, "unknown entity: #{entity.class}" + persisted = case entity + when DiasporaFederation::Entities::Comment + Diaspora::Federation::Receive.comment(entity) + when DiasporaFederation::Entities::Contact + Diaspora::Federation::Receive.contact(entity) + # TODO: post receive actions (auto-follow-back and fetch posts) + when DiasporaFederation::Entities::Conversation + Diaspora::Federation::Receive.conversation(entity) + when DiasporaFederation::Entities::Like + Diaspora::Federation::Receive.like(entity) + when DiasporaFederation::Entities::Message + Diaspora::Federation::Receive.message(entity) + when DiasporaFederation::Entities::Participation + Diaspora::Federation::Receive.participation(entity) + when DiasporaFederation::Entities::Photo + Diaspora::Federation::Receive.photo(entity) + when DiasporaFederation::Entities::PollParticipation + Diaspora::Federation::Receive.poll_participation(entity) + when DiasporaFederation::Entities::Profile + # TODO: update profile + when DiasporaFederation::Entities::Reshare + Diaspora::Federation::Receive.reshare(entity) + when DiasporaFederation::Entities::StatusMessage + Diaspora::Federation::Receive.status_message(entity) + else + raise DiasporaFederation::Entity::UnknownEntity, "unknown entity: #{entity.class}" + end + + Workers::ReceiveLocal.perform_async(persisted.class.to_s, persisted.id, [recipient_id].compact) if persisted end end diff --git a/lib/diaspora/federation/receive.rb b/lib/diaspora/federation/receive.rb index adb42148b..4d7b42254 100644 --- a/lib/diaspora/federation/receive.rb +++ b/lib/diaspora/federation/receive.rb @@ -63,13 +63,15 @@ module Diaspora end def self.participation(entity) + parent = entity.parent_type.constantize.find_by(guid: entity.parent_guid) + + return unless parent.author.local? + Participation.new( author: author_of(entity), guid: entity.guid, target: entity.parent_type.constantize.find_by(guid: entity.parent_guid) - ).tap do |participation| - participation.save! if participation.parent.author.local? - end + ).tap(&:save!) end def self.photo(entity)