about summary refs log tree commit diff
path: root/app/workers
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2017-11-18 00:16:48 +0100
committerGitHub <noreply@github.com>2017-11-18 00:16:48 +0100
commit24cafd73a2b644025e9aeaadf4fed46dd3ecea4d (patch)
treee0a0ad775612644d29193e81a9326f0e4c21d6af /app/workers
parent4a2fc2d444a80050ad9ba5e83aa5e69d3148ab95 (diff)
Lists (#5703)
* Add structure for lists

* Add list timeline streaming API

* Add list APIs, bind list-account relation to follow relation

* Add API for adding/removing accounts from lists

* Add pagination to lists API

* Add pagination to list accounts API

* Adjust scopes for new APIs

- Creating and modifying lists merely requires "write" scope
- Fetching information about lists merely requires "read" scope

* Add test for wrong user context on list timeline

* Clean up tests
Diffstat (limited to 'app/workers')
-rw-r--r--app/workers/feed_insert_worker.rb39
-rw-r--r--app/workers/push_update_worker.rb11
2 files changed, 29 insertions, 21 deletions
diff --git a/app/workers/feed_insert_worker.rb b/app/workers/feed_insert_worker.rb
index 65c02d3ef..1ae3c877b 100644
--- a/app/workers/feed_insert_worker.rb
+++ b/app/workers/feed_insert_worker.rb
@@ -3,34 +3,41 @@
 class FeedInsertWorker
   include Sidekiq::Worker
 
-  attr_reader :status, :follower
-
-  def perform(status_id, follower_id)
-    @status = Status.find_by(id: status_id)
-    @follower = Account.find_by(id: follower_id)
+  def perform(status_id, id, type = :home)
+    @type     = type.to_sym
+    @status   = Status.find(status_id)
+
+    case @type
+    when :home
+      @follower = Account.find(id)
+    when :list
+      @list     = List.find(id)
+      @follower = @list.account
+    end
 
     check_and_insert
+  rescue ActiveRecord::RecordNotFound
+    true
   end
 
   private
 
   def check_and_insert
-    if records_available?
-      perform_push unless feed_filtered?
-    else
-      true
-    end
-  end
-
-  def records_available?
-    status.present? && follower.present?
+    perform_push unless feed_filtered?
   end
 
   def feed_filtered?
-    FeedManager.instance.filter?(:home, status, follower.id)
+    # Note: Lists are a variation of home, so the filtering rules
+    # of home apply to both
+    FeedManager.instance.filter?(:home, @status, @follower.id)
   end
 
   def perform_push
-    FeedManager.instance.push(:home, follower, status)
+    case @type
+    when :home
+      FeedManager.instance.push_to_home(@follower, @status)
+    when :list
+      FeedManager.instance.push_to_list(@list, @status)
+    end
   end
 end
diff --git a/app/workers/push_update_worker.rb b/app/workers/push_update_worker.rb
index 697cbd6a6..d76d73d96 100644
--- a/app/workers/push_update_worker.rb
+++ b/app/workers/push_update_worker.rb
@@ -3,12 +3,13 @@
 class PushUpdateWorker
   include Sidekiq::Worker
 
-  def perform(account_id, status_id)
-    account = Account.find(account_id)
-    status  = Status.find(status_id)
-    message = InlineRenderer.render(status, account, :status)
+  def perform(account_id, status_id, timeline_id = nil)
+    account     = Account.find(account_id)
+    status      = Status.find(status_id)
+    message     = InlineRenderer.render(status, account, :status)
+    timeline_id = "timeline:#{account.id}" if timeline_id.nil?
 
-    Redis.current.publish("timeline:#{account.id}", Oj.dump(event: :update, payload: message, queued_at: (Time.now.to_f * 1000.0).to_i))
+    Redis.current.publish(timeline_id, Oj.dump(event: :update, payload: message, queued_at: (Time.now.to_f * 1000.0).to_i))
   rescue ActiveRecord::RecordNotFound
     true
   end