aboutsummaryrefslogtreecommitdiffstats
path: root/core/lib/retriever/mixin/photo_mixin.rb
diff options
context:
space:
mode:
authorToshiaki Asai <toshi.alternative@gmail.com>2016-11-19 10:55:21 +0900
committerToshiaki Asai <toshi.alternative@gmail.com>2016-11-27 11:43:00 +0900
commit07b39421c8075bab7fb5b051d421d5579631f26d (patch)
treea8b1d2894bcf751455235037a3619e7c48d43ca5 /core/lib/retriever/mixin/photo_mixin.rb
parenta4b2d6822f762530bef325bebf81cb62c93d6644 (diff)
downloadmikutter-07b39421c8075bab7fb5b051d421d5579631f26d.tar.gz
Photo Modelのキャッシュをプラグインで行う refs #934
Diffstat (limited to 'core/lib/retriever/mixin/photo_mixin.rb')
-rw-r--r--core/lib/retriever/mixin/photo_mixin.rb23
1 files changed, 22 insertions, 1 deletions
diff --git a/core/lib/retriever/mixin/photo_mixin.rb b/core/lib/retriever/mixin/photo_mixin.rb
index 7f4e6294..7dea337d 100644
--- a/core/lib/retriever/mixin/photo_mixin.rb
+++ b/core/lib/retriever/mixin/photo_mixin.rb
@@ -15,6 +15,7 @@ module Retriever::Model::PhotoMixin
super
@read_count = 0
@cached = false
+ @forget = nil
end
# 画像をダウンロードする。
@@ -166,7 +167,8 @@ module Retriever::Model::PhotoMixin
end
end
- # 画像が読まれた回数をインクリメントする
+ # 画像が読まれた回数をインクリメントする。
+ # 読み込まれた回数が規定値を超えたら、blobを引数に image_cache_saved イベントを発生させて、誰かがキャッシュしてくれたらなあ
def increase_read_count
@read_count += 1
if !@cached and @read_count >= appear_limit
@@ -175,10 +177,29 @@ module Retriever::Model::PhotoMixin
Plugin.call(:image_cache_saved, uri.to_s, blob)
end
end
+ set_forget_timer
+ end
+
+ # blobのメモリキャッシュ消滅タイマーをリセットする。
+ # 既に動いているタイマーがあればそれをキャンセルする。
+ def set_forget_timer
+ @forget.cancel if @forget
+ @forget = Reserver.new(forget_time){ forget! }
+ end
+
+ # 覚えておりません
+ def forget!
+ @forget = @state = self.blob = nil
end
# キャッシュする出現回数のしきい値を返す
def appear_limit
UserConfig[:image_file_cache_appear_limit] || 32
end
+
+ # 画像をメモリキャッシュする時間(秒)
+ # Pixbufが生成されてしまえば基本的にblobにはアクセスされないので、短くて良いと思う
+ def forget_time
+ (UserConfig[:photo_forget_time] || 60)
+ end
end