about summary refs log tree commit diff
path: root/app/controllers/api
diff options
context:
space:
mode:
authornicolas <nclm@users.noreply.github.com>2016-11-24 20:13:30 +0100
committerGitHub <noreply@github.com>2016-11-24 20:13:30 +0100
commit60577f4c6ee9f4a4c9af0a41a8954e19a5f2c8cf (patch)
tree8c661ea7ceaff780965631c530ca065805c1861d /app/controllers/api
parent5e33445c5ff9ded56c2d40eb17d89ace108c3840 (diff)
parent8e34bed7cce7b97388e55fabacee7d424b5846ea (diff)
Merge branch 'master' into french-translation
Diffstat (limited to 'app/controllers/api')
-rw-r--r--app/controllers/api/v1/accounts_controller.rb22
-rw-r--r--app/controllers/api/v1/media_controller.rb3
-rw-r--r--app/controllers/api/v1/statuses_controller.rb4
3 files changed, 27 insertions, 2 deletions
diff --git a/app/controllers/api/v1/accounts_controller.rb b/app/controllers/api/v1/accounts_controller.rb
index 97d626af2..4ae900583 100644
--- a/app/controllers/api/v1/accounts_controller.rb
+++ b/app/controllers/api/v1/accounts_controller.rb
@@ -57,7 +57,8 @@ class Api::V1::AccountsController < ApiController
   end
 
   def statuses
-    @statuses = @account.statuses.with_includes.paginate_by_max_id(DEFAULT_STATUSES_LIMIT, params[:max_id], params[:since_id]).to_a
+    @statuses = @account.statuses.paginate_by_max_id(DEFAULT_STATUSES_LIMIT, params[:max_id], params[:since_id]).to_a
+    @statuses = cache(@statuses)
 
     set_maps(@statuses)
     set_counters_maps(@statuses)
@@ -120,4 +121,23 @@ class Api::V1::AccountsController < ApiController
     @followed_by = Account.followed_by_map([@account.id], current_user.account_id)
     @blocking    = Account.blocking_map([@account.id], current_user.account_id)
   end
+
+  def cache(raw)
+    uncached_ids           = []
+    cached_keys_with_value = Rails.cache.read_multi(*raw.map(&:cache_key))
+
+    raw.each do |status|
+      uncached_ids << status.id unless cached_keys_with_value.key?(status.cache_key)
+    end
+
+    unless uncached_ids.empty?
+      uncached = Status.where(id: uncached_ids).with_includes.map { |s| [s.id, s] }.to_h
+
+      uncached.values.each do |status|
+        Rails.cache.write(status.cache_key, status)
+      end
+    end
+
+    raw.map { |status| cached_keys_with_value[status.cache_key] || uncached[status.id] }
+  end
 end
diff --git a/app/controllers/api/v1/media_controller.rb b/app/controllers/api/v1/media_controller.rb
index bb8e8d9ee..f8139ade7 100644
--- a/app/controllers/api/v1/media_controller.rb
+++ b/app/controllers/api/v1/media_controller.rb
@@ -4,6 +4,9 @@ class Api::V1::MediaController < ApiController
   before_action -> { doorkeeper_authorize! :write }
   before_action :require_user!
 
+  include ObfuscateFilename
+  obfuscate_filename :file
+
   respond_to :json
 
   def create
diff --git a/app/controllers/api/v1/statuses_controller.rb b/app/controllers/api/v1/statuses_controller.rb
index b2b432a6b..a693ce00d 100644
--- a/app/controllers/api/v1/statuses_controller.rb
+++ b/app/controllers/api/v1/statuses_controller.rb
@@ -9,6 +9,8 @@ class Api::V1::StatusesController < ApiController
   respond_to :json
 
   def show
+    cached  = Rails.cache.read(@status.cache_key)
+    @status = cached unless cached.nil?
   end
 
   def context
@@ -50,7 +52,7 @@ class Api::V1::StatusesController < ApiController
   end
 
   def create
-    @status = PostStatusService.new.call(current_user.account, params[:status], params[:in_reply_to_id].blank? ? nil : Status.find(params[:in_reply_to_id]), params[:media_ids])
+    @status = PostStatusService.new.call(current_user.account, params[:status], params[:in_reply_to_id].blank? ? nil : Status.find(params[:in_reply_to_id]), media_ids: params[:media_ids], sensitive: params[:sensitive])
     render action: :show
   end