diff options
author | Toshiaki Asai <toshi.alternative@gmail.com> | 2016-11-19 10:55:21 +0900 |
---|---|---|
committer | Toshiaki Asai <toshi.alternative@gmail.com> | 2016-11-27 11:43:00 +0900 |
commit | 07b39421c8075bab7fb5b051d421d5579631f26d (patch) | |
tree | a8b1d2894bcf751455235037a3619e7c48d43ca5 /core/lib/retriever/mixin/photo_mixin.rb | |
parent | a4b2d6822f762530bef325bebf81cb62c93d6644 (diff) | |
download | mikutter-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.rb | 23 |
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 |