1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
# -*- coding: utf-8 -*-
miquire :core, "userconfig", "plugin"
module Skin
class SkinError < RuntimeError; end
class FileNotFoundError < SkinError; end
class ModelNotFoundError < SkinError; end
extend self
extend Gem::Deprecate
SKIN_ROOT = File.join(CHIConfig::CONFROOT, "skin")
USER_SKIN = if :vanilla == UserConfig[:skin_dir]
nil
else
UserConfig[:skin_dir] end
def default_dir
File.join(__dir__, "skin", "data")
end
def default_image
File.join(default_dir, "notfound.png")
end
def user_dir
if USER_SKIN
File.join(SKIN_ROOT, USER_SKIN)
else
nil
end
end
def path
user_dir || default_dir
end
# 現在のSkinにおける、 _filename_ の画像を示すPhoto Modelを取得する
# ==== Args
# [filename] 画像ファイル名
# [fallback_dirs] スキンディレクトリのリスト
# ==== Return
# [Diva::Mixin::PhotoMixin] 画像
# ==== Raises
# [Skin::FileNotFoundError] 画像 _filename_ が見つからなかった時
def photo(filename, fallback_dirs=[])
result = Plugin::Skin::Image[get_path(filename, fallback_dirs)]
raise FileNotFoundError, "File `#{filename}' does not exists." unless result
result
end
alias :[] :photo
def get_path(filename, fallback_dirs = [])
filename, fallback_dirs = Plugin.filtering(:skin_get, filename, fallback_dirs)
search_path = [ user_dir, fallback_dirs, default_dir ].flatten.compact
valid_path = search_path.map { |_|
File.join(_, filename)
}.select { |_|
FileTest.exist?(_)
}.first
if valid_path
valid_path
else
default_image
end
end
alias :get :get_path
deprecate :get, "get_path", 2018, 1 if Environment::VERSION >= [3, 6]
end
|