Service.delete_post now more generic, for future implementations
Service.delete_post now accepts post to be more generic and supports deleting post from any service that overrides delete_post(post)
This commit is contained in:
parent
20c38a0489
commit
48b48470bc
7 changed files with 23 additions and 27 deletions
|
|
@ -10,7 +10,7 @@
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
* Deleting a post that was shared to Twitter now deletes it from Twitter too [#4135](https://github.com/diaspora/diaspora/pull/4135)
|
* Deleting a post that was shared to Twitter now deletes it from Twitter too [#4156](https://github.com/diaspora/diaspora/pull/4156)
|
||||||
|
|
||||||
# 0.1.0.0
|
# 0.1.0.0
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,10 @@ class Service < ActiveRecord::Base
|
||||||
nil
|
nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def delete_post(post)
|
||||||
|
#don't do anything (should be overriden by service extensions)
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
require 'services/facebook'
|
require 'services/facebook'
|
||||||
require 'services/twitter'
|
require 'services/twitter'
|
||||||
|
|
|
||||||
|
|
@ -37,9 +37,11 @@ class Services::Facebook < Service
|
||||||
"https://graph.facebook.com/#{self.uid}/picture?type=large&access_token=#{URI.escape(self.access_token)}"
|
"https://graph.facebook.com/#{self.uid}/picture?type=large&access_token=#{URI.escape(self.access_token)}"
|
||||||
end
|
end
|
||||||
|
|
||||||
def delete_post(service_post_id)
|
def delete_post(post)
|
||||||
|
if post.present? && post.facebbook_id.present?
|
||||||
Rails.logger.debug("event=delete_from_service type=facebook sender_id=#{self.user_id}")
|
Rails.logger.debug("event=delete_from_service type=facebook sender_id=#{self.user_id}")
|
||||||
delete_from_facebook("https://graph.facebook.com/#{service_post_id}/", {:access_token => self.access_token})
|
delete_from_facebook("https://graph.facebook.com/#{post.facebook_id}/", {:access_token => self.access_token})
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def delete_from_facebook(url, body)
|
def delete_from_facebook(url, body)
|
||||||
|
|
|
||||||
|
|
@ -29,9 +29,11 @@ class Services::Twitter < Service
|
||||||
client.user(nickname).profile_image_url_https("original")
|
client.user(nickname).profile_image_url_https("original")
|
||||||
end
|
end
|
||||||
|
|
||||||
def delete_post(service_post_id)
|
def delete_post(post)
|
||||||
|
if post.present? && post.tweet_id.present?
|
||||||
Rails.logger.debug("event=delete_from_service type=twitter sender_id=#{self.user_id}")
|
Rails.logger.debug("event=delete_from_service type=twitter sender_id=#{self.user_id}")
|
||||||
delete_from_twitter(service_post_id)
|
delete_from_twitter(post.tweet_id)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def delete_from_twitter(service_post_id)
|
def delete_from_twitter(service_post_id)
|
||||||
|
|
|
||||||
|
|
@ -6,9 +6,10 @@ module Workers
|
||||||
class DeletePostFromService < Base
|
class DeletePostFromService < Base
|
||||||
sidekiq_options queue: :http_service
|
sidekiq_options queue: :http_service
|
||||||
|
|
||||||
def perform(service_id, service_post_id)
|
def perform(service_id, post_id)
|
||||||
service = Service.find_by_id(service_id)
|
service = Service.find_by_id(service_id)
|
||||||
service.delete_post(service_post_id)
|
post = Post.find_by_id(post_id)
|
||||||
|
service.delete_post(post)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -145,17 +145,12 @@ class Postzord::Dispatcher
|
||||||
if @object.respond_to?(:public) && @object.public
|
if @object.respond_to?(:public) && @object.public
|
||||||
deliver_to_hub
|
deliver_to_hub
|
||||||
end
|
end
|
||||||
if @object.instance_of?(StatusMessage)
|
|
||||||
services.each do |service|
|
services.each do |service|
|
||||||
|
if @object.instance_of?(StatusMessage)
|
||||||
Workers::PostToService.perform_async(service.id, @object.id, url)
|
Workers::PostToService.perform_async(service.id, @object.id, url)
|
||||||
end
|
end
|
||||||
end
|
|
||||||
if @object.instance_of?(SignedRetraction)
|
if @object.instance_of?(SignedRetraction)
|
||||||
services.select { |service| service.provider == "facebook" }.each do |service|
|
Workers::DeletePostFromService.perform_async(service.id, @object.target.id)
|
||||||
Workers::DeletePostFromService.perform_async(service.id, @object.target.facebook_id)
|
|
||||||
end
|
|
||||||
services.select { |service| service.provider == "twitter" }.each do |service|
|
|
||||||
Workers::DeletePostFromService.perform_async(service.id, @object.target.tweet_id)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -319,14 +319,6 @@ describe Postzord::Dispatcher do
|
||||||
mailman.post
|
mailman.post
|
||||||
end
|
end
|
||||||
|
|
||||||
it "doesn't queue a job if we can't delete the post from the service" do
|
|
||||||
retraction = SignedRetraction.build(alice, FactoryGirl.create(:status_message))
|
|
||||||
service = Services::Tumblr.new(access_token: "nope")
|
|
||||||
mailman = Postzord::Dispatcher.build(alice, retraction, :url => "http://joindiaspora.com/p/123", :services => [service])
|
|
||||||
|
|
||||||
Workers::DeletePostFromService.should_not_receive(:perform_async).with(anything, anything)
|
|
||||||
mailman.post
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#and_notify_local_users' do
|
describe '#and_notify_local_users' do
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue