about summary refs log tree commit diff
path: root/app/workers/import_worker.rb
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2017-10-04 00:39:32 +0200
committerGitHub <noreply@github.com>2017-10-04 00:39:32 +0200
commitcdd5ef691bcdb25f8c8367698de7e09301ee3528 (patch)
treed94c941fe02d35a81b590e7a2c3a8e53d22c8e12 /app/workers/import_worker.rb
parentc743b5e1fdb938d52d8c023bb6ef1bf9b397226c (diff)
Use separate workers to process imports, retry failures (#5207)
Diffstat (limited to 'app/workers/import_worker.rb')
-rw-r--r--app/workers/import_worker.rb56
1 files changed, 12 insertions, 44 deletions
diff --git a/app/workers/import_worker.rb b/app/workers/import_worker.rb
index 27cc6b365..d7c126f75 100644
--- a/app/workers/import_worker.rb
+++ b/app/workers/import_worker.rb
@@ -12,13 +12,8 @@ class ImportWorker
   def perform(import_id)
     @import = Import.find(import_id)
 
-    case @import.type
-    when 'blocking'
-      process_blocks
-    when 'following'
-      process_follows
-    when 'muting'
-      process_mutes
+    Import::RelationshipWorker.push_bulk(import_rows) do |row|
+      [@import.account_id, row.first, relationship_type]
     end
 
     @import.destroy
@@ -26,49 +21,22 @@ class ImportWorker
 
   private
 
-  def from_account
-    @import.account
-  end
-
   def import_contents
     Paperclip.io_adapters.for(@import.data).read
   end
 
-  def import_rows
-    CSV.new(import_contents).reject(&:blank?)
-  end
-
-  def process_mutes
-    import_rows.each do |row|
-      begin
-        target_account = ResolveRemoteAccountService.new.call(row.first)
-        next if target_account.nil?
-        MuteService.new.call(from_account, target_account)
-      rescue Mastodon::UnexpectedResponseError, HTTP::Error, OpenSSL::SSL::SSLError
-        next
-      end
-    end
-  end
-
-  def process_blocks
-    import_rows.each do |row|
-      begin
-        target_account = ResolveRemoteAccountService.new.call(row.first)
-        next if target_account.nil?
-        BlockService.new.call(from_account, target_account)
-      rescue Mastodon::UnexpectedResponseError, HTTP::Error, OpenSSL::SSL::SSLError
-        next
-      end
+  def relationship_type
+    case @import.type
+    when 'following'
+      'follow'
+    when 'blocking'
+      'block'
+    when 'muting'
+      'mute'
     end
   end
 
-  def process_follows
-    import_rows.each do |row|
-      begin
-        FollowService.new.call(from_account, row.first)
-      rescue Mastodon::NotPermittedError, ActiveRecord::RecordNotFound, Mastodon::UnexpectedResponseError, HTTP::Error, OpenSSL::SSL::SSLError
-        next
-      end
-    end
+  def import_rows
+    CSV.new(import_contents).reject(&:blank?)
   end
 end